the decisions
Why the engine is built this way.
Every architectural choice in the engine is written down before it is built, kept in the repo beside the code it binds, and never quietly rewritten: a decision that stops holding is superseded by a named successor, and both stay. This is that record, read at the release pin, 71 decisions deep.
- 71decisionsat v0.107.0
- 57acceptedthe engine is built this way
- 71cite anotherthe record is a graph
- 1supersededreplaced, never deleted
accepted
57 decisions
the decision holds · the engine is built this way
- ADR-001Diamond orphan branch rewrite instead of iterative refactor
2026-04-13 · L0 L0.5 L1 L2 L3 L4 L5 · cites 9 others - ADR-002Forever v0.x -- no v1.0 target
2026-04-13 · cites 6 others - ADR-00312-gate crate admission protocol
2026-04-13 · L0 L0.5 L1 L2 L3 L4 L5 · cites 20 others - ADR-004Context-window-sized crate architecture
2026-04-13 · L0 L0.5 L1 L2 L3 L4 L5 · cites 13 others - ADR-005Trait-based error hierarchy with NikaErrorCode and Box<dyn>
2026-04-13 · L0 · cites 8 others - ADR-006Layered architecture with kernel ISP atomic traits and trait_variant
2026-04-13 · L0 L0.5 L1 L2 L3 L4 L5 · cites 25 others - ADR-007Forward-compat invariants with non_exhaustive, new(), and pre-planted hooks
2026-04-13 · L0 L0.5 · cites 19 others - ADR-008TOML-driven catalog with build-time codegen and perfect-hash lookup
2026-04-14 · L0 L4 · cites 3 others - ADR-009ADR process and hook discipline (meta)
2026-04-14 · cites 3 others - ADR-010miette as the L4 diagnostic presentation layer
2026-04-14 · L0 L4 · cites 5 others - ADR-011cargo xtask as canonical automation surface
2026-04-14 · cites 4 others - ADR-012Typestate for nika-runtime workflow lifecycle
2026-04-14 · L0.5 L2 · cites 6 others - ADR-013Loom-based concurrency verification for L0.5 and L3
2026-04-14 · L0.5 L3 · cites 3 others - ADR-014Sealed kernel traits with explicit adapter registration
2026-04-14 · L0.5 · cites 14 others - ADR-015expect-test for inline snapshot assertions on rendered output
2026-04-15 · L0 · cites 5 others - ADR-016Cancellation model: future-drop primary, CancelCtx cooperative module
2026-04-16 · L0.5 · cites 14 others - ADR-017Streaming policy: bounded mpsc(32), ReceiverStream at kernel boundary
2026-04-16 · L0.5 · cites 4 others - ADR-018Runtime + sync primitives: single Tokio rt, parking_lot default
2026-04-16 · L0.5 L1 L2 L3 · cites 6 others - ADR-019Retry + timeout ownership: stratified by layer
2026-04-16 · L0.5 L1 L2 · cites 4 others - ADR-020WASM plugin boundary + Sandbox: trait stubs now, dual timeout later
2026-04-16 · L0.5 · cites 12 others - ADR-022Foundation crate layout v0.81: 14 crates, publish = false, 5 renames + extracts
2026-04-16 · L0 L0.5 L4 · cites 11 others - ADR-023File modularity discipline: 800 LOC warn / 1500 fail / 3000 fail-with-LOC-EXEMPT-allowlist
2026-04-16 · L0 L0.5 L1 L2 L3 L4 L5 · cites 6 others - ADR-024Adopt SOTA Rust patterns: bon Builder, Arc<str>, camino, sealed module, strum, public-api
2026-04-16 · L0 L0.5 · cites 5 others - ADR-025Per-crate semver via release-plz (publishable crates only)
2026-04-16 · L5 · cites 3 others - ADR-026workspace.toml single source of truth + auto-generated crate.md
2026-04-16 · L0 L0.5 L1 L2 L3 L4 L5 · cites 4 others - ADR-027Strict L0 sublayer tiers + max 3 sibling deps + cargo timings per-crate budget
2026-04-16 · L0 L0.5 · cites 6 others - ADR-028Forward-compat API-type reservation (amended — feature scheduling dropped)
2026-04-16 · L0 L0.5 · cites 14 others - ADR-029EmbeddingSpec value-type reservation (Cortex seed)
2026-04-17 · L0 L0.5 · cites 4 others - ADR-030MemoryFrameRef.trust reservation (Shield gate seed)
2026-04-17 · L0 L0.5 · cites 8 others - ADR-031RecallQuery.tenant reservation (multi-tenant keyspace seed)
2026-04-17 · L0 L0.5 · cites 6 others - ADR-032WasmPluginError OutOfFuel + Trap + PluginCallContext reservation
2026-04-17 · L0.5 · cites 7 others - ADR-033L0 foundational types: Cost, UUIDv7, TrustLevel, TokenUsage evolution
2026-04-16 · L0 L0.5 · cites 11 others - ADR-034L0.5 kernel traits expansion: 6 new traits scoped to v0.81+ additions
2026-04-16 · L0.5 · cites 14 others - ADR-035Telemetry seams: SpanGuard parent_span_id + SpanRef (OTel-ready)
2026-04-17 · L0.5 · cites 5 others - ADR-037Bottom-up diamond progression (no feature-milestone defer)
2026-04-17 · L0 L0.5 L1 L2 L3 L4 L5 · cites 6 others - ADR-038Admit nika-bm25 as the first L1 memory satellite (CRAFT-from-scratch BM25 scorer)
2026-05-12 · L1 · cites 10 others - ADR-082Workflow envelope: single version marker `nika: v1` (supersedes K8s apiVersion form)
2026-05-25 · L0 L0.5 · cites 7 others · supersedes ADR-021 - ADR-083L1 computer-use effect crates · cross-platform doctrine (macOS + Linux prio · Windows + all)
2026-05-26 · L1 · cites 4 others - ADR-084nika-catalog builtin set · reconciliation to spec 26 (42→26 stdlib collapse + json_merge cut)
2026-05-27 · L0 · cites 7 others - ADR-085spec/workflow.schema.json invoke.tool oneOf · interim hand-derived bridge to engine schemars codegen
2026-05-27 · L0 · cites 7 others - ADR-086builtin Rams sweep · nika:csv_to_json → nika:convert universal multi-format · less but better
2026-05-27 · L0 · cites 7 others - ADR-087nika:sleep + nika:wait_until → nika:wait · temporal-control Rams collapse
2026-05-27 · L0 · cites 8 others - ADR-088nika:cost + records + dag_info + threads → nika:inspect · introspection Rams collapse
2026-05-27 · L0 · cites 9 others - ADR-090Structural doctrine enforcement — gates project the SSOT
2026-06-10 · L0 L0.5 L1 L2 L3 L4 L5 · cites 6 others - ADR-091Sovereign local inference · nika-infer-local · pure-Rust candle sidecar, OpenAI-compat reuse, no rig / no mistral.rs
2026-06-11 · L1.5 · cites 6 others - ADR-093nika-infer-local HTTP server · tiny_http for the v1 sidecar endpoint
2026-06-11 · L1.5 · cites 5 others - ADR-094nika-pck · content-addressed sharing — identity decentralized, discovery a forkable index, trust in the artifact
2026-06-11 · L0 L1 L2 L4 · cites 4 others - ADR-095exec verb security architecture · layered defense-in-depth (permits = declaration, 3 layers enforce)
2026-06-12 · L0.5 L1 L2 L3 · cites 7 others - ADR-096The agent-loop intelligence layer — routing, stall guard, compose, telemetry
2026-06-12 · L2 L0 · cites 3 others - ADR-097Parallel intra-turn tool dispatch — concurrent resolve, request-order fold
2026-06-12 · L2 · cites 1 other - ADR-099Durable-lite run resume — the trace IS the checkpoint
2026-07-05 · L2 L4 · cites 3 others - ADR-100Trace retention — bounded by default, never silently, never a pending gate
2026-07-05 · L2 L4 · cites 2 others - ADR-105nika:image_generate — the Media builtin rides a dedicated image plane
2026-07-05 · L0 L1.5 L4 · cites 4 others - ADR-107Admit nika-check-wasm — the static half of nika check, compiled to the browser
2026-07-28 · L4 · cites 5 others - ADR-108Split the spec-15 proof primitives out of nika-runtime into nika-proof (L0)
2026-07-29 · L0 L3 · cites 3 others - ADR-109Publish the composition proof receipt — what this engine may claim on spec 14
2026-07-30 · L0 L3 L4 · cites 2 others - ADR-110nika-cli size-cap member split: the host plane descends to nika-cli-host
2026-07-31 · L4 · cites 3 others
proposed
12 decisions
written, not settled · cite it as a proposal, never as canon
- ADR-036MSRV policy: rust-toolchain.toml SSOT + N-2 stable cadence (stub)
2026-04-17 · L0 L0.5 L1 L2 L3 L4 L5 · cites 4 others - ADR-039Streaming MemoryRecall for lazy fusion · recall_stream()
2026-05-12 · L0.5 L1 L2 · cites 10 others - ADR-040Cargo feature matrix for nika-memory · zero-cost modularity
2026-05-12 · L1 L2 · cites 15 others - ADR-041Type-state lifecycle for nika-memory orchestrator
2026-05-12 · L2 · cites 7 others - ADR-042Autodesc MINIMAL/FULL split · forcing-function moat at W4
2026-05-12 · L1 · cites 5 others - ADR-078MemoryRecall &self satellite contract + &mut self orchestrator pool (Option D)
2026-05-12 · L0.5 L1 L2 · cites 13 others - ADR-079Capabilities<E: EffectSet> phantom-type kernel · compile-time effect refusal (Option C hybrid)
2026-05-12 · L0.5 L1 L2 L4 · cites 10 others - ADR-080MCP STDIO transport vulnerability-class sandbox canon · 5-layer mitigation (post phantom-CVE audit)
2026-05-12 · L0.5 L2 L3 L4 · cites 9 others - ADR-081L1 effect-crate guard contract · 7 security guards as forever crate-admission criteria
2026-05-14 · L1 · cites 10 others - ADR-092Make nika check a verifier, not a linter — the static-analysis ladder on a unified flow IR
2026-06-11 · L0 · cites 5 others - ADR-098Underspecified schemas fall back to native JSON mode + local validation
2026-07-05 · L1.5 L2 · cites 1 other - ADR-106nika add — the registry client verb (resolve · verify · install)
2026-07-06 · L1 L4 · cites 3 others
superseded
1 decision
another decision replaced it · the chain is named on the row
- ADR-021YAML envelope convention: apiVersion + kind + metadata + spec, multi-doc, 9 doc kinds
2026-04-16 · L0 L0.5 · cites 6 others · superseded by ADR-082
rejected
1 decision
considered and refused · the record keeps the reason
- ADR-089nika:json_diff jq-subsume feasibility · REJECTED · keep RFC-6902 Patch as canonical output format
2026-05-27 · cites 5 others
read them whole
The bodies live in the engine repo
The 12 proposals above have no room of their own on purpose: a proposal published as an indexed page invites citation as though it were settled. They live in the repo until they are decided. The machine surfaces are served beside this one: index.json carries every cross-reference edge, verbatim at the pin, and bodies.json carries the settled decisions whole, lexed at the pin with each one's sha256 beside it.