Spec Studio

The glossary page lists every term the corpus's Specs define

spec:consumers.spec-studio.glossary-pageUse Case / Behavior · storyready floor ready

Packs: pack:self-hosting-v1, pack:spec-studio-v1

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

Findings: no errors, no warnings

specs/consumers/spec-studio.glossary-page.sdp.md

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

A Spec's Model section defines terms, and a term may carry a key that gives it an address. The glossary page gathers every defined term on one page so a reviewer finds a word and the Spec that defines it. A corpus's ratified glossary stays the document it is; the page lists what the Specs define, so two definitions of one word read side by side.

Intent
outcome
Let a person find any term a Spec defines, read its definition, and open the Spec and the entry that define it.
Behavior
rule.terms line 23 · specs/consumers/spec-studio.glossary-page.sdp.md:23
The page set holds glossary.html, which lists every term a Spec's Model section defines, sorted by the term's lowercase form in code-unit order and then by Spec id, each with its definition as text, its Spec linked, and, when the term carries a key, its address spec:<id>#term.<key> with a copy action, linked to the term on the Spec page; the term and its definition split as spec:carrier.markdown-body-grammar#rule.modelEntries states.

spec:consumers.spec-studio.glossary-page.same-word-twice · enabled

rule.sameWordTwice line 24 · specs/consumers/spec-studio.glossary-page.sdp.md:24
A word two Specs define appears once per Spec, so the definitions read side by side and the page chooses none.

spec:consumers.spec-studio.glossary-page.same-word-twice · enabled

rule.noGlossaryDocument line 25 · specs/consumers/spec-studio.glossary-page.sdp.md:25
The page renders no glossary document: it lists the terms the graph holds and nothing else.

no example exercises it

rule.letterIndex line 26 · specs/consumers/spec-studio.glossary-page.sdp.md:26
The page opens with the count of terms and of defining Specs in one sentence and the letters its terms start with, each linked to the heading over its terms.

no example exercises it

0 unkeyed rules.

Verifying examples

A word two Specs define appears once per Spec on the glossary page · spec:consumers.spec-studio.glossary-page.same-word-twice · ready floor ready

Executable Spec

Given two Specs whose Model sections define the term {term: "order"}, the first with the key {key: "order"}
When the build renders the glossary page
Then the page lists the term {rows: 2} times
Then the keyed row shows the address {address: "spec:probe.alpha#term.order"}

Open example

Example space

Given two Specs whose Model sections define the term {term:string}, the first with the key {key:string}
When the build renders the glossary page
Then the page lists the term {rows:number} times
Then the keyed row shows the address {address:string}
UI
letterHeading line 29 · specs/consumers/spec-studio.glossary-page.sdp.md:29
one heading per first letter, lowercased, with the element id letter.<letter>, over the terms that start with it; a term that starts with no letter sits under the heading # with the element id letter.other.
termRow line 30 · specs/consumers/spec-studio.glossary-page.sdp.md:30
the term in bold, its definition as text with inline code spans as code, then the Spec's title linked and, when keyed, term.<key> as a link with a copy action for the full address.
Verification

Verifier bindings

  • spec:consumers.spec-studio.glossary-page.same-word-twice · A word two Specs define appears once per Spec on the glossary page · declared · example enabled · specs/consumers/spec-studio.glossary-page.same-word-twice.sdp.md

    External run evidence from test/studio-s3.test.ts

    Test anchors: test:protocol.studio-diff-changed-entry, test:protocol.studio-glossary-same-word-twice, test:protocol.studio-navigation, test:protocol.studio-queue-dependency-first, test:protocol.studio-registers-blocking-first. Specs verified by those bindings: spec:consumers.spec-studio.diff-page, spec:consumers.spec-studio.diff-page.changed-entry, spec:consumers.spec-studio.glossary-page, spec:consumers.spec-studio.glossary-page.same-word-twice, spec:consumers.spec-studio.navigation, spec:consumers.spec-studio.owner-queue, spec:consumers.spec-studio.owner-queue.dependency-first, spec:consumers.spec-studio.registers, spec:consumers.spec-studio.registers.blocking-first.

    Run 1: external run evidence from vitest 4.1.10

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

    NameSuiteResultDuration
    executes the bound example against a fresh worldThe questions page lists the Specs with a blocking question first (spec:consumers.spec-studio.registers.blocking-first)passed35.62 ms
    executes the bound example against a fresh worldThe owner queue lists a waiting statement after the one it rests on (spec:consumers.spec-studio.owner-queue.dependency-first)passed19.95 ms
    executes the bound example against a fresh worldThe diff page shows a changed entry's base and built values (spec:consumers.spec-studio.diff-page.changed-entry)passed21.64 ms
    executes the bound example against a fresh worldA word two Specs define appears once per Spec on the glossary page (spec:consumers.spec-studio.glossary-page.same-word-twice)passed8.31 ms
    renders declaration citations, decision reasons and design backlog from the shipped answersStudio register pagespassed34.81 ms
    reaches each page in order, marks it current and omits every diff reference without a baseStudio register pagespassed10.2 ms
    refuses malformed base flags and unreadable JSON before extractionStudio register pagespassed1.96 ms
    refuses a base in generated output before writing through graphStudio base comparisonpassed21.29 ms
    refuses a base in generated output before writing through nestedStudio base comparisonpassed15.24 ms
    refuses a base in generated output before writing through file aliasStudio base comparisonpassed17.97 ms
    refuses a base in generated output before writing through root aliasStudio base comparisonpassed6.75 ms
    refuses a base in generated output before writing through input aliasStudio base comparisonpassed10.5 ms
    renders only existing sides for added and removed entries and one value for moved entriesStudio base comparisonpassed13.63 ms
    shows per-Pack diagnostics without no-change claims for invalid graphStudio base comparisonpassed19.84 ms
    shows per-Pack diagnostics without no-change claims for different schemaStudio base comparisonpassed15.35 ms
    keeps additions, removals, Pack order and anchor bindings apart and escapes compared valuesStudio base comparisonpassed24.48 ms
    shows unreadable graph values as the recipe's diagnostics on the named diff pageStudio base comparisonpassed2.54 ms
    leaves the base file unchanged and certifies repeat publication with the same inputStudio base comparisonpassed28.52 ms
    keeps a cycle's round separate from statements that rest on nothing, and lists owner holdsStudio base comparisonpassed12.27 ms
    sorts terms without locale collation and keeps non-letter headings addressableStudio base comparisonpassed5.74 ms
    orders queue floor options by rung and carries the Pack and floor on each rowStudio base comparisonpassed16.78 ms
    uses authored term keys and orders duplicate terms by Spec idStudio base comparisonpassed6.7 ms
    reads each owner question's provisional reading from its reader Spec and keynot recordedpassed9.69 ms
    renders a keying proposal as one line per keyed entry and readable changed rule textnot recordedpassed9.43 ms
    lists keyed lines in head rule order with rendered text for added, renamed and removed keysnot recordedpassed14.46 ms
    counts keyed rules apart from changed parts, mixed changes: falsenot recordedpassed6.09 ms
    counts keyed rules apart from changed parts, mixed changes: truenot recordedpassed6.9 ms
    names one keyed rule in the singularnot recordedpassed7.97 ms
    marks only members with exclusively keyed changes as keyed onlynot recordedpassed13.49 ms
    renders changed list values as lists instead of raw JSON arraysnot recordedpassed6.06 ms
    retains the owning list when readable rule text moves to a flownot recordedpassed5.57 ms

Example space

  • term · string · declared by two Specs whose Model sections define the term {term}, the first with the key {key}
  • key · string · declared by two Specs whose Model sections define the term {term}, the first with the key {key}

Bound points

Oracle binding: present · oracle:protocol.studio-glossary-page · test/studio-s3.test.ts:268

Coverage

term: "order" · spec:consumers.spec-studio.glossary-page.same-word-twice · not enumerable

key: "order" · spec:consumers.spec-studio.glossary-page.same-word-twice · not enumerable

Unbound

  • term: None
  • key: None
Design view

Requirement drawing

Requirement drawing for spec:consumers.spec-studio.glossary-page
The diagram as text
  • spec:consumers.spec-studio.glossary-page: The glossary page lists every term the corpus's Specs define · declared Spec
  • spec:consumers.spec-studio.glossary-page.same-word-twice: A word two Specs define appears once per Spec on the glossary page · declared Spec
  • spec:consumers.spec-studio: The Spec Studio is a static HTML workbench over the one graph · declared Spec
  • impl:protocol.studio-glossary: renders Model terms with their entry-address links · anchored code · src/projections/studio/pages/glossary-page.ts:7
  • oracle:protocol.studio-glossary-page: oracle:protocol.studio-glossary-page · anchored oracle binding · test/studio-s3.test.ts:268
  • test:protocol.studio-glossary-same-word-twice: test:protocol.studio-glossary-same-word-twice · anchored test binding · binding present · test/studio-s3.test.ts:278
  • spec:consumers.spec-studio.glossary-page refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.glossary-page.same-word-twice refines spec:consumers.spec-studio.glossary-page · declared
  • spec:consumers.spec-studio.glossary-page.same-word-twice verifies spec:consumers.spec-studio.glossary-page · declared
  • impl:protocol.studio-glossary satisfies spec:consumers.spec-studio.glossary-page · anchored
  • oracle:protocol.studio-glossary-page models spec:consumers.spec-studio.glossary-page · anchored
  • test:protocol.studio-glossary-same-word-twice verifies spec:consumers.spec-studio.glossary-page.same-word-twice · anchored
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred syntax: requirementDiagram. Chosen syntax: flowchart TB because models require exact labels unavailable in requirement syntax.

Decisions

No decision record named.

Runtime
  • component:protocol.projections · read-only output, layout and owned publication · src/projections/design-review.ts:29 · layer edge · context protocol

    Uses

    • component:protocol.extract · the carrier and source pipeline · src/extract/index.ts:192 · layer application · context protocol
    • component:protocol.graph · the one graph and its semantic decisions · src/graph/schema.ts:34 · layer domain · context protocol
    • component:protocol.model · the authored contracts and stable ids · src/model/anchors.ts:100 · layer domain · context protocol
    • component:protocol.notation · the leaf step codec · src/notation/slots.ts:261 · layer domain · context protocol
    • component:protocol.reader · the typed graph contract and body evaluator · src/reader/reader.ts:671 · layer application · context protocol
    • component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:72 · layer domain · context protocol
  • impl:protocol.studio-glossary · renders Model terms with their entry-address links · src/projections/studio/pages/glossary-page.ts:7

    Component: component:protocol.projections · read-only output, layout and owned publication · src/projections/design-review.ts:29 · layer edge · 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:consumers.spec-studio.glossary-page
The diagram as text
  • spec:carrier.markdown-body-grammar: The Markdown body accepts one closed form per section
  • spec:consumers.spec-studio: The Spec Studio is a static HTML workbench over the one graph
  • spec:consumers.spec-studio.data: The Studio renders from the reader's values and embeds only what its script reads
  • spec:consumers.spec-studio.glossary-page: The glossary page lists every term the corpus's Specs define
  • spec:consumers.spec-studio.glossary-page.same-word-twice: A word two Specs define appears once per Spec on the glossary page
  • spec:model.term-addresses: A Model term may carry a key that addresses it
  • spec:consumers.spec-studio.glossary-page dependsOn spec:carrier.markdown-body-grammar · declared — the page splits a Model entry into its term and definition as the body grammar reads it
  • spec:consumers.spec-studio.glossary-page dependsOn spec:consumers.spec-studio.data · declared
  • spec:consumers.spec-studio.glossary-page dependsOn spec:model.term-addresses · declared — a keyed term's address links it to its definition
  • spec:consumers.spec-studio.glossary-page refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.glossary-page.same-word-twice refines spec:consumers.spec-studio.glossary-page · declared
  • spec:consumers.spec-studio.glossary-page.same-word-twice verifies spec:consumers.spec-studio.glossary-page · 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

Relations

Relation and directionOther endClaimReasonExercised keys
dependsOn · outgoingThe Markdown body accepts one closed form per section
spec:carrier.markdown-body-grammar · resolves
declaredthe page splits a Model entry into its term and definition as the body grammar reads itNone
dependsOn · outgoingThe Studio renders from the reader's values and embeds only what its script reads
spec:consumers.spec-studio.data · resolves
declaredNoneNone
dependsOn · outgoingA Model term may carry a key that addresses it
spec:model.term-addresses · resolves
declareda keyed term's address links it to its definitionNone
refines · outgoingThe Spec Studio is a static HTML workbench over the one graph
spec:consumers.spec-studio · resolves
declaredNoneNone
refines · incomingA word two Specs define appears once per Spec on the glossary page
spec:consumers.spec-studio.glossary-page.same-word-twice · resolves
declaredNoneNone
verifies · incomingA word two Specs define appears once per Spec on the glossary page
spec:consumers.spec-studio.glossary-page.same-word-twice · resolves
declaredNoneterms, sameWordTwice

Bindings

Implementation binding: present

  • impl:protocol.studio-glossary · renders Model terms with their entry-address links · src/projections/studio/pages/glossary-page.ts:7 · role projection · component component:protocol.projections · layer edge · context protocol

Design reference: none

Verifier binding: present

Expected-outcome oracle: present

  • oracle:protocol.studio-glossary-page · test/studio-s3.test.ts:268

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.