srmech — Architecture Decision Records (ADR)¶
This directory holds the Architecture Decision Records for srmech (Stored-
Relationship Mechanism). Format follows the srmech-family ADR-NNNN convention:
one file per decision, small and scoped, never monolithic. Each ADR captures
one decision as Status / Context / Decision / Consequences; the discipline
ADRs forward-link the project-memory topic files they consolidate — the
breadcrumb-web discipline, so a decision survives even when the notes are not in
context.
Index¶
| ID | Title | Status | Date |
|---|---|---|---|
| ADR-0001 | The srmech profile pattern — domain-specific extension as configuration | 🟢 Implementing | 2026-05-14 |
| ADR-0002 | Catalog-as-computation — primitive-class closure, plugins as optimization backends | ⏳ Draft | 2026-05-16 |
| ADR-0003 | C-host-standalone — never assume a Python environment (C↔Python parity) | ✅ Accepted | 2026-07-16 |
| ADR-0004 | Config-driven, domain-agnostic surface — classes, chains, catalogs, and names in TOML | ✅ Accepted | 2026-07-16 |
| ADR-0005 | No external mathematics library — srmech is its own math library | ✅ Accepted | 2026-07-17 |
| ADR-0006 | Carrier discipline — exactness, sign, format, and bounded memory | ✅ Accepted | 2026-07-17 |
| ADR-0007 | Release engineering — version SSOT, rc-first, the registry ripple, HAL/PAL, JPL | ✅ Accepted | 2026-07-17 |
| ADR-0008 | Operator-chain DSL — Phase 1 schema specification | ✅ Accepted | 2026-05-16 |
| ADR-0009 | Multi-implementation parity — the capability is the invariant, each implementation is a coherency projection (amends 0003) | ✅ Accepted | 2026-07-19 |
| ADR-0010 | srmech namespace declustering — amsc is the attestation framework, not the dumping ground |
🟢 Implementing | 2026-07-23 |
| ADR-0011 | One encoding per datum — the genome has no cache (biology re-derives; a cache lives outside the genome or not at all) | ✅ Accepted | 2026-07-26 |
| ADR-0012 | The introspect surface IS the API contract — autonomous composition, not documentation | 🟢 Implementing | 2026-07-30 |
| ADR-0013 | The explanation surface — srmech's self-information layer (extends 0012) | 🟢 Implementing | 2026-08-06 |
Status legend: ✅ Accepted · 🟢 Implementing · 🔄 Proposed · ⏳ Draft · 🗑 Superseded.
Conventions¶
- Filename:
NNNN-kebab-title.md; the number is permanent (append-only). - Status lifecycle: ⏳ Draft / 🔄 Proposed → 🟢 Implementing → ✅ Accepted → 🗑 Superseded
(
Superseded-by: NNNN). An "Accepted — standing policy" ADR governs every rc, op, and review. - 🟢 Implementing — the fifth state, and why it exists. Direction accepted,
execution arc OPEN, shape still being learned. An ADR here is deliberately
revisable: it may be amended in place as the build teaches it what it actually
is, without needing to be SUPERSEDED merely to change. That is the whole
point — user direction, 2026-08: "we wanted to keep it plyable until we knew
the shape to fully define it. to prevent many superseeded ADRs." An ADR is
promoted to ✅ Accepted once its shape has settled into standing policy.
Before rc409 this state had no glyph, so an ADR in it had to either overclaim
✅ or underclaim 🔄; two ADRs improvised 🟢 and used it to mean two different
things.
tests/test_adr_status_coherence_rc409.pynow holds file header ↔ index row ↔ legend to strict equality. **Clauses:** audited | unaudited— a header field beside**Status:**, on every ADR, and a three-valued distinction rather than a two-valued one. An ADR with no clause table has not had its clauses READ; that is a different condition from having clauses that are open, and until rc417 the two were indistinguishable. Ten of thirteen ADRs were in the first condition invisibly.audited— the ADR's clauses are enumerated in a clause table: a markdown table whose header carries the three columnsclause·instrument·status(extra columns are fine).tests/test_adr_clause_instrument_rc417.pythen checks it.unaudited— nobody has enumerated them yet. The typed status is not challenged; the ADR is counted, in a populationCEIL_UNAUDITED_ADRSdrains down-only, the same shapeCEIL_WIRE_GLUE_GAPSused to walk 11 → 0.- An
instrumentcell names a pytest NODE ID,tests/<file>.py::<test_name>— not a file. A file-valued pointer stays green when the test inside it is renamed or deleted; a node id is checked for the file and fordef <name>(, so deleting the test breaks the ADR. That is the only version of a citation worth more than the verdict it replaces. - What this does NOT do, stated so nobody inherits a larger claim: a derived status does not remove typing. It demotes what is typed from a VERDICT to a POINTER. A human still writes "this clause is gated by X". The gain is that a pointer is falsifiable and a verdict is not.
- Demotion is derived and mandatory; promotion is permitted and never forced. Any open clause ⇒ the ADR must not be ✅ (strict zero). All clauses settled ⇒ ✅ is offered, and a human confirms it with the same two-surface edit rc409 forces — because a derivation proves "every clause I can see is satisfied" and can never prove "the clause set is complete", which is what ✅ actually asserts.
- Amendment: an ADR may amend another without superseding it (
Amends: NNNNin the header; the amended ADR carries anAmended-bynote). Both stay Accepted and in force; the amending ADR states in its body exactly which clause it revises and why. ADR-0009 amends ADR-0003 §2.6 — the first use of this relation. - Sources footer: the discipline ADRs (0005–0007) link the project-memory topic files they consolidate, preserving the trail.
- Companion artifacts share an ADR's number with a distinct extension — they are
NOT separate ADRs.
0001-profile-pattern.schema.jsonis the machine-readablesrmech_profile.tomlv1 schema that ADR-0001 defines (not a second ADR-0001). - Numbering note: the only genuine number collision (two different ADRs both
named
0002) was resolved 2026-07-17 by renumbering the operator-chain schema to0008; older CHANGELOG / design-note references to0002-phase-1-operator-chain-schemaresolve to0008.
Scope note¶
These are algebra / eigenbasis / cyclic-group / spectral side decisions (the framework-research + library-engineering discipline). They do not cover CAD / fabrication / mechanical geometry — out of scope per the CAD-grade ban carried from the parent monorepo.
Related¶
docs/srmech/c/JPL_AUDIT.md— the Power-of-Ten audit referenced by ADR-0007.docs/srmech/notes/— design notes + spikes behind several ADRs (e.g. the Phase 1 operator-chain DSL design note behind ADR-0008).