outcomeAdopted runnable registrars are committed
spec:decisions.adopted-registrars-committedPacks: pack:self-hosting-v1
Design: no design entries · no pinned declarations · no decisions
Findings: no errors, no warnings
specs/decisions/adopted-registrars-committed.sdp.md
No open questions and no blocking questions; implementation binding none, verifier binding none, and expected-outcome oracle none.
Intent
- Make an authored test's generated registrar dependency reviewable and available before generation without pretending every generated registrar is source.
Decision
context- Runnable registrars are derived siblings of authored tests. Most remain ignored, but an authored test that imports one cannot typecheck or execute from a clean checkout unless that adopted sibling is present or generation runs first.
decision- A registrar becomes adopted when tracked authored code imports it. Adopted registrars are committed and byte-checked against fresh generation; unadopted registrars remain ignored, regenerable output. A deterministic generated manifest owns reconciliation for both groups without turning registrar content into authored truth.
rationale- This is hard to reverse once adopter tests depend on clean-checkout imports. It is surprising without context that one derived sibling is tracked while its unadopted peers are ignored. It is a real trade-off: committing adopted bytes adds review noise and requires a falsifiable equality gate, while ignoring them all makes authored imports depend on an unrecorded generation precondition.
consequences--check-cleanrefuses manifest or sibling-byte drift, preflight compares tracked worktree and Git-index bytes with independent regeneration, and stale manifest-owned siblings are removed.- Tracking a registrar confers no delivery fact or migration claim; its
specTestanchor remains the only verifier-binding source.
alternatives- Ignore every registrar and require generation before typecheck or test discovery; this keeps git smaller but makes an authored import unavailable in a clean checkout.
- Commit every registrar; this is mechanically simple but turns unadopted migration candidates into persistent review noise.
Verification
Verifier bindings
No verifier binding recorded.
Design view
Requirement drawing
- Declared verifying examples: no declared verifying example.
- Satisfying or referencing units: no recorded binding.
- Test or oracle bindings: no recorded binding.
Arrows: refines (declared).
The diagram as text
- spec:decisions.adopted-registrars-committed: Adopted runnable registrars are committed · declared Spec
- spec:extraction.runnable-modules: Derived runnable modules freeze the registrar interface · declared Spec
- spec:decisions.adopted-registrars-committed refines spec:extraction.runnable-modules · declared
Mermaid source
Copyable source; the Studio draws static SVG.
Preferred and chosen syntax: requirementDiagram; exact refines, satisfies and verifies, with claim words in nodes and per-edge comments.
Decisions
No decision record named.
Runtime
No implementation neighborhood recorded.
Runtime observation: not tracked.
Evidence
Runtime observation: not tracked.
Build attestations: not tracked.
Deployments: not tracked.
Bills of materials: not tracked.
Impact
- E2: decidedBy · declared
The diagram as text
- spec:decisions.adopted-registrars-committed: Adopted runnable registrars are committed
- spec:extraction.runnable-modules: Derived runnable modules freeze the registrar interface
- spec:decisions.adopted-registrars-committed refines spec:extraction.runnable-modules · declared
- spec:extraction.runnable-modules decidedBy spec:decisions.adopted-registrars-committed · declared
Mermaid source
Copyable source; the Studio draws static SVG.
Preferred syntax: flowchart. Chosen syntax: labelled flowchart, preserving exact relations, claims and folds.
Rests on
- refines · spec:extraction.runnable-modules · stated ready, floor ready
Rested on by
Distance 1
- spec:extraction.runnable-modules
Implementing units
component:protocol.codegen·src/codegen/contracts.ts:633component:protocol.testing·src/testing/index.ts:38impl:protocol.example-testing-helpers·src/testing/index.ts:50impl:protocol.runnable-modules·src/codegen/contracts.ts:658
Referencing units
None.
Enabled verifiers: test:protocol.runnable-modules, test:protocol.runnable-modules-generation, test:protocol.runnable-modules-types
Relations
| Relation and direction | Other end | Claim | Reason | Exercised keys |
|---|---|---|---|---|
| refines · outgoing | Derived runnable modules freeze the registrar interfacespec:extraction.runnable-modules · resolves | declared | None | None |
| decidedBy · incoming | Derived runnable modules freeze the registrar interfacespec:extraction.runnable-modules · resolves | declared | None | None |
Bindings
Implementation binding: none
Design reference: none
Verifier binding: none
Expected-outcome oracle: none
Runtime observation: not tracked.
Run results: not recorded in the graph.
Findings
None.
Composing (0)
Composing needs the script.