Skip to main content
Every significant engineering decision in Nika Diamond lives as an ADR, a short markdown file in 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

How Nika runs itself as a project: version cadence, admission, ADRs-on-ADRs.
The six-layer crate discipline + physical workspace layout.
How Nika stays additive across decades without breaking changes.
How NikaError is shaped + how failures surface to users.
Cancellation, streaming, sync primitives, retry / timeout ownership.
How the engine verifies itself beyond unit tests.
The data-driven provider catalog and the workflow envelope convention.
The v0.100 plugin boundary, pre-planted at v0.80.
Cross-cutting idiom adoption.
Late-added Accepted ADRs covering foundational types + kernel expansion.
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 and index.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.