Skip to main content
manual page/ ADRs

Architecture Decision Records

sourceSource: suspec/docs/adrs/README.mdModified: 2026-06-30
Sections
3
Format
Markdown
Order
38 / 156

Most users do not need to read these. ADRs document why Suspec is shaped the way it is — the decision history, including supersessions, lives here and only here.

Each ADR is a dated, immutable record of one load-bearing decision — its context, the decision, and its consequences — so a fork can judge whether the choice still fits. The full truth of any decision is the chain of ADRs that touch it, not the latest one alone.

This ledger is the index. It carries a row for every ADR — kept, amended, already-superseded, and new — with its current disposition. (The §N markers throughout this ledger and the topic tables below reference the historical kernel spec — a monolithic document since folded into docs/; they are retained as decision-provenance, not live links.)

Governance (Nygard immutability)

An accepted ADR MUST NOT be edited in place. "Amending" a decision means publishing a new, superseding ADR; the original keeps its body and gains only a Superseded by ADR-NNNN status line. Rewriting an ADR destroys the historical record that makes the chain auditable.

Two consequences of that rule govern this ledger:

  • Numbers 0011 and 0012 are intentionally vacant — vacated in an earlier consolidation and left unfilled so references to higher numbers do not shift.
  • The pre-kernel ADRs (00010026) are immutable history. Their bodies still name the pre-kernel vocabulary and paths (scaffold/, personas/, the consolidated SKILL.md, the earlier flow-graph) as they were decided. Those bodies are not subject to the kernel's active-construct rules (the §34 / A19–A28 retirements) — those rules govern canonical/active prose, not the historical record. The current truth of any amended decision is its superseding 0027+ ADR; read the chain, not the earlier body in isolation.

The ledger

ADRTitleDisposition
0001Four core document typesKept — recast onto the unified artifact set by 0030
0002Personas pair 1:1 with task typesSuperseded by 0020; the persona model it sits in was later recast by the profile × pass model (0036, §27.4); persona shipping partially superseded by 0064
0003Distillation flows downhill onlyKept
0004Task files are gitignoredSuperseded by 0060 — tasks are committed workspace flow artifacts
0005Template placeholder syntax {{name}}Kept
0006Skeptic mindset on fix tasksAmended → Superseded by 0036 (Skeptic is a profile on fix/review passes)
0007Bug report is diagnosis-onlyKept — the epistemic-stance invariant of the bug-report.md source artifact (§29)
0008Empirical proof is framework-levelKept
0009Personas are mindsets, not org rolesAmended → Superseded by 0036 (personas become heuristic profiles); partially superseded by 0064 (personas fold into focused guides)
0010Writes single-thread through orchestratorKept — preserved by the write-surface model (0039)
0011(intentionally vacant)
0012(intentionally vacant)
0013Iron law + red-flags persona formatAmended → Superseded by 0036 (iron law → a profile's ## Refuses table, §27.2)
0014Delegation vs internal recursionKept
0015Framework versioning for consumersKept, extended by 0041 — scoped to the package axis; the language axis is added alongside (§25); spec-file versioning clauses superseded by 0058 (specs carry no language version)
0016Skill bodies are self-containedKept — governs pass-guide bodies (§26)
0017No always-loaded skillsKept — pass guides and profiles are lazily loaded (§26.4, §31)
0018Commands resolve through the AGENTS.md contractAmended → Superseded by 0038 (VERIFY BY adapters resolve through AGENTS.md > Commands)
0019Personas ship as individual skillsAmended → Superseded by 0036 (a standalone file is one carrier option, §27.1); partially superseded by 0064 (persona shipping model)
0020Activation by self-assessmentAmended → Superseded by 0037 (doctrine is "load what the task names"; description-match is the fallback)
0021Verification contractKept — a verification layer of the single SOL VERIFY BY model (§15)
0022Acceptance criteria are executable checksKept — a verification layer of the SOL VERIFY BY model (§15)
0023Harness-enforcement contractKept — a verification layer of the SOL VERIFY BY model (§15)
0024Self-reviewed vs independently-reviewed confidence tiersAmended → Superseded by 0035 (tiers map onto the 7-value verdict taxonomy)
0025Orchestration coordination artifactAmended → Superseded by 0039 (owned/forbidden paths → the lowered write-surface)
0026Machine-readable conformance contract + fixturesKept — a verification layer of the SOL VERIFY BY model (§15); realized by the golden fixture set (0033); refined by 0063; validity clauses partially superseded by 0066
0027SOL is the obligation languageNew (kernel) — §5, §6; partially superseded by 0058 (SOL becomes the optional stricter surface, a notation)
0028APS is the prose standardNew (kernel) — §7; partially superseded by 0058 (APS becomes advisory writing rules)
0029The 9-pass compiler modelNew (kernel) — §9; refined by 0057 (nine steps become the advanced lifecycle); per-kind routing clauses partially superseded by 0068
0030The unified artifact setNew (kernel) — §20, §29
0031The source-authority two-axis modelNew (kernel) — §22
0032The memory modelNew (kernel) — §23
0033The golden fixture setNew (kernel) — §33; refined by 0065; suspec framing superseded by 0066
0034The unified SOL-<LAYER><NNN> lint namespaceNew (kernel) — §8
0035The 7-value verdict modelNew (kernel) — §14; supersedes 0024
0036Personas become heuristic profilesNew (kernel) — §27; supersedes 0006, 0009, 0013, 0019
0037Loading doctrine: load what the task namesNew (kernel) — §26.4; supersedes 0020
0038VERIFY BY adapters resolve through AGENTS.md CommandsNew (kernel) — §15, §31.3; supersedes 0018
0039The write-surface modelNew (kernel) — §18, §19; supersedes 0025
0040The kernel payload ships under starter-kit/New (kernel) — §20.5, §34.0 (rename from scaffold/, pulled forward from the v0.2 deferral)
0041Two-axis versioning (language axis + package axis)New (kernel) — §25; extends 0015; spec-file clauses superseded by 0058 (no per-file language version)
0042Skills carry as SKILL.md; conditioning ships as many standalone surgically-activated skillsNew (kernel) — §26, §27; refines 0016, 0017, 0019, 0029, 0036, 0037; refined by 0064; per-kind routing clauses partially superseded by 0068
0043Checkable documents — what is lintable, and with whatProposed / parked — direction only; no document-lint rule built yet (SOL-P is still spec-prose-only). Its backlog plan was retired (see git history)
0044The kernel is a derived, self-contained payload — docs/ is canonical for the language/passes twinsNew (kernel) — §20.5/§34; refines 0040; twin mechanism retired by 0051 (docs/ is now the sole canonical home)
0045Overlays are project-owned and live outside the replaceable kernel payloadSuperseded by 0049 — no overlays dir; conventions live in AGENTS.md
0046A task implementing a spec gets a worktree+branch; ad-hoc work stays in-placeNew (kernel) — §18; refines 0039; operationalizes 0010
0047Skills are self-contained; citations are provenance, not a required readNew (kernel, from suspec-cli adoption)refines 0016, 0042
0048The installed payload is the runtime surface, not the whole kernelSuperseded by 0049what to ship survives (skills + reference/ cards + templates), but it installs in place, not into a .suspec/kernel/ mount
0049Minimal install — .agents/, no mount, a small flow-based folder setNew (from suspec-cli adoption skeptic review)supersedes 0045, 0048; refines 0040, 0044; depends on 0047; flow folders shipped pre-built per 0069
0050Suspec is a spec-repo discipline; the code repo stays pristineNew (spec-repo topology)refines 0049, 0041; depends on 0047; §6 narrowly reversed by 0081 (the kit provenance stamp is re-adopted)
0051Complete the spec-repo pivot — one authoring kit, specs top-level, code skills as referenceNew (complete the pivot)refines 0050, 0048, 0042; retires the twin mechanism of 0044; refined by 0057; validity bar partially superseded by 0066
0052One artifact-home model — per-feature spec folders, one decisions/, memory for recallNew (cohesive scaffold, grounded)refines 0051, 0050; aligns with 0032, 0043; partially superseded by 0060 (hybrid workspace layout)
0053Suspec is a structured specification & review system (review-as-exceptions)New (grounded positioning)refines 0050, 0051, 0052; grounded by HARNESSBENCH/AHE/HAL/TERMBENCH/ORCHID/METR/DORA2025; refined by 0057; intake-directory deferral partially superseded by 0061
0054Drop the residual compiler vocabulary (complete the de-cosplay)New (honesty sweep)enforces 0053 §4 + Invariant 1 (NO RUNTIME) in the contract layer; grounded by the skeptic audit; tree-level register completed by 0070
0055Close the gate's soft-control gaps (empty-set coverage, adequacy gating for high-RISK, uncovered-bug amendment)New (close the soft-control gaps)refines 0053, 0043; grounded by the 10-aspect simulation audit + SWEBENCH-ADQ/UTBOOST
0056Adversarial self-review is a mandatory completion disciplineNew (dogfooding)refines the implement step + persona-skeptic + the working rules; reaffirms 0053's independence; grounded by REFLEXION
0057Practical-first repositioning and the six-step loopNew (repositioning)refines 0053, 0054, 0029; supersedes the naming clauses of 0049 §2
0058Two-tier spec format, one data modelNew (repositioning) — supersedes the spec-file clauses of 0041/0015; partially supersedes 0027, 0028
0059Frontmatter type: is the sole artifact discriminatorNew (repositioning) — supersedes the infix-partition model; refines 0030, 0054
0060The Suspec Workspace: hybrid layout, committed flow artifacts, the review packetNew (repositioning)supersedes 0004; partially supersedes 0052; refines 0049, 0050, 0032; layout shipped pre-built per 0069
0061The intake artifact and the Pull stepNew (repositioning) — refines 0030; partially supersedes 0053's intake deferral
0062Code-repo adapter: pristine today, gitignored CLI state when a CLI existsNew (repositioning) — reaffirms 0049, 0050
0063The honesty framework and the tooling boundaryNew (repositioning) — refines 0023, 0026, 0034, 0043, 0055
0064Minimal starter kit: core copy surface, advanced tier, focused guidesNew (repositioning) — partially supersedes 0019, 0002, 0009; refines 0042, 0036, 0047, 0056; adoption framing superseded by 0069 (kit copied whole)
0065Three flagship examples; the large-PR review is the demoNew (repositioning) — refines 0033; refined by 0071 (step bars score the examples); happy-path example genericized feature-from-jirafeature-from-ticket by #58 (de-Jira)
0066Checks: the adopter validity bar and the producer-internal reference valuesNew (repositioning) — partially supersedes 0026, 0051 validity clauses, 0033 framing; refines 0063; fixtures home renamed by 0070; scoring moved to step bars by 0071
0067Memory: findings first, the heavier machinery as an advanced modelNew (repositioning) — refines 0032
0068Inventory and Change Plan: the transformation tierNew (repositioning) — partially supersedes the per-kind routing clauses of 0029, 0042; refines 0030, 0046
0069The starter kit is a workspace, copied wholeNew (scaffolding) — refines 0064 (copy-checklist framing superseded by copy-the-folder), 0060, 0049
0070checks/ is the home of the checks contractNew (scaffolding) — completes 0054's register sweep at tree level; refines 0066
0071Step bars: the per-step quality bars are product referenceNew (scaffolding) — supersedes the standalone evals surface; refines 0065, 0066
0072The run summary digest and the DX format amendmentsNew (DX remediation) — partially supersedes 0060 (run-record addendum clause); refines 0064, 0066, 0070, 0063
0073The multi-repo workspace, named and finishedNew (multi-repo) — refines 0050, 0060, 0062, 0072
0074The repo family realized: producer workspace and skills catalogNew (family) — refines 0064, 0069, 0073
0075The starter kit ships as its own template repo; essential guides ship installedNew (family) — refines 0064, 0069, 0073, 0074
0076Worker provenance surface and the adoption-experience conventionsNew (adoption) — extends 0072; honors 0057, 0063; cross-links 0060, 0062
0077suspec-cli is a reconcile-only harness of composable partsNew (suspec-cli) — reframes [future-cli] as suggestive; refines 0054; builds on 0072, 0076; honors 0057, 0063
0078C002 (duplicate-id) exempts draft specs from cross-spec requirement-id reuseNew (checks) — clarifies 0066; honors 0063; requirement-id carve-out subsumed by 0080 (the cross-spec requirement-id clause is dropped; ids are spec-scoped); the frontmatter-id: clause and the draft-is-not-final principle survive
0079C012 (coverage): mint the deterministic review-coverage checkNew (checks) — enables SPEC-suspec-cli-m2-review; builds on 0077, 0078; honors 0063
0080Requirement ids are spec-scoped, not workspace-globalNew (checks) — supersedes part of 0078; honors 0063
0081Re-adopt the kit provenance stamp (narrow reversal of ADR-0050 §6)New (kit/cli) — narrowly reverses 0050 §6; honors 0063, 0077
0082Platform constraints are an advisory rule, not a new core sectionNew (docs) — builds on 0076; honors 0063
0083The structured-evidence format: binding a requirement's named Verify command to its recorded resultNew (checks/docs) — builds on 0077, 0079; honors 0063, 0080
0084Boundary-safe prepare verbs; narrow the board-mutating close to scaffold-onlyNew (cli) — narrows 0077 D1, reaffirms D8; honors 0063
0085suspec-mcp adapts the CLI's --json contract (shells out), not the core libraryNew (cli/mcp) — refines 0077 D1a, reaffirms D8; honors 0063
0086Deterministic review scanning is the shipped reconcile wedge: accept C014, gate the measurement track, reject the off-boundary asksNew (checks/docs/cli) — refines 0077 D7/D8, builds on 0079, 0083; honors 0060, 0063
0087Mint C015 citation-resolves: the inline [[KEY]] anchor check (toolable, fact-not-verdict, measured before shipping)New (checks/docs/cli) — surfaces a fact not a verdict (0077 D8); toolable not enforced (0063); the 0086+C014 mint precedent
0088Delegation provenance: a reviewable trace when an agent delegates to a subagent (neutral contract, runner-specific producers, fact-not-verdict)New (canon → cli/kit) — extends 0076, honors 0077 D8 + 0063
0089The decision handoff: an ## Open decisions section that frames an open decision for the human (convention, fact-not-verdict, evidence-grounded)New (canon → kit) — extends 0060, honors 0077 D8 + 0063
0090C015 tier-checks stay deferred: no high-precision form exists pre-measurement; the Rejected case is already covered by an invariantNew (canon) — refines 0087 D4; honors 0063, 0086 D3
0091suspec update: a reconcile-only kit refresh — ship --check, defer the mergeNew (canon → cli) — reopens 0081 narrowly; honors 0077 D8 + 0063
0092suspec-agents: a Claude-Code-first member of self-contained, useful worker definitions (records, never an executor; toolable-not-enforced)New (canon → suspec-agents/kit) — supersedes 0088's producer-2 destination; honors 0077 D8 + 0063
0093Collapse the 1:1 authoring personas; the catalog ships only cross-cutting stancesNew (canon → catalog/kit/website) — refines 0042 + 0064; honors 0063
0094Decomposition into small untangled units; review scrutiny weighted by diffusion, churn, and change-typeNew (canon → docs/kit) — honors 0063; the oversized-packet check is a suspec-cli follow-up (suspec-works #61)
0095Ground the review model in evidence: maintainability-first value, independent distinct-lens reviewers, participation as the gate, agent-runs-the-app as evidenceNew (canon → docs/suspec-agents) — honors 0063, reinforces 0056; no format change (0058/0089 stand)
0096Artifact lifecycle at scale: durable-vs-ephemeral records, status + supersede, retention, freshness, and anti-duplicationNew (canon → docs/kit) — honors 0063; the supersede/index check is a suspec-cli follow-up (suspec-works #61)
0097Mint C016 (pass-needs-evidence) + C017 (orphaned-reference); the oversized-packet band is specified-not-shipped (measured)New (canon → cli) — honors 0063 + 0086; resolves the 0094/0096 toolables
0098Portability: ship a Codex emitter + the universal AGENTS.md discipline; drop AntigravityNew (canon → cli + suspec-agents) — narrows 0092; honors 0063 + 0077
0099Review-lead orchestration, agent role routing, and reviewer ≠ implementerNew (canon → docs/suspec-agents)refines 0095; reaffirms 0056; honors 0063
0100Spec-external, ops-local: resolve the implementer straddle without committing ops artifactsNew (canon → docs/kit)extends 0062/0050; reaffirms 0099
0101Open decisions carry options + a recommendation, in decision-bearing authoringNew (canon → kit) — reaffirms 0089, 0058, 0098
0102Lean the artifact surface: intake is an optional pointer; reference material single-sources to docsNew (canon → docs/kit) — reaffirms 0096; from RFC-lean-artifact-set
0103The spec is a living form; the task is an on-demand split sliceNew (canon → kit) — refines 0058/0030/0079; reaffirms 0056/0099/0100
0104Ephemeral by default: gitignore the working set, commit only durable truthNew (canon → kit) — reverses 0060; amends 0096; builds on 0103
0105Stretch and collapse: the artifact set is a dial, not a set of stationsNew (canon → kit) — refines 0064; builds on 0103
0106Keep-clean tooling: make zero-noise structural, not a conventionNew (canon) — realizes 0096; composes 0104/0105
0107Fast-track solo review via staleness detection, not an agent verdictNew (canon) — reaffirms 0077 / 0056; reuses the Stale marker
0108Living specs: an Active container with per-requirement supersession, kept lightweightNew (canon) — refines 0103/0058/0096; ungates 0106
0109Output economy: a readable, economical agent-output convention (a floor, not a hook)New (canon → kit) — refines 0057; honors 0063/0077
0110The ## Execution entry is a structured change-record (a durable evidence digest)New (canon → kit/cli) — refines 0103/0108; extends 0107
0111Kit skills are Suspec concepts; style / stance / depth lives in the catalogNew (canon → kit/catalog) — refines 0064/0075; reaffirms 0093
0112Two-tier skills: a framework-free universal catalog, a Suspec-coupled kitNew (canon → kit/catalog) — refines 0111/0064; reaffirms 0105
0113Citations live in docs, not in products (the product-vs-docs boundary)New (canon → all repos) — refines 0111/0112; honors 0063
0114A retired/relocated-artifact registry + cross-repo reference linterNew (canon) — accepted — references 0112
0115Synced workspace catalogs must be links or freshness-gated (no orphaned copies)New (canon → kit/works) — refines 0064
0116Shipped-spec invariant + status/spec coherence checkNew (canon → cli) — accepted — refines 0108/0110
0117No count-bearing ranges in bootstrap/reference prose — link-only pointersNew (canon) — single-sourcing corollary; relates 0108
0118Numeric/adoption claims must be ground-truthed by live query, not voted from recallNew (canon → workflows) — honors 0063
0119Independent review is the invariant; the formal review is risk-weightedNew (canon → docs/site) — refines 0094; relates 0056/0105
0120Re-baselining: reconciling when reality has drifted from the artifactsNew (canon) — extends 0068/0103/0108; relates 0096/0116

The new kernel ADRs (0027+), by topic

The initial rework introduced sixteen ADRs (00270042); four follow-on decisions (00430046) refine the installable kernel's shape and are covered below and in the ledger above. Of the initial sixteen, the nine the spec enumerates as mandatory kernel decisions (§30.3) record decisions that must not be left implicit in prose:

ADRRecordsSpec
0027SOL is the single home of obligation semantics§5, §6
0028APS is the controlled-prose standard around SOL§7
0029author → lint → improve → lower → decompose → implement → verify → review → promote§9
0030the kernel artifact set incl. trace, VERDICT block, finding, memory§20, §29
0031domain axis × artifact axis, lexicographic§22
0032two-tier, provenance-anchored promotion§23
0033positive + negative conformance fixtures over the three domains§33
0034one prefix, five layers; APS violations surface under the SOL- prefix, not a separate APS- code prefix§8
00354 core + 3 lifecycle verdicts§14

The remaining seven carry the Group-B recasts, the kernel-rename/versioning extensions, and the skill-carrier packaging refinement: 0036 (profiles, §27), 0037 (loading doctrine, §26.4), 0038 (the VERIFY BY/Commands binding, §15/§31.3), 0039 (the write-surface, §18/§19), 0040 (the starter-kit/ payload, §20.5/§34), 0041 (two-axis versioning, §25), and 0042 (skills carry as SKILL.md + standalone surgically-activated conditioning, §26/§27; refines 0016, 0017, 0019, 0029, 0036, 0037).

The kernel spec required a conformant repo to carry these ADRs (or equivalents) so the chain would explain why the obligation language, prose standard, pipeline, artifact set, authority model, memory, suspec, lint namespace, and verdict set had their shape — historical context; the current validity bar is the one in checks (per 0066).

0043 is proposed / parked — it records a direction (keep obligation-blocks spec-only; give other agent docs a subtractive, deterministic, advisory check surface) but builds no lint rule and changes nothing in the live lint pass. It is design intent, not an in-force decision; its backlog plan was retired with the practical-first repositioning (see git history).

0044 settles the shape of the installable payload: docs/ is the single canonical source for the language/ and passes/ twins and the kernel is a derived, checked, self-contained copy that resolves offline (no §N/Appendix-X refs to unshipped documents, no links into docs-only trees). The kernel is derived by mechanical rewrites (strip citations/§-refs, rewrite links to resolve offline) and kept honest by an eyeball-diff on edit + a grep-based coherence gate — refining the kernel-payload decision (0040). The one-time reconciling merge it authorized (the K2 work) is done.

Starter kit: Set up a workspace