---
title: "Architecture decisions"
description: "NovaFabric records every architectural decision as a numbered ADR (Architecture Decision Record)."
canonical: https://novafabric.ai/docs/decisions/
last_updated: 2026-10-23
source: https://github.com/MSKazemi/novafabric/blob/main/docs/decisions.md
---

# Architecture decisions

NovaFabric records every architectural decision as a numbered **ADR**
(Architecture Decision Record). This page is the canonical index: whenever the
documentation cites `ADR-0123`, this table is what it refers to.

**Why only an index?** ADR bodies are internal design records — they carry
in-progress research, competitive analysis, and commercial reasoning alongside
the technical decision, so the project publishes the decision *ledger* rather
than the deliberation. Everything an ADR decides that affects you as a user or
contributor is reflected in the code, the [CHANGELOG](https://github.com/MSKazemi/novafabric/blob/main/CHANGELOG.md), the
[ROADMAP](https://github.com/MSKazemi/novafabric/blob/main/ROADMAP.md), and the docs in this directory. If a decision here
matters to something you are building and the public docs do not explain it,
[open a Discussion](https://github.com/MSKazemi/novafabric/discussions) and
ask — we will write it up.

**Proposing a change to a decision** is the [RFC
process](https://novafabric.ai/docs/governance/rfc-process/), not an ADR. RFCs are public and live in
[`docs/rfcs/`](https://novafabric.ai/docs/rfcs/).

| Status | Meaning |
|---|---|
| **accepted** | Decided and in force. |
| **proposed** | Written, not yet decided. |
| **superseded** | Replaced by a later ADR. |
| **rejected** | Considered and declined; kept as provenance. |


**299 decisions recorded** — **282** accepted · **14** proposed · **3** superseded.

| ADR | Title | Status | Date |
|---|---|---|---|
| `ADR-0001` | Self-Contained Registry | accepted | 2026-05-06 |
| `ADR-0002` | YAML AI Asset Specification | accepted | 2026-05-06 |
| `ADR-0003` | Eval-Gated Agent Promotion | accepted | 2026-05-06 |
| `ADR-0004` | Run Capsule Directory Layout and File Inventory | accepted | 2026-05-07 |
| `ADR-0005` | Replay Modes Taxonomy and Contract | accepted | 2026-05-07 |
| `ADR-0006` | Capture Mechanism: CLI Wrapper, SDK Decorator, and OTel Import | accepted | 2026-05-07 |
| `ADR-0007` | Environment Lock Format: uv.lock, OCI Digest, and OS Fingerprint | accepted | 2026-05-07 |
| `ADR-0008` | Tool Call Serialization and MCP Alignment | accepted | 2026-05-07 |
| `ADR-0009` | Secret Scanning, Redaction Defaults, and Proof-of-Redaction | accepted | 2026-05-07 |
| `ADR-0010` | External Resource Handling: Snapshot, Reference, and Hash | accepted | 2026-05-07 |
| `ADR-0011` | Evidence Bundle Format: in-toto Attestation and Sigstore Signing | accepted | 2026-05-07 |
| `ADR-0012` | Replay Safety: Dry-Run, Mock-Tools, Allow-Readonly, Allow-Mutating | accepted | 2026-05-07 |
| `ADR-0013` | Lineage Graph Storage: SQLite Recursive CTEs to KuzuDB | accepted | 2026-05-07 |
| `ADR-0014` | OTel GenAI Semconv Adoption and Nova.* Extensions | accepted | 2026-05-07 |
| `ADR-0015` | MCP Integration: NovaFabric as MCP Transcript Recorder | accepted | 2026-05-07 |
| `ADR-0016` | Storage Backend Evolution: SQLite to Postgres Migration Plan | accepted | 2026-05-07 |
| `ADR-0017` | Server API Protocol: REST + OpenAPI 3.1 (gRPC Deferred to v1.x) | accepted | 2026-05-07 |
| `ADR-0018` | Auth Model: OIDC + RBAC Scopes; Offline-Token Mode for Airgapped | accepted | 2026-05-07 |
| `ADR-0019` | Policy Engine: OPA/Rego (Cedar Evaluated and Rejected) | accepted | 2026-05-07 |
| `ADR-0020` | Self-contained core with cluster-scale low-overhead capture architecture | accepted | 2026-05-08 |
| `ADR-0021` | AI-factory design intent (reliability, federation, schema, governance) | proposed | 2026-05-08 |
| `ADR-0022` | Polyglot persistence and object storage as raw-capsule source-of-truth | accepted | 2026-05-08 |
| `ADR-0023` | Hierarchical content-addressed cache architecture | proposed | 2026-05-08 |
| `ADR-0024` | Project-wide dependency license policy | accepted | 2026-05-08 |
| `ADR-0025` | `RunnerSpec` interface for multi-target capture | accepted | — |
| `ADR-0026` | Promote Path A `nova api-proxy` from research to v0.6.x track | accepted | — |
| `ADR-0027` | `nova serve` experimental dashboard pulled forward to v0.x | accepted | 2026-05-10 |
| `ADR-0028` | itwinai / interLink integration for K8s ↔ HPC bridging | proposed | — |
| `ADR-0029` | Server Config File Schema: YAML, Location, Env-var Overrides, Secrets | accepted | — |
| `ADR-0030` | RFC 3161 Trusted Timestamps for the Evidence Bundle | accepted | 2026-05-10 |
| `ADR-0031` | WORM Storage Adapter and Retention-Policy Engine | accepted | 2026-05-10 |
| `ADR-0032` | Parent/Child Capsule Hierarchy for Distributed Runs | superseded | 2026-05-10 |
| `ADR-0033` | Eval Runner Design: Container-Deterministic Benchmark Suites for v0.9 | accepted | 2026-05-11 |
| `ADR-0034` | Open Agent Specification v1.0: Spec Stability Policy | accepted | 2026-05-11 |
| `ADR-0035` | Agent Identity Attribution in Capsule Records | accepted | 2026-05-11 |
| `ADR-0036` | Cross-Run Comparison UX in the Experimental Dashboard | accepted | 2026-05-12 |
| `ADR-0037` | Evidence Tab Native Dashboard Implementation | accepted | 2026-05-12 |
| `ADR-0038` | Eval Trend Chart in the Registry Dashboard Tab | accepted | 2026-05-12 |
| `ADR-0039` | Parent/Child Capsule Hierarchy v2 | superseded | 2026-05-12 |
| `ADR-0040` | Production MetadataStore Interface | superseded | 2026-05-12 |
| `ADR-0041` | NovaSeal Cryptographic Core Adoption | accepted | 2026-05-12 |
| `ADR-0042` | Deployment Tier Invariants: Bi-Directional Scalability Guarantee | accepted | 2026-05-12 |
| `ADR-0043` | Collector v0.1 Implementation | accepted | 2026-05-12 |
| `ADR-0044` | Typed lineage edge vocabulary | accepted | 2026-05-12 |
| `ADR-0045` | Fail open out of order arrival | accepted | 2026-05-12 |
| `ADR-0046` | Two phase capsule lifecycle | accepted | 2026-05-12 |
| `ADR-0047` | Capsule Manifest Chain | accepted | 2026-05-12 |
| `ADR-0048` | NovaSeal Synchronous Write Contract | accepted | 2026-05-12 |
| `ADR-0049` | WORM Conformance Suite | accepted | 2026-05-12 |
| `ADR-0050` | MetadataStore ABC with SET LOCAL tenant isolation | accepted | 2026-05-13 |
| `ADR-0051` | Partition key for the `runs` table | accepted | 2026-05-13 |
| `ADR-0052` | pgBouncer transaction mode + two-role split for MetadataStore | accepted | 2026-05-13 |
| `ADR-0053` | LineageStore v2 Tiering: Benchmark-Gated Backend Progression | accepted | 2026-05-13 |
| `ADR-0054` | DSSE Signing Envelope | accepted | 2026-05-14 |
| `ADR-0055` | Dual-Mode Signing Identity | accepted | 2026-05-14 |
| `ADR-0056` | Rules-Based (Not ML) Risk-Tier Classifier | accepted | 2026-05-14 |
| `ADR-0057` | Per-Tenant Append-Only Merkle Log | accepted | 2026-05-14 |
| `ADR-0058` | Maker-Checker Dual-Approval for Asset Promotion | accepted | 2026-05-15 |
| `ADR-0059` | NovaSeal Linked-Envelope Chain Maker-Checker Signing | accepted | 2026-05-15 |
| `ADR-0060` | Role-management HTTP surface | accepted | 2026-05-15 |
| `ADR-0061` | NATS JetStream as Cluster-Tier Event Bus | accepted | 2026-05-17 |
| `ADR-0062` | Dual-Object GDPR/WORM Capsule Storage | accepted | 2026-05-17 |
| `ADR-0063` | Microsoft Presidio as Default PII Detector | accepted | 2026-05-17 |
| `ADR-0064` | JSON-LD as Primary Evidence Export Format | accepted | 2026-05-17 |
| `ADR-0065` | tool-permission-event as First-Class Capsule Entity | accepted | 2026-05-17 |
| `ADR-0066` | Evidence Fabric v1.0 Core Pipeline | accepted | 2026-05-17 |
| `ADR-0067` | Capsule Knowledge Graph v1.2 | accepted | 2026-05-17 |
| `ADR-0068` | TV-5 3D Topology View | accepted | 2026-05-17 |
| `ADR-0069` | GDPR Art.17 Erasure via AES-256-GCM Crypto-Shredding for Immutable Capsule Logs | accepted | 2026-05-19 |
| `ADR-0070` | RFC 3161 TSA Trust Chain Validation with CRL Caching for Air-Gapped HPC Environments | accepted | 2026-05-19 |
| `ADR-0071` | Sigstore Keyless Signing Integration via sigstore Python SDK 4.x | accepted | 2026-05-19 |
| `ADR-0072` | Post-Quantum Cryptography Migration Roadmap for NovaSeal (2026–2035) | accepted | 2026-05-19 |
| `ADR-0073` | AI Bill of Materials Export Using CycloneDX ML-BOM v1.7 (cap-008) | accepted | 2026-05-19 |
| `ADR-0074` | C2PA Content Credentials for AI-Generated Artifact Provenance (EU AI Act Art.50) | accepted | 2026-05-19 |
| `ADR-0075` | W3C DID + Verifiable Credentials for Agentic AI Identity and Authorization Chains | accepted | 2026-05-19 |
| `ADR-0076` | EU AI Act Article 12 Compliance Mode for High-Risk AI Logging | accepted | 2026-05-19 |
| `ADR-0077` | Multi-Region Log Sovereignty for Jurisdictional Data Residency | accepted | 2026-05-19 |
| `ADR-0078` | Ecosystem Framework Adapters: OpenAI Agents SDK, Google ADK, Bedrock AgentCore, A2A | accepted | 2026-05-19 |
| `ADR-0079` | Production Capsule Storage: Hybrid Three-Tier Model (Filesystem → OCS → MetadataStore) | accepted | 2026-05-20 |
| `ADR-0080` | Statistical-significance layer for regression / eval gating | accepted | 2026-06-11 |
| `ADR-0081` | CloudEvents v1.0 Envelope Interop (structured-mode round-trip) | accepted | 2026-06-11 |
| `ADR-0082` | Extended Span Taxonomy (gap-011) | accepted | 2026-06-11 |
| `ADR-0083` | Hot in-memory lineage impact index | accepted | 2026-06-11 |
| `ADR-0084` | Failure Attribution over the Lineage / Causal Graph | accepted | — |
| `ADR-0085` | Sealed system/audit card and versioned eval provenance | accepted | — |
| `ADR-0086` | Intervention (Counterfactual) Replay and Replay-Time Check-Functions | accepted | 2026-06-12 |
| `ADR-0087` | Evidence completeness, criterion→evidence binding, and re-performance attestation | accepted | 2026-06-12 |
| `ADR-0088` | First-class Incident object with Art. 73 deadline clock and replay attestation | accepted | 2026-06-12 |
| `ADR-0089` | Forward-Secure Per-Node Signing Key Ratchet | accepted | 2026-06-12 |
| `ADR-0090` | Fine-grained (column-level) and verifiable lineage | accepted | 2026-06-12 |
| `ADR-0091` | eBPF agentless capture tier for non-Python and black-box agents | proposed | 2026-06-12 |
| `ADR-0092` | Warm capture daemon (prefork resident emitter) | accepted | 2026-06-14 |
| `ADR-0093` | Energy-Anchored Action Receipts | accepted | 2026-06-19 |
| `ADR-0094` | Adversary-Anchored Accountability Ledger + Deterministic Replay Attestation | accepted | 2026-06-19 |
| `ADR-0095` | Evidence-Grounded Safety-Case Compiler + Court-Admissible Evidence Binding | accepted | 2026-06-19 |
| `ADR-0096` | Standard outer envelopes — DSSE / in-toto / SLSA / CloudEvents wrapping for NovaFabric evidence | accepted | 2026-07-01 |
| `ADR-0097` | Verifiable, witness-cosigned transparency log for capsules, evidence and policy decisions | accepted | 2026-07-01 |
| `ADR-0098` | OTel GenAI as canonical span vocabulary — agent-span emitter, content-capture bridge, OTLP/OpenInference ingestion | accepted | 2026-07-01 |
| `ADR-0099` | Evidence-grade evaluation — signed, replayable scores bound to content-addressed spans | accepted | 2026-07-01 |
| `ADR-0100` | Determinism replay attestation — batch-invariant, bitwise-provable exact replay | accepted | 2026-07-01 |
| `ADR-0101` | Intervention-verified counterfactual attribution — replay-confirmed, not log-only, root cause | accepted | 2026-07-01 |
| `ADR-0102` | Cluster-scale collector v2 — OTAP-native, two-tier, JetStream-durable ingestion plane | proposed | 2026-07-01 |
| `ADR-0103` | Object capsule store — Iceberg-v3-style object-store-as-source-of-truth with DuckLake/DuckDB index and Lance payload tier | proposed | 2026-07-01 |
| `ADR-0104` | eBPF agentless capture tier v2 — promote ADR-0091 to proposed with gating spikes (OBI/Beyla, cross-process propagation) | proposed | 2026-07-01 |
| `ADR-0105` | AI supply-chain bill-of-materials: model signing, CycloneDX AI-BOM, SLSA-for-ML, dataset provenance | accepted | 2026-07-01 |
| `ADR-0106` | Agent identity binding and provable delegated authority | accepted | 2026-07-01 |
| `ADR-0107` | EU AI Act and standards evidence exporters | accepted | 2026-07-01 |
| `ADR-0108` | Eval-harness interop — be the provenance/seal layer under Inspect AI, HAL, τ²-bench, and Terminal-Bench 2.0 | accepted | 2026-07-01 |
| `ADR-0109` | Fine-grained lineage v2 — cell/row facets, transformation provenance, hot index | accepted | 2026-07-01 |
| `ADR-0110` | Cross-node interaction proofs and Slurm-native provenance consolidation | accepted | 2026-07-01 |
| `ADR-0111` | Security & Provenance Knowledge Graph (SPKG) — graph-based anomaly detection and threat reasoning over run capsules, lineage, evidence, identity, and AI-BOM | accepted | 2026-07-02 |
| `ADR-0112` | Prompt as a first-class versioned, content-addressed registry asset | accepted | 2026-07-12 |
| `ADR-0113` | Asset deployment labels — movable named pointers to immutable asset versions, resolution-frozen into the capsule | accepted | 2026-07-12 |
| `ADR-0114` | Protected labels — critical deployment-label moves require maker-checker approval | accepted | 2026-07-12 |
| `ADR-0115` | Prompt composability with resolved-at-capture snapshot — content-addressed composition manifests for deterministic replay | accepted | 2026-07-12 |
| `ADR-0116` | Variant attribution — record which A/B experiment variant was active for a run (record-only, never allocate) | accepted | 2026-07-12 |
| `ADR-0117` | Score configuration catalog — named, reusable, content-addressed score definitions that constrain and make evidence-grade scores comparable across capsules | accepted | 2026-07-12 |
| `ADR-0118` | Human annotation queues — a maker-checker workflow layer that routes subjects to reviewers and emits each completed annotation as a signed HUMAN-source Score | accepted | 2026-07-12 |
| `ADR-0119` | External score-submission API/SDK — a documented, validated write surface for ingesting externally-computed evaluation scores into a capsule's append-only scores.jsonl | accepted | 2026-07-12 |
| `ADR-0120` | Dataset-experiment harness — per-item dataset runs, immutable comparison records, and A/B experiment diffs feeding the existing regression gate | accepted | 2026-07-12 |
| `ADR-0121` | Append-only comments/notes on capsules & assets — portable evidence annotations, not live chat | accepted | 2026-07-12 |
| `ADR-0122` | Session capsule — a content-addressed manifest grouping N independent runs into one multi-turn conversation or workflow session | accepted | 2026-07-12 |
| `ADR-0123` | Session replay — deterministic end-to-end re-execution of a multi-turn session over its member capsules | accepted | 2026-07-12 |
| `ADR-0124` | Agent execution-graph reconstruction — a deterministic within-run DAG projection over one capsule's spans, model calls, and tool calls | accepted | 2026-07-12 |
| `ADR-0125` | Multi-modal capture — content-addressed image/audio/video/document content on model calls | accepted | 2026-07-12 |
| `ADR-0126` | Deployment-environment field on run capsules — a first-class, queryable production/staging/dev tag distinct from the environment lock | accepted | 2026-07-12 |
| `ADR-0127` | Log levels on observations — a stored, filterable severity dimension for forensic inspection of captured runs | accepted | 2026-07-12 |
| `ADR-0128` | Tool-call & structured-output schema validation — an enforcing validation pass over declared schema_refs at capture and replay | accepted | 2026-07-12 |
| `ADR-0129` | Offline metrics query DSL over the local capsule store — a local-first, CLI-native way to filter/group/aggregate metrics across many capsules without a server | accepted | 2026-07-12 |
| `ADR-0130` | Saved views / saved queries — named, versioned, portable query definitions over capsule sets | accepted | 2026-07-12 |
| `ADR-0131` | Offline CLI score/cost/latency trend reports (nova trend) — JSON series + optional self-contained static HTML | accepted | 2026-07-12 |
| `ADR-0132` | Rich token usage-type accounting — an additive, extensible usage breakdown (cached / reasoning / audio / image tokens) on the model-call record | accepted | 2026-07-12 |
| `ADR-0133` | Local, user-extensible model-pricing catalog for offline cost accounting (self-hosted / fine-tuned / private models) | accepted | 2026-07-12 |
| `ADR-0134` | Data-retention policy scheduler — a WORM-aware, crypto-shred-integrated, audited sweep that applies retention windows over time | accepted | 2026-07-12 |
| `ADR-0135` | Pluggable PII masking pipeline at capture ingestion (operator-registered maskers, recorded in the redaction proof) | accepted | 2026-07-12 |
| `ADR-0136` | Cost/energy budget policy gate — a Rego promotion gate that blocks acceptance of a capsule or asset whose recorded cost/energy exceeds a declared budget ceiling | accepted | 2026-07-12 |
| `ADR-0137` | Lifecycle event emitter & webhooks — a structured, append-only event surface that lets external CI/automation react to capsule/promotion/policy/retention transitions | accepted | 2026-07-12 |
| `ADR-0138` | SAML 2.0 SSO for server mode — an optional enterprise auth backend behind the existing auth abstraction (never a local-mode requirement) | accepted | 2026-07-12 |
| `ADR-0139` | SCIM 2.0 provisioning for server-mode user lifecycle (RFC 7643/7644) — automated create/update/deactivate + group→role mapping | accepted | 2026-07-12 |
| `ADR-0140` | Self-contained shareable capsule viewer — single-file offline HTML export (nova export --html) | accepted | 2026-07-12 |
| `ADR-0141` | Batch capsule export to blob storage with a signed, verifiable completeness manifest | accepted | 2026-07-12 |
| `ADR-0142` | Multi-agent trajectory & A2A message/handoff evidence — captured, signed, causally-ordered records of the wire between agents | accepted | 2026-07-12 |
| `ADR-0143` | Memory & context provenance — sealed lineage for what entered the model's context and where it came from | accepted | 2026-07-12 |
| `ADR-0144` | Behavioral-equivalence replay — score whether a replay *passed* behaviorally (goal/trajectory equivalence, drift, non-determinism budget), not whether it re-emitted the same tokens | accepted | 2026-07-12 |
| `ADR-0145` | Runtime guardrail & safety evidence — sealed, verifiable, replayable runtime-safety decision objects | accepted | 2026-07-12 |
| `ADR-0146` | Agent-granularity cost / energy / SLA accountability — attribute the sealed run-total across the agent team and the acted-as chain, and witness quota / breaker / SLA breaches as evidence | accepted | 2026-07-12 |
| `ADR-0147` | Drift & continuous assurance — a standing production loop over sealed capsules that detects output/behavior drift, canary-replays pinned baselines, analyzes model-update impact, and attests it ran | accepted | 2026-07-12 |
| `ADR-0148` | Content-provenance binding, tool-schema-change evidence & computer-use capture — per-artifact C2PA binding, schema-drift replay-impact, and GUI action provenance | accepted | 2026-07-12 |
| `ADR-0149` | 2026 agent-standard interoperability — portable capture & object mapping of A2A / AGNTCY / WebMCP / ACP / OCI / SCITT into the capsule | accepted | 2026-07-12 |
| `ADR-0150` | Human-agent collaboration & accountability — conversation-granular HITL decision-context, consent, dispute, and right-to-explanation evidence | accepted | 2026-07-12 |
| `ADR-0151` | Verifiability frontier — post-quantum, zero-knowledge, TEE-attestation, and selective-disclosure evidence layered on NovaSeal | accepted | 2026-07-12 |
| `ADR-0152` | Training & model-provenance lineage — binding a model's training ancestry into the run capsule | accepted | 2026-07-13 |
| `ADR-0153` | Retrieval-source authority & knowledge provenance — sealed authority/freshness/license/integrity of retrieved sources and citation-to-source verification | accepted | 2026-07-13 |
| `ADR-0154` | Evaluation & benchmark integrity — cryptographic contamination proofs, harness attestation, judge-bias evidence, and leaderboard reproducibility receipts sealed into the capsule | accepted | 2026-07-13 |
| `ADR-0155` | Agent DFIR — forensic timeline, tamper-evident chain-of-custody & investigator-grade export on top of the shipped Incident object | accepted | 2026-07-13 |
| `ADR-0156` | Third-party verifier & evidence-consumer ecosystem — verify, compare, badge, receipt, and share NovaFabric evidence with no NovaFabric install | accepted | 2026-07-13 |
| `ADR-0157` | Edge / on-device / offline agent evidence — constrained-device capture, deferred-seal, and bounded-clock attestation for intermittently-connected agents | accepted | 2026-07-13 |
| `ADR-0158` | Responsible-AI & sustainability reporting — system cards, RAI scorecards, ESG/CSRD packs, and water/e-waste/embodied-carbon provenance over sealed capsules | accepted | 2026-07-13 |
| `ADR-0159` | Finance-sector agentic evidence pack — SR 26-2/SR 11-7 model-risk, MiFID best-execution, trade-decision, suitability, market-abuse, DORA ICT-incident, SEC 17a-4 retention, ECOA adverse-action, and CAT-style event exporters over sealed capsule evidence | accepted | 2026-07-13 |
| `ADR-0160` | Healthcare / life-sciences agentic evidence pack — GxP, SaMD, HIPAA-AoD, CDS-provenance, ALCOA+ exporters over existing capsule evidence | accepted | 2026-07-13 |
| `ADR-0161` | Data governance, privacy & subject-rights at fleet scale — cross-capsule DSAR assembly, erasure orchestration, purpose/minimization/retention/transfer evidence & fleet-wide RoPA | accepted | 2026-07-13 |
| `ADR-0162` | Embodied & cyber-physical agent evidence — binding physical-world action provenance into the run capsule | accepted | 2026-07-13 |
| `ADR-0163` | Agentic commerce & settlement evidence — binding the provenance of the money an agent moved into the run capsule | accepted | 2026-07-13 |
| `ADR-0164` | Scientific reproducibility & research-integrity evidence — binding an agentic-science run's hypothesis→result provenance into the capsule | accepted | 2026-07-13 |
| `ADR-0165` | Evidence longevity & long-term preservation — keeping a sealed capsule verifiable across decades of crypto, schema, format, and storage migration | accepted | 2026-07-13 |
| `ADR-0166` | Assurance cases & continuous-certification evidence — binding sealed capsules into a machine-checkable argument that stays current | accepted | 2026-07-13 |
| `ADR-0167` | Runtime safety & alignment evidence — recording frontier-safety-framework, AI-control, and dangerous-capability governance events as sealed evidence | accepted | 2026-07-13 |
| `ADR-0168` | Federation & cross-org trust-transitivity evidence — recording how trust composes across organization boundaries | accepted | 2026-07-13 |
| `ADR-0169` | Public transparency & societal accountability evidence — exporting the public/civic disclosure layer from sealed capsules | accepted | 2026-07-13 |
| `ADR-0170` | Insurance, liability & actuarial evidence — binding the risk-transfer layer around an agent run into the capsule | accepted | 2026-07-13 |
| `ADR-0171` | Persistent knowledge & organizational-memory governance evidence — recording governance about the long-lived, cross-run, at-rest shared store | accepted | 2026-07-13 |
| `ADR-0172` | Evidence Provenance Merkle Tree visualization — an interactive, verify-on-click proof tree that makes a sealed capsule's cryptographic chain of custody legible | accepted | 2026-07-13 |
| `ADR-0173` | Trust Attestation Radar visualization — a per-capsule radial gauge that summarizes every Trust-Layer guarantee in one glance-readable glyph | accepted | 2026-07-13 |
| `ADR-0174` | Redaction / Secret-Scan X-Ray visualization — a field-structure heat overlay showing what was captured, redacted, scrubbed, or never captured in a capsule | accepted | 2026-07-13 |
| `ADR-0175` | Streaming object listing for the Object Capsule Store (iter_objects) — bounded-memory rebuild over large namespaces | accepted | 2026-07-16 |
| `ADR-0176` | PROV-N text export for lineage — a second W3C serialization of the same provenance graph | accepted | 2026-07-16 |
| `ADR-0177` | OTLP/protobuf trace ingest — binary encoding support that reuses the JSON ingest path | accepted | 2026-07-16 |
| `ADR-0178` | Workspace/organization model and first-class service accounts above flat tenant isolation | accepted | 2026-07-16 |
| `ADR-0179` | API rate limiting and quotas — in-process token bucket, standard 429 contract | accepted | 2026-07-16 |
| `ADR-0180` | High-availability and upgrade posture — single-writer active-passive through v1.0, expand-contract migrations | accepted | 2026-07-16 |
| `ADR-0181` | Backup, restore, and DR tooling — evidence-grade backup sets with keys excluded | accepted | 2026-07-16 |
| `ADR-0182` | Self-observability surface — /metrics, /livez, /readyz, /v0/version, and opt-in self-tracing | accepted | 2026-07-16 |
| `ADR-0183` | HTTP server consolidation — server/ is the strategic surface; serve/ is frozen and migrates incrementally | accepted | 2026-07-16 |
| `ADR-0184` | Secure-by-default local server auth — no more anonymous admin | accepted | 2026-07-16 |
| `ADR-0185` | Optional application-layer envelope encryption at rest — KMS-wrapped DEKs, not the default | accepted | 2026-07-16 |
| `ADR-0186` | Dependency and vulnerability management — scanning gates and CVE response SLAs | accepted | 2026-07-16 |
| `ADR-0187` | Support bundle — nova support-bundle diagnostics tarball with normative redaction | accepted | 2026-07-16 |
| `ADR-0188` | API deprecation and sunset policy — RFC 8594 headers and a published register | accepted | 2026-07-16 |
| `ADR-0189` | Entitlement stance — no license keys, no runtime enforcement, no phone-home | accepted | 2026-07-16 |
| `ADR-0190` | SCIM group→role assignment provenance — SCIM revokes only what SCIM granted | accepted | 2026-07-16 |
| `ADR-0191` | Audit-log SIEM egress — nova audit-log export/tail in OCSF/CEF/JSONL; the site's shipper does transport | accepted | 2026-07-16 |
| `ADR-0192` | Operational alerting — an ops.* event family and notification adapters layered on the ADR-0137 lifecycle emitter | accepted | 2026-07-16 |
| `ADR-0193` | API keys and key-rotation lifecycle — hashed scoped keys shown once, plus KEK re-wrap tooling | accepted | 2026-07-16 |
| `ADR-0194` | Official TypeScript SDK — thin generated-plus-handwritten client for the /v0 REST surface | accepted | 2026-07-16 |
| `ADR-0195` | FIPS 140-3 posture statement — crypto inventory, validated-module dependence, no product claim | accepted | 2026-07-16 |
| `ADR-0196` | Additive first-party `facets` container on the Run Capsule schema | accepted | 2026-07-20 |
| `ADR-0197` | `evidence_source` — marking operator assertion apart from capsule-verified evidence in compliance exports | accepted | 2026-07-20 |
| `ADR-0198` | Device-grant demo flow is opt-in; JWT verification is pinned to asymmetric algorithms | accepted | 2026-07-24 |
| `ADR-0199` | Dashboard scale posture — bounded queries, keyset cursors, watermark caching, honest truncation | accepted | 2026-07-24 |
| `ADR-0200` | CLI→dashboard parity classification guard + generic compliance-export registry | accepted | 2026-07-24 |
| `ADR-0201` | Server-side chart rendering — stdlib SVG end-to-end, WeasyPrint PDF, no raster dependency | accepted | 2026-07-24 |
| `ADR-0202` | Python client SDK — a typed, sync-first httpx client for the /v0 REST API (`novafabric.client`) | accepted | 2026-07-24 |
| `ADR-0203` | Server ingest hardening — upload size cap, streaming spool, zip-bomb guards | accepted | 2026-07-24 |
| `ADR-0204` | Capsule content full-text search — SQLite FTS5 over redacted capsule text, on-ingest, with CLI and dashboard surface | accepted | 2026-07-24 |
| `ADR-0205` | Server-side webhook subscription registry — /v0/webhooks CRUD, signed delivery, persisted delivery log | accepted | 2026-07-24 |
| `ADR-0206` | Bulk capsule operations and keyset pagination for the /v0 API | accepted | 2026-07-24 |
| `ADR-0207` | Batch import / instance interchange — `nova import`, the verified inverse of the ADR-0141 blob export | accepted | 2026-07-24 |
| `ADR-0208` | Per-org/workspace usage metering and quota scoping — ingest-time accounting, /v0/usage, per-workspace warn-then-reject | accepted | 2026-07-24 |
| `ADR-0209` | Default-path wiring for the seven unwired extended capture events — a public recorder façade plus honest adapter wiring, no heuristics | accepted | 2026-07-24 |
| `ADR-0210` | REST erasure execution — wire the compliance erasure endpoints to the real crypto-shred machinery | accepted | 2026-07-24 |
| `ADR-0211` | Automated Postgres restore and a startup schema-skew guard | accepted | 2026-07-24 |
| `ADR-0212` | Read-only graph-analytics layer over the lineage store (centrality, hubs, articulation points) | accepted | 2026-07-24 |
| `ADR-0213` | Node-level root-cause ranking over the lineage graph (`nova lineage root-cause`) | accepted | 2026-07-24 |
| `ADR-0214` | Lineage graph export interop: GraphML, GEXF, and Cypher (`nova lineage export-graph`) | accepted | 2026-07-24 |
| `ADR-0215` | Synthesized graph-intelligence report (`nova insights`) | accepted | 2026-07-24 |
| `ADR-0216` | Backup coverage expansion — full local state, sensitive members, manifest-only profile | accepted | 2026-07-24 |
| `ADR-0217` | Automated pg-dump restore — safety semantics, DSN hygiene, RLS re-application | accepted | 2026-07-24 |
| `ADR-0218` | Two Merkle constructions: authoritative domains and non-interoperability | accepted | 2026-07-24 |
| `ADR-0219` | LineageConsumer bulk-COPY: real KuzuDB schema + idempotent node upsert | accepted | 2026-07-30 |
| `ADR-0220` | Reconcile the Go collector's event envelope with the canonical CapsuleEventType taxonomy | accepted | 2026-07-30 |
| `ADR-0221` | Opt-in psycopg connection pool for the Postgres metadata store | accepted | 2026-07-30 |
| `ADR-0222` | Default-install dependency tier reclassification: duckdb, pyarrow, python-louvain and clickhouse-connect move to extras | accepted | 2026-07-30 |
| `ADR-0223` | Schema identity: nine schema pairs share one $id and disagree; separate the v1 target from the in-force v0 | accepted | 2026-08-02 |
| `ADR-0224` | Concurrent in-process captures: single-owner hooks now, task-scoped recorder later | accepted | 2026-08-02 |
| `ADR-0225` | Persistent nova query index: mtime-validated cache outside the capsule directory | accepted | 2026-08-02 |
| `ADR-0226` | runs primary key: tenant_id belongs in the key; idempotency moves into the application | accepted | 2026-08-06 |
| `ADR-0227` | The OpenAPI contract declares response schemas without binding them | accepted | 2026-08-06 |
| `ADR-0228` | Dashboard authorization: enforce the RBAC roles serve already writes | accepted | 2026-08-06 |
| `ADR-0229` | Tenant scoping for the serve read path | accepted | 2026-08-06 |
| `ADR-0230` | Secure-by-default deployment posture: the Helm chart stops defaulting to --insecure | accepted | 2026-08-06 |
| `ADR-0231` | Dashboard audit enrichment — actor, state transitions, and denials on the shipped ADR-0191 egress | accepted | 2026-08-06 |
| `ADR-0232` | URL-serialized view state and a filter grammar with observed-value autocomplete | accepted | 2026-08-06 |
| `ADR-0233` | Three-way filter scope over the capsule tree: node, root, tree | accepted | 2026-08-06 |
| `ADR-0234` | Aggregate strip above tables, and the honest-degradation rule for every aggregate | accepted | 2026-08-06 |
| `ADR-0235` | Widgets and dashboards as portable versioned JSON, with a nova dashboard CLI | accepted | 2026-08-06 |
| `ADR-0236` | Chart-from-table promotion and a generic Ratio metric primitive | accepted | 2026-08-06 |
| `ADR-0237` | Evaluator runs are themselves Run Capsules: a score you can replay | proposed | 2026-08-06 |
| `ADR-0238` | One comparison surface for every comparable object | proposed | 2026-08-06 |
| `ADR-0239` | Evidence cart: collect while investigating, export one signed bundle | accepted | 2026-08-06 |
| `ADR-0240` | The serve/ dashboard API gets a declared, conformance-derived OpenAPI contract | accepted | 2026-08-07 |
| `ADR-0241` | Transport security: first-party TLS everywhere, opt-in mTLS across the distributed spine | accepted | 2026-08-07 |
| `ADR-0242` | A durable, bounded background-job service — long-running work survives the process | accepted | 2026-08-07 |
| `ADR-0243` | Per-tenant KEK hierarchy with customer-managed keys (BYOK) and tenant-wide crypto-shred | accepted | 2026-08-07 |
| `ADR-0244` | Opt-in automated failover: Postgres-anchored leader lease with fencing tokens | accepted | 2026-08-07 |
| `ADR-0245` | Release channels, LTS designations, and support windows — the version-lifecycle contract | accepted | 2026-08-07 |
| `ADR-0246` | Privileged-action governance: step-up re-auth, sealed break-glass, access recertification | accepted | 2026-08-07 |
| `ADR-0247` | Jurisdiction-aware storage routing: residency enforced at the object-capsule-store router | accepted | 2026-08-07 |
| `ADR-0248` | A published performance SLO catalog — every number labelled gated, measured, or target | accepted | 2026-08-07 |
| `ADR-0249` | An air-gapped distribution bundle, verifiable fully offline | accepted | 2026-08-07 |
| `ADR-0250` | Introspect frameworks by shape, never by class identity | accepted | 2026-08-08 |
| `ADR-0251` | Bind the seal to the capsule on disk | accepted | 2026-08-27 |
| `ADR-0252` | A token nova serve issues must authenticate, and must not sit on disk in cleartext | accepted | 2026-08-27 |
| `ADR-0253` | DSSE envelopes go on the wire as standard base64, and are read back tolerantly | accepted | 2026-08-28 |
| `ADR-0254` | Test tiering: fix state leakage before buying speed | accepted | 2026-08-28 |
| `ADR-0255` | Experiment campaign design — what the papers claim, and what proves it | accepted | 2026-08-28 |
| `ADR-0256` | PROV-JSON export must include the run's own provenance | accepted | 2026-08-28 |
| `ADR-0257` | `create_app()` owns its mutable state | accepted | 2026-08-28 |
| `ADR-0258` | When the audit entry goes before the write, and when it does not | accepted | 2026-08-28 |
| `ADR-0259` | The sdist must not be able to carry the private tree | accepted | 2026-08-28 |
| `ADR-0260` | Ingest must preserve nested capsule paths | accepted | 2026-08-28 |
| `ADR-0261` | Redaction must not destroy digests, and replay counters must not overclaim | accepted | 2026-08-29 |
| `ADR-0262` | Capsule ingest must not block the worker event loop | accepted | 2026-08-29 |
| `ADR-0263` | The local bearer token is durable, and must be emitted as such | accepted | 2026-08-29 |
| `ADR-0264` | Papers portfolio and layout | accepted | 2026-08-29 |
| `ADR-0265` | The multi-cluster scheduler campaign (campaign 2) | accepted | 2026-08-29 |
| `ADR-0266` | Kuzu lineage storage format: one generic node table | accepted | 2026-09-01 |
| `ADR-0267` | Automated test tiers: the harness runs the tests, not the developer | accepted | 2026-09-02 |
| `ADR-0268` | Merkle log verification: the 200 ms target costs a guarantee, not an optimisation | accepted | 2026-09-04 |
| `ADR-0269` | A replay that never finished must not attest disagreement | proposed | 2026-09-04 |
| `ADR-0270` | A runner forwards an allowlist, never the submitting environment | accepted | 2026-09-10 |
| `ADR-0271` | The server never indexes a run: MetadataStore.register_run has no reachable caller | proposed | 2026-09-10 |
| `ADR-0272` | How the capture hooks reach a Kubernetes pod | proposed | 2026-09-10 |
| `ADR-0273` | Commercial model: the core stays Apache-2.0 | proposed | 2026-09-24 |
| `ADR-0276` | seal-latency-gate fails on the median and alarms on the p99 | accepted | 2026-10-01 |
| `ADR-0290` | Envelope v2: bind encrypted objects to their identity via AEAD associated data; refuse plaintext reads | accepted | 2026-10-01 |
| `ADR-0292` | NovaSeal RFC 3161 timestamping is opt-in — no default TSA, no implicit network call | accepted | 2026-10-02 |
| `ADR-0293` | OTLP logs ingest: span-less log records land in an append-only sidecar log store outside every capsule | accepted | 2026-10-02 |
| `ADR-0294` | Per-org usage budgets and request-time enforcement of the API-key workspace binding (ADR-0208 / ADR-0193 remainder) | accepted | 2026-10-02 |
| `ADR-0295` | Envelope strict mode and a digest-pinned legacy-object inventory (ADR-0290 open items 1 and 2) | accepted | 2026-10-02 |
| `ADR-0297` | NovaSeal verification correctness: DSSE v1 PAE, self-contained Merkle inclusion, bound RFC 3161 tokens | accepted | 2026-10-02 |
| `ADR-0298` | Thread scope propagation, google_adk per-invocation state, opt-in strict capture (amends ADR-0224) | accepted | 2026-10-02 |
| `ADR-0299` | One public website codebase; the product repo keeps only the embedded dashboard | accepted | 2026-10-08 |
| `ADR-0300` | Mocked replay substitutes MCP tool results and fails closed on divergence | accepted | 2026-10-08 |
| `ADR-0301` | Local sealing identity and first-run NovaSeal behaviour: explicit `nova seal init`, sealing stays opt-in | accepted | 2026-10-08 |
| `ADR-0303` | `nova diff` exit-code contract: 1 means only a difference was found, 2 means the comparison could not be made | accepted | 2026-10-09 |
| `ADR-0304` | Mocked replay serves async, streamed and Responses API model calls, reports live network, and generates its support matrix | accepted | 2026-10-09 |
| `ADR-0305` | Wire records under an SDK call are transport, not model calls | accepted | 2026-10-09 |
| `ADR-0306` | Mocked replay substitutes non-MCP tool results on owned boundaries only, and enforces replay.yaml tool_overrides inside the replayed process | accepted | 2026-10-09 |
| `ADR-0307` | Capsules record the runner, the image digest the runtime resolved, and the Slurm job context | accepted | 2026-10-09 |
| `ADR-0308` | Container eval suites require a user-supplied image and digest; no placeholder default | accepted | 2026-10-12 |
| `ADR-0309` | NovaSeal binds the signing intent inside the signed payload; an unsigned intent label is never reported as the intent | accepted | 2026-10-22 |
| `ADR-0310` | The evidence capsule Merkle root (RFC 6962 shape) commits to file paths — v2 leaves; v1 roots still verify | accepted | 2026-10-22 |
| `ADR-0311` | SLURM and LSF submit with a minimal environment; extra_env is the explicit opt-in (completes ADR-0270) | accepted | 2026-10-22 |
| `ADR-0312` | Maker-checker signatures are verified against a bound signer trust list; promote direct is policy-gated | accepted | 2026-10-22 |
| `ADR-0313` | NovaSeal log roots are versioned; v2 commits to tree size; v1 verifies only with tree_size | accepted | 2026-10-22 |
| `ADR-0314` | Per-subject DEK envelope encryption makes `nova pii erase` a real crypto-shred | accepted | 2026-10-22 |
| `ADR-0315` | Promote signatures require a pinned trust root; a seal bypass counts only from a trusted policy approver, for its own capsule, by its signed expiry | accepted | 2026-10-22 |
| `ADR-0316` | CI runs the unit suite as duration-balanced file shards with a proven partition; releases publish only from a commit whose CI passed | accepted | 2026-10-22 |
| `ADR-0317` | Each Alembic track keeps its own version table | proposed | 2026-10-23 |
