Spec Studio

Gherkin authoring enters the one graph

spec:carrier.gherkin-authoringUse Case / Behavior · featureready floor ready

Packs: pack:self-hosting-v1

Design: 1 design entry · no pinned declarations · 5 decisions

Findings: no errors, no warnings

specs/carrier/gherkin-authoring.sdp.md

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

Intent
outcome
Author behavior and example Specs in Gherkin without creating a second graph or execution path.
Behavior
rule line 26 · specs/carrier/gherkin-authoring.sdp.md:26
One .sdp.gherkin file carries exactly one behavior Spec as its Feature and zero or more example Specs as ordinary Scenarios, with one canonical carrier surface per Spec ID.
rule line 27 · specs/carrier/gherkin-authoring.sdp.md:27
A .sdp.gherkin file uses Gherkin's English dialect, by default or under # language: en; any other # language: header refuses the file at that line with extract/gherkin-grammar.
rule.identityTags line 28 · specs/carrier/gherkin-authoring.sdp.md:28
A Feature and each ordinary Scenario carry exactly one @spec.<dotted-id> tag, with the Spec id's spec: prefix omitted, one @altitude.<value> tag taking epic, feature or story, and one @readiness.<value> tag taking idea, scoped, defined or ready.

no example exercises it

rule line 29 · specs/carrier/gherkin-authoring.sdp.md:29
Kind is structural: a Feature carries a behavior Spec and an ordinary Scenario carries an example Spec; Pack membership stays manifest-owned.
rule.kindBound line 30 · specs/carrier/gherkin-authoring.sdp.md:30
A .sdp.gherkin carrier holds only behavior and example Specs; the Markdown and TypeScript carriers remain lawful for the other kinds, under spec:decisions.carrier-universality.

no example exercises it

rule.relationTags line 31 · specs/carrier/gherkin-authoring.sdp.md:31
A relation tag is a head, a dot and a full Spec id, as in @depends-on.spec:carrier.slot-notation, and the heads @refines., @depends-on., @constrained-by., @decided-by. and @verifies. declare refines, dependsOn, constrainedBy, decidedBy and verifies; an ordinary Scenario defaults refines and verifies to its Feature unless it explicitly declares that relation type.

no example exercises it

rule line 32 · specs/carrier/gherkin-authoring.sdp.md:32
@exercises.<key> on an ordinary Scenario names a rule key of the Spec it verifies, and it and a Rule title key follow spec:model.rule-keys; @kind., @pack, @pack. and @supersedes. are refused.
rule line 33 · specs/carrier/gherkin-authoring.sdp.md:33
A tag whose head, compared case-insensitively, is implemented, has-verifier, hasVerifier, observed, claim, status, lifecycle, workflow or architect, followed by the end of the tag, . or -, is refused, so the carrier authors no delivery fact, claim, lifecycle state or workflow status.
rule.decorationTags line 34 · specs/carrier/gherkin-authoring.sdp.md:34
A tag whose head has a unique nearest reserved head, within one edit of a reserved head of at most five letters or two edits of a longer one, is refused, and the refusal suggests that head only when its suggested form is lawful; every other tag, @wip included, is decoration and authors no graph state.

no example exercises it

rule.descriptionKeys line 35 · specs/carrier/gherkin-authoring.sdp.md:35
A keyed Feature or ordinary Scenario description line has the form - <key>: <value> with a nonempty value; actor, problem, outcome, value and description occur at most once and populate Intent, risk and assumption repeat in Intent, criterion repeats in Verification, and verification-mode occurs at most once with manual, reviewed, contract or executable.

no example exercises it

rule line 36 · specs/carrier/gherkin-authoring.sdp.md:36
An unknown description key or a heading-shaped description line is refused at its physical source line, despite blanks and comments; remaining non-heading prose is narrative, lawful only as free prose on the typed prose owners named by the prose-ownership decision, spec:decisions.prose-ownership, and never a new field or a parser within a parser.
rule line 37 · specs/carrier/gherkin-authoring.sdp.md:37
The carrier has no form for open questions, their fields, or a relation reason; a Spec that needs one is authored in Markdown.
rule line 38 · specs/carrier/gherkin-authoring.sdp.md:38
Trailing title-only Rule blocks populate behavior rules in source order, and a Rule title may open with a rule key marker, [#key] and a space; a Rule carrying tags, description, or positionally nested children is refused.
rule line 39 · specs/carrier/gherkin-authoring.sdp.md:39
At most one @example-space pseudo-scenario supplies the parent vocabulary without producing a Spec node, while each ordinary Scenario supplies exactly one bound example point.
rule line 40 · specs/carrier/gherkin-authoring.sdp.md:40
An ordinary Scenario and an @example-space pseudo-scenario must each carry at least one step; a step-less Scenario is refused at its Scenario line without inventing a complete-GWT rule.
rule line 41 · specs/carrier/gherkin-authoring.sdp.md:41
Gherkin steps reuse the Protocol-owned slot notation; conjunctions inherit the preceding phase, and outlines, backgrounds, star steps, doc strings, data tables, and leading conjunctions are refused.
rule line 42 · specs/carrier/gherkin-authoring.sdp.md:42
A step of an ordinary Scenario or of the @example-space pseudo-scenario may open its text with a step key marker, [#key] and a space, after its keyword, And included, under spec:carrier.step-keys.
rule line 43 · specs/carrier/gherkin-authoring.sdp.md:43
Independent semantic Gherkin findings accumulate in physical source order up to a hard cap of 100; any semantic finding excludes the entire invalid carrier from the graph while healthy sibling files survive.
rule line 44 · specs/carrier/gherkin-authoring.sdp.md:44
Gherkin is a canonical authoring carrier rather than a Cucumber execution path; generated contracts and resolving code-side anchors remain the execution and delivery-fact boundary.
rule line 45 · specs/carrier/gherkin-authoring.sdp.md:45
Markdown remains the default Spec carrier; a default flip to Gherkin is refused before full honest round-trip exists.
rule line 46 · specs/carrier/gherkin-authoring.sdp.md:46
Packs follow the Pack syntax ruling, spec:decisions.pack-markdown-carrier; this carrier neither admits a Gherkin Pack surface nor reopens the Pack Markdown envelope.
rule line 47 · specs/carrier/gherkin-authoring.sdp.md:47
Universality is a generated Gherkin-shaped read projection of any Spec, never an authored .sdp.gherkin in an authored tree and never round-trip parity.

17 unkeyed rules.

Verifying examples

An authored delivery fact lookalike is refused · spec:carrier.gherkin-authoring.authored-fact-refused · ready floor ready

Executable Spec

Given the Gherkin fixture corpus {probe: "authored-fact"}
When the fixture corpus is extracted and validated
Then extraction reports {findingCount: 1} findings
Then the first finding is {findingId: "extract/gherkin-grammar"} at line {line: 1}
Then the graph omits the Spec {absentId: "spec:fixture.authored-fact"}

Open example

Markdown and Gherkin twins derive equal graphs and contracts · spec:carrier.gherkin-authoring.contract-parity · ready floor ready

Executable Spec

Given the Gherkin fixture corpus {probe: "parity"}
When the fixture corpus is extracted and validated
Then extraction reports {findingCount: 0} findings
Then the graph for {parityLeft: "twin.sdp.md"} equals the graph for {parityRight: "twin.sdp.gherkin"}
Then the contracts for {parityLeft: "twin.sdp.md"} equal the contracts for {parityRight: "twin.sdp.gherkin"}

Open example

A bad description key reports its physical source line · spec:carrier.gherkin-authoring.description-location-refused · ready floor ready

Executable Spec

Given the Gherkin fixture corpus {probe: "description-location-refusal"}
When the fixture corpus is extracted and validated
Then extraction reports {findingCount: 1} findings
Then the first finding is {findingId: "extract/gherkin-grammar"} at line {line: 6}
Then the graph omits the Spec {absentId: "spec:fixture.desc-loc-refusal"}

Open example

Duplicate Markdown and Gherkin surfaces are both excluded · spec:carrier.gherkin-authoring.duplicate-surface-refused · ready floor ready

Executable Spec

Given the Gherkin fixture corpus {probe: "duplicate-surface"}
When the fixture corpus is extracted and validated
Then extraction reports {findingCount: 2} findings
Then the report contains finding {findingId: "extract/duplicate-id"}
Then the graph omits the Spec {absentId: "spec:fixture.surface-duplicate"}
Then no graph edge names the absent Spec {absentId: "spec:fixture.surface-duplicate"}
Then the graph contains the Spec {specId: "spec:fixture.surface-sibling"} with kind {specKind: "example"}

Open example

The pseudo-scenario supplies example space without a node · spec:carrier.gherkin-authoring.example-space-extraction · ready floor ready

Executable Spec

Given the Gherkin fixture corpus {probe: "example-space"}
When the fixture corpus is extracted and validated
Then extraction reports {findingCount: 0} findings
Then the graph contains exactly {specCount: 2} Specs
Then the parent example space contains {spaceStep: "Given a cart containing {item:string}"}
Then the graph omits the Spec {absentId: "spec:fixture.example-space"}

Open example

A malformed relation target is refused · spec:carrier.gherkin-authoring.malformed-relation-refused · ready floor ready

Executable Spec

Given the Gherkin fixture corpus {probe: "malformed-relation"}
When the fixture corpus is extracted and validated
Then extraction reports {findingCount: 1} findings
Then the first finding is {findingId: "extract/invalid-id"} at line {line: 4}
Then the graph omits the Spec {absentId: "spec:fixture.malformed-relation"}

Open example

A Feature without identity is refused · spec:carrier.gherkin-authoring.missing-id-refused · ready floor ready

Executable Spec

Given the Gherkin fixture corpus {probe: "missing-id"}
When the fixture corpus is extracted and validated
Then extraction reports {findingCount: 1} findings
Then the first finding is {findingId: "extract/gherkin-grammar"} at line {line: 3}
Then the graph omits the Spec {absentId: "spec:fixture.missing-id"}

Open example

Multiple findings exclude one carrier and keep a healthy sibling · spec:carrier.gherkin-authoring.multi-finding-bounded · ready floor ready

Executable Spec

Given the Gherkin fixture corpus {probe: "multi-finding"}
When the fixture corpus is extracted and validated
Then extraction reports {findingCount: 4} findings
Then the first finding is {findingId: "extract/gherkin-grammar"} at line {line: 1}
Then the graph contains exactly {specCount: 1} Specs
Then the graph omits the Spec {absentId: "spec:fixture.invalid-parent"}
Then no graph edge names the absent Spec {absentId: "spec:fixture.invalid-child"}
Then the graph contains the Spec {specId: "spec:fixture.healthy-sibling"} with kind {specKind: "behavior"}

Open example

A Feature and Scenario enter the graph as parent and child · spec:carrier.gherkin-authoring.parent-child-extraction · ready floor ready

Executable Spec

Given the Gherkin fixture corpus {probe: "parent-child"}
When the fixture corpus is extracted and validated
Then extraction reports {findingCount: 0} findings
Then the graph contains exactly {specCount: 2} Specs
Then the graph contains the Spec {specId: "spec:fixture.gherkin-parent"} with kind {specKind: "behavior"}
Then the graph contains the child Spec {childId: "spec:fixture.gherkin-child"} with kind {specKind: "example"}
Then the child Spec {childId: "spec:fixture.gherkin-child"} declares {relationType: "refines"} to {relationTarget: "spec:fixture.gherkin-parent"}
Then the child Spec {childId: "spec:fixture.gherkin-child"} declares the additional relation {relationType: "verifies"} to {relationTarget: "spec:fixture.gherkin-parent"}

Open example

A step-less Scenario is refused at its Scenario line · spec:carrier.gherkin-authoring.step-less-scenario-refused · ready floor ready

Executable Spec

Given the Gherkin fixture corpus {probe: "step-less"}
When the fixture corpus is extracted and validated
Then extraction reports {findingCount: 1} findings
Then the first finding is {findingId: "extract/gherkin-grammar"} at line {line: 5}
Then the graph omits the Spec {absentId: "spec:fixture.step-less"}

Open example

A Gherkin example with an unbound used slot fails its stated readiness floor · spec:carrier.gherkin-authoring.unbound-ready-refused · ready floor ready

Executable Spec

Given the Gherkin fixture corpus {probe: "unbound-ready"}
When the fixture corpus is extracted and validated
Then validation reports {findingCount: 3} findings
Then the report contains finding {findingId: "honesty/readiness-floor"}
Then the graph contains the Spec {specId: "spec:fixture.unbound-ready"} with kind {specKind: "example"}

Open example

A graph-aware tag near miss is refused · spec:carrier.gherkin-authoring.unknown-tag-refused · ready floor ready

Executable Spec

Given the Gherkin fixture corpus {probe: "unknown-tag"}
When the fixture corpus is extracted and validated
Then extraction reports {findingCount: 1} findings
Then the first finding is {findingId: "extract/gherkin-grammar"} at line {line: 1}
Then the first finding message contains {messageText: "did you mean"}
Then the graph omits the Spec {absentId: "spec:fixture.unknown-tag"}

Open example

A Scenario Outline is refused · spec:carrier.gherkin-authoring.unsupported-construct-refused · ready floor ready

Executable Spec

Given the Gherkin fixture corpus {probe: "unsupported-construct"}
When the fixture corpus is extracted and validated
Then extraction reports {findingCount: 1} findings
Then the first finding is {findingId: "extract/gherkin-grammar"} at line {line: 7}
Then the graph omits the Spec {absentId: "spec:fixture.outline"}

Open example

Example space

Given the Gherkin fixture corpus {probe:string}
When the fixture corpus is extracted and validated
Then extraction reports {findingCount:number} findings
Then validation reports {findingCount:number} findings
Then the first finding is {findingId:string} at line {line:number}
Then the first finding message contains {messageText:string}
Then the report contains finding {findingId:string}
Then the graph contains exactly {specCount:number} Specs
Then the graph contains the Spec {specId:string} with kind {specKind:"behavior"|"example"}
Then the graph contains the child Spec {childId:string} with kind {specKind:"behavior"|"example"}
Then the child Spec {childId:string} declares {relationType:string} to {relationTarget:string}
Then the child Spec {childId:string} declares the additional relation {relationType:string} to {relationTarget:string}
Then the graph omits the Spec {absentId:string}
Then no graph edge names the absent Spec {absentId:string}
Then the parent example space contains {spaceStep:string}
Then the graph for {parityLeft:string} equals the graph for {parityRight:string}
Then the contracts for {parityLeft:string} equal the contracts for {parityRight:string}
Design
reservedTagHeads line 50 · specs/carrier/gherkin-authoring.sdp.md:50
the reserved heads are spec, altitude, readiness, refines, depends-on, constrained-by, decided-by, verifies, exercises, kind, pack, supersedes and example-space; the near-miss refusal measures a tag head against them.
Verification

Verifier bindings

Example space

  • probe · string · declared by the Gherkin fixture corpus {probe}

Bound points

Oracle binding: none

Coverage

probe: "authored-fact" · spec:carrier.gherkin-authoring.authored-fact-refused; "parity" · spec:carrier.gherkin-authoring.contract-parity; "description-location-refusal" · spec:carrier.gherkin-authoring.description-location-refused; "duplicate-surface" · spec:carrier.gherkin-authoring.duplicate-surface-refused; "example-space" · spec:carrier.gherkin-authoring.example-space-extraction; "malformed-relation" · spec:carrier.gherkin-authoring.malformed-relation-refused; "missing-id" · spec:carrier.gherkin-authoring.missing-id-refused; "multi-finding" · spec:carrier.gherkin-authoring.multi-finding-bounded; "parent-child" · spec:carrier.gherkin-authoring.parent-child-extraction; "step-less" · spec:carrier.gherkin-authoring.step-less-scenario-refused; "unbound-ready" · spec:carrier.gherkin-authoring.unbound-ready-refused; "unknown-tag" · spec:carrier.gherkin-authoring.unknown-tag-refused; "unsupported-construct" · spec:carrier.gherkin-authoring.unsupported-construct-refused · not enumerable

Unbound

  • probe: None
Design view

Requirement drawing

Requirement drawing for spec:carrier.gherkin-authoring
The diagram as text
  • spec:carrier.gherkin-authoring: Gherkin authoring enters the one graph · 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-authoring: Markdown authoring enters the one graph · declared Spec
  • spec:validation.kind-evidence: Each kind carries its own evidence · declared Spec
  • 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
  • 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
  • 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
  • impl:protocol.gherkin-authoring satisfies spec:carrier.gherkin-authoring · anchored
  • impl:protocol.gherkin-kind-policy satisfies spec:carrier.gherkin-authoring · 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
Mermaid source

Copyable source; the Studio draws static SVG.

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

Decisions

  • Carrier universality is bounded by honest kind structure

    In order, first, Gherkin remains an honest canonical per-ID option only for behavior (Feature) and example (ordinary Scenario); the other six kinds stay Markdown because a Gherkin mapping would lie against the kind-evidence table — workflow has no distinct Gherkin root and Feature mapping erases the kind; rule collides with Rule: already consumed as inline behavior.rules; constraint needs machine-readable targets a Scenario cannot own; model needs keyed terms; decision needs context/decision/rationale/consequences (and supersedes) that Feature structure cannot distinguish; contract shares the behavior family row but Feature cannot structurally mark the kind. Second, rich content is ruled by physical form: Feature and Scenario description prose (keyed description bullets and remaining non-heading prose) is lawful only as free prose on the prose owners the prose-ownership law (MD-19) names — narrative or description on the typed owner — never a new field and never a parser-within-a-parser beyond enumerated constructs; Gherkin DocStrings and DataTables remain refused. Third, "universal" means per-ID carriers plus a generated Gherkin-shaped READ projection of any Spec (visibly generated, disposable, lossy commentary allowed for refused kinds), not one default authored carrier for everything and not a lossless codec. Fourth, the corpus default does not flip: Markdown remains the default Spec carrier; a default flip is refused before full honest round-trip exists. Fifth, Packs are out of this ruling; the Pack syntax ruling (MD-25) remains the Pack carrier law.

  • Behavior and example Specs may use Gherkin canonically

    A behavior or example Spec ID may select a graph-aware Gherkin carrier as a lawful canonical per-ID option. Markdown remains the default, each ID has exactly one canonical surface with no mixing, and Gherkin derives the existing graph shape and executes only through generated contracts plus anchored code-side handlers. Its syntax maps onto the existing envelope, sections, relations, and notation; it creates no parallel lifecycle status or tag registry.

  • Packs have a Markdown manifest carrier

    A Pack's Markdown carrier is a .sdp.md file routed by the pack: envelope id namespace, closed to id · specs · modelRefs, with the H1 as title and remaining prose as framing; the TypeScript pack() builder stays a lawful per-ID option and the import source.

  • Prose belongs to typed graph owners

    Free prose is stored as a narrative or a description on its typed owner; unowned prose is refused.

  • Canonical Gherkin carriers use .sdp.gherkin

    Canonical graph-aware Gherkin Specs use the .sdp.gherkin suffix. Discovery is suffix-only: .sdp.gherkin files are Gherkin carriers, and bare .feature files are not. Bare .feature remains non-canonical territory for import sources, foreign corpora, and historical lineage, never a second live canonical surface. This ruling does not change which Spec kinds may choose Gherkin, does not flip the default carrier away from Markdown, and does not admit dual-suffix discovery or content sniffing.

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.gherkin-authoring · reifies Gherkin behavior and example authoring into the one carrier path · src/extract/gherkin.ts:1323

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

    Uses

    • impl:protocol.gherkin-kind-policy · shared Gherkin kind-refusal and loss explanations · src/extract/gherkin-kind-honesty.ts:6
  • impl:protocol.gherkin-kind-policy · shared Gherkin kind-refusal and loss explanations · src/extract/gherkin-kind-honesty.ts:6

    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.gherkin-authoring
The diagram as text
  • spec:carrier.gherkin-authoring: Gherkin authoring enters the one graph
  • spec:carrier.gherkin-authoring.authored-fact-refused: An authored delivery fact lookalike is refused
  • spec:carrier.gherkin-authoring.contract-parity: Markdown and Gherkin twins derive equal graphs and contracts
  • spec:carrier.gherkin-authoring.description-location-refused: A bad description key reports its physical source line
  • spec:carrier.gherkin-authoring.duplicate-surface-refused: Duplicate Markdown and Gherkin surfaces are both excluded
  • spec:carrier.gherkin-authoring.example-space-extraction: The pseudo-scenario supplies example space without a node
  • spec:carrier.gherkin-authoring.malformed-relation-refused: A malformed relation target is refused
  • spec:carrier.gherkin-authoring.missing-id-refused: A Feature without identity is refused
  • spec:carrier.gherkin-authoring.multi-finding-bounded: Multiple findings exclude one carrier and keep a healthy sibling
  • spec:carrier.gherkin-authoring.parent-child-extraction: A Feature and Scenario enter the graph as parent and child
  • spec:carrier.gherkin-authoring.step-less-scenario-refused: A step-less Scenario is refused at its Scenario line
  • spec:carrier.gherkin-authoring.unbound-ready-refused: A Gherkin example with an unbound used slot fails its stated readiness floor
  • spec:carrier.gherkin-authoring.unknown-tag-refused: A graph-aware tag near miss is refused
  • spec:carrier.gherkin-authoring.unsupported-construct-refused: A Scenario Outline is refused
  • spec:carrier.markdown-authoring: Markdown authoring enters the one graph
  • spec:carrier.slot-notation: Slot notation declares, binds, and refuses to guess
  • spec:carrier.step-keys: An example step may carry a key that survives rewording
  • spec:consumers.authoring-on-ramp: Authors move one Spec from intent to reviewed evidence
  • spec:decisions.carrier-universality: Carrier universality is bounded by honest kind structure
  • spec:decisions.gherkin-carrier-option: Behavior and example Specs may use Gherkin canonically
  • spec:decisions.pack-markdown-carrier: Packs have a Markdown manifest carrier
  • spec:decisions.prose-ownership: Prose belongs to typed graph owners
  • spec:decisions.sdp-gherkin-extension: Canonical Gherkin carriers use .sdp.gherkin
  • spec:model.rule-keys: A rule or flow entry may carry a key that addresses it
  • spec:carrier.gherkin-authoring decidedBy spec:decisions.carrier-universality · declared
  • spec:carrier.gherkin-authoring decidedBy spec:decisions.gherkin-carrier-option · declared
  • spec:carrier.gherkin-authoring decidedBy spec:decisions.pack-markdown-carrier · declared
  • spec:carrier.gherkin-authoring decidedBy spec:decisions.prose-ownership · declared
  • spec:carrier.gherkin-authoring decidedBy spec:decisions.sdp-gherkin-extension · declared
  • spec:carrier.gherkin-authoring dependsOn spec:carrier.slot-notation · declared
  • spec:carrier.gherkin-authoring dependsOn spec:carrier.step-keys · declared — a step may open with a step key marker
  • spec:carrier.gherkin-authoring dependsOn spec:model.rule-keys · declared
  • spec:carrier.gherkin-authoring refines spec:carrier.markdown-authoring · declared
  • spec:consumers.authoring-on-ramp dependsOn spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.authored-fact-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.contract-parity refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.description-location-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.duplicate-surface-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.example-space-extraction refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.malformed-relation-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.missing-id-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.multi-finding-bounded refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.parent-child-extraction refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.step-less-scenario-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.unbound-ready-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.unknown-tag-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.unsupported-construct-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 verifies 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 verifies 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 verifies 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 verifies 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 verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.unbound-ready-refused verifies 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 verifies spec:carrier.gherkin-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 · outgoingCarrier universality is bounded by honest kind structure
spec:decisions.carrier-universality · resolves
declaredNoneNone
decidedBy · outgoingBehavior and example Specs may use Gherkin canonically
spec:decisions.gherkin-carrier-option · resolves
declaredNoneNone
decidedBy · outgoingPacks have a Markdown manifest carrier
spec:decisions.pack-markdown-carrier · resolves
declaredNoneNone
decidedBy · outgoingProse belongs to typed graph owners
spec:decisions.prose-ownership · resolves
declaredNoneNone
decidedBy · outgoingCanonical Gherkin carriers use .sdp.gherkin
spec:decisions.sdp-gherkin-extension · resolves
declaredNoneNone
dependsOn · outgoingSlot notation declares, binds, and refuses to guess
spec:carrier.slot-notation · resolves
declaredNoneNone
dependsOn · outgoingAn example step may carry a key that survives rewording
spec:carrier.step-keys · resolves
declareda step may open with a step key markerNone
dependsOn · outgoingA rule or flow entry may carry a key that addresses it
spec:model.rule-keys · resolves
declaredNoneNone
refines · outgoingMarkdown authoring enters the one graph
spec:carrier.markdown-authoring · resolves
declaredNoneNone
dependsOn · incomingAuthors move one Spec from intent to reviewed evidence
spec:consumers.authoring-on-ramp · resolves
declaredNoneNone
refines · incomingAn authored delivery fact lookalike is refused
spec:carrier.gherkin-authoring.authored-fact-refused · resolves
declaredNoneNone
refines · incomingMarkdown and Gherkin twins derive equal graphs and contracts
spec:carrier.gherkin-authoring.contract-parity · resolves
declaredNoneNone
refines · incomingA bad description key reports its physical source line
spec:carrier.gherkin-authoring.description-location-refused · resolves
declaredNoneNone
refines · incomingDuplicate Markdown and Gherkin surfaces are both excluded
spec:carrier.gherkin-authoring.duplicate-surface-refused · resolves
declaredNoneNone
refines · incomingThe pseudo-scenario supplies example space without a node
spec:carrier.gherkin-authoring.example-space-extraction · resolves
declaredNoneNone
refines · incomingA malformed relation target is refused
spec:carrier.gherkin-authoring.malformed-relation-refused · resolves
declaredNoneNone
refines · incomingA Feature without identity is refused
spec:carrier.gherkin-authoring.missing-id-refused · resolves
declaredNoneNone
refines · incomingMultiple findings exclude one carrier and keep a healthy sibling
spec:carrier.gherkin-authoring.multi-finding-bounded · resolves
declaredNoneNone
refines · incomingA Feature and Scenario enter the graph as parent and child
spec:carrier.gherkin-authoring.parent-child-extraction · resolves
declaredNoneNone
refines · incomingA step-less Scenario is refused at its Scenario line
spec:carrier.gherkin-authoring.step-less-scenario-refused · resolves
declaredNoneNone
refines · incomingA Gherkin example with an unbound used slot fails its stated readiness floor
spec:carrier.gherkin-authoring.unbound-ready-refused · resolves
declaredNoneNone
refines · incomingA graph-aware tag near miss is refused
spec:carrier.gherkin-authoring.unknown-tag-refused · resolves
declaredNoneNone
refines · incomingA Scenario Outline is refused
spec:carrier.gherkin-authoring.unsupported-construct-refused · resolves
declaredNoneNone
verifies · incomingAn authored delivery fact lookalike is refused
spec:carrier.gherkin-authoring.authored-fact-refused · resolves
declaredNoneNone
verifies · incomingMarkdown and Gherkin twins derive equal graphs and contracts
spec:carrier.gherkin-authoring.contract-parity · resolves
declaredNoneNone
verifies · incomingA bad description key reports its physical source line
spec:carrier.gherkin-authoring.description-location-refused · resolves
declaredNoneNone
verifies · incomingDuplicate Markdown and Gherkin surfaces are both excluded
spec:carrier.gherkin-authoring.duplicate-surface-refused · resolves
declaredNoneNone
verifies · incomingThe pseudo-scenario supplies example space without a node
spec:carrier.gherkin-authoring.example-space-extraction · resolves
declaredNoneNone
verifies · incomingA malformed relation target is refused
spec:carrier.gherkin-authoring.malformed-relation-refused · resolves
declaredNoneNone
verifies · incomingA Feature without identity is refused
spec:carrier.gherkin-authoring.missing-id-refused · resolves
declaredNoneNone
verifies · incomingMultiple findings exclude one carrier and keep a healthy sibling
spec:carrier.gherkin-authoring.multi-finding-bounded · resolves
declaredNoneNone
verifies · incomingA Feature and Scenario enter the graph as parent and child
spec:carrier.gherkin-authoring.parent-child-extraction · resolves
declaredNoneNone
verifies · incomingA step-less Scenario is refused at its Scenario line
spec:carrier.gherkin-authoring.step-less-scenario-refused · resolves
declaredNoneNone
verifies · incomingA Gherkin example with an unbound used slot fails its stated readiness floor
spec:carrier.gherkin-authoring.unbound-ready-refused · resolves
declaredNoneNone
verifies · incomingA graph-aware tag near miss is refused
spec:carrier.gherkin-authoring.unknown-tag-refused · resolves
declaredNoneNone
verifies · incomingA Scenario Outline is refused
spec:carrier.gherkin-authoring.unsupported-construct-refused · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.gherkin-authoring · reifies Gherkin behavior and example authoring into the one carrier path · src/extract/gherkin.ts:1323 · role extractor · component component:protocol.extract · layer application · context protocol
  • impl:protocol.gherkin-kind-policy · shared Gherkin kind-refusal and loss explanations · src/extract/gherkin-kind-honesty.ts:6 · role decider · component component:protocol.extract · layer application · context protocol

Design reference: none

Verifier binding: present

Expected-outcome oracle: none

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.