111 lines
10 KiB
Markdown
111 lines
10 KiB
Markdown
# Consolidation Decision Ledger
|
|
|
|
> **Last updated:** 2026-03-04
|
|
> **Owner:** Sprint 218 (DOCS: Consolidation Decision Finalization)
|
|
> **Wave:** Microservices Consolidation Wave 1 (Feb-Mar 2026)
|
|
|
|
This document records the final outcome of every consolidation sprint in the first consolidation wave. Each sprint was evaluated for source-level consolidation (moving source directories under a parent module) and schema-level consolidation (merging DbContexts). In all cases where consolidation proceeded, only source consolidation was executed; schema merges were rejected to preserve security boundaries and avoid blast-radius expansion.
|
|
|
|
---
|
|
|
|
## Outcome Legend
|
|
|
|
| Outcome | Meaning |
|
|
|---------|---------|
|
|
| **Proceed (done)** | Source consolidation completed. Code moved under parent module. |
|
|
| **Boundary-preserved** | Evaluated and deliberately kept as separate modules. No consolidation. |
|
|
| **Deferred** | Consolidation approved in principle but deferred to a future wave. |
|
|
| **Canceled** | Consolidation evaluated and rejected. Will not proceed. |
|
|
| **No-op** | Not applicable to the consolidation wave. |
|
|
| **Completed separately** | Work done outside the consolidation wave. |
|
|
|
|
---
|
|
|
|
## Complete Outcome Table
|
|
|
|
| Sprint | ID | Description | Outcome | Sprint File |
|
|
|--------|----|-------------|---------|-------------|
|
|
| Gateway deletion | 200 | Delete `src/Gateway/`; Router is canonical | **Proceed (done)** | [`SPRINT_20260225_200_Platform_gateway_deletion.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_200_Platform_gateway_deletion.md) |
|
|
| Scanner absorb Cartographer | 201 | Move Cartographer under Scanner | **Proceed (done)** | [`SPRINT_20260225_201_Scanner_absorb_cartographer.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_201_Scanner_absorb_cartographer.md) |
|
|
| BinaryIndex absorb Symbols | 202 | Move Symbols under BinaryIndex | **Proceed (done)** | [`SPRINT_20260225_202_BinaryIndex_absorb_symbols.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_202_BinaryIndex_absorb_symbols.md) |
|
|
| Concelier absorb Feedser/Excititor | 203 | Move Feedser and Excititor under Concelier | **Proceed (done)** | [`SPRINT_20260225_203_Concelier_absorb_feedser_excititor.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_203_Concelier_absorb_feedser_excititor.md) |
|
|
| Attestor absorb Signer/Provenance | 204 | Move Signer and Provenance under Attestor | **Proceed (done)** | [`SPRINT_20260225_204_Attestor_absorb_signer_provenance.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_204_Attestor_absorb_signer_provenance.md) |
|
|
| VEX consolidation (VexHub/VexLens) | 205 | Consolidate VexHub and VexLens | **Deferred** -- future wave | _(no sprint file; deferred before sprint creation)_ |
|
|
| Policy/Unknowns boundary | 206 | Evaluate Policy absorbing Unknowns | **Boundary-preserved** | [`SPRINT_20260225_206_Policy_absorb_unknowns.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_206_Policy_absorb_unknowns.md) |
|
|
| Findings absorb RiskEngine/VulnExplorer | 207 | Move RiskEngine and VulnExplorer under Findings | **Proceed (done)** | [`SPRINT_20260225_207_Findings_absorb_riskengine_vulnexplorer.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_207_Findings_absorb_riskengine_vulnexplorer.md) |
|
|
| Orchestrator absorb Scheduler/TaskRunner/PacksRegistry | 208 | Move Scheduler, TaskRunner, PacksRegistry under Orchestrator | **Proceed (done)** | [`SPRINT_20260225_208_Orchestrator_absorb_scheduler_taskrunner_packsregistry.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_208_Orchestrator_absorb_scheduler_taskrunner_packsregistry.md) |
|
|
| Notify/Notifier boundary | 209 | Evaluate Notify absorbing Notifier | **Boundary-preserved** | [`SPRINT_20260225_209_Notify_absorb_notifier.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_209_Notify_absorb_notifier.md) |
|
|
| Timeline absorb TimelineIndexer | 210 | Move TimelineIndexer under Timeline | **Proceed (done)** | [`SPRINT_20260225_210_Timeline_absorb_timelineindexer.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_210_Timeline_absorb_timelineindexer.md) |
|
|
| ExportCenter/AirGap boundary | 211 | Evaluate ExportCenter absorbing Mirror and AirGap | **Boundary-preserved** | [`SPRINT_20260225_211_ExportCenter_absorb_mirror_airgap.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_211_ExportCenter_absorb_mirror_airgap.md) |
|
|
| Tools absorb Bench/Verifier/Sdk/DevPortal | 212 | Move Bench, Verifier, Sdk, DevPortal under Tools | **Proceed (done)** | [`SPRINT_20260225_212_Tools_absorb_bench_verifier_sdk_devportal.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_212_Tools_absorb_bench_verifier_sdk_devportal.md) |
|
|
| AdvisoryAI absorb OpsMemory | 213 | Move OpsMemory under AdvisoryAI | **Proceed (done)** | [`SPRINT_20260225_213_AdvisoryAI_absorb_opsmemory.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_213_AdvisoryAI_absorb_opsmemory.md) |
|
|
| Integrations absorb Extensions | 214 | Move Extensions under Integrations | **Proceed (done)** | [`SPRINT_20260225_214_Integrations_absorb_extensions.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_214_Integrations_absorb_extensions.md) |
|
|
| SmRemote standalone | 215 | SmRemote standalone evaluation | **No-op** in consolidation wave | _(no sprint file; SmRemote remains standalone)_ |
|
|
| Authority absorb IssuerDirectory | 216 | Move IssuerDirectory under Authority | **Proceed (done)** | [`SPRINT_20260225_216_Authority_absorb_issuerdirectory.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_216_Authority_absorb_issuerdirectory.md) |
|
|
| Orphan library cleanup | 217 | Archive AdvisoryLens and Resolver | **Proceed (done)** | [`SPRINT_20260225_217_Platform_orphan_library_cleanup.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_217_Platform_orphan_library_cleanup.md) |
|
|
| Consolidation docs finalization | 218 | Final documentation sweep | **Proceed (done)** | [`SPRINT_20260225_218_DOCS_consolidation_final_update.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_218_DOCS_consolidation_final_update.md) |
|
|
| EF compiled model generation | 219 | EF compiled model pre-requisite | **Completed separately** | _(completed outside consolidation wave)_ |
|
|
| SbomService absorption | 220 | Evaluate SbomService merge | **Canceled** -- decision not to merge | _(canceled before sprint creation)_ |
|
|
| Orchestrator domain rename | 221 | Rename Orchestrator to JobEngine | **Proceed (done)** | [`SPRINT_20260225_221_Orchestrator_domain_rename.md`](../../docs-archived/implplan/2026-03-04-completed-sprints/SPRINT_20260225_221_Orchestrator_domain_rename.md) |
|
|
|
|
---
|
|
|
|
## Schema Merge Decisions (All Rejected)
|
|
|
|
Every consolidation sprint evaluated whether DbContexts should be merged in addition to source consolidation. In all cases, schema merges were **rejected**. The common rationale: merging DbContexts widens the blast radius of credential compromise and couples unrelated write patterns.
|
|
|
|
| Domain | Decision | Rationale |
|
|
|--------|----------|-----------|
|
|
| Orchestrator + Scheduler | No merge | `OrchestratorDbContext` (39 entities) and `SchedulerDbContext` (11 entities) have `Jobs`/`JobHistory` name collisions with incompatible semantics. |
|
|
| Authority + IssuerDirectory | No merge | `AuthorityDbContext` manages passwords, MFA, tokens. Merging would expose authentication internals to issuer metadata code paths. |
|
|
| Concelier + Excititor + Feedser | No merge | Three DbContexts (49 entities, 5 schemas) have distinct write lifecycles. Schema isolation is a feature. |
|
|
| Attestor + Signer | No merge | Security boundary between key material and attestation evidence is deliberate. |
|
|
| Policy + Unknowns | No merge | `UnknownsDbContext` retains independent schema ownership. Boundary preserved. |
|
|
| ExportCenter + AirGap | No merge | AirGap has 14+ external consumers vs ExportCenter's 2. Asymmetric coupling makes merge a poor tradeoff. |
|
|
| SbomService | Canceled | Decision not to merge SbomService into any other module. |
|
|
|
|
---
|
|
|
|
## Post-Consolidation Module Layout
|
|
|
|
After all consolidation sprints, the canonical module layout is:
|
|
|
|
| Module | Source Path | Notes |
|
|
|--------|------------|-------|
|
|
| Authority | `src/Authority/` | Now includes IssuerDirectory (Sprint 216) |
|
|
| Scanner | `src/Scanner/` | Now includes Cartographer (Sprint 201) |
|
|
| BinaryIndex | `src/BinaryIndex/` | Now includes Symbols (Sprint 202) |
|
|
| Concelier | `src/Concelier/` | Now includes Feedser and Excititor (Sprint 203) |
|
|
| Attestor | `src/Attestor/` | Now includes Signer and Provenance (Sprint 204) |
|
|
| Findings | `src/Findings/` | Now includes RiskEngine and VulnExplorer (Sprint 207) |
|
|
| JobEngine | `src/JobEngine/` | Now includes Scheduler, TaskRunner, PacksRegistry (Sprint 208); renamed from Orchestrator (Sprint 221) |
|
|
| Timeline | `src/Timeline/` | Now includes TimelineIndexer (Sprint 210) |
|
|
| Tools | `src/Tools/` | Now includes Bench, Verifier, Sdk, DevPortal (Sprint 212) |
|
|
| AdvisoryAI | `src/AdvisoryAI/` | Now includes OpsMemory (Sprint 213) |
|
|
| Integrations | `src/Integrations/` | Now includes Extensions (Sprint 214) |
|
|
|
|
### Preserved Boundaries (no consolidation)
|
|
|
|
| Module A | Module B | Sprint | Rationale |
|
|
|----------|----------|--------|-----------|
|
|
| Policy | Unknowns | 206 | Distinct domain ownership, separate DbContexts |
|
|
| Notify | Notifier | 209 | Library vs. host application boundary |
|
|
| ExportCenter | AirGap | 211 | Asymmetric coupling, blast radius |
|
|
|
|
### Deleted / Archived
|
|
|
|
| Item | Sprint | Action |
|
|
|------|--------|--------|
|
|
| `src/Gateway/` | 200 | Deleted (Router is canonical) |
|
|
| AdvisoryLens library | 217 | Archived |
|
|
| Resolver library | 217 | Archived |
|
|
|
|
### Deferred / Canceled
|
|
|
|
| Item | Sprint | Status |
|
|
|------|--------|--------|
|
|
| VexHub/VexLens consolidation | 205 | Deferred to future wave |
|
|
| SbomService absorption | 220 | Canceled |
|
|
| SmRemote | 215 | No-op (remains standalone) |
|
|
|