Spec Studio

Adopted runnable registrars are committed

spec:decisions.adopted-registrars-committedDecision Record · featureready floor ready

Packs: 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
outcome
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-clean refuses 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 specTest anchor 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.
Requirement drawing for spec:decisions.adopted-registrars-committed

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
Relations of spec:decisions.adopted-registrars-committed
  • 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

Rested on by

Distance 1

Relations

Relation and directionOther endClaimReasonExercised keys
refines · outgoingDerived runnable modules freeze the registrar interface
spec:extraction.runnable-modules · resolves
declaredNoneNone
decidedBy · incomingDerived runnable modules freeze the registrar interface
spec:extraction.runnable-modules · resolves
declaredNoneNone

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.