Spec Studio

Spec sections carry typed detail and direct verifier semantics

spec:model.spec-sectionsDomain Model · featureready floor ready

Packs: pack:self-hosting-v1

Design: no design entries · no pinned declarations · 5 decisions

Findings: no errors, 1 warning

specs/model/spec-sections.sdp.md

No open questions and no blocking questions; implementation binding present, verifier binding none, and expected-outcome oracle none.

Intent
outcome
Extend Specs with local detail without weakening their envelope or confusing binding evidence with intent.
Model
section line 22 · specs/model/spec-sections.sdp.md:22
An optional detail slice of a Spec: intent, behavior, constraints, model, design, decision, verification, or ui.
typing law line 23 · specs/model/spec-sections.sdp.md:23
Every section read by a readiness-floor clause has a closed typed shape; unsettled design and ui surfaces remain open bags.
content-only section line 24 · specs/model/spec-sections.sdp.md:24
A section carries local content, while relations carry links to promoted standalone Specs.
promotion line 25 · specs/model/spec-sections.sdp.md:25
Moving shared or independently reviewed content into a standalone Spec of the matching kind, exclusively rather than alongside inline content.
comment promotion line 26 · specs/model/spec-sections.sdp.md:26
Source commentary that states rules other surfaces depend on is a promotion trigger: those rules promote into a standalone Spec under the promotion law, and the comment demotes to local commentary plus a Spec pointer; restating the promoted rules in the comment violates exclusive promotion.
verifies line 27 · specs/model/spec-sections.sdp.md:27
A direct verifier-to-target relation whose enabled test binding can derive has-verifier only for that stated target.
enabled verifier line 28 · specs/model/spec-sections.sdp.md:28
A verifying example backed by a linked, resolvable test anchor; a test anchor that verifies a Spec directly confers has-verifier without being an enabled verifier, and runner execution and pass state stay outside the graph.
verification mode line 29 · specs/model/spec-sections.sdp.md:29
Authored intended posture such as executable; it never stands in for the derived enabled-verifier realization.
Verification

Verifier bindings

No verifier binding recorded.

Design view

Requirement drawing

Requirement drawing for spec:model.spec-sections
The diagram as text
  • spec:model.spec-sections: Spec sections carry typed detail and direct verifier semantics · declared Spec
  • spec:decisions.content-only-sections: Sections carry content while relations carry links · declared Spec
  • spec:decisions.point-per-example: Each example binds one point · declared Spec
  • spec:decisions.typing-law: Floor-read sections are closed typed shapes · declared Spec
  • spec:decisions.verification-posture-not-realization: Verification mode states posture, not realization · declared Spec
  • spec:model.open-question-keys: An open question may carry a key that addresses it · declared Spec
  • spec:model.rule-keys: A rule or flow entry may carry a key that addresses it · declared Spec
  • spec:model.term-addresses: A Model term may carry a key that addresses it · declared Spec
  • spec:model.open-question-keys.keyed-question-resolves: A keyed question is reified and its address resolves · declared Spec
  • spec:model.open-question-keys.renamed-key-breaks: A renamed question key fails the mention that addresses it · declared Spec
  • spec:model.open-question-keys.repeated-key-refused: A repeated question key refuses its carrier · declared Spec
  • spec:model.term-addresses.keyed-term-resolves: A keyed term is reified and its address resolves · declared Spec
  • spec:model.term-addresses.malformed-term-marker-refused: A term marker whose key is off the grammar refuses its carrier · declared Spec
  • spec:model.term-addresses.repeated-term-key-refused: A term key repeated in one Spec refuses its carrier · declared Spec
  • spec:model.term-addresses.typescript-term-imports-keyed: A keyed TypeScript term keeps its address through import to Markdown · declared Spec
  • spec:model.term-addresses.unknown-term-key-refused: An address that names a term key no term carries is an error · declared Spec
  • spec:model.open-question-fields: An open question may name who decides it, its links, a provisional reading and a re-entry trigger · declared Spec
  • spec:model.core-model: The Protocol models delivery with one enrichable Spec · declared Spec
  • impl:protocol.address-and-cycle-recipes: asserts realization of the shipped address resolution and dependency cycle recipes · anchored code · test/recipes.test.ts:3568
  • impl:protocol.authoring-grammar-recipes: asserts the authoring grammar's realization in docs/agent-surface/recipes.md · anchored code · test/recipes.test.ts:6597
  • impl:protocol.authoring-normalization: normalizes rule markers and question fields after carrier reification · anchored code · src/extract/authoring-normalization.ts:8
  • impl:protocol.entry-locations: builds the carrier entry location table · anchored code · src/extract/derive.ts:78
  • impl:protocol.key-markers: normalizes step and term markers across the three carriers · anchored code · src/extract/key-markers.ts:136
  • impl:protocol.open-question-keys: reads an open question's optional key from its Markdown marker and refuses a bad or repeated key · anchored code · src/extract/markdown-body-owner-behavior.ts:38
  • impl:protocol.open-section-order: preserves authored open-section and model-term order and Pack field order · anchored code · src/extract/serialize.ts:105
  • impl:protocol.prose-mentions: checks that prose mentions resolve and warns once per unbacked Spec pair · anchored code · src/validate/validators.ts:1370
  • impl:protocol.register-recipes: asserts realization of the shipped register recipes · anchored code · test/recipes.test.ts:2057
  • impl:protocol.rule-exercises: checks the keys named by declared verifies relations · anchored code · src/validate/validators.ts:1479
  • impl:protocol.sdp-import-markdown-emit: emits the Markdown document twin for an imported Spec · anchored code · src/import/emit-markdown.ts:253
  • impl:protocol.spec-sections: typed Spec section shapes · anchored code · src/model/sections.ts:138
  • impl:protocol.stable-ids: stable ID grammar parser · anchored code · src/ids.ts:173
  • impl:protocol.static-reification: reifies authored carriers from the AST and never evaluates them · anchored code · src/extract/reify.ts:2139
  • impl:protocol.verifier-semantics: readiness clauses over direct verification bindings · anchored code · src/validate/readiness-floor.ts:593
  • oracle:protocol.open-question-keys: expected reification, question keys and mention errors by the key rules · anchored oracle binding · test/self-hosting-open-question-keys.test.ts:49
  • test:protocol.authoring-grammar: checks rule keys, question fields and relation reasons across the carriers · anchored test binding · binding present · test/authoring-grammar.test.ts:24
  • test:protocol.authoring-grammar-recipes: executes the shipped question, mention, entry, address and rule coverage recipes · anchored test binding · binding present · test/recipes.test.ts:6587
  • test:protocol.keyed-content: test:protocol.keyed-content · anchored test binding · binding present · test/keyed-content.test.ts:28
  • test:protocol.open-question-keys.keyed-question-resolves: verifies a keyed question is reified and its question address resolves · anchored test binding · binding present · test/self-hosting-open-question-keys.test.ts:329
  • test:protocol.open-question-keys.renamed-key-breaks: verifies a renamed question key fails the mention of its old address · anchored test binding · binding present · test/self-hosting-open-question-keys.test.ts:343
  • test:protocol.open-question-keys.repeated-key-refused: verifies a repeated question key refuses its carrier whole · anchored test binding · binding present · test/self-hosting-open-question-keys.test.ts:357
  • test:protocol.term-addresses.keyed-term-resolves: test:protocol.term-addresses.keyed-term-resolves · anchored test binding · binding present · test/self-hosting-term-addresses.test.ts:16
  • test:protocol.term-addresses.malformed-term-marker-refused: test:protocol.term-addresses.malformed-term-marker-refused · anchored test binding · binding present · test/self-hosting-term-addresses.test.ts:63
  • test:protocol.term-addresses.repeated-term-key-refused: test:protocol.term-addresses.repeated-term-key-refused · anchored test binding · binding present · test/self-hosting-term-addresses.test.ts:110
  • test:protocol.term-addresses.typescript-term-imports-keyed: test:protocol.term-addresses.typescript-term-imports-keyed · anchored test binding · binding present · test/self-hosting-term-addresses.test.ts:157
  • test:protocol.term-addresses.unknown-term-key-refused: test:protocol.term-addresses.unknown-term-key-refused · anchored test binding · binding present · test/self-hosting-term-addresses.test.ts:204
  • spec:decisions.content-only-sections refines spec:model.spec-sections · declared
  • spec:decisions.point-per-example refines spec:model.spec-sections · declared
  • spec:decisions.typing-law refines spec:model.spec-sections · declared
  • spec:decisions.verification-posture-not-realization refines spec:model.spec-sections · declared
  • spec:model.open-question-fields refines spec:model.open-question-keys · declared
  • spec:model.open-question-keys refines spec:model.spec-sections · declared
  • spec:model.open-question-keys.keyed-question-resolves refines spec:model.open-question-keys · declared
  • spec:model.open-question-keys.keyed-question-resolves verifies spec:model.open-question-keys · declared
  • spec:model.open-question-keys.renamed-key-breaks refines spec:model.open-question-keys · declared
  • spec:model.open-question-keys.renamed-key-breaks verifies spec:model.open-question-keys · declared
  • spec:model.open-question-keys.repeated-key-refused refines spec:model.open-question-keys · declared
  • spec:model.open-question-keys.repeated-key-refused verifies spec:model.open-question-keys · declared
  • spec:model.rule-keys refines spec:model.spec-sections · declared
  • spec:model.spec-sections refines spec:model.core-model · declared
  • spec:model.term-addresses refines spec:model.spec-sections · declared — extends entry addresses to the terms a Model section defines
  • spec:model.term-addresses.keyed-term-resolves refines spec:model.term-addresses · declared
  • spec:model.term-addresses.keyed-term-resolves verifies spec:model.term-addresses · declared
  • spec:model.term-addresses.malformed-term-marker-refused refines spec:model.term-addresses · declared
  • spec:model.term-addresses.malformed-term-marker-refused verifies spec:model.term-addresses · declared
  • spec:model.term-addresses.repeated-term-key-refused refines spec:model.term-addresses · declared
  • spec:model.term-addresses.repeated-term-key-refused verifies spec:model.term-addresses · declared
  • spec:model.term-addresses.typescript-term-imports-keyed refines spec:model.term-addresses · declared
  • spec:model.term-addresses.typescript-term-imports-keyed verifies spec:model.term-addresses · declared
  • spec:model.term-addresses.unknown-term-key-refused refines spec:model.term-addresses · declared
  • spec:model.term-addresses.unknown-term-key-refused verifies spec:model.term-addresses · declared
  • impl:protocol.address-and-cycle-recipes satisfies spec:model.term-addresses · anchored
  • impl:protocol.authoring-grammar-recipes satisfies spec:model.rule-keys · anchored
  • impl:protocol.authoring-normalization satisfies spec:model.rule-keys · anchored
  • impl:protocol.entry-locations satisfies spec:model.term-addresses · anchored
  • impl:protocol.key-markers satisfies spec:model.term-addresses · anchored
  • impl:protocol.open-question-keys satisfies spec:model.open-question-keys · anchored
  • impl:protocol.open-section-order satisfies spec:model.open-question-keys · anchored
  • impl:protocol.open-section-order satisfies spec:model.term-addresses · anchored
  • impl:protocol.prose-mentions satisfies spec:model.open-question-keys · anchored
  • impl:protocol.prose-mentions satisfies spec:model.term-addresses · anchored
  • impl:protocol.register-recipes satisfies spec:model.open-question-keys · anchored
  • impl:protocol.register-recipes satisfies spec:model.term-addresses · anchored
  • impl:protocol.rule-exercises satisfies spec:model.rule-keys · anchored
  • impl:protocol.sdp-import-markdown-emit satisfies spec:model.open-question-keys · anchored
  • impl:protocol.sdp-import-markdown-emit satisfies spec:model.term-addresses · anchored
  • impl:protocol.spec-sections satisfies spec:model.spec-sections · anchored
  • impl:protocol.spec-sections satisfies spec:model.term-addresses · anchored
  • impl:protocol.stable-ids satisfies spec:model.open-question-keys · anchored
  • impl:protocol.stable-ids satisfies spec:model.term-addresses · anchored
  • impl:protocol.static-reification satisfies spec:model.open-question-keys · anchored
  • impl:protocol.verifier-semantics satisfies spec:model.spec-sections · anchored
  • oracle:protocol.open-question-keys models spec:model.open-question-keys · anchored
  • test:protocol.authoring-grammar verifies spec:model.rule-keys · anchored
  • test:protocol.authoring-grammar-recipes verifies spec:model.rule-keys · anchored
  • test:protocol.keyed-content verifies spec:model.term-addresses · anchored
  • test:protocol.open-question-keys.keyed-question-resolves verifies spec:model.open-question-keys.keyed-question-resolves · anchored
  • test:protocol.open-question-keys.renamed-key-breaks verifies spec:model.open-question-keys.renamed-key-breaks · anchored
  • test:protocol.open-question-keys.repeated-key-refused verifies spec:model.open-question-keys.repeated-key-refused · anchored
  • test:protocol.term-addresses.keyed-term-resolves verifies spec:model.term-addresses.keyed-term-resolves · anchored
  • test:protocol.term-addresses.malformed-term-marker-refused verifies spec:model.term-addresses.malformed-term-marker-refused · anchored
  • test:protocol.term-addresses.repeated-term-key-refused verifies spec:model.term-addresses.repeated-term-key-refused · anchored
  • test:protocol.term-addresses.typescript-term-imports-keyed verifies spec:model.term-addresses.typescript-term-imports-keyed · anchored
  • test:protocol.term-addresses.unknown-term-key-refused verifies spec:model.term-addresses.unknown-term-key-refused · anchored
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred syntax: requirementDiagram. Chosen syntax: flowchart TB because models, folds require exact labels unavailable in requirement syntax.

Decisions

  • The comment form is a second anchor representation

    An anchor has two extracted representations that feed one closed envelope, the constant form as ruled and a comment form. The comment form is a top-level /** … */ block in a .ts or .tsx file carrying reserved camelCase, TSDoc-compatible tags; @sdpAnchor <id> opens it, and the id's namespace selects the flavor exactly as the constant builders do. Comment prose still authors nothing: only the reserved tags are read, and a comment that does not open with /** is never read. Trust is by reserved grammar, not by builder import, so no import is required. The same id in two forms is a duplicate id. The package also ships a zero-dependency subpath @libar-dev/software-delivery-protocol/anchors exporting the id builders and the three anchor builders and nothing else, for runtimes that may import but must not load node:* modules or ts-morph; the extractor trusts that specifier as a Protocol builder module.

  • Sections carry content while relations carry links

    Sections contain local content only; promotion moves content exclusively and relations state the linkage.

  • Each example binds one point

    An example binds exactly one point; table syntax may expand statically into sibling examples and renderers may project siblings as a table.

  • Floor-read sections are closed typed shapes

    Every section read by a floor clause has a closed typed shape; unsettled design and ui surfaces remain open.

  • Verification mode states posture, not realization

    verification.mode states the intended verification posture; enabled-verifier realization remains a derived fact and the two are never collapsed.

Runtime
  • component:protocol.model · the authored contracts and stable ids · src/model/anchors.ts:100 · layer domain · context protocol

    Uses

    None.

  • component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:72 · layer domain · context protocol

    Uses

  • impl:protocol.spec-sections · typed Spec section shapes · src/model/sections.ts:138

    Component: component:protocol.model · the authored contracts and stable ids · src/model/anchors.ts:100 · layer domain · context protocol

    Uses

    None.

  • impl:protocol.verifier-semantics · readiness clauses over direct verification bindings · src/validate/readiness-floor.ts:593

    Component: component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:72 · layer domain · context protocol

    Uses

    None.

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:model.spec-sections
The diagram as text
  • spec:carrier.markdown-body-grammar: The Markdown body accepts one closed form per section
  • spec:decisions.anchor-comment-form: The comment form is a second anchor representation
  • spec:decisions.content-only-sections: Sections carry content while relations carry links
  • spec:decisions.point-per-example: Each example binds one point
  • spec:decisions.typing-law: Floor-read sections are closed typed shapes
  • spec:decisions.verification-posture-not-realization: Verification mode states posture, not realization
  • spec:model.core-model: The Protocol models delivery with one enrichable Spec
  • spec:model.open-question-keys: An open question may carry a key that addresses it
  • spec:model.rule-keys: A rule or flow entry may carry a key that addresses it
  • spec:model.spec-sections: Spec sections carry typed detail and direct verifier semantics
  • spec:model.term-addresses: A Model term may carry a key that addresses it
  • spec:model.spec-sections decidedBy spec:decisions.anchor-comment-form · declared — it restates comment promotion for the comment form
  • spec:model.spec-sections decidedBy spec:decisions.content-only-sections · declared
  • spec:model.spec-sections decidedBy spec:decisions.point-per-example · declared
  • spec:model.spec-sections decidedBy spec:decisions.typing-law · declared
  • spec:model.spec-sections decidedBy spec:decisions.verification-posture-not-realization · declared
  • spec:model.spec-sections refines spec:model.core-model · declared
  • spec:carrier.markdown-body-grammar dependsOn spec:model.spec-sections · declared
  • spec:decisions.content-only-sections refines spec:model.spec-sections · declared
  • spec:decisions.point-per-example refines spec:model.spec-sections · declared
  • spec:decisions.typing-law refines spec:model.spec-sections · declared
  • spec:decisions.verification-posture-not-realization refines spec:model.spec-sections · declared
  • spec:model.open-question-keys refines spec:model.spec-sections · declared
  • spec:model.rule-keys refines spec:model.spec-sections · declared
  • spec:model.term-addresses refines spec:model.spec-sections · declared — extends entry addresses to the terms a Model section defines
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

Distance 2

Distance 3

Distance 4

Distance 5

Distance 6

Distance 7

Distance 8

Distance 9

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingThe comment form is a second anchor representation
spec:decisions.anchor-comment-form · resolves
declaredit restates comment promotion for the comment formNone
decidedBy · outgoingSections carry content while relations carry links
spec:decisions.content-only-sections · resolves
declaredNoneNone
decidedBy · outgoingEach example binds one point
spec:decisions.point-per-example · resolves
declaredNoneNone
decidedBy · outgoingFloor-read sections are closed typed shapes
spec:decisions.typing-law · resolves
declaredNoneNone
decidedBy · outgoingVerification mode states posture, not realization
spec:decisions.verification-posture-not-realization · resolves
declaredNoneNone
refines · outgoingThe Protocol models delivery with one enrichable Spec
spec:model.core-model · resolves
declaredNoneNone
dependsOn · incomingThe Markdown body accepts one closed form per section
spec:carrier.markdown-body-grammar · resolves
declaredNoneNone
refines · incomingSections carry content while relations carry links
spec:decisions.content-only-sections · resolves
declaredNoneNone
refines · incomingEach example binds one point
spec:decisions.point-per-example · resolves
declaredNoneNone
refines · incomingFloor-read sections are closed typed shapes
spec:decisions.typing-law · resolves
declaredNoneNone
refines · incomingVerification mode states posture, not realization
spec:decisions.verification-posture-not-realization · resolves
declaredNoneNone
refines · incomingAn open question may carry a key that addresses it
spec:model.open-question-keys · resolves
declaredNoneNone
refines · incomingA rule or flow entry may carry a key that addresses it
spec:model.rule-keys · resolves
declaredNoneNone
refines · incomingA Model term may carry a key that addresses it
spec:model.term-addresses · resolves
declaredextends entry addresses to the terms a Model section definesNone

Bindings

Implementation binding: present

  • impl:protocol.spec-sections · typed Spec section shapes · src/model/sections.ts:138 · role contract · component component:protocol.model · layer domain · context protocol
  • impl:protocol.verifier-semantics · readiness clauses over direct verification bindings · src/validate/readiness-floor.ts:593 · role validator · component component:protocol.validate · layer domain · context protocol

Design reference: none

Verifier binding: none

Expected-outcome oracle: none

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

  • warning · honesty/gaps · spec:model.spec-sections · Spec "spec:model.spec-sections" states readiness "ready" with no resolving verifier — a gap, informative only (ready never requires delivery facts). · specs/model/spec-sections.sdp.md
Composing (0)

Composing needs the script.