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.
rule.lineEndings line 19 · specs/carrier/markdown-authoring.sdp.md:19
Whichever carrier writes them, the title, prose, entries and steps of a Spec or Pack hold no lone CR, U+2028 or U+2029, because a renderer that breaks a line there would show a line the carrier does not state; LF and CRLF are the only line endings. A Markdown carrier holding one anywhere is refused whole at that line, as spec:carrier.envelope-contract states, a Gherkin carrier as spec:carrier.gherkin-authoring#rule.physicalLines states, and a TypeScript Spec or Pack whose title, narrative, framing or section string holds one is not extracted.

no example exercises it

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:22

    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 2: external run evidence from vitest 4.1.10

    Build: CI 439 · Branch: docs/articles-refresh-1 · Commit: 61576184ea9f39b7f91c51fef5ff991b0bf2d0e6 · Start: 2026-11-04T07:59:39.962Z · Stop: 2026-11-04T08:03:39.928Z

    NameSuiteResultDuration
    preserves reified authored data through emitted Markdownimport round-trip harnesspassed68.24 ms
    preserves the mini-corpus graph under the declared delta catalogimport round-trip harnesspassed182.61 ms
    rejects a corrupted Markdown twinimport round-trip harnesspassed93.32 ms
    is refused by the Markdown, Gherkin and TypeScript carriers alikeone line-ending law across the carriers > a title holding a lone CRpassed11.39 ms
    is refused by the Markdown, Gherkin and TypeScript carriers alikeone line-ending law across the carriers > a title holding U+2028passed6.02 ms
    is refused by the Markdown, Gherkin and TypeScript carriers alikeone line-ending law across the carriers > a title holding U+2029passed2.54 ms
    refuses the Spec when the narrative holds oneone line-ending law across the carriers > a TypeScript string holding a lone CRpassed2.05 ms
    refuses the Spec when an Intent field holds oneone line-ending law across the carriers > a TypeScript string holding a lone CRpassed2.13 ms
    refuses the Spec when a rule entry holds oneone line-ending law across the carriers > a TypeScript string holding a lone CRpassed2.61 ms
    refuses the Spec when an example step holds oneone line-ending law across the carriers > a TypeScript string holding a lone CRpassed2.17 ms
    refuses the Spec when a Model term holds oneone line-ending law across the carriers > a TypeScript string holding a lone CRpassed1.85 ms
    refuses the Spec when a Design value holds oneone line-ending law across the carriers > a TypeScript string holding a lone CRpassed1.74 ms
    refuses a Pack whose title holds oneone line-ending law across the carriers > a TypeScript string holding a lone CRpassed1.99 ms
    refuses a Pack whose framing holds oneone line-ending law across the carriers > a TypeScript string holding a lone CRpassed1.56 ms
    refuses the Spec when the narrative holds oneone line-ending law across the carriers > a TypeScript string holding U+2028passed1.59 ms
    refuses the Spec when an Intent field holds oneone line-ending law across the carriers > a TypeScript string holding U+2028passed1.72 ms
    refuses the Spec when a rule entry holds oneone line-ending law across the carriers > a TypeScript string holding U+2028passed1.63 ms
    refuses the Spec when an example step holds oneone line-ending law across the carriers > a TypeScript string holding U+2028passed1.74 ms
    refuses the Spec when a Model term holds oneone line-ending law across the carriers > a TypeScript string holding U+2028passed2.57 ms
    refuses the Spec when a Design value holds oneone line-ending law across the carriers > a TypeScript string holding U+2028passed1.75 ms
    refuses a Pack whose title holds oneone line-ending law across the carriers > a TypeScript string holding U+2028passed1.67 ms
    refuses a Pack whose framing holds oneone line-ending law across the carriers > a TypeScript string holding U+2028passed1.52 ms
    refuses the Spec when the narrative holds oneone line-ending law across the carriers > a TypeScript string holding U+2029passed1.46 ms
    refuses the Spec when an Intent field holds oneone line-ending law across the carriers > a TypeScript string holding U+2029passed1.74 ms
    refuses the Spec when a rule entry holds oneone line-ending law across the carriers > a TypeScript string holding U+2029passed6.39 ms
    refuses the Spec when an example step holds oneone line-ending law across the carriers > a TypeScript string holding U+2029passed2 ms
    refuses the Spec when a Model term holds oneone line-ending law across the carriers > a TypeScript string holding U+2029passed1.7 ms
    refuses the Spec when a Design value holds oneone line-ending law across the carriers > a TypeScript string holding U+2029passed1.65 ms
    refuses a Pack whose title holds oneone line-ending law across the carriers > a TypeScript string holding U+2029passed1.53 ms
    refuses a Pack whose framing holds oneone line-ending law across the carriers > a TypeScript string holding U+2029passed1.52 ms
    refuses a raw U+2028 inside a template literalone line-ending law across the carrierspassed2.27 ms
    refuses a raw U+2029 inside a template literalone line-ending law across the carrierspassed1.77 ms
    keeps LF and CRLF lawful in TypeScript proseone line-ending law across the carrierspassed3.67 ms
    keeps the Spec when a title assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (a lone CR)passed3.07 ms
    keeps the Spec when a narrative assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (a lone CR)passed1.92 ms
    keeps the Spec when a rule entry assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (a lone CR)passed2.37 ms
    keeps the Spec when a Design value assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (a lone CR)passed2 ms
    keeps the Spec when a whole-section assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (a lone CR)passed4.64 ms
    keeps the Spec when a Model terms assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (a lone CR)passed2.3 ms
    keeps a Pack whose title names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (a lone CR)passed1.72 ms
    keeps a Pack whose framing names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (a lone CR)passed1.67 ms
    still refuses one inside the asserted valueone line-ending law across the carriers > a TypeScript separator outside the kept strings (a lone CR)passed1.74 ms
    drops a repeated Design key alone, with its own warningone line-ending law across the carriers > a TypeScript separator outside the kept strings (a lone CR)passed2.27 ms
    drops a non-static Design value alone, with its own warningone line-ending law across the carriers > a TypeScript separator outside the kept strings (a lone CR)passed2.55 ms
    drops a Design value beside a non-static sibling in its array alone, with its own warningone line-ending law across the carriers > a TypeScript separator outside the kept strings (a lone CR)passed1.89 ms
    keeps the Spec when a title assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2028)passed1.8 ms
    keeps the Spec when a narrative assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2028)passed2.11 ms
    keeps the Spec when a rule entry assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2028)passed2 ms
    keeps the Spec when a Design value assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2028)passed1.93 ms
    keeps the Spec when a whole-section assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2028)passed2.3 ms
    keeps the Spec when a Model terms assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2028)passed1.94 ms
    keeps a Pack whose title names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2028)passed1.59 ms
    keeps a Pack whose framing names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2028)passed1.4 ms
    still refuses one inside the asserted valueone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2028)passed1.45 ms
    drops a repeated Design key alone, with its own warningone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2028)passed1.93 ms
    drops a non-static Design value alone, with its own warningone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2028)passed1.62 ms
    drops a Design value beside a non-static sibling in its array alone, with its own warningone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2028)passed1.8 ms
    keeps the Spec when a title assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2029)passed1.7 ms
    keeps the Spec when a narrative assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2029)passed1.65 ms
    keeps the Spec when a rule entry assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2029)passed1.66 ms
    keeps the Spec when a Design value assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2029)passed11.93 ms
    keeps the Spec when a whole-section assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2029)passed3.21 ms
    keeps the Spec when a Model terms assertion names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2029)passed5.05 ms
    keeps a Pack whose title names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2029)passed1.61 ms
    keeps a Pack whose framing names one only as a typeone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2029)passed4.57 ms
    still refuses one inside the asserted valueone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2029)passed1.59 ms
    drops a repeated Design key alone, with its own warningone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2029)passed4.91 ms
    drops a non-static Design value alone, with its own warningone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2029)passed1.78 ms
    drops a Design value beside a non-static sibling in its array alone, with its own warningone line-ending law across the carriers > a TypeScript separator outside the kept strings (U+2029)passed4.96 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:263
  • 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:1440
  • 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:126
  • impl:protocol.markdown-content: decodes located Markdown entries and typed fences · anchored code · src/extract/markdown-body-content.ts:12
  • 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:20
  • 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:271
  • impl:protocol.static-reification: reifies authored carriers from the AST and never evaluates them · anchored code · src/extract/reify.ts:2217
  • 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:22
  • test:protocol.markdown-body-grammar-regressions: checks Markdown body grammar refusals · anchored test binding · binding present · test/markdown-reifier.test.ts:102
  • 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-regressions verifies spec:carrier.markdown-body-grammar · 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:197 · 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:263 · layer domain · context protocol
    • component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:76 · 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:197 · 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:22 · 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.