Spec Studio

Obsidian vault

pack:obsidian-vault-v1specs/obsidian-vault.pack.sdp.md

Read this Pack as one design

Download this Pack as one file

Where the design stands

  • 23 members in authored reading order; no unresolved members.
  • No members held below their stated next rung.
  • No members waiting only for their author's statement.
  • 49 design entries and 25 pinned declarations.
  • No open questions and no blocking questions.
  • 6 members with an implementation binding.
  • 1 member with a design reference.
  • 18 outside Specs the Pack rests on; 12 outside Specs rest on the Pack; 5 outside Specs verify it; no outside Specs supersede it.

Maturity map

23 members at stated ready and floor ready: full member list.

Stated readiness by floor reached
Rows: stated readiness, idea to ready. Columns: floor reached, none to ready. Each mark counts one member; above 100 members a cell is solid. Floor none is distinct from idea.

Outlined diagonal: matches. Right of diagonal: floor above statement. Left of diagonal: statement above floor.

Maturity map for Obsidian vaultFloor reached →Stated readiness ↓noneideascopeddefinedreadyideascopeddefinedreadystated ready, floor ready: 23 members23
Maturity map as text
Counts by stated readiness and floor reached. To the right the floor exceeds the statement; to the left the statement exceeds the floor.
Stated rung / floor reachedfloor nonefloor ideafloor scopedfloor definedfloor ready
stated idea—————
stated scoped—————
stated defined—————
stated ready————23
stated ready, floor ready · 23 members
Mermaid source

Preferred syntax: block. Fixed categorical cells; membership appears in comments.

Framing

A human interface for iterating on designs: the one graph regenerated as an Obsidian vault of linked notes, read beside the carriers an agent edits. First the vault, its verb and its place among the projections, with the decision that its generator owns one folder of the vault and never touches a note a person wrote. Then its notes and links, its tables, the loop a design pass runs through it, and the skill that teaches an agent to keep the vault and answer a pass from it. Each Spec is followed by the examples that will verify it. Last, the one model change the vault asks for, an address for a Model term, so a concept links as exactly as a Spec does.

Changed since the base

Compared with the base graph base b5e0a8b. Read the diff.

Base input: schema 0.12.0, 456 Specs.

Changed members

None.

Added members

None.

Pack membership

No membership or order change.

Members

1. An Obsidian vault lets a person iterate on designs from the one graphbehavior · ready floor ready · 0 open, 0 blocking questions · implementation binding present · verifier binding present

spec:consumers.obsidian-vault

Design

13 design entries · 5 pinned declarations

Decisions

Open questions

None.

Implementation binding: present

  • impl:protocol.vault-command · validates after vault preflight and retains prior notes behind a failed-extraction index · src/cli/vault-command.ts:191 · role publisher · component component:protocol.cli · layer edge · context protocol
  • impl:protocol.vault-notes · renders reader contexts, declared relations and keyed terms as linked notes · src/projections/vault/notes.ts:45 · role projection · component component:protocol.projections · layer edge · context protocol
  • impl:protocol.vault-sync · guards every owned entry and records transitional hashes before atomic file replacement · src/projections/vault/sync.ts:98 · role publisher · component component:protocol.projections · layer edge · context protocol

Design reference: none

Verifier binding: present

9 verifiers, 9 enabled · 9 verifying examples, 9 enabled

2. The vault's generator owns one folder and synchronizes itdecision · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding none

spec:decisions.vault-owned-folder

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: present

  • impl:protocol.vault-command · validates after vault preflight and retains prior notes behind a failed-extraction index · src/cli/vault-command.ts:191 · role publisher · component component:protocol.cli · layer edge · context protocol
  • impl:protocol.vault-sync · guards every owned entry and records transitional hashes before atomic file replacement · src/projections/vault/sync.ts:98 · role publisher · component component:protocol.projections · layer edge · context protocol

Verifier binding: none

3. A fresh vault is written the same way twice and every link resolvesexample · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding present

spec:consumers.obsidian-vault.fresh-vault

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

4. A regeneration removes a note that left the graph and keeps a person's notesexample · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding present

spec:consumers.obsidian-vault.person-notes-survive

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

5. A note a person wrote inside the generated folder refuses the regenerationexample · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding present

spec:consumers.obsidian-vault.unknown-note-refused

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

6. A generated note a person changed refuses the regeneration and keeps the editexample · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding present

spec:consumers.obsidian-vault.changed-note-refused

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

7. A person's file under a temporary's name refuses the regenerationexample · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding present

spec:consumers.obsidian-vault.hidden-file-refused

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

8. A vault directory the build removes refuses the run and keeps a person's notesexample · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding present

spec:consumers.obsidian-vault.vault-in-build-path-refused

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

9. A run after a stopped synchronization finishes itexample · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding present

spec:consumers.obsidian-vault.interrupted-run-recovered

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

10. A failed extraction keeps the notes and says so on the indexexample · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding present

spec:consumers.obsidian-vault.failed-extraction-keeps-notes

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

11. The run after a failed extraction passes the guard and restores the indexexample · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding present

spec:consumers.obsidian-vault.failed-extraction-recovered

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

12. Every Spec, Pack, code unit and keyed term is a note, and every relation is a linkbehavior · ready floor ready · 0 open, 0 blocking questions · implementation binding present · verifier binding present

spec:consumers.obsidian-vault.notes

Design

17 design entries · 8 pinned declarations

Open questions

None.

Implementation binding: present

  • impl:protocol.vault-notes · renders reader contexts, declared relations and keyed terms as linked notes · src/projections/vault/notes.ts:45 · role projection · component component:protocol.projections · layer edge · context protocol
  • impl:protocol.vault-sections · renders sections in graph order with keyed entry block ids · src/projections/vault/sections.ts:10 · role projection · component component:protocol.projections · layer edge · context protocol
  • impl:protocol.vault-text · renders checked mentions and escapes Obsidian syntax outside code spans · src/projections/vault/text.ts:30 · role codec · component component:protocol.projections · layer edge · context protocol

Design reference: none

Verifier binding: present

5 verifiers, 5 enabled · 4 verifying examples, 4 enabled

14. A mention of an entry that does not exist stays as writtenexample · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding present

spec:consumers.obsidian-vault.notes.unresolved-mention-stays

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

16. Two Specs whose notes differ only in case refuse the runexample · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding present

spec:consumers.obsidian-vault.notes.case-collision-refused

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

17. A Pack's members and the standing queries are tables over the reader's valuesbehavior · ready floor ready · 0 open, 0 blocking questions · implementation binding present · verifier binding present

spec:consumers.obsidian-vault.bases

Design

9 design entries · 5 pinned declarations

Open questions

None.

Implementation binding: present

  • impl:protocol.vault-bases · serializes standing query predicates over reader properties as Obsidian Bases · src/projections/vault/bases.ts:43 · role projection · component component:protocol.projections · layer edge · context protocol
  • impl:protocol.vault-notes · renders reader contexts, declared relations and keyed terms as linked notes · src/projections/vault/notes.ts:45 · role projection · component component:protocol.projections · layer edge · context protocol

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · 1 verifying example, 1 enabled

18. Each standing view selects what its source selectsexample · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding present

spec:consumers.obsidian-vault.bases.views-match-sources

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

19. A design pass is followed and answered from the vaultbehavior · ready floor ready · 0 open, 0 blocking questions · implementation binding present · verifier binding present

spec:consumers.obsidian-vault.iteration

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: present

  • impl:protocol.vault-sync · guards every owned entry and records transitional hashes before atomic file replacement · src/projections/vault/sync.ts:98 · role publisher · component component:protocol.projections · layer edge · context protocol
  • impl:protocol.vault-text · renders checked mentions and escapes Obsidian syntax outside code spans · src/projections/vault/text.ts:30 · role codec · component component:protocol.projections · layer edge · context protocol
  • impl:protocol.vault-watch · reuses the coalescing watcher with source suffixes and a synchronous vault cycle · src/cli/vault-command.ts:219 · role service · component component:protocol.cli · layer edge · context protocol

Design reference: none

Verifier binding: present

2 verifiers, 2 enabled · 2 verifying examples, 2 enabled

20. A carrier edit under watch rewrites only the notes it changesexample · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding present

spec:consumers.obsidian-vault.iteration.watch-rewrites-changed-notes

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

21. An anchor added in a source file under watch rewrites the Spec's noteexample · ready floor ready · 0 open, 0 blocking questions · implementation binding none · verifier binding present

spec:consumers.obsidian-vault.iteration.watch-source-anchor

Design

No design entries · no pinned declarations

Open questions

None.

Implementation binding: none

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

22. The vault skill teaches agents to keep an Obsidian vault of the graphbehavior · ready floor ready · 0 open, 0 blocking questions · implementation binding present · verifier binding present

spec:consumers.vault-on-ramp

Design

No design entries · no pinned declarations

Decisions

Open questions

None.

Implementation binding: present

  • impl:protocol.vault-on-ramp · asserts realization of the shipped vault skill document · test/skills.test.ts:1995

Design reference: none

Verifier binding: present

1 verifier, 1 enabled · no verifying examples, 0 enabled

23. A Model term may carry a key that addresses itrule · ready floor ready · 0 open, 0 blocking questions · implementation binding present · verifier binding present

spec:model.term-addresses

Design

10 design entries · 7 pinned declarations

Decisions

Open questions

None.

Implementation binding: present

  • impl:protocol.address-and-cycle-recipes · asserts realization of the shipped address resolution and dependency cycle recipes · test/recipes.test.ts:3568
  • impl:protocol.entry-locations · builds the carrier entry location table · src/extract/derive.ts:78 · role extractor · component component:protocol.extract · layer application · context protocol
  • impl:protocol.key-markers · normalizes step and term markers across the three carriers · src/extract/key-markers.ts:136 · role codec · component component:protocol.extract · layer application · context protocol
  • impl:protocol.open-section-order · preserves authored open-section and model-term order and Pack field order · src/extract/serialize.ts:105 · role codec · component component:protocol.extract · layer application · 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
  • impl:protocol.register-recipes · asserts realization of the shipped register recipes · test/recipes.test.ts:2057
  • impl:protocol.sdp-import-markdown-emit · emits the Markdown document twin for an imported Spec · src/import/emit-markdown.ts:253 · role codec · component component:protocol.import · layer application · context protocol
  • impl:protocol.spec-sections · typed Spec section shapes · src/model/sections.ts:138 · role contract · component component:protocol.model · layer domain · context protocol
  • impl:protocol.stable-ids · stable ID grammar parser · src/ids.ts:173 · role codec · component component:protocol.model · layer domain · context protocol

Design reference: none

Verifier binding: present

6 verifiers, 6 enabled · 5 verifying examples, 5 enabled

Boundary

Rests on (18)
SpecStated rungImplementation bindingJoined members
Views speak binding language, never the internal fact name
spec:consumers.binding-language-views
readypresentdependsOn: spec:consumers.obsidian-vault.notes
Views compose scoped intent instead of patching canonical source
spec:consumers.edit-model
readynonedependsOn: spec:consumers.obsidian-vault.iteration
Composed intent hands off on one proposal shape
spec:consumers.intent-composition
readynonedependsOn: spec:consumers.vault-on-ramp
A change proposal is addressed, based and checked before it lands
spec:consumers.intent-composition.proposal
readypresentdependsOn: spec:consumers.obsidian-vault.iteration
The Pack context carries the Pack's design
spec:consumers.pack-design
readypresentdependsOn: spec:consumers.obsidian-vault.bases
Projections fan out from one graph without becoming truth stores
spec:consumers.projections-model
readypresentrefines: spec:consumers.obsidian-vault
The reader bridges agent entry points to composable graph context
spec:consumers.reader
readypresentdependsOn: spec:consumers.obsidian-vault
The reading skill teaches agents to query the graph
spec:consumers.reading-on-ramp
readypresentrefines: spec:consumers.vault-on-ramp
Validation re-runs while an author edits carriers
spec:consumers.validate-watch
readypresentdependsOn: spec:consumers.obsidian-vault.iteration
Every view run rewrites the view wholesale
spec:consumers.wholesale-view-rewrite
readypresentdependsOn: spec:consumers.obsidian-vault
A Spec id written in prose is a checked mention
spec:decisions.checked-mentions
readynonedecidedBy: spec:model.term-addresses
The shipped projections stay frozen
spec:decisions.shipped-projections-frozen
readynonedecidedBy: spec:consumers.obsidian-vault, spec:model.term-addresses
Committed source derives byte-identical output
spec:extraction.determinism
readypresentconstrainedBy: spec:consumers.obsidian-vault
The graph records where each addressable entry is written
spec:extraction.entry-locations
readypresentdependsOn: spec:model.term-addresses
A rule or flow entry may carry a key that addresses it
spec:model.rule-keys
readypresentdependsOn: spec:model.term-addresses
Spec sections carry typed detail and direct verifier semantics
spec:model.spec-sections
readypresentrefines: spec:model.term-addresses
Stable IDs are the Protocol's durable join key
spec:model.stable-ids
readypresentdependsOn: spec:model.term-addresses
Every Spec id written in prose resolves
spec:validation.prose-mentions
readypresentdependsOn: spec:consumers.obsidian-vault.notes
Rested on by (12)
SpecStated rungImplementation bindingJoined members
The Markdown body accepts one closed form per section
spec:carrier.markdown-body-grammar
readypresentdependsOn: spec:model.term-addresses
Address resolution and dependency cycles stay executable graph recipes
spec:consumers.agent-surface.address-and-cycle-recipes
readypresentdependsOn: spec:model.term-addresses
Register questions stay executable graph recipes
spec:consumers.agent-surface.register-recipes
readypresentdependsOn: spec:model.term-addresses
The glossary page lists every term the corpus's Specs define
spec:consumers.spec-studio.glossary-page
readypresentdependsOn: spec:model.term-addresses
A Spec page shows one Spec in collapsible panels, in a fixed order
spec:consumers.spec-studio.spec-page
readypresentdependsOn: spec:model.term-addresses
Capability adoption counts where each capability is used and where it could apply
spec:consumers.upgrade-kit.capability-adoption
readypresentdependsOn: spec:model.term-addresses
A keyed term is reified and its address resolves
spec:model.term-addresses.keyed-term-resolves
readynonerefines: spec:model.term-addresses
A term marker whose key is off the grammar refuses its carrier
spec:model.term-addresses.malformed-term-marker-refused
readynonerefines: spec:model.term-addresses
A term key repeated in one Spec refuses its carrier
spec:model.term-addresses.repeated-term-key-refused
readynonerefines: spec:model.term-addresses
A keyed TypeScript term keeps its address through import to Markdown
spec:model.term-addresses.typescript-term-imports-keyed
readynonerefines: spec:model.term-addresses
An address that names a term key no term carries is an error
spec:model.term-addresses.unknown-term-key-refused
readynonerefines: spec:model.term-addresses
Every Spec id written in prose resolves
spec:validation.prose-mentions
readypresentdependsOn: spec:model.term-addresses
Verified by (5)
SpecStated rungImplementation bindingJoined members
A keyed term is reified and its address resolves
spec:model.term-addresses.keyed-term-resolves
readynoneverifies: spec:model.term-addresses
A term marker whose key is off the grammar refuses its carrier
spec:model.term-addresses.malformed-term-marker-refused
readynoneverifies: spec:model.term-addresses
A term key repeated in one Spec refuses its carrier
spec:model.term-addresses.repeated-term-key-refused
readynoneverifies: spec:model.term-addresses
A keyed TypeScript term keeps its address through import to Markdown
spec:model.term-addresses.typescript-term-imports-keyed
readynoneverifies: spec:model.term-addresses
An address that names a term key no term carries is an error
spec:model.term-addresses.unknown-term-key-refused
readynoneverifies: spec:model.term-addresses
Superseded by (0)

None.

Members with no verifier binding

The graph records bindings and never runs. Decision records are left out: a decision never needs a verifier binding. The runs page, the tests lens and the Spec pages of the Specs their files verify show the run records as external evidence from test files.

None.

Findings

None.

Composing (0)

Composing needs the script.