docs/adr/
with status, date, context, decision, consequences. total:
Accepted, Proposed.
Canonical source:
docs/adr/index.json
(machine-readable) + docs/adr/README.md
(human index). One file per ADR, immutable once Accepted (superseded
rather than edited).At a glance
Total
decision records
Accepted
locked
Proposed
in review
By theme
Meta / Process (5)
Meta / Process (5)
How Nika runs itself as a project: version cadence, admission, ADRs-on-ADRs.
Architecture / Layering (6)
Architecture / Layering (6)
The six-layer crate discipline + physical workspace layout.
Forward-compat (4)
Forward-compat (4)
How Nika stays additive across decades without breaking changes.
Error handling + diagnostics (2)
Error handling + diagnostics (2)
How
NikaError is shaped + how failures surface to users.Runtime + concurrency (5)
Runtime + concurrency (5)
Cancellation, streaming, sync primitives, retry / timeout ownership.
Testing (2)
Testing (2)
How the engine verifies itself beyond unit tests.
Catalog + YAML (2)
Catalog + YAML (2)
The data-driven provider catalog and the workflow envelope convention.
WASM + sandbox (1)
WASM + sandbox (1)
The v0.100 plugin boundary, pre-planted at v0.80.
SOTA Rust patterns (1)
SOTA Rust patterns (1)
Cross-cutting idiom adoption.
L0 foundational additions (2)
L0 foundational additions (2)
Late-added Accepted ADRs covering foundational types + kernel expansion.
Proposed: under review (5)
Proposed: under review (5)
Seed-level reservations ahead of their implementing crates.
How ADRs work
1
Propose
Any significant engineering decision starts as a Proposed ADR: a
short markdown file in
docs/adr/adr-NNN-<slug>.md with
frontmatter: id, title, status: Proposed, date, tags,
related. Writer describes the context, options considered, and
recommended decision.2
Review
Proposed ADRs are discussed in PRs. Others get
related: /
supersedes: / requires: links. Status can flip to Accepted or
Rejected. The ADR index (docs/adr/index.json) is auto-regenerated.3
Accept
Once Accepted, the ADR is immutable. Any revision happens via a
new ADR that
supersedes: the old one. This keeps decision history
auditable: git log tells you when and why a given rule came in.4
Supersede
Rare, but when a decision proves wrong, a new Accepted ADR
supersedes it. The superseded ADR stays in the tree with
status: superseded and superseded_by:. It has happened once so
far: ADR-021 (the K8s-style apiVersion envelope) was superseded
by ADR-082, which locked the single nika: v1 version marker.
One ADR is also Rejected outright (ADR-089) and kept in the tree
as the record of a road not taken.Metadata fields
Every ADR carries rich metadata in both its frontmatter andindex.json:
Gate 12 integration
Admission Gate 12 fails when a crateβs commit changes a public API
surface without either (a) being purely additive under
#[non_exhaustive] rules, or (b) referencing an Accepted ADR that
authorizes the break. The ADR trail is how breaking changes earn the
right to exist.See also
Forward-compat invariants
The 8 patterns that keep most ADRs additive.
L0 decisions
Q1-Q13: the foundation decisions that became ADRs 033, 034 + others.
12-gate admission
Gate 12 requires ADR alignment for breaking change.
ADR directory on GitHub
Browse the full ADR tree, index.json, and README.