Spec Studio

Every Spec id written in prose resolves

spec:validation.prose-mentionsBusiness Rule · storyready floor ready

Packs: pack:self-hosting-v1

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

Findings: no errors, no warnings

specs/validation/prose-mentions.sdp.md

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

Intent
outcome
Refuse a prose reference to an absent Spec or entry, and report a prose reference that no declared relation backs.
Rule
rule line 21 · specs/validation/prose-mentions.sdp.md:21
The validator id is conformance/prose-mentions, in the conformance family; it reads the graph's Primitive nodes, edges and location table and nothing else.
rule line 22 · specs/validation/prose-mentions.sdp.md:22
The scanned text of a Spec is its narrative and every string value under its sections, except the gwt-vocabulary fence at behavior.exampleSpace and the gwt fences that are object entries of behavior.examples. The title is not scanned. Scan order is the narrative first, then the sections in the serialized graph's order, then entries in their authored order.
rule line 23 · specs/validation/prose-mentions.sdp.md:23
A mention starts at spec: where the character before it, if any, is not an ASCII letter, an ASCII digit, or -. A backslash before ASCII punctuation is read as that punctuation, as Markdown reads an escape. The token ends at ASCII whitespace, at one of the ASCII delimiters ` " ' ( ) [ ] { } < > |, or at a character outside ASCII that is whitespace, U+0085 included, punctuation other than connector punctuation, a symbol, or a space, line, or paragraph separator, so every dash, ellipsis, typographic quote, and arrow ends it. Every other character stays in the token, letters, combining marks, digits, connector punctuation, control characters other than whitespace, and format, private-use, and unassigned characters among them. Trailing . , ; : ! ? * _ ~ are then removed after the prefix, so a sentence, a list, or emphasis may end in an id. When nothing remains after spec:, there is no mention, so a bare prefix or a placeholder such as spec:<id> stays prose. The whole token goes to parseId, so an underscore, a slash, a comma, a control character, or any character outside ASCII that stays in it refuses the whole token as malformed; the token is never cut short to the valid id before that character, and a refused token counts toward no pair. A token equal to the scanning Spec's own id is skipped.
rule line 24 · specs/validation/prose-mentions.sdp.md:24
An open question's links entry is checked whole as a Spec id or entry address, under spec:model.open-question-fields, at path intent.openQuestions[<i>].links[<j>]. It uses the same malformed-token error; an otherwise parsed id outside the Spec namespace has reason expected spec namespace.
rule line 25 · specs/validation/prose-mentions.sdp.md:25
A token that fails parseId is an error with the message Mention "<token>" in "<spec>" at <path> is not a Spec id or entry address: <reason>, where <reason> is the grammar's refusal text with its Invalid ID "<token>": prefix stripped.
rule line 26 · specs/validation/prose-mentions.sdp.md:26
A token whose Spec part names no Primitive node is an error with the message Mention in "<spec>" at <path> points to missing target "<token>"., followed by the referential-integrity nearest-id suggestion when one is unique.
rule line 27 · specs/validation/prose-mentions.sdp.md:27
A token whose Spec exists and whose entry address names no key of that design or ui section, names description there, names a question key no open question of that Spec carries, names a rule key that Spec's behavior.ruleKeys does not carry, or names a term key that Spec's model.termKeys does not carry, is an error with the message Mention in "<spec>" at <path> points to missing entry "<section>.<key>" of "<target>".
rule line 28 · specs/validation/prose-mentions.sdp.md:28
Errors are reported once per scanning Spec, text path, and distinct token; subjectId is the scanning Spec, relatedId the token as written, path the text path, and file the Spec's carrier. The path is narrative or the section path in the mention audit's form, such as intent.openQuestions[0].question, behavior.rules[2], design.step2, or model.terms.<term>.
rule line 29 · specs/validation/prose-mentions.sdp.md:29
A target Spec that exists and shares no declared refines, dependsOn, constrainedBy, decidedBy, verifies, or supersedes edge with the scanning Spec, in either direction, is one warning per scanning Spec and target Spec pair, counting every location where any token names that Spec or one of its entries. The message is Mention of "<target>" in "<spec>" at <n> locations, first at <path>, with no declared relation between them; informative only. Declare the relation that fits, or leave the mention as prose and let the warning stand when none does. with <n> the count of distinct paths, written 1 location when it is one, and <path> the first in scan order; subjectId is the scanning Spec, relatedId the target Spec id, path that first path, and file the Spec's carrier. An address on the scanning Spec's own id is checked for its entry and never warned.
rule line 30 · specs/validation/prose-mentions.sdp.md:30
A mention error or pair warning carries line when the location table records the corresponding text path; behavior.rules[<i>] uses rule[<i>], behavior.flows[<i>] uses flow[<i>], an open question's text uses question[<i>], a question field uses question[<i>].<field>, with each question link using the links row, and a Model term's definition, at model.terms.<term>, uses term[<i>]. Entries of Rule, Workflow and Contract use the same behavior paths as entries of Behavior. An unrecorded line is omitted.
rule line 31 · specs/validation/prose-mentions.sdp.md:31
The warning is honest when it stands: the six relations are typed, a mention that none of them describes is lawful prose, and no author declares a relation to silence the report. Warnings never fail sdp validate; the mention audit recipe reports every location of every pair as data and stays the way to list them at once.

11 unkeyed rules.

Verification

Verifier bindings

  • test:protocol.entry-locations · anchored · test anchor binding present · test/entry-locations.test.ts:14

    External run evidence from test/entry-locations.test.ts

    Test anchors: test:protocol.entry-locations. Specs verified by those bindings: spec:extraction.entry-locations, spec:validation.prose-mentions.

    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
    locates each Gherkin relation at its own tag and defaults at the Scenario lineentry locationspassed6.89 ms
    records Markdown Design, UI, keyed and unkeyed questions at their first item linesentry locationspassed10.91 ms
    locates Markdown question fields, rules, flows and declared relation targetsentry locationspassed3.53 ms
    records TypeScript property lines through transparent wrappersentry locationspassed23.94 ms
    locates TypeScript string questions and omits properties dropped as non-staticentry locationspassed6.38 ms
    locates Gherkin rules and relations while keeping open questions outside its grammarentry locationspassed4.73 ms
    sorts Specs and entries in code-unit order and serializes reversed rows identicallyentry locationspassed4.41 ms
    keeps Primitive and Pack nodes line-free when an edit above entries moves their linesentry locationspassed5.97 ms
    compares carrier parity on nodes and edges while locations differentry locationspassed7.87 ms
    serializes an empty table for entries without recorded carrier linesentry locationspassed1.38 ms
    extracts the location table byte-identically twiceentry locationspassed6.43 ms
    locates errors and warnings in behavior Behavior rule: entriesprose mention finding linespassed13.55 ms
    locates errors and warnings in behavior Behavior flow: entriesprose mention finding linespassed2.93 ms
    locates errors and warnings in rule Rule entriesprose mention finding linespassed3.2 ms
    locates errors and warnings in workflow Workflow entriesprose mention finding linespassed2.44 ms
    locates errors and warnings in workflow Workflow rule: entriesprose mention finding linespassed2.9 ms
    locates errors and warnings in contract Contract entriesprose mention finding linespassed2.05 ms
    locates question text, fields and links and omits an unrecorded lineprose mention finding linespassed1.95 ms
  • test:protocol.prose-mentions · verifies prose-mention resolution and the unbacked-pair warning · anchored · test anchor binding present · test/validators.test.ts:1321

    External run evidence from test/validators.test.ts

    Test anchors: test:protocol.prose-mentions. Specs verified by those bindings: spec:validation.prose-mentions.

    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
    reports referential integrity across relations, pack members, modelRefs, and bindingsgraph validatorspassed8.09 ms
    offers a "did you mean" suggestion only when one nearest id is unambiguous (L2)graph validatorspassed1.15 ms
    reports duplicate node ids — the graph backstop behind the extractor's per-site errorsgraph validatorspassed1.25 ms
    keeps the claim taxonomy uncollapsed: a declared satisfies edge violates the edge contractgraph validatorspassed0.96 ms
    admits no inferred edge on the ratified edge types: the claim ships designed-in and emptygraph validatorspassed1.09 ms
    rejects a node claim its nodeType never carriesgraph validatorspassed0.6 ms
    rejects wrong-kind endpoints on the kind-typed relations — constrainedBy, decidedBy, supersedesgraph validatorspassed1.42 ms
    accepts the valid kind-typed relation shapes — rule/constraint bounds, a decision decider, decision supersedes decisiongraph validatorspassed0.84 ms
    fails the anchors-resolve ready clause when a binding edge has no binding node behind itgraph validatorspassed0.9 ms
    reports a readiness-floor failure with the spec id, stated rung, and failing clausegraph validatorspassed0.83 ms
    surfaces the gap only while no verifier resolves — a derived fact silences it, a stated one never doesgraph validatorspassed2.67 ms
    exempts decision-kind Specs from the gap signal while other kinds still warngraph validatorspassed0.62 ms
    never lets an anchored verifies edge from a non-Anchor source enable an example — fail closedgraph validatorspassed4.46 ms
    refuses an oracle Anchor as the test binding for a direct verifiergraph validatorspassed4 ms
    refuses an oracle Anchor as the test binding for a example verifiergraph validatorspassed1.12 ms
    confers satisfies only when the duplicate target's first node is a Primitivegraph validatorspassed1.23 ms
    confers direct verifies only when the duplicate target's first node is a Primitivegraph validatorspassed2.01 ms
    confers example verifies only when the duplicate target's first node is a Primitivegraph validatorspassed2.84 ms
    rejects stated delivery facts the graph does not earn — derived, never authoredgraph validatorspassed0.38 ms
    rejects an omitted delivery fact the graph's resolving bindings derivegraph validatorspassed0.4 ms
    fails closed on unratified descriptor values — a conformance error, never a crash or a silent floor skipgraph validatorspassed0.42 ms
    returns a valid empty aggregate report without throwinggraph validatorspassed0.23 ms
    composes cleanly over a valid non-empty model with bindings, a pack, and a model-kind modelRefgraph validatorspassed0.67 ms
    reports nothing when every listed member has its one edge and every edge is listedconformance/pack-coherence — the members list and the belongsTo edges agreepassed0.28 ms
    names a listed member with no belongsTo edge into the packconformance/pack-coherence — the members list and the belongsTo edges agreepassed0.29 ms
    names a belongsTo edge whose source the members do not listconformance/pack-coherence — the members list and the belongsTo edges agreepassed0.24 ms
    names a listed member that is no Spec when no edge carries it, and defers to the edge contract when one doesconformance/pack-coherence — the members list and the belongsTo edges agreepassed0.64 ms
    leaves an absent listed member whose edge dangles to referential integrityconformance/pack-coherence — the members list and the belongsTo edges agreepassed0.59 ms
    leaves an unlisted belongsTo edge from an absent source to referential integrityconformance/pack-coherence — the members list and the belongsTo edges agreepassed0.39 ms
    leaves an unlisted belongsTo edge from a CodeNode to the edge contractconformance/pack-coherence — the members list and the belongsTo edges agreepassed0.35 ms
    names both membership counts when one listed member has two belongsTo edgesconformance/pack-coherence — the members list and the belongsTo edges agreepassed0.26 ms
    keeps the duplicate rule: a repeated member is named once, in authored order, with its countconformance/pack-coherence — the members list and the belongsTo edges agreepassed0.33 ms
    passes on its contract row (anchored, Anchor → Primitive) and confers no delivery factthe models edge — the oracle anchor's contract rowpassed0.4 ms
    rejects a declared claim on a models edge — the claim taxonomy is never collapsedthe models edge — the oracle anchor's contract rowpassed0.32 ms
    rejects an oracle target that does not own a behavior example spacethe models edge — the oracle anchor's contract rowpassed0.33 ms
    rejects competing oracle anchors for one parent example spacethe models edge — the oracle anchor's contract rowpassed0.37 ms
    rejects a models edge whose Anchor does not use the oracle namespacethe models edge — the oracle anchor's contract rowpassed0.37 ms
    accepts a rule-kind oracle target when the rule owns an example spacethe models edge — the oracle anchor's contract rowpassed0.23 ms
    rejects a models edge from a non-Anchor source — the endpoints are typedthe models edge — the oracle anchor's contract rowpassed0.25 ms
    flags a dangling models target through referential integrity, like every edgethe models edge — the oracle anchor's contract rowpassed0.31 ms
    refuses a malformed token with the id grammar's own reasonconformance/prose-mentions — prose mentions and their entry addressespassed0.7 ms
    refuses a missing target and suggests the unique nearest idconformance/prose-mentions — prose mentions and their entry addressespassed0.52 ms
    refuses a missing target without a suggestion on a tie, once per path and distinct tokenconformance/prose-mentions — prose mentions and their entry addressespassed0.95 ms
    refuses an entry address whose key the target's section does not holdconformance/prose-mentions — prose mentions and their entry addressespassed3.76 ms
    never resolves an address to a section's descriptionconformance/prose-mentions — prose mentions and their entry addressespassed0.47 ms
    resolves to an open question that carries the key, beside unkeyed and prose questionsconformance/prose-mentions — prose mentions and their entry addresses > a question addresspassed0.4 ms
    fails every mention of an old address once its key is renamedconformance/prose-mentions — prose mentions and their entry addresses > a question addresspassed0.38 ms
    finds no entry on a Spec whose questions carry no key, or that has noneconformance/prose-mentions — prose mentions and their entry addresses > a question addresspassed0.43 ms
    reads question keys only, never the Design or UI keys of the Specconformance/prose-mentions — prose mentions and their entry addresses > a question addresspassed0.33 ms
    treats description as an ordinary question keyconformance/prose-mentions — prose mentions and their entry addresses > a question addresspassed0.37 ms
    refuses a question address with a key off the grammar by the id grammar's reasonconformance/prose-mentions — prose mentions and their entry addresses > a question addresspassed0.78 ms
    checks a self-address for its entry and never warns on itconformance/prose-mentions — prose mentions and their entry addressespassed0.35 ms
    warns once for a pair across three locations, first in scan orderconformance/prose-mentions — prose mentions and their entry addressespassed8.1 ms
    writes one location in the singularconformance/prose-mentions — prose mentions and their entry addressespassed0.34 ms
    lets a declared relation in the reverse direction back the mentionconformance/prose-mentions — prose mentions and their entry addressespassed0.22 ms
    counts an address mention toward its pair, resolved or notconformance/prose-mentions — prose mentions and their entry addressespassed0.33 ms
    never scans the gwt and gwt-vocabulary fences, and skips them by position onlyconformance/prose-mentions — prose mentions and their entry addressespassed0.25 ms
    keeps authored order inside an object nested in design, so a nested description is not read firstconformance/prose-mentions — prose mentions and their entry addressespassed0.25 ms
    keeps authored order inside an object nested in ui, so a nested description is not read firstconformance/prose-mentions — prose mentions and their entry addressespassed0.19 ms
    scans arrays nested in behavior examples, as the mention audit doesconformance/prose-mentions — prose mentions and their entry addressespassed0.45 ms
    still warns on a pair joined only by an edge whose claim is anchoredconformance/prose-mentions — prose mentions and their entry addressespassed0.27 ms
    still warns on a pair joined only by an edge whose claim is inferredconformance/prose-mentions — prose mentions and their entry addressespassed0.17 ms
    resolves an address only to an own key, never an inherited oneconformance/prose-mentions — prose mentions and their entry addressespassed0.24 ms
    puts the pair warning's first path in authored entry order, with description firstconformance/prose-mentions — prose mentions and their entry addressespassed0.35 ms
    puts the pair warning's first path in a description authored after another mentioning entry, with description firstconformance/prose-mentions — prose mentions and their entry addressespassed0.19 ms
    suggests the nearest Spec id for a missing target written as an addressconformance/prose-mentions — prose mentions and their entry addressespassed0.23 ms
    reads the whole token through an underscore and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.3 ms
    reads the whole token through an underscore and a letter and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.21 ms
    reads the whole token through a slash and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.18 ms
    reads the whole token through a slash and a letter and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.18 ms
    reads the whole token through a comma and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.18 ms
    reads the whole token through a comma and a letter and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.18 ms
    reads the whole token through a letter outside ASCII and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.32 ms
    reads the whole token through an escaped underscore and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.23 ms
    reads the whole token through a combining mark and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.76 ms
    reads the whole token through a combining mark after an entry key and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.29 ms
    reads the whole token through a zero-width space and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.22 ms
    reads the whole token through fullwidth connector punctuation and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.2 ms
    reads the whole token through a NUL and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.21 ms
    reads the whole token through an escape character and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.19 ms
    reads the whole token through a delete character and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.21 ms
    reads the whole token through a C1 control character and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.19 ms
    reads the whole token through a hyphenated entry key and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.2 ms
    reads the whole token through an entry suffix with no key and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.18 ms
    reads the whole token through an entry suffix outside design, ui, question, and rule and refuses it, never the existing prefixconformance/prose-mentions — prose mentions and their entry addressespassed0.18 ms
    reads the clean id through Markdown punctuation: a sentence dotconformance/prose-mentions — prose mentions and their entry addressespassed0.23 ms
    reads the clean id through Markdown punctuation: a commaconformance/prose-mentions — prose mentions and their entry addressespassed0.18 ms
    reads the clean id through Markdown punctuation: a colonconformance/prose-mentions — prose mentions and their entry addressespassed0.26 ms
    reads the clean id through Markdown punctuation: a closing parenthesisconformance/prose-mentions — prose mentions and their entry addressespassed0.22 ms
    reads the clean id through Markdown punctuation: boldconformance/prose-mentions — prose mentions and their entry addressespassed0.18 ms
    reads the clean id through Markdown punctuation: emphasisconformance/prose-mentions — prose mentions and their entry addressespassed0.19 ms
    reads the clean id through Markdown punctuation: strikethroughconformance/prose-mentions — prose mentions and their entry addressespassed0.17 ms
    reads the clean id through Markdown punctuation: backticksconformance/prose-mentions — prose mentions and their entry addressespassed0.17 ms
    reads the clean id through Markdown punctuation: ASCII double quotesconformance/prose-mentions — prose mentions and their entry addressespassed0.15 ms
    reads the clean id through Markdown punctuation: ASCII single quotesconformance/prose-mentions — prose mentions and their entry addressespassed0.15 ms
    reads the clean id through Markdown punctuation: typographic double quotesconformance/prose-mentions — prose mentions and their entry addressespassed0.16 ms
    reads the clean id through Markdown punctuation: typographic single quotesconformance/prose-mentions — prose mentions and their entry addressespassed0.14 ms
    reads the clean id through Markdown punctuation: an em dashconformance/prose-mentions — prose mentions and their entry addressespassed0.14 ms
    reads the clean id through Markdown punctuation: an en dashconformance/prose-mentions — prose mentions and their entry addressespassed0.13 ms
    reads the clean id through Markdown punctuation: an ellipsisconformance/prose-mentions — prose mentions and their entry addressespassed0.16 ms
    reads the clean id through Markdown punctuation: an escaped starconformance/prose-mentions — prose mentions and their entry addressespassed0.14 ms
    reads the clean id through Markdown punctuation: an escaped exclamation markconformance/prose-mentions — prose mentions and their entry addressespassed0.13 ms
    reads the clean id through Markdown punctuation: U+0085conformance/prose-mentions — prose mentions and their entry addressespassed0.13 ms
    reads the clean id through Markdown punctuation: a no-break spaceconformance/prose-mentions — prose mentions and their entry addressespassed0.12 ms
    reads the clean id through Markdown punctuation: a tabconformance/prose-mentions — prose mentions and their entry addressespassed0.13 ms
    reads the clean id through Markdown punctuation: an arrowconformance/prose-mentions — prose mentions and their entry addressespassed0.13 ms
    reads a placeholder or a bare prefix as prose, not a mentionconformance/prose-mentions — prose mentions and their entry addressespassed0.19 ms
    strips a sentence-final dot from a tokenconformance/prose-mentions — prose mentions and their entry addressespassed0.23 ms
Design view

Requirement drawing

  • Declared verifying examples: no declared verifying example.
Requirement drawing for spec:validation.prose-mentions
The diagram as text
  • spec:validation.prose-mentions: Every Spec id written in prose resolves · declared Spec
  • spec:validation.referential-integrity: Every graph reference resolves · declared Spec
  • impl:protocol.entry-address-resolution: resolves entry addresses for prose validation and citation readers · anchored code · src/graph/entry-address.ts:6
  • impl:protocol.prose-mentions: checks that prose mentions resolve and warns once per unbacked Spec pair · anchored code · src/validate/validators.ts:1370
  • test:protocol.entry-locations: test:protocol.entry-locations · anchored test binding · binding present · test/entry-locations.test.ts:14
  • test:protocol.prose-mentions: verifies prose-mention resolution and the unbacked-pair warning · anchored test binding · binding present · test/validators.test.ts:1321
  • spec:validation.prose-mentions refines spec:validation.referential-integrity · declared
  • impl:protocol.entry-address-resolution satisfies spec:validation.prose-mentions · anchored
  • impl:protocol.prose-mentions satisfies spec:validation.prose-mentions · anchored
  • test:protocol.entry-locations verifies spec:validation.prose-mentions · anchored
  • test:protocol.prose-mentions verifies spec:validation.prose-mentions · 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

  • A Spec id written in prose is a checked mention

    A Spec id in narrative or section text, outside gwt and gwt-vocabulary fences, is a mention. A mention that does not resolve is a conformance error. A mention of another Spec that shares no declared relation with the mentioning Spec, in either direction, is one warning per mentioning Spec and target Spec pair, whatever the number of locations; an address on the mentioning Spec's own id is checked for its entry and never warned. An entry address is a Spec id followed by #, the section name design, ui, question, rule, or term, a dot, and the entry's lower-camel ASCII key, as in spec:<id>#design.<key> or spec:<id>#question.<key>. A design or ui address resolves when the Spec exists and that section holds the key as its own key, other than description; a question address resolves when the Spec exists and one of its open questions carries that key; a term address resolves when the Spec exists and one of its Model terms carries that key. The # sub-part is reserved for the entry address in every namespace: a Spec's own id, a relation target, a Pack member or model reference, an anchor id or target, and the specId and ref builders all refuse it. A mention mints no edge, and the reader gains no join.

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

    Uses

  • component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:72 · layer domain · context protocol

    Uses

  • impl:protocol.entry-address-resolution · resolves entry addresses for prose validation and citation readers · src/graph/entry-address.ts:6

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

    Uses

    None.

  • impl:protocol.prose-mentions · checks that prose mentions resolve and warns once per unbacked Spec pair · src/validate/validators.ts:1370

    Component: component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:72 · 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:validation.prose-mentions
The diagram as text
  • spec:consumers.obsidian-vault.notes: Every Spec, Pack, code unit and keyed term is a note, and every relation is a link
  • spec:consumers.spec-studio.shell: The Studio's shell frames every page with navigation, a rail and a canvas
  • spec:decisions.checked-mentions: A Spec id written in prose is a checked mention
  • spec:extraction.entry-citations: The graph records where anchored source cites an entry address
  • spec:model.open-question-fields: An open question may name who decides it, its links, a provisional reading and a re-entry trigger
  • spec:model.term-addresses: A Model term may carry a key that addresses it
  • spec:validation.prose-mentions: Every Spec id written in prose resolves
  • spec:validation.referential-integrity: Every graph reference resolves
  • spec:validation.prose-mentions decidedBy spec:decisions.checked-mentions · declared
  • spec:validation.prose-mentions dependsOn spec:model.open-question-fields · declared — the links field it checks whole is defined by the open-question field grammar
  • spec:validation.prose-mentions dependsOn spec:model.term-addresses · declared — a term address resolves through the Spec's term keys
  • spec:validation.prose-mentions refines spec:validation.referential-integrity · declared
  • spec:consumers.obsidian-vault.notes dependsOn spec:validation.prose-mentions · declared — a mention can become a link because validation already refuses one that does not resolve
  • spec:consumers.spec-studio.shell dependsOn spec:validation.prose-mentions · declared — a mention links where the validator resolves it
  • spec:extraction.entry-citations dependsOn spec:validation.prose-mentions · declared — a citation is a token the prose-mention scan would read, and resolves by the same address rules
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

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingA Spec id written in prose is a checked mention
spec:decisions.checked-mentions · resolves
declaredNoneNone
dependsOn · outgoingAn open question may name who decides it, its links, a provisional reading and a re-entry trigger
spec:model.open-question-fields · resolves
declaredthe links field it checks whole is defined by the open-question field grammarNone
dependsOn · outgoingA Model term may carry a key that addresses it
spec:model.term-addresses · resolves
declareda term address resolves through the Spec's term keysNone
refines · outgoingEvery graph reference resolves
spec:validation.referential-integrity · resolves
declaredNoneNone
dependsOn · incomingEvery Spec, Pack, code unit and keyed term is a note, and every relation is a link
spec:consumers.obsidian-vault.notes · resolves
declareda mention can become a link because validation already refuses one that does not resolveNone
dependsOn · incomingThe Studio's shell frames every page with navigation, a rail and a canvas
spec:consumers.spec-studio.shell · resolves
declareda mention links where the validator resolves itNone
dependsOn · incomingThe graph records where anchored source cites an entry address
spec:extraction.entry-citations · resolves
declareda citation is a token the prose-mention scan would read, and resolves by the same address rulesNone

Bindings

Implementation binding: present

  • impl:protocol.entry-address-resolution · resolves entry addresses for prose validation and citation readers · src/graph/entry-address.ts:6 · role reader · component component:protocol.graph · layer domain · context protocol
  • impl:protocol.prose-mentions · checks that prose mentions resolve and warns once per unbacked Spec pair · src/validate/validators.ts:1370 · role validator · component component:protocol.validate · layer domain · context protocol

Design reference: none

Verifier binding: present

  • test:protocol.entry-locations · anchored · test/entry-locations.test.ts:14 · test anchor
  • test:protocol.prose-mentions · verifies prose-mention resolution and the unbacked-pair warning · anchored · test/validators.test.ts:1321 · 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.