Spec Studio

The corpus's registers are pages a reviewer opens from a link

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

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

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

Findings: no errors, no warnings

specs/consumers/spec-studio.registers.sdp.md

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

A large design keeps registers, and each is a catalog recipe an agent runs. Four become pages, so a reviewer with only a link reads the same rows: the open questions and the decisions, which the owner works through; the pinned declarations, each with the source lines that cite it, which is where a reader finds the test that checks a declaration; and the design backlog, the Specs designed and not yet built, which a design ahead of its code is mostly made of. The key-family register stays a recipe: its rows depend on key prefixes a corpus chooses, the Studio takes no corpus configuration, and search already finds a coined key.

Intent
outcome
Let a person read every open question, decision, pinned declaration and designed-but-unbuilt Spec of the corpus on one page each, linked to the entries they name.
Behavior
rule.registerPages line 28 · specs/consumers/spec-studio.registers.sdp.md:28
The page set holds four register pages, each rendering one catalog recipe's answer over the whole corpus: questions.html the open-question register, recipe 20; decisions.html the decision register, recipe 31; declarations.html the pinned declarations, recipe 24, with the entry citations of recipe 51 beside them; and backlog.html the design backlog, recipe 33.

spec:consumers.spec-studio.registers.blocking-first · enabled

rule.noKeyFamilyPage line 29 · specs/consumers/spec-studio.registers.sdp.md:29
The key-family register, recipe 41, has no page.

no example exercises it

rule.questionsPage line 30 · specs/consumers/spec-studio.registers.sdp.md:30
The questions page lists the Specs with a blocking question first and then the rest, each in id order with its stated rung, and under each its questions in authored order: the blocking flag in words, the address linked to the question on the Spec page with a copy action when the question is keyed, the text, and its decider, links, provisional reading and trigger when present, a question with a trigger named a deferral.

spec:consumers.spec-studio.registers.blocking-first · enabled

rule.decisionsPage line 31 · specs/consumers/spec-studio.registers.sdp.md:31
The decisions page lists one row per decision in id order: its title linked, its id, its stated rung, the decisions it supersedes and that supersede it, the decisions it refines and that refine it with the reasons its relations state, the Specs it shapes with their count, and its keyed questions linked; a superseded decision reads superseded in words.

no example exercises it

rule.declarationsPage line 32 · specs/consumers/spec-studio.registers.sdp.md:32
The declarations page lists the pinned declarations grouped by Spec in id order, each with its key linked to the entry on the Spec page, the declaration as code, and every source line recipe 51 records citing the entry's address, as file and line with a copy action, or no citation recorded.

no example exercises it

rule.backlogPage line 33 · specs/consumers/spec-studio.registers.sdp.md:33
The backlog page lists recipe 33's rows in id order: the Spec linked, its kind and altitude, its floor reached, the clauses that hold it below its stated next rung, its design columns as counts, and the units that reference it; a sentence names how many examples and decisions the recipe leaves out.

no example exercises it

rule.registerFilters line 34 · specs/consumers/spec-studio.registers.sdp.md:34
The questions page filters by blocking flag, decider, deferral and Pack, and the declarations page by whether a citation is recorded; without script every row shows.

no example exercises it

rule.statesNothing line 35 · specs/consumers/spec-studio.registers.sdp.md:35
A register page lists and links in its recipe's order; it states no rung, verdict or priority of its own.

no example exercises it

rule.registerTotals line 36 · specs/consumers/spec-studio.registers.sdp.md:36
Each register page opens with its recipe's totals as sentences, each opening with its count.

no example exercises it

0 unkeyed rules.

Verifying examples

The questions page lists the Specs with a blocking question first · spec:consumers.spec-studio.registers.blocking-first · ready floor ready

Executable Spec

Given a Spec {blockingSpec: "spec:probe.zeta"} with a blocking open question and a Spec {otherSpec: "spec:probe.alpha"}, before it in id order, with only a non-blocking one
When the build renders the questions page
Then the page lists {first: "spec:probe.zeta"} first

Open example

Example space

Given a Spec {blockingSpec:string} with a blocking open question and a Spec {otherSpec:string}, before it in id order, with only a non-blocking one
When the build renders the questions page
Then the page lists {first:string} first
UI
questionRow line 39 · specs/consumers/spec-studio.registers.sdp.md:39
the blocking flag in words, question.<key> as a link with a copy action for the full address when keyed, the text, then each present field on its own labelled line, deferral written beside a question with a trigger.
decisionRow line 40 · specs/consumers/spec-studio.registers.sdp.md:40
the title linked, the id as code, the rung badge, then labelled lines for Supersedes, Superseded by, Refines, Refined by, Shapes and Questions, each listing ids as links and an empty line reading None, and the reasons under the relations they belong to.
declarationRow line 41 · specs/consumers/spec-studio.registers.sdp.md:41
the key as a link, the declaration in a code block, then Cited at and each citing file and line with a copy action, or no citation recorded.
backlogRow line 42 · specs/consumers/spec-studio.registers.sdp.md:42
the title linked, the id as code, then as plain text the kind, altitude, floor in words, the unmet clauses by id, <e> entries, <d> declarations, <q> open, <b> blocking, and the referencing units by id.
Verification

Verifier bindings

  • spec:consumers.spec-studio.registers.blocking-first · The questions page lists the Specs with a blocking question first · declared · example enabled · specs/consumers/spec-studio.registers.blocking-first.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

  • blockingSpec · string · declared by a Spec {blockingSpec} with a blocking open question and a Spec {otherSpec}, before it in id order, with only a non-blocking one
  • otherSpec · string · declared by a Spec {blockingSpec} with a blocking open question and a Spec {otherSpec}, before it in id order, with only a non-blocking one

Bound points

ExampleblockingSpecotherSpec
spec:consumers.spec-studio.registers.blocking-first"spec:probe.zeta""spec:probe.alpha"

Oracle binding: present · oracle:protocol.studio-registers · test/studio-s3.test.ts:79

Coverage

blockingSpec: "spec:probe.zeta" · spec:consumers.spec-studio.registers.blocking-first · not enumerable

otherSpec: "spec:probe.alpha" · spec:consumers.spec-studio.registers.blocking-first · not enumerable

Unbound

  • blockingSpec: None
  • otherSpec: None
Design view

Requirement drawing

Requirement drawing for spec:consumers.spec-studio.registers
  • E4: refines, verifies · declared
The diagram as text
  • spec:consumers.spec-studio.registers: The corpus's registers are pages a reviewer opens from a link · declared Spec
  • spec:consumers.spec-studio.registers.blocking-first: The questions page lists the Specs with a blocking question first · declared Spec
  • spec:consumers.spec-studio: The Spec Studio is a static HTML workbench over the one graph · declared Spec
  • impl:protocol.studio-registers: renders question, decision, declaration and backlog registers · anchored code · src/projections/studio/pages/registers-page.ts:47
  • oracle:protocol.studio-registers: oracle:protocol.studio-registers · anchored oracle binding · test/studio-s3.test.ts:79
  • test:protocol.studio-registers-blocking-first: test:protocol.studio-registers-blocking-first · anchored test binding · binding present · test/studio-s3.test.ts:89
  • spec:consumers.spec-studio.registers refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.registers.blocking-first refines spec:consumers.spec-studio.registers · declared
  • spec:consumers.spec-studio.registers.blocking-first verifies spec:consumers.spec-studio.registers · declared
  • impl:protocol.studio-registers satisfies spec:consumers.spec-studio.registers · anchored
  • oracle:protocol.studio-registers models spec:consumers.spec-studio.registers · anchored
  • test:protocol.studio-registers-blocking-first verifies spec:consumers.spec-studio.registers.blocking-first · 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-registers · renders question, decision, declaration and backlog registers · src/projections/studio/pages/registers-page.ts:47

    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.registers
  • E5: verifies · declared
The diagram as text
  • spec:consumers.agent-surface.design-recipes: Design work reads its answers from catalog recipes
  • spec:consumers.agent-surface.register-recipes: Register questions stay executable graph recipes
  • spec:consumers.spec-studio: The Spec Studio is a static HTML workbench over the one graph
  • spec:consumers.spec-studio.cited-line-text: A pinned declaration shows the words of each test line that cites it
  • spec:consumers.spec-studio.data: The Studio renders from the reader's values and embeds only what its script reads
  • spec:consumers.spec-studio.registers: The corpus's registers are pages a reviewer opens from a link
  • spec:consumers.spec-studio.registers.blocking-first: The questions page lists the Specs with a blocking question first
  • spec:consumers.spec-studio.shell: The Studio's shell frames every page with navigation, a rail and a canvas
  • spec:extraction.contract-declarations: Pinned declarations give an adopter a derived module to typecheck
  • spec:extraction.entry-citations: The graph records where anchored source cites an entry address
  • spec:consumers.spec-studio.registers dependsOn spec:consumers.agent-surface.design-recipes · declared — the decisions page renders the decision register
  • spec:consumers.spec-studio.registers dependsOn spec:consumers.agent-surface.register-recipes · declared — the questions page renders the open-question register
  • spec:consumers.spec-studio.registers dependsOn spec:consumers.spec-studio.data · declared
  • spec:consumers.spec-studio.registers dependsOn spec:consumers.spec-studio.shell · declared
  • spec:consumers.spec-studio.registers dependsOn spec:extraction.contract-declarations · declared — the declarations page lists the pinned declarations recipe 24 reads
  • spec:consumers.spec-studio.registers dependsOn spec:extraction.entry-citations · declared — each declaration shows the source lines that cite its address
  • spec:consumers.spec-studio.registers refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.cited-line-text dependsOn spec:consumers.spec-studio.registers · declared — the declarations page lists each citing line beside its declaration
  • spec:consumers.spec-studio.registers.blocking-first refines spec:consumers.spec-studio.registers · declared
  • spec:consumers.spec-studio.registers.blocking-first verifies spec:consumers.spec-studio.registers · 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 · outgoingDesign work reads its answers from catalog recipes
spec:consumers.agent-surface.design-recipes · resolves
declaredthe decisions page renders the decision registerNone
dependsOn · outgoingRegister questions stay executable graph recipes
spec:consumers.agent-surface.register-recipes · resolves
declaredthe questions page renders the open-question registerNone
dependsOn · outgoingThe Studio renders from the reader's values and embeds only what its script reads
spec:consumers.spec-studio.data · resolves
declaredNoneNone
dependsOn · outgoingThe Studio's shell frames every page with navigation, a rail and a canvas
spec:consumers.spec-studio.shell · resolves
declaredNoneNone
dependsOn · outgoingPinned declarations give an adopter a derived module to typecheck
spec:extraction.contract-declarations · resolves
declaredthe declarations page lists the pinned declarations recipe 24 readsNone
dependsOn · outgoingThe graph records where anchored source cites an entry address
spec:extraction.entry-citations · resolves
declaredeach declaration shows the source lines that cite its addressNone
refines · outgoingThe Spec Studio is a static HTML workbench over the one graph
spec:consumers.spec-studio · resolves
declaredNoneNone
dependsOn · incomingA pinned declaration shows the words of each test line that cites it
spec:consumers.spec-studio.cited-line-text · resolves
declaredthe declarations page lists each citing line beside its declarationNone
refines · incomingThe questions page lists the Specs with a blocking question first
spec:consumers.spec-studio.registers.blocking-first · resolves
declaredNoneNone
verifies · incomingThe questions page lists the Specs with a blocking question first
spec:consumers.spec-studio.registers.blocking-first · resolves
declaredNoneregisterPages, questionsPage

Bindings

Implementation binding: present

  • impl:protocol.studio-registers · renders question, decision, declaration and backlog registers · src/projections/studio/pages/registers-page.ts:47 · role projection · component component:protocol.projections · layer edge · context protocol

Design reference: none

Verifier binding: present

Expected-outcome oracle: present

  • oracle:protocol.studio-registers · test/studio-s3.test.ts:79

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.