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 380 · Branch: feature/roadmap-and-slices-v0 · Commit: 34909918bf0be0e849959644401797191cae379f · Start: 2026-10-22T17:40:31.456Z · Stop: 2026-10-22T17:42:16.171Z

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