Spec Studio

Resolving bindings confer direct delivery facts

spec:extraction.delivery-factsUse Case / Behavior · storyready floor ready

Packs: pack:self-hosting-v1

Design: no design entries · no pinned declarations · 1 decision

Findings: no errors, no warnings

specs/extraction/delivery-facts.sdp.md

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

Intent
outcome
State the shared delivery-fact conferral law used by extraction, the delivery-facts honesty check and the reader's verifier eligibility checks.
Behavior
rule line 16 · specs/extraction/delivery-facts.sdp.md:16
Delivery facts are derived from resolving graph edges and are never authored.
rule line 17 · specs/extraction/delivery-facts.sdp.md:17
implemented is conferred only by an anchored satisfies edge that resolves to the Spec — its source is a CodeNode present in the graph; a dangling or off-contract binding confers nothing.
rule line 18 · specs/extraction/delivery-facts.sdp.md:18
has-verifier is conferred by an anchored verifies edge that resolves to the Spec from a test anchor, an Anchor node in the test: namespace, present in the graph, or by a declared verifies edge from an enabled verifier that resolves to it.
rule line 19 · specs/extraction/delivery-facts.sdp.md:19
An enabled verifier is an example-kind Spec that declares verifies to a target and is itself backed by a resolving anchored verifies edge from a test anchor. A declared verifier without that binding confers nothing; binding says nothing about whether a run passed.
rule line 20 · specs/extraction/delivery-facts.sdp.md:20
Both facts are direct and per-target; neither propagates through refines.
rule line 21 · specs/extraction/delivery-facts.sdp.md:21
observed is never computed; it remains the aspirational liveness rung.
rule line 22 · specs/extraction/delivery-facts.sdp.md:22
An edge the claim-separation check would reject confers no fact, so any graph producer other than the extractor is fail-closed.
rule line 23 · specs/extraction/delivery-facts.sdp.md:23
Binding eligibility resolves ids through the same first node in node order as the graph index; the duplicate-ids check reports the ambiguity.
rule line 24 · specs/extraction/delivery-facts.sdp.md:24
The extractor, the delivery-facts honesty check, and the reader's enabled decode share the one conferral computation and its two eligibility predicates, so the three surfaces can never disagree.
rule line 25 · specs/extraction/delivery-facts.sdp.md:25
Facts are emitted in ladder order — implemented, then has-verifier.

10 unkeyed rules.

Design

Shared policy. Extraction, validation, and the reader use one graph-level delivery-fact computation and its eligibility predicates. The graph component owns the policy; callers own graph construction, diagnostics, and decoded views. Keeping that computation below its callers prevents each consumer from maintaining a separate interpretation of binding eligibility.

Verification

Verifier bindings

  • test:protocol.delivery-facts · verifies the delivery-fact conferral ladder and fail-closed posture · anchored · test anchor binding present · test/extract.test.ts:1402

    External run evidence from test/extract.test.ts

    Test anchors: test:protocol.delivery-facts, test:protocol.extract. Specs verified by those bindings: spec:extraction.delivery-facts, spec:extraction.derive-graph.

    Run 1: external run evidence from vitest 4.1.10

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

    NameSuiteResultDuration
    invalid-non-static-id: envelope hard error; the static sibling still extracts (L3)extraction corporapassed23.81 ms
    invalid-malformed-id: a static id failing the id grammar is an invalid-id hard errorextraction corporapassed5.63 ms
    invalid-non-static-section: that one property drops with a warning; the spec survivesextraction corporapassed4.75 ms
    invalid-hand-authored-satisfies-edge: a raw relations[] entry is an envelope errorextraction corporapassed6.29 ms
    duplicate-id: TypeScript and Markdown sites are excluded before graph derivation; the healthy sibling remainsextraction corporapassed15.13 ms
    dangling-relation: the edge is emitted, not dropped; referential integrity flags itextraction corporapassed14.79 ms
    unrecognized-statement: the stray statement warns and is ignored; the spec extractsextraction corporapassed5.36 ms
    invalid-reserved-property: a hand-authored delivery fact at the top level is an envelope hard error; the sibling survives (L3)extraction corporapassed5.81 ms
    unrecognized-property: a typoed section name drops with a warning; the spec survives without itextraction corporapassed3.43 ms
    unrecognized in-section property: warns before canonical serialization drops itextraction corporapassed3.26 ms
    model term named description: both carriers extract it as an ordinary term in its authored placeextraction corporapassed6.42 ms
    integer-like keys: refuses numeric and string integer-like names in design and keeps the Spec with its other keysextraction corporapassed2.77 ms
    integer-like keys: refuses an integer-like name in uiextraction corporapassed2.12 ms
    integer-like keys: refuses an integer-like name in model termsextraction corporapassed2.14 ms
    integer-like keys: the string keys 00 and 01 in design are lawful and keep their values and orderextraction corporapassed2.09 ms
    integer-like keys: the string keys 00 and 01 in ui are lawful and keep their values and orderextraction corporapassed1.75 ms
    integer-like keys: the string keys 00 and 01 in model terms are lawful and keep their values and orderextraction corporapassed2.67 ms
    integer-like keys: refuses the key in design whatever its value (a static value), with one error and the Spec keptextraction corporapassed1.69 ms
    integer-like keys: refuses the key in design whatever its value (a call), with one error and the Spec keptextraction corporapassed2.24 ms
    integer-like keys: refuses the key in design whatever its value (an unbound identifier), with one error and the Spec keptextraction corporapassed1.96 ms
    integer-like keys: refuses the key in design whatever its value (a template with an expression), with one error and the Spec keptextraction corporapassed1.78 ms
    integer-like keys: refuses the key in design whatever its value (an object with a non-static entry), with one error and the Spec keptextraction corporapassed1.58 ms
    integer-like keys: refuses the key in ui whatever its value (a static value), with one error and the Spec keptextraction corporapassed1.49 ms
    integer-like keys: refuses the key in ui whatever its value (a call), with one error and the Spec keptextraction corporapassed1.72 ms
    integer-like keys: refuses the key in ui whatever its value (an unbound identifier), with one error and the Spec keptextraction corporapassed1.63 ms
    integer-like keys: refuses the key in ui whatever its value (a template with an expression), with one error and the Spec keptextraction corporapassed1.66 ms
    integer-like keys: refuses the key in ui whatever its value (an object with a non-static entry), with one error and the Spec keptextraction corporapassed1.62 ms
    integer-like keys: refuses the key in model terms whatever its value (a static value), with one error and the Spec keptextraction corporapassed5.28 ms
    integer-like keys: refuses the key in model terms whatever its value (a call), with one error and the Spec keptextraction corporapassed1.79 ms
    integer-like keys: refuses the key in model terms whatever its value (an unbound identifier), with one error and the Spec keptextraction corporapassed1.25 ms
    integer-like keys: refuses the key in model terms whatever its value (a template with an expression), with one error and the Spec keptextraction corporapassed1.43 ms
    integer-like keys: refuses the key in model terms whatever its value (an object with a non-static entry), with one error and the Spec keptextraction corporapassed1.28 ms
    integer-like keys: refuses design's integer-like name on a method, one error per member and the Spec keptextraction corporapassed1.86 ms
    integer-like keys: refuses design's integer-like name on a string-named method, one error per member and the Spec keptextraction corporapassed1.39 ms
    integer-like keys: refuses design's integer-like name on a numeric-separator-named method, one error per member and the Spec keptextraction corporapassed1.51 ms
    integer-like keys: refuses design's integer-like name on a getter, one error per member and the Spec keptextraction corporapassed1.7 ms
    integer-like keys: refuses design's integer-like name on a numeric-separator-named getter, one error per member and the Spec keptextraction corporapassed1.34 ms
    integer-like keys: refuses design's integer-like name on a setter, one error per member and the Spec keptextraction corporapassed1.31 ms
    integer-like keys: refuses design's integer-like name on a numeric-separator-named setter, one error per member and the Spec keptextraction corporapassed1.16 ms
    integer-like keys: refuses design's integer-like name on a getter and a setter of one name, one error per member and the Spec keptextraction corporapassed1.13 ms
    integer-like keys: refuses ui's integer-like name on a method, one error per member and the Spec keptextraction corporapassed1.44 ms
    integer-like keys: refuses ui's integer-like name on a string-named method, one error per member and the Spec keptextraction corporapassed1.23 ms
    integer-like keys: refuses ui's integer-like name on a numeric-separator-named method, one error per member and the Spec keptextraction corporapassed1.36 ms
    integer-like keys: refuses ui's integer-like name on a getter, one error per member and the Spec keptextraction corporapassed1.23 ms
    integer-like keys: refuses ui's integer-like name on a numeric-separator-named getter, one error per member and the Spec keptextraction corporapassed1.25 ms
    integer-like keys: refuses ui's integer-like name on a setter, one error per member and the Spec keptextraction corporapassed1.17 ms
    integer-like keys: refuses ui's integer-like name on a numeric-separator-named setter, one error per member and the Spec keptextraction corporapassed1.32 ms
    integer-like keys: refuses ui's integer-like name on a getter and a setter of one name, one error per member and the Spec keptextraction corporapassed1.04 ms
    integer-like keys: refuses model terms's integer-like name on a method, one error per member and the Spec keptextraction corporapassed1.23 ms
    integer-like keys: refuses model terms's integer-like name on a string-named method, one error per member and the Spec keptextraction corporapassed1.29 ms
    integer-like keys: refuses model terms's integer-like name on a numeric-separator-named method, one error per member and the Spec keptextraction corporapassed1.36 ms
    integer-like keys: refuses model terms's integer-like name on a getter, one error per member and the Spec keptextraction corporapassed1.31 ms
    integer-like keys: refuses model terms's integer-like name on a numeric-separator-named getter, one error per member and the Spec keptextraction corporapassed1.11 ms
    integer-like keys: refuses model terms's integer-like name on a setter, one error per member and the Spec keptextraction corporapassed1.69 ms
    integer-like keys: refuses model terms's integer-like name on a numeric-separator-named setter, one error per member and the Spec keptextraction corporapassed2.59 ms
    integer-like keys: refuses model terms's integer-like name on a getter and a setter of one name, one error per member and the Spec keptextraction corporapassed1.54 ms
    integer-like keys: a numeric name in design whose key is not integer-like (1.5, value "static") drops as a non-static nameextraction corporapassed1.56 ms
    integer-like keys: a numeric name in design whose key is not integer-like (1.5, value compute()) drops as a non-static nameextraction corporapassed1.14 ms
    integer-like keys: a numeric name in design whose key is not integer-like (0.0000001, value "static") drops as a non-static nameextraction corporapassed1.7 ms
    integer-like keys: a numeric name in design whose key is not integer-like (0.0000001, value compute()) drops as a non-static nameextraction corporapassed1.18 ms
    integer-like keys: a numeric name in design whose key is not integer-like (0.000_000_1, value "static") drops as a non-static nameextraction corporapassed1.21 ms
    integer-like keys: a numeric name in design whose key is not integer-like (0.000_000_1, value compute()) drops as a non-static nameextraction corporapassed1.25 ms
    integer-like keys: a numeric name in design whose key is not integer-like (1e21, value "static") drops as a non-static nameextraction corporapassed1.16 ms
    integer-like keys: a numeric name in design whose key is not integer-like (1e21, value compute()) drops as a non-static nameextraction corporapassed1.12 ms
    integer-like keys: a numeric name in design whose key is not integer-like (1_0e21, value "static") drops as a non-static nameextraction corporapassed5.93 ms
    integer-like keys: a numeric name in design whose key is not integer-like (1_0e21, value compute()) drops as a non-static nameextraction corporapassed1.38 ms
    integer-like keys: a numeric name in ui whose key is not integer-like (1.5, value "static") drops as a non-static nameextraction corporapassed1.18 ms
    integer-like keys: a numeric name in ui whose key is not integer-like (1.5, value compute()) drops as a non-static nameextraction corporapassed1.39 ms
    integer-like keys: a numeric name in ui whose key is not integer-like (0.0000001, value "static") drops as a non-static nameextraction corporapassed1.66 ms
    integer-like keys: a numeric name in ui whose key is not integer-like (0.0000001, value compute()) drops as a non-static nameextraction corporapassed1.78 ms
    integer-like keys: a numeric name in ui whose key is not integer-like (0.000_000_1, value "static") drops as a non-static nameextraction corporapassed1.42 ms
    integer-like keys: a numeric name in ui whose key is not integer-like (0.000_000_1, value compute()) drops as a non-static nameextraction corporapassed1.48 ms
    integer-like keys: a numeric name in ui whose key is not integer-like (1e21, value "static") drops as a non-static nameextraction corporapassed1.51 ms
    integer-like keys: a numeric name in ui whose key is not integer-like (1e21, value compute()) drops as a non-static nameextraction corporapassed2.18 ms
    integer-like keys: a numeric name in ui whose key is not integer-like (1_0e21, value "static") drops as a non-static nameextraction corporapassed1.18 ms
    integer-like keys: a numeric name in ui whose key is not integer-like (1_0e21, value compute()) drops as a non-static nameextraction corporapassed1.16 ms
    integer-like keys: a numeric name in model terms whose key is not integer-like (1.5, value "static") drops as a non-static nameextraction corporapassed1.36 ms
    integer-like keys: a numeric name in model terms whose key is not integer-like (1.5, value compute()) drops as a non-static nameextraction corporapassed1.35 ms
    integer-like keys: a numeric name in model terms whose key is not integer-like (0.0000001, value "static") drops as a non-static nameextraction corporapassed1.13 ms
    integer-like keys: a numeric name in model terms whose key is not integer-like (0.0000001, value compute()) drops as a non-static nameextraction corporapassed1.1 ms
    integer-like keys: a numeric name in model terms whose key is not integer-like (0.000_000_1, value "static") drops as a non-static nameextraction corporapassed0.91 ms
    integer-like keys: a numeric name in model terms whose key is not integer-like (0.000_000_1, value compute()) drops as a non-static nameextraction corporapassed2.31 ms
    integer-like keys: a numeric name in model terms whose key is not integer-like (1e21, value "static") drops as a non-static nameextraction corporapassed3.62 ms
    integer-like keys: a numeric name in model terms whose key is not integer-like (1e21, value compute()) drops as a non-static nameextraction corporapassed1.34 ms
    integer-like keys: a numeric name in model terms whose key is not integer-like (1_0e21, value "static") drops as a non-static nameextraction corporapassed0.95 ms
    integer-like keys: a numeric name in model terms whose key is not integer-like (1_0e21, value compute()) drops as a non-static nameextraction corporapassed0.96 ms
    integer-like keys: a numeric name in design whose key is integer-like (1e3, value "static") is refused under that keyextraction corporapassed1.1 ms
    integer-like keys: a numeric name in design whose key is integer-like (1e3, value compute()) is refused under that keyextraction corporapassed1.3 ms
    integer-like keys: a numeric name in design whose key is integer-like (0x10, value "static") is refused under that keyextraction corporapassed1.39 ms
    integer-like keys: a numeric name in design whose key is integer-like (0x10, value compute()) is refused under that keyextraction corporapassed1.26 ms
    integer-like keys: a numeric name in design whose key is integer-like (1_0, value "static") is refused under that keyextraction corporapassed1.23 ms
    integer-like keys: a numeric name in design whose key is integer-like (1_0, value compute()) is refused under that keyextraction corporapassed1.2 ms
    integer-like keys: a numeric name in design whose key is integer-like (1_000, value "static") is refused under that keyextraction corporapassed1.15 ms
    integer-like keys: a numeric name in design whose key is integer-like (1_000, value compute()) is refused under that keyextraction corporapassed1.17 ms
    integer-like keys: a numeric name in ui whose key is integer-like (1e3, value "static") is refused under that keyextraction corporapassed1.21 ms
    integer-like keys: a numeric name in ui whose key is integer-like (1e3, value compute()) is refused under that keyextraction corporapassed1.35 ms
    integer-like keys: a numeric name in ui whose key is integer-like (0x10, value "static") is refused under that keyextraction corporapassed0.97 ms
    integer-like keys: a numeric name in ui whose key is integer-like (0x10, value compute()) is refused under that keyextraction corporapassed0.92 ms
    integer-like keys: a numeric name in ui whose key is integer-like (1_0, value "static") is refused under that keyextraction corporapassed3.85 ms
    integer-like keys: a numeric name in ui whose key is integer-like (1_0, value compute()) is refused under that keyextraction corporapassed1.06 ms
    integer-like keys: a numeric name in ui whose key is integer-like (1_000, value "static") is refused under that keyextraction corporapassed1.03 ms
    integer-like keys: a numeric name in ui whose key is integer-like (1_000, value compute()) is refused under that keyextraction corporapassed1.18 ms
    integer-like keys: a numeric name in model terms whose key is integer-like (1e3, value "static") is refused under that keyextraction corporapassed1.14 ms
    integer-like keys: a numeric name in model terms whose key is integer-like (1e3, value compute()) is refused under that keyextraction corporapassed1.27 ms
    integer-like keys: a numeric name in model terms whose key is integer-like (0x10, value "static") is refused under that keyextraction corporapassed1.21 ms
    integer-like keys: a numeric name in model terms whose key is integer-like (0x10, value compute()) is refused under that keyextraction corporapassed1.14 ms
    integer-like keys: a numeric name in model terms whose key is integer-like (1_0, value "static") is refused under that keyextraction corporapassed1.17 ms
    integer-like keys: a numeric name in model terms whose key is integer-like (1_0, value compute()) is refused under that keyextraction corporapassed1.23 ms
    integer-like keys: a numeric name in model terms whose key is integer-like (1_000, value "static") is refused under that keyextraction corporapassed1.1 ms
    integer-like keys: a numeric name in model terms whose key is integer-like (1_000, value compute()) is refused under that keyextraction corporapassed1.12 ms
    reserved camel delivery fact: rejects hasVerifier at the TS carrier envelope (R-6 parity)extraction corporapassed1.03 ms
    retains a nested __proto__ model term as own string contentextraction corporapassed1.09 ms
    retains an object-valued nested __proto__ term without prototype pollutionextraction corporapassed1.56 ms
    retains a Markdown __proto__ Model term through extract and serializeGraphextraction corporapassed1.86 ms
    id-shaped-string-content: a raw id-shaped string in section content is prose — kept, edge-free, finding-freeextraction corporapassed2.07 ms
    invalid-parse-error: a parse-broken file is excluded whole, loudly, on both surfaces; siblings survive (L3)extraction corporapassed3.82 ms
    invalid-missing-envelope-fields: every absent required field reports in one pass — spec, pack, and anchor carriersextraction corporapassed4.6 ms
    invalid-duplicate-property: a property authored twice in one carrier fails the envelope loudly; the last value never winsextraction corporapassed3.21 ms
    ref-in-section-content: an id builder in section content drops the owning property (MD-10)extraction corporapassed2.09 ms
    invalid-wrong-builder: an id wrapping the wrong builder is an invalid-id hard error — the builder's contract, restated staticallyextraction corporapassed1.92 ms
    opaque-envelope-entries: a shorthand or spread entry never double-reports its fields as missingextraction corporapassed2.18 ms
    duplicate-section-property: a repeated name inside section content drops with a warning; the first authored value survivesextraction corporapassed1.82 ms
    entry-address-slots: every TypeScript id slot refuses an entry address, and no # reaches the graphextraction corporapassed13.09 ms
    entry-address-slots: anchor verifies refuses an entry address, and no # reaches the graphextraction corporapassed8.18 ms
    entry-address-slots: anchor models refuses an entry address, and no # reaches the graphextraction corporapassed3.4 ms
    entry-address-slots: anchor component refuses an entry address, and no # reaches the graphextraction corporapassed3.23 ms
    entry-address-slots: anchor uses refuses an entry address, and no # reaches the graphextraction corporapassed2.97 ms
    entry-address-slots: the Pack identity refuses an entry address, and no # reaches the graphextraction corporapassed2.85 ms
    entry-address-slots: the test anchor identity refuses an entry address, and no # reaches the graphextraction corporapassed4.9 ms
    entry-address-slots: the oracle anchor identity refuses an entry address, and no # reaches the graphextraction corporapassed3.52 ms
    entry-address-slots: the API anchor identity refuses an entry address, and no # reaches the graphextraction corporapassed2.98 ms
    routes the five defused target documents through real discovery with their exact nodesMarkdown carrier discoverypassed8.89 ms
    derives semantically equivalent accepted subsets through extract and serializeGraphMarkdown carrier discoverypassed4.45 ms
    excludes a malformed Markdown carrier while retaining its healthy TypeScript siblingMarkdown carrier discoverypassed2.91 ms
    reports same-ID TypeScript and Markdown carriers at both sites without deriving eitherMarkdown carrier discoverypassed3.53 ms
    anchored-binding: the full ladder — anchored edges and delivery facts per `spec:extraction.delivery-facts`anchor extraction corporapassed7.9 ms
    unenabled-verifier: a below-ready example confers nothing; a wrong-kind verifier still warnsanchor extraction corporapassed4.11 ms
    invalid-non-static-anchor: envelope hard error; the static sibling still extracts (L3)anchor extraction corporapassed4.19 ms
    invalid-anchor-namespace: a code anchor with a test: id is an invalid-id hard erroranchor extraction corporapassed1.99 ms
    duplicate-anchor-id: both sites reported (L2); neither enters the graph; the counts record bothanchor extraction corporapassed7.29 ms
    dangling-anchor: the edge is emitted, no fact is conferred, and referential integrity flags itanchor extraction corporapassed2.74 ms
    misplaced-anchor: authoring calls outside their surface warn and are not extractedanchor extraction corporapassed2.3 ms
    non-static-anchor-label: the label drops with a warning; the binding survives wholeanchor extraction corporapassed1.94 ms
    namespace-import: carriers authored as `ns.builder(…)` extract on both surfaces — the full anchored ladderimport-surface and discovery corporapassed4.05 ms
    namespace-misplaced-authoring: the misplaced-authoring sweep sees the property-access spelling (L2)import-surface and discovery corporapassed3.16 ms
    dot-directory-skipped: discovery never descends into a dot-directory, so a stray copy raises no duplicate-id noiseimport-surface and discovery corporapassed2.78 ms
    shadowed-namespace-local: a parameter or local shadowing the import is somebody else's value — no spurious misplaced-authoringimport-surface and discovery corporapassed3.54 ms
    default-import: a binding authored through a default-import local extracts — it never silently falls out (L2)import-surface and discovery corporapassed1.83 ms
    consumer exclusions are case-sensitive root-relative prefixes applied before either surface classifiesimport-surface and discovery corporapassed7.81 ms
    rejects the invalid consumer exclusion ""import-surface and discovery corporapassed1.19 ms
    rejects the invalid consumer exclusion "."import-surface and discovery corporapassed0.52 ms
    rejects the invalid consumer exclusion "./explorations"import-surface and discovery corporapassed0.33 ms
    rejects the invalid consumer exclusion "explorations/"import-surface and discovery corporapassed0.36 ms
    rejects the invalid consumer exclusion "/explorations"import-surface and discovery corporapassed0.33 ms
    rejects the invalid consumer exclusion "C:/work/specs"import-surface and discovery corporapassed0.3 ms
    rejects the invalid consumer exclusion "../x"import-surface and discovery corporapassed0.28 ms
    rejects the invalid consumer exclusion "a/../b"import-surface and discovery corporapassed0.3 ms
    rejects the invalid consumer exclusion "a/./b"import-surface and discovery corporapassed0.52 ms
    rejects the invalid consumer exclusion "a/."import-surface and discovery corporapassed0.51 ms
    rejects the invalid consumer exclusion "a//b"import-surface and discovery corporapassed0.48 ms
    rejects the invalid consumer exclusion "a\\b"import-surface and discovery corporapassed0.41 ms
    invalid-ready-with-unresolved-dependency: the conformance error and the floor failure both fire — two families, two statementsgraph-validator corporapassed3.37 ms
    invalid-ready-with-target-below-defined: every reference resolves; the one error is the floor clausegraph-validator corporapassed3.58 ms
    invalid-hand-authored-delivery-fact-in-section: the smuggled key fails over the graph end-to-end (MD-16)graph-validator corporapassed1.89 ms
    invalid-duplicate-pack-member: a duplicated manifest entry is a pack-coherence errorgraph-validator corporapassed2.97 ms
    invalid-non-model-modelref: a resolving but wrong-kind modelRef is a pack-coherence errorgraph-validator corporapassed3.14 ms
    non-example-verifier: a declared verifies from a non-example kind is surfaced, never gatedgraph-validator corporapassed2.46 ms
    orphan-spec: no relations and nothing pointing at it — a warning, never a gategraph-validator corporapassed1.31 ms
    ready-without-verifier: the cleared floor plus the surfaced gap — informative onlygraph-validator corporapassed2.82 ms
    two independent extractions of the example serialize byte-identicallydeterminism self-check (rebuild twice, byte-compare — distinct from the golden oracle)passed60.25 ms
    materializes a defused .sdp.gherkin carrier and leaves ordinary .feature beside it on diskGherkin carrier suffix discoverypassed0.66 ms
    discovers and routes only .sdp.gherkin; an ordinary Cucumber Feature never enters specFiles or poisons extractionGherkin carrier suffix discoverypassed2.75 ms
    treats a root of only ordinary .feature files as an empty authored model at the extractorGherkin carrier suffix discoverypassed0.46 ms
    admits a lawful key beside prose and unkeyed questionsopen question keys in the TypeScript carrierpassed1.6 ms
    drops a key off the grammar with an error and keeps the question and the Specopen question keys in the TypeScript carrierpassed4.25 ms
    drops a key an earlier question carries, keeping the firstopen question keys in the TypeScript carrierpassed6.66 ms
    derives a graph where only the first of a repeated key remainsopen question keys in the TypeScript carrierpassed1.73 ms
    derives ready when no question blocks — the control for every case belowopen question keys in the TypeScript carrier > a non-static key drops alone and the blocking sibling holds readinesspassed3.9 ms
    strips a key that is null and keeps the question and its blocking siblingopen question keys in the TypeScript carrier > a non-static key drops alone and the blocking sibling holds readinesspassed2.83 ms
    strips a key that is undefined and keeps the question and its blocking siblingopen question keys in the TypeScript carrier > a non-static key drops alone and the blocking sibling holds readinesspassed5.99 ms
    strips a key that is a function and keeps the question and its blocking siblingopen question keys in the TypeScript carrier > a non-static key drops alone and the blocking sibling holds readinesspassed3.1 ms
    strips a key that is an identifier and keeps the question and its blocking siblingopen question keys in the TypeScript carrier > a non-static key drops alone and the blocking sibling holds readinesspassed2.88 ms
    strips a key that is a template with a substitution and keeps the question and its blocking siblingopen question keys in the TypeScript carrier > a non-static key drops alone and the blocking sibling holds readinesspassed2.77 ms
    drops a repeated key alone and keeps the blocking siblingopen question keys in the TypeScript carrier > a non-static key drops alone and the blocking sibling holds readinesspassed6.38 ms
    admits an omitted key beside the blocking siblingopen question keys in the TypeScript carrier > a non-static key drops alone and the blocking sibling holds readinesspassed4.62 ms
    keeps every other property strict: a non-static question still drops the arrayopen question keys in the TypeScript carrier > a non-static key drops alone and the blocking sibling holds readinesspassed4.76 ms
Design view

Requirement drawing

  • Declared verifying examples: no declared verifying example.
Requirement drawing for spec:extraction.delivery-facts
The diagram as text
  • spec:extraction.delivery-facts: Resolving bindings confer direct delivery facts · declared Spec
  • spec:extraction.derive-graph: Carrier reification derives the one graph · declared Spec
  • impl:protocol.delivery-facts: computes delivery facts from resolving binding edges · anchored code · src/graph/delivery-facts.ts:65
  • test:protocol.delivery-facts: verifies the delivery-fact conferral ladder and fail-closed posture · anchored test binding · binding present · test/extract.test.ts:1402
  • spec:extraction.delivery-facts refines spec:extraction.derive-graph · declared
  • impl:protocol.delivery-facts satisfies spec:extraction.delivery-facts · anchored
  • test:protocol.delivery-facts verifies spec:extraction.delivery-facts · anchored
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred and chosen syntax: requirementDiagram; exact refines, satisfies and verifies, with claim words in nodes and per-edge comments.

Decisions

Runtime
  • component:protocol.graph · the one graph and its semantic decisions · src/graph/schema.ts:34 · layer domain · context protocol

    Uses

  • impl:protocol.delivery-facts · computes delivery facts from resolving binding edges · src/graph/delivery-facts.ts:65

    Component: component:protocol.graph · the one graph and its semantic decisions · src/graph/schema.ts:34 · layer domain · context protocol

    Uses

    None.

Runtime observation: not tracked.

Evidence

Runtime observation: not tracked.

Build attestations: not tracked.

Deployments: not tracked.

Bills of materials: not tracked.

Impact
Relations of spec:extraction.delivery-facts
The diagram as text
  • spec:consumers.capability-map: The capability map reads every epic and its refinement descendants
  • spec:consumers.reader: The reader bridges agent entry points to composable graph context
  • spec:decisions.binding-not-liveness: Bindings state existence, not liveness
  • spec:extraction.delivery-facts: Resolving bindings confer direct delivery facts
  • spec:extraction.derive-graph: Carrier reification derives the one graph
  • spec:observation.run-evidence: CI run records are joined to verifiers in a view
  • spec:validation.authored-honesty: Machine truth is never authored
  • spec:extraction.delivery-facts decidedBy spec:decisions.binding-not-liveness · declared
  • spec:extraction.delivery-facts refines spec:extraction.derive-graph · declared
  • spec:consumers.capability-map dependsOn spec:extraction.delivery-facts · declared — rollups count direct bindings without conferring facts on ancestors
  • spec:consumers.reader dependsOn spec:extraction.delivery-facts · declared
  • spec:extraction.derive-graph dependsOn spec:extraction.delivery-facts · declared — computes delivery facts by the shared conferral law
  • spec:observation.run-evidence dependsOn spec:extraction.delivery-facts · declared — the view reads verifier bindings while leaving their delivery facts unchanged
  • spec:validation.authored-honesty dependsOn spec:extraction.delivery-facts · 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

Distance 8

Distance 9

Distance 10

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingBindings state existence, not liveness
spec:decisions.binding-not-liveness · resolves
declaredNoneNone
refines · outgoingCarrier reification derives the one graph
spec:extraction.derive-graph · resolves
declaredNoneNone
dependsOn · incomingThe capability map reads every epic and its refinement descendants
spec:consumers.capability-map · resolves
declaredrollups count direct bindings without conferring facts on ancestorsNone
dependsOn · incomingThe reader bridges agent entry points to composable graph context
spec:consumers.reader · resolves
declaredNoneNone
dependsOn · incomingCarrier reification derives the one graph
spec:extraction.derive-graph · resolves
declaredcomputes delivery facts by the shared conferral lawNone
dependsOn · incomingCI run records are joined to verifiers in a view
spec:observation.run-evidence · resolves
declaredthe view reads verifier bindings while leaving their delivery facts unchangedNone
dependsOn · incomingMachine truth is never authored
spec:validation.authored-honesty · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.delivery-facts · computes delivery facts from resolving binding edges · src/graph/delivery-facts.ts:65 · role decider · component component:protocol.graph · layer domain · context protocol

Design reference: none

Verifier binding: present

  • test:protocol.delivery-facts · verifies the delivery-fact conferral ladder and fail-closed posture · anchored · test/extract.test.ts:1402 · 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.