Rendered from innerwall v0.4.1

Architecture Decision Records

Numbered, immutable once Accepted in their core decision. Format: Status / Context / Decision / Consequences.

NumberTitleStatus
ADR-0001Visibility and simulation precede enforcementAccepted
ADR-0002Persistent gRPC streams with desired-state delta syncAccepted
ADR-0003Enforce via native OS firewalls with an owned, atomically replaced rulesetAccepted
ADR-0004Token-gated enrollment, URI SAN identity, embedded CA behind an interfaceAccepted
ADR-0005Single Go binary, modular monolith, stateless replicas, PostgresSuperseded by ADR-0017
ADR-0006sqlc + pgx for data access, goose for migrations — no ORMAccepted
ADR-0007Protobuf is the source of truth for the agent contract; transports are thin callers of the domainAccepted
ADR-0008UI is a static Vite + React SPA embedded in the control-plane binaryAccepted
ADR-0009Postgres-only flow storage in v1, behind a FlowStore interface with a columnar-ready schemaAccepted
ADR-0010v1 enforces inbound only; outbound arrives in v2 as a layered modelAccepted
ADR-0011Fail static, local kill switch, resource budgets, no self-updateAccepted
ADR-0012Relay tier and regional federation are designed seams, deferred implementationsAccepted
ADR-0013Apache-2.0, DCO sign-off, project trademark retainedAccepted
ADR-0014docs/ is the shared source of truth; PRs are reviewed against ADRs, including by automated reviewAccepted
ADR-0015The v1 agent wire contractAccepted
ADR-0016Enrollment, workload identity, and credential issuanceAccepted
ADR-0017Single Go binary, stateless replicas, Postgres for state, and the one exception: signing-key custodyAccepted
ADR-0018Render everything on change, version by diff, keep rendered state in PostgresAccepted
ADR-0019Flow storage as windows plus totals, peers resolved at ingest, bounded retention, and the query shapes the schema servesAccepted
ADR-0020Enforcement as one owned table replaced atomically, per-rule sets, connection marks for attribution, logged drops, simulation on the same chain, and policy that outlives the daemonAccepted
ADR-0021Operator surface: a second listener and single-operator authenticationAccepted
ADR-0022One label grammar, admitted wherever a label entersAccepted

These ADRs are the source of truth for automated and human PR review — a change that contradicts the core decision of an Accepted ADR needs a superseding ADR first.

Changing an ADR

Two mechanisms, and which one applies is decided by whether the core decision survives:

  • Supersession is reserved for the case where an ADR's core decision is reversed or replaced. The superseding ADR takes the next number, carries a Supersedes: ADR-XXXX header, and restates the full current decision; the old ADR's status line becomes Superseded by ADR-YYYY and its body is never edited. The pull request that carries a supersession names the maintainer sign-off for it explicitly in its description.
  • Everything else is an in-place amendment: additive detail, clarification, narrowing of scope, or correction of a subsidiary point while the core decision stands. An in-place amendment corrects the body text so the document always states the current decision, and records the change in a dated note under an ## Amendments heading in the ADR itself, referencing the ADR or pull request that carries the new detail; git history preserves the prior text. Amendments never restate the document, and they never touch the core decision.
  • Titles state the current decision and are corrected by amendment like any other text, with the correction recorded in the dated note; the ADR number is the permanent citation key, and the file name keeps it.

Narrowing is a form of amendment; there is no Narrows: header.

main is the record: an ADR number is consumed only when the ADR carrying it is on main, so a number used by a draft on a branch that never merged is free for the next ADR.

An ADR written to resolve a review finding is scoped to that finding. New architectural decisions encountered along the way get their own commissioned ADR, not bullets inside the fix.