Spec Studio

Markdown authoring enters the one graph

spec:carrier.markdown-authoringUse Case / Behavior · epicready floor ready

Packs: pack:self-hosting-v1

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

Findings: no errors, no warnings

specs/carrier/markdown-authoring.sdp.md

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

Intent
outcome
Author new Protocol Specs in Markdown without creating a second truth path.
Behavior
rule line 18 · specs/carrier/markdown-authoring.sdp.md:18
Markdown and TypeScript carriers feed the same reification and graph-derivation path.

1 unkeyed rule.

Verification

Verifier bindings

  • test:protocol.markdown-authoring · TypeScript and Markdown twins derive one graph, verifying Markdown authoring · anchored · test anchor binding present · test/import-round-trip.test.ts:21

    External run evidence from test/import-round-trip.test.ts

    Test anchors: test:protocol.markdown-authoring. Specs verified by those bindings: spec:carrier.markdown-authoring.

    Run 1: external run evidence from vitest 4.1.10

    Build: CI 391 · Branch: cursor/media-plan-and-articles-09b1 · Commit: 076cd4f1f85640d8236e5cca1bffffa68ab79a33 · Start: 2026-10-31T15:32:20.471Z · Stop: 2026-10-31T15:34:02.073Z

    NameSuiteResultDuration
    preserves reified authored data through emitted Markdownimport round-trip harnesspassed25.5 ms
    preserves the mini-corpus graph under the declared delta catalogimport round-trip harnesspassed82.22 ms
    rejects a corrupted Markdown twinimport round-trip harnesspassed55.41 ms
Design view

Requirement drawing

Requirement drawing for spec:carrier.markdown-authoring
  • E9: refines (29), verifies (30) · declared
The diagram as text
  • spec:carrier.markdown-authoring: Markdown authoring enters the one graph · declared Spec
  • spec:carrier.envelope-contract: The Markdown envelope is explicit and bounded · declared Spec
  • spec:carrier.gherkin-authoring: Gherkin authoring enters the one graph · declared Spec
  • spec:carrier.markdown-body-grammar: The Markdown body accepts one closed form per section · declared Spec
  • spec:carrier.markdown-parser: The Markdown parser reifies the ruled subset · declared Spec
  • spec:carrier.prose-ownership-rule: Every prose value has one typed owner · declared Spec
  • spec:carrier.sdp-import: A TypeScript-carried Spec can be converted to Markdown · declared Spec
  • spec:carrier.slot-notation: Slot notation declares, binds, and refuses to guess · declared Spec
  • spec:decisions.carrier-ruling: Markdown is the default Spec carrier · declared Spec
  • spec:decisions.sdp-ts-extension: Spec extensions identify the carrier without colliding with tests · declared Spec
  • spec:carrier.gherkin-authoring.authored-fact-refused: An authored delivery fact lookalike is refused · declared Spec
  • spec:carrier.gherkin-authoring.contract-parity: Markdown and Gherkin twins derive equal graphs and contracts · declared Spec
  • spec:carrier.gherkin-authoring.description-location-refused: A bad description key reports its physical source line · declared Spec
  • spec:carrier.gherkin-authoring.duplicate-surface-refused: Duplicate Markdown and Gherkin surfaces are both excluded · declared Spec
  • spec:carrier.gherkin-authoring.example-space-extraction: The pseudo-scenario supplies example space without a node · declared Spec
  • spec:carrier.gherkin-authoring.malformed-relation-refused: A malformed relation target is refused · declared Spec
  • spec:carrier.gherkin-authoring.missing-id-refused: A Feature without identity is refused · declared Spec
  • spec:carrier.gherkin-authoring.multi-finding-bounded: Multiple findings exclude one carrier and keep a healthy sibling · declared Spec
  • spec:carrier.gherkin-authoring.parent-child-extraction: A Feature and Scenario enter the graph as parent and child · declared Spec
  • spec:carrier.gherkin-authoring.step-less-scenario-refused: A step-less Scenario is refused at its Scenario line · declared Spec
  • spec:carrier.gherkin-authoring.unbound-ready-refused: A Gherkin example with an unbound used slot fails its stated readiness floor · declared Spec
  • spec:carrier.gherkin-authoring.unknown-tag-refused: A graph-aware tag near miss is refused · declared Spec
  • spec:carrier.gherkin-authoring.unsupported-construct-refused: A Scenario Outline is refused · declared Spec
  • spec:carrier.markdown-body-grammar.continuation-line-refused: A bullet wrapped onto a second line is refused · declared Spec
  • spec:carrier.markdown-body-grammar.foreign-fence-refused: A fence other than gwt or gwt-vocabulary is refused · declared Spec
  • spec:carrier.markdown-body-grammar.h3-refused: An H3 under Design is refused · declared Spec
  • spec:carrier.markdown-body-grammar.integer-term-refused: An integer-like Model term is refused · declared Spec
  • spec:carrier.markdown-body-grammar.keyed-bullet-refused: A keyed bullet under a plain-bullet owner is refused · declared Spec
  • spec:carrier.markdown-body-grammar.ordered-list-refused: An ordered list is refused · declared Spec
  • spec:carrier.markdown-body-grammar.plain-bullet-refused: A plain bullet under an open section is refused · declared Spec
  • spec:carrier.markdown-body-grammar.raw-html-refused: Raw HTML outside a code span is refused · declared Spec
  • spec:carrier.markdown-body-grammar.repeated-field-refused: A repeated single-valued field is refused · declared Spec
  • spec:carrier.markdown-body-grammar.second-primary-owner-refused: A second primary owner is refused · declared Spec
  • spec:carrier.markdown-body-grammar.shared-description-refused: A second description across Behavior and Example space is refused · declared Spec
  • spec:carrier.markdown-body-grammar.table-refused: A table under a section is refused · declared Spec
  • spec:carrier.markdown-body-grammar.trailing-prose-refused: Prose after structured content is refused · declared Spec
  • spec:carrier.markdown-body-grammar.unrecognized-heading-refused: An unrecognized heading is refused with a suggestion · declared Spec
  • spec:carrier.markdown-parser.bounded-parity: One finding class is shared while the carriers' outcomes stay their own · declared Spec
  • spec:carrier.sdp-import.round-trip: A TypeScript carrier survives import as an equal Markdown graph · declared Spec
  • spec:carrier.slot-notation.one-literal-binding: A one-literal group in a vocabulary is a binding that declares nothing · declared Spec
  • spec:carrier.slot-notation.refused-guess: A stray brace stays prose while an unusable group stays a named slot · declared Spec
  • spec:carrier.slot-notation.typed-declaration: A typed declaration normalizes to the skeleton its binding shares · declared Spec
  • spec:validation.kind-evidence.second-entry-untargeted: A constraint whose second entry has no target is not complete · declared Spec
  • spec:validation.kind-evidence: Each kind carries its own evidence · declared Spec
  • spec:carrier.inline-code-spans: Inline code is content, never markup · declared Spec
  • spec:carrier.sdp-import.feature-adapter: A bare .feature corpus can be imported · declared Spec
  • spec:carrier.step-keys: An example step may carry a key that survives rewording · declared Spec
  • spec:decisions.envelope-grammar-posture: The Protocol owns the envelope grammar · declared Spec
  • spec:decisions.gherkin-carrier-option: Behavior and example Specs may use Gherkin canonically · declared Spec
  • spec:decisions.pack-markdown-carrier: Packs have a Markdown manifest carrier · declared Spec
  • spec:decisions.prose-ownership: Prose belongs to typed graph owners · declared Spec
  • component:protocol.import: canonical conversion with a fidelity boundary · anchored code · src/import/import.ts:45
  • component:protocol.notation: the leaf step codec · anchored code · src/notation/slots.ts:261
  • impl:protocol.envelope-contract: parses the bounded Markdown frontmatter envelope · anchored code · src/extract/markdown-frontmatter.ts:33
  • impl:protocol.gherkin-authoring: reifies Gherkin behavior and example authoring into the one carrier path · anchored code · src/extract/gherkin.ts:1323
  • impl:protocol.gherkin-kind-policy: shared Gherkin kind-refusal and loss explanations · anchored code · src/extract/gherkin-kind-honesty.ts:6
  • impl:protocol.import-fidelity: refuses Markdown emission that changes authored meaning · anchored code · src/import/markdown-fidelity.ts:102
  • impl:protocol.markdown-body-grammar: maps Markdown body content to typed prose owners · anchored code · src/extract/markdown-body.ts:120
  • impl:protocol.markdown-content: decodes located Markdown entries and typed fences · anchored code · src/extract/markdown-body-content.ts:7
  • impl:protocol.markdown-parser: reifies Markdown Specs and Packs through one carrier boundary · anchored code · src/extract/markdown.ts:37
  • impl:protocol.markdown-yaml-policy: bounded YAML scalars and relation-target forms · anchored code · src/extract/markdown-yaml-policy.ts:33
  • impl:protocol.sdp-import: plans, refuses, and publishes TypeScript-to-Markdown Spec imports · anchored code · src/cli/import-command.ts:71
  • impl:protocol.sdp-import-core: converts a TypeScript-carrier Spec into an idiomatic Markdown twin · anchored code · src/import/import.ts:58
  • 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.sdp-import-publish: stages Markdown siblings and publishes them with atomic hard links · anchored code · src/cli/import-publish.ts:23
  • impl:protocol.sdp-import-scan: collects .sdp.ts paths and reports scan failures · anchored code · src/cli/import-scan.ts:62
  • impl:protocol.slot-notation: parses slot groups and normalizes a step to its skeleton · anchored code · src/notation/slots.ts:269
  • impl:protocol.static-reification: reifies authored carriers from the AST and never evaluates them · anchored code · src/extract/reify.ts:2139
  • oracle:protocol.slot-notation: oracle:protocol.slot-notation · anchored oracle binding · test/self-hosting-carrier.test.ts:191
  • test:protocol.envelope-contract: frontmatter contract tests verify the Markdown envelope · anchored test binding · binding present · test/markdown-reifier.test.ts:97
  • test:protocol.gherkin-authoring.authored-fact-refused: the authored-fact-refused point verifies the Gherkin carrier contract · anchored test binding · binding present · test/self-hosting-carrier-gherkin.test.ts:363
  • test:protocol.gherkin-authoring.contract-parity: the contract-parity point verifies the Gherkin carrier contract · anchored test binding · binding present · test/self-hosting-carrier-gherkin.test.ts:388
  • test:protocol.gherkin-authoring.description-location-refused: the description-location-refused point verifies the Gherkin carrier contract · anchored test binding · binding present · test/self-hosting-carrier-gherkin.test.ts:656
  • test:protocol.gherkin-authoring.duplicate-surface-refused: the duplicate-surface-refused point verifies the Gherkin carrier contract · anchored test binding · binding present · test/self-hosting-carrier-gherkin.test.ts:396
  • test:protocol.gherkin-authoring.example-space-extraction: the example-space-extraction point verifies the Gherkin carrier contract · anchored test binding · binding present · test/self-hosting-carrier-gherkin.test.ts:439
  • test:protocol.gherkin-authoring.malformed-relation-refused: the malformed-relation-refused point verifies the Gherkin carrier contract · anchored test binding · binding present · test/self-hosting-carrier-gherkin.test.ts:481
  • test:protocol.gherkin-authoring.missing-id-refused: the missing-id-refused point verifies the Gherkin carrier contract · anchored test binding · binding present · test/self-hosting-carrier-gherkin.test.ts:509
  • test:protocol.gherkin-authoring.multi-finding-bounded: the multi-finding-bounded point verifies the Gherkin carrier contract · anchored test binding · binding present · test/self-hosting-carrier-gherkin.test.ts:714
  • test:protocol.gherkin-authoring.parent-child-extraction: the parent-child-extraction point verifies the Gherkin carrier contract · anchored test binding · binding present · test/self-hosting-carrier-gherkin.test.ts:534
  • test:protocol.gherkin-authoring.step-less-scenario-refused: the step-less-scenario-refused point verifies the Gherkin carrier contract · anchored test binding · binding present · test/self-hosting-carrier-gherkin.test.ts:686
  • test:protocol.gherkin-authoring.unbound-ready-refused: the unbound-ready-refused point verifies the Gherkin carrier contract · anchored test binding · binding present · test/self-hosting-carrier-gherkin.test.ts:588
  • test:protocol.gherkin-authoring.unknown-tag-refused: the unknown-tag-refused point verifies the Gherkin carrier contract · anchored test binding · binding present · test/self-hosting-carrier-gherkin.test.ts:596
  • test:protocol.gherkin-authoring.unsupported-construct-refused: the unsupported-construct-refused point verifies the Gherkin carrier contract · anchored test binding · binding present · test/self-hosting-carrier-gherkin.test.ts:626
  • test:protocol.kind-evidence.second-entry-untargeted: test:protocol.kind-evidence.second-entry-untargeted · anchored test binding · binding present · test/self-hosting-validators.test.ts:1928
  • test:protocol.markdown-authoring: TypeScript and Markdown twins derive one graph, verifying Markdown authoring · anchored test binding · binding present · test/import-round-trip.test.ts:21
  • test:protocol.markdown-body-grammar.continuation-line-refused: the continuation-line point verifies the one-line entry rule · anchored test binding · binding present · test/self-hosting-markdown-grammar.test.ts:197
  • test:protocol.markdown-body-grammar.foreign-fence-refused: the foreign-fence point verifies the closed fence set · anchored test binding · binding present · test/self-hosting-markdown-grammar.test.ts:213
  • test:protocol.markdown-body-grammar.h3-refused: the H3 point verifies the single-H3 rule · anchored test binding · binding present · test/self-hosting-markdown-grammar.test.ts:221
  • test:protocol.markdown-body-grammar.integer-term-refused: the integer-term point verifies the integer-like Model term refusal · anchored test binding · binding present · test/self-hosting-markdown-grammar.test.ts:293
  • test:protocol.markdown-body-grammar.keyed-bullet-refused: the keyed-bullet point verifies the keyed-bullet rule · anchored test binding · binding present · test/self-hosting-markdown-grammar.test.ts:237
  • test:protocol.markdown-body-grammar.ordered-list-refused: the ordered-list point verifies the list-entry rule · anchored test binding · binding present · test/self-hosting-markdown-grammar.test.ts:205
  • test:protocol.markdown-body-grammar.plain-bullet-refused: the plain-bullet point verifies the open-section key rule · anchored test binding · binding present · test/self-hosting-markdown-grammar.test.ts:229
  • test:protocol.markdown-body-grammar.raw-html-refused: the raw-HTML point verifies the raw-HTML refusal outside code spans · anchored test binding · binding present · test/self-hosting-markdown-grammar.test.ts:277
  • test:protocol.markdown-body-grammar.repeated-field-refused: the repeated-field point verifies the at-most-once rule · anchored test binding · binding present · test/self-hosting-markdown-grammar.test.ts:253
  • test:protocol.markdown-body-grammar.second-primary-owner-refused: the second-primary-owner point verifies the one-primary-owner rule · anchored test binding · binding present · test/self-hosting-markdown-grammar.test.ts:269
  • test:protocol.markdown-body-grammar.shared-description-refused: the shared-description point verifies the one-description-owner rule · anchored test binding · binding present · test/self-hosting-markdown-grammar.test.ts:285
  • test:protocol.markdown-body-grammar.table-refused: the table point verifies the block-structure refusal · anchored test binding · binding present · test/self-hosting-markdown-grammar.test.ts:189
  • test:protocol.markdown-body-grammar.trailing-prose-refused: the trailing-prose point verifies the prose-ownership rule · anchored test binding · binding present · test/self-hosting-markdown-grammar.test.ts:245
  • test:protocol.markdown-body-grammar.unrecognized-heading-refused: the unrecognized-heading point verifies the closed owner set · anchored test binding · binding present · test/self-hosting-markdown-grammar.test.ts:261
  • test:protocol.markdown-parser: Markdown reifier tests verify the ruled parser · anchored test binding · binding present · test/markdown-reifier.test.ts:91
  • test:protocol.markdown-parser.bounded-parity: the bounded-parity point verifies one shared finding class and its split outcomes · anchored test binding · binding present · test/self-hosting-carrier.test.ts:149
  • test:protocol.prose-ownership: Markdown reifier tests verify prose ownership · anchored test binding · binding present · test/markdown-reifier.test.ts:85
  • test:protocol.sdp-import.round-trip: TypeScript import round-trip contract preserves authored data · anchored test binding · binding present · test/self-hosting-sdp-import.test.ts:57
  • test:protocol.slot-notation.one-literal-binding: test:protocol.slot-notation.one-literal-binding · anchored test binding · binding present · test/self-hosting-carrier.test.ts:258
  • test:protocol.slot-notation.refused-guess: the refusal point verifies prose braces and the unusable slot · anchored test binding · binding present · test/self-hosting-carrier.test.ts:231
  • test:protocol.slot-notation.typed-declaration: the declaration point verifies the typed form and its skeleton · anchored test binding · binding present · test/self-hosting-carrier.test.ts:205
  • spec:carrier.envelope-contract refines spec:carrier.markdown-authoring · declared
  • spec:carrier.gherkin-authoring refines spec:carrier.markdown-authoring · declared
  • spec:carrier.gherkin-authoring.authored-fact-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.authored-fact-refused verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.contract-parity refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.contract-parity verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.description-location-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.description-location-refused verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.duplicate-surface-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.duplicate-surface-refused verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.example-space-extraction refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.example-space-extraction verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.malformed-relation-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.malformed-relation-refused verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.missing-id-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.missing-id-refused verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.multi-finding-bounded refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.multi-finding-bounded verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.parent-child-extraction refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.parent-child-extraction verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.step-less-scenario-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.step-less-scenario-refused verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.unbound-ready-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.unbound-ready-refused verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.unbound-ready-refused verifies spec:validation.kind-evidence · declared
  • spec:carrier.gherkin-authoring.unknown-tag-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.unknown-tag-refused verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.unsupported-construct-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.unsupported-construct-refused verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.inline-code-spans refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar refines spec:carrier.markdown-authoring · declared
  • spec:carrier.markdown-body-grammar.continuation-line-refused refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.continuation-line-refused verifies spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.foreign-fence-refused refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.foreign-fence-refused verifies spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.h3-refused refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.h3-refused verifies spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.integer-term-refused refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.integer-term-refused verifies spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.keyed-bullet-refused refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.keyed-bullet-refused verifies spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.ordered-list-refused refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.ordered-list-refused verifies spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.plain-bullet-refused refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.plain-bullet-refused verifies spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.raw-html-refused refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.raw-html-refused verifies spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.repeated-field-refused refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.repeated-field-refused verifies spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.second-primary-owner-refused refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.second-primary-owner-refused verifies spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.shared-description-refused refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.shared-description-refused verifies spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.table-refused refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.table-refused verifies spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.trailing-prose-refused refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.trailing-prose-refused verifies spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.unrecognized-heading-refused refines spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-body-grammar.unrecognized-heading-refused verifies spec:carrier.markdown-body-grammar · declared
  • spec:carrier.markdown-parser refines spec:carrier.markdown-authoring · declared
  • spec:carrier.markdown-parser.bounded-parity refines spec:carrier.markdown-parser · declared
  • spec:carrier.markdown-parser.bounded-parity verifies spec:carrier.markdown-parser · declared
  • spec:carrier.prose-ownership-rule refines spec:carrier.markdown-authoring · declared
  • spec:carrier.sdp-import refines spec:carrier.markdown-authoring · declared
  • spec:carrier.sdp-import.feature-adapter refines spec:carrier.sdp-import · declared
  • spec:carrier.sdp-import.round-trip refines spec:carrier.sdp-import · declared
  • spec:carrier.sdp-import.round-trip verifies spec:carrier.sdp-import · declared
  • spec:carrier.slot-notation refines spec:carrier.markdown-authoring · declared
  • spec:carrier.slot-notation.one-literal-binding refines spec:carrier.slot-notation · declared
  • spec:carrier.slot-notation.one-literal-binding verifies spec:carrier.slot-notation · declared
  • spec:carrier.slot-notation.refused-guess refines spec:carrier.slot-notation · declared
  • spec:carrier.slot-notation.refused-guess verifies spec:carrier.slot-notation · declared
  • spec:carrier.slot-notation.typed-declaration refines spec:carrier.slot-notation · declared
  • spec:carrier.slot-notation.typed-declaration verifies spec:carrier.slot-notation · declared
  • spec:carrier.step-keys refines spec:carrier.slot-notation · declared — a key joins the step text the notation reads, ahead of its slots
  • spec:decisions.carrier-ruling refines spec:carrier.markdown-authoring · declared
  • spec:decisions.envelope-grammar-posture refines spec:carrier.envelope-contract · declared
  • spec:decisions.gherkin-carrier-option refines spec:decisions.carrier-ruling · declared — admits Gherkin as a canonical per-ID carrier for behavior and example Specs beside the Markdown default
  • spec:decisions.pack-markdown-carrier refines spec:decisions.carrier-ruling · declared — extends the Markdown carrier to Packs and keeps the TypeScript builder as a per-ID option
  • spec:decisions.prose-ownership refines spec:carrier.prose-ownership-rule · declared
  • spec:decisions.sdp-ts-extension refines spec:carrier.markdown-authoring · declared
  • spec:validation.kind-evidence.second-entry-untargeted refines spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.second-entry-untargeted verifies spec:carrier.markdown-body-grammar · declared
  • spec:validation.kind-evidence.second-entry-untargeted verifies spec:validation.kind-evidence · declared
  • component:protocol.import satisfies spec:carrier.sdp-import · anchored
  • component:protocol.notation satisfies spec:carrier.slot-notation · anchored
  • impl:protocol.envelope-contract satisfies spec:carrier.envelope-contract · anchored
  • impl:protocol.gherkin-authoring satisfies spec:carrier.gherkin-authoring · anchored
  • impl:protocol.gherkin-kind-policy satisfies spec:carrier.gherkin-authoring · anchored
  • impl:protocol.import-fidelity satisfies spec:carrier.sdp-import · anchored
  • impl:protocol.markdown-body-grammar satisfies spec:carrier.markdown-body-grammar · anchored
  • impl:protocol.markdown-body-grammar satisfies spec:carrier.prose-ownership-rule · anchored
  • impl:protocol.markdown-content satisfies spec:carrier.markdown-body-grammar · anchored
  • impl:protocol.markdown-parser satisfies spec:carrier.markdown-parser · anchored
  • impl:protocol.markdown-parser satisfies spec:carrier.markdown-authoring · anchored
  • impl:protocol.markdown-yaml-policy satisfies spec:carrier.envelope-contract · anchored
  • impl:protocol.sdp-import satisfies spec:carrier.sdp-import · anchored
  • impl:protocol.sdp-import-core satisfies spec:carrier.sdp-import · anchored
  • impl:protocol.sdp-import-markdown-emit satisfies spec:carrier.sdp-import · anchored
  • impl:protocol.sdp-import-publish satisfies spec:carrier.sdp-import · anchored
  • impl:protocol.sdp-import-scan satisfies spec:carrier.sdp-import · anchored
  • impl:protocol.slot-notation satisfies spec:carrier.slot-notation · anchored
  • impl:protocol.static-reification satisfies spec:carrier.markdown-parser · anchored
  • oracle:protocol.slot-notation models spec:carrier.slot-notation · anchored
  • test:protocol.envelope-contract verifies spec:carrier.envelope-contract · anchored
  • test:protocol.gherkin-authoring.authored-fact-refused verifies spec:carrier.gherkin-authoring.authored-fact-refused · anchored
  • test:protocol.gherkin-authoring.contract-parity verifies spec:carrier.gherkin-authoring.contract-parity · anchored
  • test:protocol.gherkin-authoring.description-location-refused verifies spec:carrier.gherkin-authoring.description-location-refused · anchored
  • test:protocol.gherkin-authoring.duplicate-surface-refused verifies spec:carrier.gherkin-authoring.duplicate-surface-refused · anchored
  • test:protocol.gherkin-authoring.example-space-extraction verifies spec:carrier.gherkin-authoring.example-space-extraction · anchored
  • test:protocol.gherkin-authoring.malformed-relation-refused verifies spec:carrier.gherkin-authoring.malformed-relation-refused · anchored
  • test:protocol.gherkin-authoring.missing-id-refused verifies spec:carrier.gherkin-authoring.missing-id-refused · anchored
  • test:protocol.gherkin-authoring.multi-finding-bounded verifies spec:carrier.gherkin-authoring.multi-finding-bounded · anchored
  • test:protocol.gherkin-authoring.parent-child-extraction verifies spec:carrier.gherkin-authoring.parent-child-extraction · anchored
  • test:protocol.gherkin-authoring.step-less-scenario-refused verifies spec:carrier.gherkin-authoring.step-less-scenario-refused · anchored
  • test:protocol.gherkin-authoring.unbound-ready-refused verifies spec:carrier.gherkin-authoring.unbound-ready-refused · anchored
  • test:protocol.gherkin-authoring.unknown-tag-refused verifies spec:carrier.gherkin-authoring.unknown-tag-refused · anchored
  • test:protocol.gherkin-authoring.unsupported-construct-refused verifies spec:carrier.gherkin-authoring.unsupported-construct-refused · anchored
  • test:protocol.kind-evidence.second-entry-untargeted verifies spec:validation.kind-evidence.second-entry-untargeted · anchored
  • test:protocol.markdown-authoring verifies spec:carrier.markdown-authoring · anchored
  • test:protocol.markdown-body-grammar.continuation-line-refused verifies spec:carrier.markdown-body-grammar.continuation-line-refused · anchored
  • test:protocol.markdown-body-grammar.foreign-fence-refused verifies spec:carrier.markdown-body-grammar.foreign-fence-refused · anchored
  • test:protocol.markdown-body-grammar.h3-refused verifies spec:carrier.markdown-body-grammar.h3-refused · anchored
  • test:protocol.markdown-body-grammar.integer-term-refused verifies spec:carrier.markdown-body-grammar.integer-term-refused · anchored
  • test:protocol.markdown-body-grammar.keyed-bullet-refused verifies spec:carrier.markdown-body-grammar.keyed-bullet-refused · anchored
  • test:protocol.markdown-body-grammar.ordered-list-refused verifies spec:carrier.markdown-body-grammar.ordered-list-refused · anchored
  • test:protocol.markdown-body-grammar.plain-bullet-refused verifies spec:carrier.markdown-body-grammar.plain-bullet-refused · anchored
  • test:protocol.markdown-body-grammar.raw-html-refused verifies spec:carrier.markdown-body-grammar.raw-html-refused · anchored
  • test:protocol.markdown-body-grammar.repeated-field-refused verifies spec:carrier.markdown-body-grammar.repeated-field-refused · anchored
  • test:protocol.markdown-body-grammar.second-primary-owner-refused verifies spec:carrier.markdown-body-grammar.second-primary-owner-refused · anchored
  • test:protocol.markdown-body-grammar.shared-description-refused verifies spec:carrier.markdown-body-grammar.shared-description-refused · anchored
  • test:protocol.markdown-body-grammar.table-refused verifies spec:carrier.markdown-body-grammar.table-refused · anchored
  • test:protocol.markdown-body-grammar.trailing-prose-refused verifies spec:carrier.markdown-body-grammar.trailing-prose-refused · anchored
  • test:protocol.markdown-body-grammar.unrecognized-heading-refused verifies spec:carrier.markdown-body-grammar.unrecognized-heading-refused · anchored
  • test:protocol.markdown-parser verifies spec:carrier.markdown-parser · anchored
  • test:protocol.markdown-parser.bounded-parity verifies spec:carrier.markdown-parser.bounded-parity · anchored
  • test:protocol.prose-ownership verifies spec:carrier.prose-ownership-rule · anchored
  • test:protocol.sdp-import.round-trip verifies spec:carrier.sdp-import.round-trip · anchored
  • test:protocol.slot-notation.one-literal-binding verifies spec:carrier.slot-notation.one-literal-binding · anchored
  • test:protocol.slot-notation.refused-guess verifies spec:carrier.slot-notation.refused-guess · anchored
  • test:protocol.slot-notation.typed-declaration verifies spec:carrier.slot-notation.typed-declaration · 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

  • Markdown is the default Spec carrier

    Specs default to Markdown; Packs remain TS until a Pack syntax ruling; the TS DSL survives as import source and a lawful per-ID option. Later refinements keep this default and the one-surface law without repealing them: the Pack syntax ruling completes Pack Markdown, and the Gherkin carrier option admits graph-aware Gherkin as a lawful per-ID option for behavior and example Specs only, with the canonical suffix settled as .sdp.gherkin.

  • Spec extensions identify the carrier without colliding with tests

    Markdown Specs use .sdp.md; .sdp.ts names the surviving TypeScript DSL import source and lawful per-ID option.

Runtime
  • component:protocol.extract · the carrier and source pipeline · src/extract/index.ts:192 · layer application · context protocol

    Uses

    • component:protocol.graph · the one graph and its semantic decisions · src/graph/schema.ts:34 · layer domain · context protocol
    • component:protocol.model · the authored contracts and stable ids · src/model/anchors.ts:100 · layer domain · context protocol
    • component:protocol.notation · the leaf step codec · src/notation/slots.ts:261 · layer domain · context protocol
    • component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:72 · layer domain · context protocol
  • impl:protocol.markdown-parser · reifies Markdown Specs and Packs through one carrier boundary · src/extract/markdown.ts:37

    Component: component:protocol.extract · the carrier and source pipeline · src/extract/index.ts:192 · layer application · 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:carrier.markdown-authoring

Scroll horizontally to read the whole drawing.

The diagram as text
  • spec:carrier.envelope-contract: The Markdown envelope is explicit and bounded
  • spec:carrier.gherkin-authoring: Gherkin authoring enters the one graph
  • spec:carrier.markdown-authoring: Markdown authoring enters the one graph
  • spec:carrier.markdown-body-grammar: The Markdown body accepts one closed form per section
  • spec:carrier.markdown-parser: The Markdown parser reifies the ruled subset
  • spec:carrier.prose-ownership-rule: Every prose value has one typed owner
  • spec:carrier.sdp-import: A TypeScript-carried Spec can be converted to Markdown
  • spec:carrier.slot-notation: Slot notation declares, binds, and refuses to guess
  • spec:decisions.carrier-ruling: Markdown is the default Spec carrier
  • spec:decisions.sdp-ts-extension: Spec extensions identify the carrier without colliding with tests
  • spec:protocol.self-hosting: The Protocol authors and validates itself
  • spec:carrier.markdown-authoring decidedBy spec:decisions.carrier-ruling · declared
  • spec:carrier.markdown-authoring decidedBy spec:decisions.sdp-ts-extension · declared
  • spec:carrier.markdown-authoring dependsOn spec:carrier.markdown-parser · declared
  • spec:protocol.self-hosting dependsOn spec:carrier.markdown-authoring · declared — the self-hosted corpus uses the Markdown carrier
  • spec:carrier.envelope-contract refines spec:carrier.markdown-authoring · declared
  • spec:carrier.gherkin-authoring refines spec:carrier.markdown-authoring · declared
  • spec:carrier.markdown-body-grammar refines spec:carrier.markdown-authoring · declared
  • spec:carrier.markdown-parser refines spec:carrier.markdown-authoring · declared
  • spec:carrier.prose-ownership-rule refines spec:carrier.markdown-authoring · declared
  • spec:carrier.sdp-import refines spec:carrier.markdown-authoring · declared
  • spec:carrier.slot-notation refines spec:carrier.markdown-authoring · declared
  • spec:decisions.carrier-ruling refines spec:carrier.markdown-authoring · declared
  • spec:decisions.sdp-ts-extension refines spec:carrier.markdown-authoring · 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

Distance 2

Distance 3

Distance 4

Distance 5

Distance 6

Distance 7

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingMarkdown is the default Spec carrier
spec:decisions.carrier-ruling · resolves
declaredNoneNone
decidedBy · outgoingSpec extensions identify the carrier without colliding with tests
spec:decisions.sdp-ts-extension · resolves
declaredNoneNone
dependsOn · outgoingThe Markdown parser reifies the ruled subset
spec:carrier.markdown-parser · resolves
declaredNoneNone
dependsOn · incomingThe Protocol authors and validates itself
spec:protocol.self-hosting · resolves
declaredthe self-hosted corpus uses the Markdown carrierNone
refines · incomingThe Markdown envelope is explicit and bounded
spec:carrier.envelope-contract · resolves
declaredNoneNone
refines · incomingGherkin authoring enters the one graph
spec:carrier.gherkin-authoring · resolves
declaredNoneNone
refines · incomingThe Markdown body accepts one closed form per section
spec:carrier.markdown-body-grammar · resolves
declaredNoneNone
refines · incomingThe Markdown parser reifies the ruled subset
spec:carrier.markdown-parser · resolves
declaredNoneNone
refines · incomingEvery prose value has one typed owner
spec:carrier.prose-ownership-rule · resolves
declaredNoneNone
refines · incomingA TypeScript-carried Spec can be converted to Markdown
spec:carrier.sdp-import · resolves
declaredNoneNone
refines · incomingSlot notation declares, binds, and refuses to guess
spec:carrier.slot-notation · resolves
declaredNoneNone
refines · incomingMarkdown is the default Spec carrier
spec:decisions.carrier-ruling · resolves
declaredNoneNone
refines · incomingSpec extensions identify the carrier without colliding with tests
spec:decisions.sdp-ts-extension · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.markdown-parser · reifies Markdown Specs and Packs through one carrier boundary · src/extract/markdown.ts:37 · role extractor · component component:protocol.extract · layer application · context protocol

Design reference: none

Verifier binding: present

  • test:protocol.markdown-authoring · TypeScript and Markdown twins derive one graph, verifying Markdown authoring · anchored · test/import-round-trip.test.ts:21 · test anchor

Expected-outcome oracle: none

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.