Architecture Decision Records (ADRs)

This directory is the canonical home for all accepted Architecture Decision Records in the Stella Ops monorepo. Filenames follow the ADR-NNN-kebab-slug.md format and numbering is monotonic and never reused.

RFCs (proposals) live elsewhere. An RFC is a proposal under discussion, not an accepted decision. RFCs are kept in docs/rfcs/. Once an RFC is accepted and the decision is settled, capture it as an ADR here.

History note: ADR-013 through ADR-019 were consolidated from the root of docs/architecture/ (they carried descriptive ADR-*.md names), and ADR-020 through ADR-022 were consolidated from docs/technical/adr/ (legacy 00420044 numbering). Each moved file records its former path near the top.

Index

ADRTitleStatusDate
ADR-001Linkset Correlation Algorithm V2Accepted2026-01-25
ADR-002Multi-Tenant Selection With Same API KeyAccepted2026-02-22
ADR-003Concelier Export Center Air-Gap AlignmentAccepted2026-05-16
ADR-004Forward-Only Database MigrationsAccepted2026-05-18
ADR-005Single-Operator Multi-Environment TenancyAccepted2026-05-18
ADR-006Execution Plugin FrameworkAccepted2026-05-25
ADR-007KEK Lifecycle and RotationAccepted2026-05-27
ADR-008Credential Storage Regional Algorithm RoutingAccepted2026-05-27
ADR-009Component per-environment registry override (JSONB-on-aggregate)Accepted (retroactive)2026-05-28
ADR-010Shared tenant-resolver migration — retire the Guid-only helpersAccepted2026-05-29
ADR-011EPF plugin service contract — manifest-declared requires + host service registry (Pattern Z)Accepted (design-only)2026-05-29
ADR-012Per-tenant system-account client_credentials clients auto-seeded during tenant onboarding (Pattern C)Accepted2026-05-29
ADR-013Findings Runtime Disabled ModeAccepted2026-04-28
ADR-013 ⚠️.NET Callgraph Extractor — Dual-Mode (M1 restore-aware + M2 lightweight) at scan-rootfsAccepted2026-05-30
ADR-014Findings Runtime PersistenceAccepted2026-04-28
ADR-015Findings Runtime Privacy FilterAccepted2026-04-28
ADR-016Findings Runtime Score FormulaAccepted2026-04-29
ADR-017Findings Runtime Score Recompute Async-Migration TriggerAccepted2026-04-29
ADR-018Notify external-ID column projectionAccepted2026-04-29
ADR-019VEX signature verification as a mandatory ingest gateAccepted2026-05-01
ADR-020CGS Merkle Tree Implementation (legacy ADR 0042)Accepted2025-12-29
ADR-021Fulcio Keyless Signing with Optional Parameter (legacy ADR 0043)Accepted2025-12-29
ADR-022Binary Delta Signatures for Backport Detection (legacy ADR 0044)Accepted2026-01-03
ADR-023Console admin tenant switch strategyAccepted
ADR-024Internal OCI metadata registry, opt-in upstream attachment, and attachment-stateAccepted (design-only)2026-06-04
ADR-025Operator-signed governance decisions (per-account keys, verified through the crypto abstraction)Accepted (partial implementation in progress)2026-06-08
ADR-028Verification root-key rotation & signed-material re-enveloping (phased dual-trust introduce → re-envelope → consequences-gated invalidate)Accepted2026-06-10
ADR-029Console-internal service-account transport + verified on-behalf-of operator attribution (canonical service-account pattern)Accepted2026-06-11
ADR-030Region-aware, per-plugin signing (runtime-bundle.v2 multi-sig + fail-closed signing-root verification) and digest-pinned OCI artifact releaseAccepted2026-06-11
ADR-031Unified Secret Provider (built-in floor; ISecretProvider over builtin/vault/openbao; master-key-at-setup generate+import, symmetric+asymmetric, fail-closed; §D5 amended 2026-07-04: OpenBao is test-only dev/CI, never shipped — Vault stays the flagship external backend)Accepted (design-only; D5 amended 2026-07-04)2026-06-22
ADR-032URL secret references + multi-provider routing (vault:///openbao:///authref:///builtin:///… resolved per-resource by RoutingSecretProvider)Accepted2026-06-22
ADR-033Unified registry access (stella+oci:// masked refs; digest is identity; loopback agent-registry pull-through)Accepted2026-06-22
ADR-034Stella-native short-lived, deployment-scoped secret-access broker (no standing agent token; sealed capability over mTLS)Accepted2026-06-23
ADR-035Digest-centric content broker (no standing edge secret; content-addressed authorization; agent fetches by digest over mTLS)Accepted2026-06-24
ADR-036Local RFC 3161 Timestamp Authority for the air-gapped evidence spineAccepted2026-07-05
ADR-037SM Remote SM4 symmetric mode: ECB deprecation, IV transport, and vendor-contract versioningProposed (DRAFT — awaiting crypto + product sign-off)2026-07-12
ADR-038Evidence artifact nomenclature: Decision Capsule vs Evidence Pack vs Evidence BundleAccepted2026-07-20
ADR-039Database-per-service ownership + consolidated StellaOps.Vulnerabilities hub (one service/one DB, tenant-free, fresh rebuild, no snapshot; connector tiering with Cisco/MSRC/GHSA/KEV/ACSC/CERT-In removed; gates→Policy; tenancy→Authority; doctor→plugins; estate consolidation program + anti-bloat rules) (VDPS-D1…D14)Proposed (rev-3, awaiting Phase-A approval)2026-07-22

⚠️ Number collision (needs reconciliation): two accepted ADRs currently claim ADR-013ADR-013-findings-runtime-disabled-mode.md and ADR-013-dotnet-callgraph-extractor-dual-mode.md. ADR numbering must be monotonic and never reused, so one of these should be renumbered to the next free slot (ADR-026 — ADR-025 is now taken by operator-signed decisions). Both are listed above so navigation is not broken; the renumber is a follow-up.