Spec Studio

A mention of an entry that does not exist stays as written

spec:consumers.obsidian-vault.notes.unresolved-mention-staysExample / Scenario · storyready floor ready

Packs: pack:obsidian-vault-v1, pack:self-hosting-v1

Design: no design entries · no pinned declarations · no decisions

Findings: no errors, no warnings

specs/consumers/obsidian-vault.notes.unresolved-mention-stays.sdp.md

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

Intent
outcome
Execute the mention rule on an entry address whose key its Spec does not carry, which validation reports and the vault leaves unlinked.
Behavior

Examples

Given a corpus holding the Spec {source: "spec:probe.source"} whose narrative mentions {mention: "spec:probe.target#design.missing"}
Given the Spec {target: "spec:probe.target"} keys the Design entry {key: "limit"}
When the vault command runs over that corpus
Then the mention renders as {rendered: "spec:probe.target#design.missing"}
Verification

Verifier bindings

  • test:protocol.consumers.obsidian-vault.notes.unresolved-mention-stays · anchored · test anchor binding present · test/vault-examples.test.ts:726

    External run evidence from test/vault-examples.test.ts

    Test anchors: test:protocol.consumers.obsidian-vault.bases.views-match-sources, test:protocol.consumers.obsidian-vault.changed-note-refused, test:protocol.consumers.obsidian-vault.failed-extraction-keeps-notes, test:protocol.consumers.obsidian-vault.failed-extraction-recovered, test:protocol.consumers.obsidian-vault.fresh-vault, test:protocol.consumers.obsidian-vault.hidden-file-refused, test:protocol.consumers.obsidian-vault.interrupted-run-recovered, test:protocol.consumers.obsidian-vault.iteration.watch-rewrites-changed-notes, test:protocol.consumers.obsidian-vault.iteration.watch-source-anchor, test:protocol.consumers.obsidian-vault.notes.case-collision-refused, test:protocol.consumers.obsidian-vault.notes.entry-address-link, test:protocol.consumers.obsidian-vault.notes.term-address-link, test:protocol.consumers.obsidian-vault.notes.unresolved-mention-stays, test:protocol.consumers.obsidian-vault.person-notes-survive, test:protocol.consumers.obsidian-vault.unknown-note-refused, test:protocol.consumers.obsidian-vault.vault-in-build-path-refused. Specs verified by those bindings: spec:consumers.obsidian-vault, spec:consumers.obsidian-vault.bases, spec:consumers.obsidian-vault.bases.views-match-sources, spec:consumers.obsidian-vault.changed-note-refused, spec:consumers.obsidian-vault.failed-extraction-keeps-notes, spec:consumers.obsidian-vault.failed-extraction-recovered, spec:consumers.obsidian-vault.fresh-vault, spec:consumers.obsidian-vault.hidden-file-refused, spec:consumers.obsidian-vault.interrupted-run-recovered, spec:consumers.obsidian-vault.iteration, spec:consumers.obsidian-vault.iteration.watch-rewrites-changed-notes, spec:consumers.obsidian-vault.iteration.watch-source-anchor, spec:consumers.obsidian-vault.notes, spec:consumers.obsidian-vault.notes.case-collision-refused, spec:consumers.obsidian-vault.notes.entry-address-link, spec:consumers.obsidian-vault.notes.term-address-link, spec:consumers.obsidian-vault.notes.unresolved-mention-stays, spec:consumers.obsidian-vault.person-notes-survive, spec:consumers.obsidian-vault.unknown-note-refused, spec:consumers.obsidian-vault.vault-in-build-path-refused.

    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
    keeps incomplete oracle points unspecifiednot recordedpassed1.89 ms
    executes the bound example against a fresh worldA fresh vault is written the same way twice and every link resolves (spec:consumers.obsidian-vault.fresh-vault)passed39.02 ms
    executes the bound example against a fresh worldA regeneration removes a note that left the graph and keeps a person's notes (spec:consumers.obsidian-vault.person-notes-survive)passed20.74 ms
    executes the bound example against a fresh worldA note a person wrote inside the generated folder refuses the regeneration (spec:consumers.obsidian-vault.unknown-note-refused)passed5.75 ms
    executes the bound example against a fresh worldA generated note a person changed refuses the regeneration and keeps the edit (spec:consumers.obsidian-vault.changed-note-refused)passed4.83 ms
    executes the bound example against a fresh worldA person's file under a temporary's name refuses the regeneration (spec:consumers.obsidian-vault.hidden-file-refused)passed6.02 ms
    executes the bound example against a fresh worldA vault directory the build removes refuses the run and keeps a person's notes (spec:consumers.obsidian-vault.vault-in-build-path-refused)passed1.15 ms
    executes the bound example against a fresh worldA run after a stopped synchronization finishes it (spec:consumers.obsidian-vault.interrupted-run-recovered)passed33.58 ms
    executes the bound example against a fresh worldA failed extraction keeps the notes and says so on the index (spec:consumers.obsidian-vault.failed-extraction-keeps-notes)passed10.21 ms
    executes the bound example against a fresh worldThe run after a failed extraction passes the guard and restores the index (spec:consumers.obsidian-vault.failed-extraction-recovered)passed20.42 ms
    executes the bound example against a fresh worldAn entry address in prose opens the entry's block in its Spec's note (spec:consumers.obsidian-vault.notes.entry-address-link)passed15.36 ms
    executes the bound example against a fresh worldA mention of an entry that does not exist stays as written (spec:consumers.obsidian-vault.notes.unresolved-mention-stays)passed9.95 ms
    executes the bound example against a fresh worldA keyed Model term gets a note, and its address in prose opens the term's block (spec:consumers.obsidian-vault.notes.term-address-link)passed14.06 ms
    executes the bound example against a fresh worldTwo Specs whose notes differ only in case refuse the run (spec:consumers.obsidian-vault.notes.case-collision-refused)passed2.55 ms
    executes the bound example against a fresh worldEach standing view selects what its source selects (spec:consumers.obsidian-vault.bases.views-match-sources)passed24.64 ms
    executes the bound example against a fresh worldA carrier edit under watch rewrites only the notes it changes (spec:consumers.obsidian-vault.iteration.watch-rewrites-changed-notes)passed446.54 ms
    executes the bound example against a fresh worldAn anchor added in a source file under watch rewrites the Spec's note (spec:consumers.obsidian-vault.iteration.watch-source-anchor)passed516.04 ms
Design view

Requirement drawing

  • Satisfying or referencing units: no recorded binding.
Requirement drawing for spec:consumers.obsidian-vault.notes.unresolved-mention-stays
The diagram as text
  • spec:consumers.obsidian-vault.notes.unresolved-mention-stays: A mention of an entry that does not exist stays as written · declared Spec
  • spec:consumers.obsidian-vault.notes: Every Spec, Pack, code unit and keyed term is a note, and every relation is a link · declared Spec
  • test:protocol.consumers.obsidian-vault.notes.unresolved-mention-stays: test:protocol.consumers.obsidian-vault.notes.unresolved-mention-stays · anchored test binding · binding present · test/vault-examples.test.ts:726
  • spec:consumers.obsidian-vault.notes.unresolved-mention-stays refines spec:consumers.obsidian-vault.notes · declared
  • spec:consumers.obsidian-vault.notes.unresolved-mention-stays verifies spec:consumers.obsidian-vault.notes · declared
  • test:protocol.consumers.obsidian-vault.notes.unresolved-mention-stays verifies spec:consumers.obsidian-vault.notes.unresolved-mention-stays · 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

No decision record named.

Runtime

No implementation neighborhood recorded.

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:consumers.obsidian-vault.notes.unresolved-mention-stays
  • E2: verifies · declared
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.obsidian-vault.notes.unresolved-mention-stays: A mention of an entry that does not exist stays as written
  • spec:consumers.obsidian-vault.notes.unresolved-mention-stays refines spec:consumers.obsidian-vault.notes · declared
  • spec:consumers.obsidian-vault.notes.unresolved-mention-stays verifies spec:consumers.obsidian-vault.notes · 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

No Spec rests on this Spec.

Relations

Relation and directionOther endClaimReasonExercised keys
refines · outgoingEvery Spec, Pack, code unit and keyed term is a note, and every relation is a link
spec:consumers.obsidian-vault.notes · resolves
declaredNoneNone
verifies · outgoingEvery Spec, Pack, code unit and keyed term is a note, and every relation is a link
spec:consumers.obsidian-vault.notes · resolves
declaredNonementionLinks

Bindings

Implementation binding: none

Design reference: none

Verifier binding: present

  • test:protocol.consumers.obsidian-vault.notes.unresolved-mention-stays · anchored · test/vault-examples.test.ts:726 · 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.