Spec Studio

A Pack page shows the Pack's design as one card per member

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

Changed since the base graph base da4b141: rule.header; rule.summary; ui.headerBlock

Base input: schema 0.11.0, 405 Specs.

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

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

Findings: no errors, no warnings

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

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

The Markdown Pack page renders the Pack design as one wide member table, and the first adopter's reviewers read carrier files instead. This page renders the same assembly as a summary, then a card per member that a reviewer opens where they need the detail.

Intent
outcome
Show where a Pack's design stands, member by member in reading order, on one page a reviewer scans quickly and opens where they need detail.
Behavior
rule.header line 25 · specs/consumers/spec-studio.pack-page.sdp.md:25
The page opens with the Pack's title, its id and its carrier file as text with a copy action, and a link to the Pack's slice page, then the summary; the framing follows as prose under the heading Framing, with the vocabulary references, linked.

no example exercises it

rule.summary line 26 · specs/consumers/spec-studio.pack-page.sdp.md:26
The summary states each Pack total in one sentence that opens with its count, never as a table: the members and the unresolved ones, the members held below their stated next rung and those waiting only for their author, the design entries and pinned declarations, the open and blocking questions, the members with an implementation binding and with a design reference, and the boundary in each direction. The member sentence says in priority order when the Pack states order: priority, otherwise in authored reading order.

no example exercises it

rule.holds line 27 · specs/consumers/spec-studio.pack-page.sdp.md:27
The summary's held sentence links each held member to its card with its count of unmet clauses, and its waiting sentence names the members whose stated next rung waits only for their author's statement unless every member does; the page never presents a rung as approved.

no example exercises it

rule.memberCards line 28 · specs/consumers/spec-studio.pack-page.sdp.md:28
The members follow in authored order, one closed card each. A card's summary line shows the member's position, title and kind, its stated rung beside the floor reached, its stated next rung with nothing blocks or how many of its clauses are unmet, its open and blocking questions, and its implementation and verifier bindings as present or none.

no example exercises it

rule.cardBody line 29 · specs/consumers/spec-studio.pack-page.sdp.md:29
An open card shows the member's id, linked to its Spec page, then the parts the next five rules state, in their order.

no example exercises it

rule.cardHolds line 30 · specs/consumers/spec-studio.pack-page.sdp.md:30
A card lists each clause unmet for the member's stated next rung, with the targets the clause names and their stated rungs.

no example exercises it

rule.cardDesign line 31 · specs/consumers/spec-studio.pack-page.sdp.md:31
A card counts the member's design entries and pinned declarations, and links the decisions it names, each with its stated rung.

no example exercises it

rule.cardQuestions line 32 · specs/consumers/spec-studio.pack-page.sdp.md:32
A card lists each open question with its blocking flag in words, its address when it is keyed, linked to the question on the Spec page, its recorded line, its text, and its decider, links, provisional reading and trigger when present.

no example exercises it

rule.cardCode line 33 · specs/consumers/spec-studio.pack-page.sdp.md:33
A card lists each unit that implements the member and each that references it, by id, label, and recorded file and line as text with a copy action, with its role and its component's id, layer and context.

no example exercises it

rule.cardVerifiers line 34 · specs/consumers/spec-studio.pack-page.sdp.md:34
A card states the member's verifier binding as present or none and, when it has any, counts its verifiers and verifying examples, each beside how many are enabled.

no example exercises it

rule line 35 · specs/consumers/spec-studio.pack-page.sdp.md:35
An unresolved member's card says only that the manifest names an id the graph does not hold.
rule.boundary line 36 · specs/consumers/spec-studio.pack-page.sdp.md:36
The boundary follows in four closed sections, Rests on, Rested on by, Verified by and Superseded by, each headed with its count. Each row shows the outside Spec, linked, its stated rung, its implementation binding as present or none, and the members it joins under each relation type; an empty section reads None.

no example exercises it

rule.unboundVerifiers line 37 · specs/consumers/spec-studio.pack-page.sdp.md:37
Then come the members with no verifier binding, those stated ready first, under one sentence saying the graph records bindings and never runs; then the findings that name the Pack.

no example exercises it

rule.openAll line 38 · specs/consumers/spec-studio.pack-page.sdp.md:38
Open all and Close all open or close every card and section at once, and opening the page at a card's fragment opens that card.

no example exercises it

1 unkeyed rule.

UI
headerBlock line 41 · specs/consumers/spec-studio.pack-page.sdp.md:41
the title as the page heading; below it the id and the carrier file, each with a copy action, and the link Read this Pack as one design to its slice page; then the summary; then the framing under a Framing heading, and the vocabulary references.
summaryList line 42 · specs/consumers/spec-studio.pack-page.sdp.md:42
the totals as a short list of sentences under a Where the design stands heading, each opening with its count, a zero written as No.
memberCard line 43 · specs/consumers/spec-studio.pack-page.sdp.md:43
a disclosure whose element id is the member's Spec id; its summary line reads <position>. <title>, then the kind, the rung badge, the floor in words, the next rung in words unless the member states ready, the question counts and the two binding values, all but the badge as plain text, wrapping onto further lines on a narrow screen.
cardBody line 44 · specs/consumers/spec-studio.pack-page.sdp.md:44
in order, the id link, the unmet clauses, the design counts and decisions, the open questions, the code, and the verifier binding.
questionItem line 45 · specs/consumers/spec-studio.pack-page.sdp.md:45
the blocking flag in words; for a keyed question, question.<key> as a link to its address with a copy action for the full address; line <n> when recorded; the text; then each present field on its own labelled line.
unitItem line 46 · specs/consumers/spec-studio.pack-page.sdp.md:46
the unit id as code, its label, <file>:<line> with a copy action, its role, and its component with layer and context.
boundaryTable line 47 · specs/consumers/spec-studio.pack-page.sdp.md:47
four columns, Spec, stated rung, implementation binding and joined members, the last listing each relation type with its members.
Verification

Verifier bindings

  • test:protocol.roadmap-priority · checks Pack priority extraction, comparison and Studio change notes · anchored · test anchor binding present · test/roadmap-priority.test.ts:44

    External run evidence from test/roadmap-priority.test.ts

    Test anchors: test:protocol.roadmap-priority. Specs verified by those bindings: spec:carrier.markdown-pack-authoring, spec:consumers.design-diff, spec:consumers.spec-studio.diff-page, spec:consumers.spec-studio.pack-page, spec:extraction.pack-member-order, spec:model.pack-aggregate.

    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
    derives equal Markdown and TypeScript Pack nodes and edges, serializes order last, and exposes it through the readerroadmap priority manifestpassed47.3 ms
    refuses the invalid Markdown value readingroadmap priority manifestpassed1.58 ms
    refuses the invalid Markdown value arbitraryroadmap priority manifestpassed1.33 ms
    refuses the invalid Markdown value trueroadmap priority manifestpassed1.28 ms
    refuses the invalid Markdown value nullroadmap priority manifestpassed1.65 ms
    refuses the invalid Markdown value []roadmap priority manifestpassed1.21 ms
    refuses the invalid Markdown value {}roadmap priority manifestpassed1.24 ms
    refuses the invalid TypeScript value "reading"roadmap priority manifestpassed3.6 ms
    refuses the invalid TypeScript value "arbitrary"roadmap priority manifestpassed2.76 ms
    refuses the invalid TypeScript value trueroadmap priority manifestpassed3.43 ms
    refuses the invalid TypeScript value nullroadmap priority manifestpassed3.5 ms
    refuses the invalid TypeScript value []roadmap priority manifestpassed2.87 ms
    refuses the invalid TypeScript value {}roadmap priority manifestpassed3.83 ms
    refuses the invalid TypeScript value undefinedroadmap priority manifestpassed2.78 ms
    refuses the invalid TypeScript value chosenOrderroadmap priority manifestpassed3.35 ms
    names a removed Pack by its order meaning (priority true)roadmap priority design diffpassed14.29 ms
    names a removed Pack by its order meaning (priority false)roadmap priority design diffpassed12.82 ms
    names an added roadmap and preserves manifest order in its member deltaroadmap priority design diffpassed17.33 ms
    labels Pack membership by its order meaning (priority true)roadmap priority design diffpassed8.11 ms
    labels Pack membership by its order meaning (priority false)roadmap priority design diffpassed5.46 ms
    states order values when a change is not a known roadmap transitionroadmap priority design diffpassed4.7 ms
    documents the order comparison fields, default and diagnostic in the recipe contractroadmap priority design diffpassed1.09 ms
    compares a priority transition to true without a membership editroadmap priority design diffpassed3.05 ms
    compares a priority transition to false without a membership editroadmap priority design diffpassed2.22 ms
    reads an absent order as reading order in a base schema that predates the fieldroadmap priority design diffpassed7.31 ms
    marks the absent side of an added or removed roadmap as null (true)roadmap priority design diffpassed2.44 ms
    marks the absent side of an added or removed roadmap as null (false)roadmap priority design diffpassed2.06 ms
    diagnoses an unknown order at the base without reporting an order changeroadmap priority design diffpassed1.69 ms
    diagnoses an unknown order at the head without reporting an order changeroadmap priority design diffpassed1.71 ms
    still compares membership and member order when the base order is unknownroadmap priority design diffpassed2.58 ms
    still compares membership and member order when the head order is unknownroadmap priority design diffpassed6.34 ms
    keeps an order-only change in the selected Pack's comparison scoperoadmap priority design diffpassed3.01 ms
    shows no roadmap transition for a membership-only change (priority true)roadmap priority design diffpassed7.93 ms
    shows no roadmap transition for a membership-only change (priority false)roadmap priority design diffpassed6.63 ms
    shows the roadmap transition to true on the diff and Pack pagesroadmap priority design diffpassed8.43 ms
    shows the roadmap transition to false on the diff and Pack pagesroadmap priority design diffpassed6.96 ms
  • test:protocol.studio-pages · anchored · test anchor binding present · test/studio-pages.test.ts:18

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

    Test anchors: test:protocol.studio-pages. Specs verified by those bindings: spec:consumers.spec-studio.index-page, spec:consumers.spec-studio.pack-page, spec:consumers.spec-studio.search, spec:consumers.spec-studio.shell, spec:consumers.spec-studio.spec-page.core.

    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
    rejects malformed page links: <div id="same"></div><div id="same"></div>not recordedpassed2.87 ms
    rejects malformed page links: <a href="missing.html">Missing</a>not recordedpassed0.59 ms
    rejects malformed page links: <a href="#missing">Missing</a>not recordedpassed0.4 ms
    rejects malformed page links: <a href="https://example.com">Outside</a>not recordedpassed0.3 ms
    renders Model definitions without exposing the derived term key mapStudio static pagespassed14.48 ms
    frames every browsing page with a skip link, labelled search, rail, canvas, classic script and stampStudio static pagespassed2.55 ms
    lists example-space owners only in Pack and Spec railsStudio static pagespassed0.42 ms
    shows a keyed question once with a copy action naming its full addressStudio static pagespassed0.28 ms
    opens the index with counts, four task routes, every filter and stable section idsStudio static pagespassed0.75 ms
    gives each Spec row one rung badge and binding wordsStudio static pagespassed1 ms
    puts Pack totals before framing and folds holds into that summaryStudio static pagespassed0.5 ms
    leaves member names out when every member waits only for its authorStudio static pagespassed10.78 ms
    agrees each boundary verb with its countStudio static pagespassed15.83 ms
    shows only the Spec's own Packs in its rail and every Pack on the indexStudio static pagespassed22.98 ms
    asserts every index summary sentence including fact-based verifier countsStudio static pagespassed6.98 ms
    renders code spans in titles on every page and strips them in document titlesStudio static pagespassed13.13 ms
    orders rung filters by the ladder and uses none everywhere for an unmet idea floorStudio static pagespassed11.49 ms
    keeps navigation links outside Pack disclosure controlsStudio static pagespassed0.21 ms
    labels next rungs, UI and finding links and avoids repeating absent bindingsStudio static pagespassed0.34 ms
    renders Pack members in authored order, closed and with one colored badge per summaryStudio static pagespassed0.46 ms
    renders the four Pack boundary sections and the verifier gap sentence onceStudio static pagespassed0.2 ms
    shows the stated rung beside its floor and warns only in the dishonest directionStudio static pagespassed0.16 ms
    renders every section in order and every addressable entry with its key and recorded lineStudio static pagespassed0.33 ms
    names the first unmet clause and renders a missing idea floor as noneStudio static pagespassed3.23 ms
    shows question fields, code location, component, bindings and relations both waysStudio static pagespassed0.57 ms
    escapes authored text, reads only code spans and links resolving mentionsStudio static pagespassed0.24 ms
    links validator-readable escaped mentions and preserves unequal code delimitersStudio static pagespassed0.19 ms
    shows findings on the index and only links page-bearing subjectsStudio static pagespassed8.01 ms
    embeds the index only on search and supplies its element and no-script explanationStudio static pagespassed0.65 ms
    resolves all probe links including fragments in dynamic search resultsStudio static pagespassed6.99 ms
    keeps unresolved component bindings as text and resolves every remaining linkStudio static pagespassed18.06 ms
    renders deterministically with no time or commit metadataStudio static pagespassed7.9 ms
    ships the native layout and focus stylesheet in the browser assetsStudio static pagespassed0.22 ms
    resolves every page link and element fragmentProtocol Studio page setpassed1313.79 ms
    contains the complete Spec prose without executing scriptProtocol Studio page setpassed77.84 ms
Design view

Requirement drawing

  • Declared verifying examples: no declared verifying example.
Requirement drawing for spec:consumers.spec-studio.pack-page
Requirement drawing for spec:consumers.spec-studio.pack-pagesatisfies · anchoredsatisfies · anchoredrefines · declaredrefines · declaredverifies · anchoredverifies · anchoredverifies · anchoredverifies · anchoredIntended Specsspec:consumers.spec-studio.pack-pageA Pack page shows thePack's design as one cardper member…consumers.spec-studio.pack-pagedeclared Specspec:consumers.spec-studio.pack-page.maturity-mapA Pack page's maturity mapplaces every member by itsstated rung and its floor…consumers.spec-studio.pack-page.maturity-mapdeclared SpecSatisfying or referencingunitsimpl:protocol.studio-maturity-mapplaces resolved Packmembers by their statedrung and floor in authoredorder…protocol.studio-maturity-mapanchored codeimpl:protocol.studio-pack-pagerenders Pack members,maturity and boundary joins…protocol.studio-pack-pageanchored codeTest or oracle bindingstest:protocol.roadmap-prioritychecks Pack priorityextraction, comparison andStudio change notes…protocol.roadmap-priorityanchored test binding ·binding presenttest:protocol.studio-architecture-maturity-requirementtest:protocol.studio-architecture-maturity-requirement…protocol.studio-architecture-maturity-requirementanchored test binding ·binding presenttest:protocol.studio-pagestest:protocol.studio-pages…protocol.studio-pagesanchored test binding ·binding presenttest:protocol.studio-panelstest:protocol.studio-panels…protocol.studio-panelsanchored test binding ·binding presentOutside the selected setspec:consumers.spec-studioThe Spec Studio is a staticHTML workbench over the onegraph…consumers.spec-studiodeclared Spec
The diagram as text
  • spec:consumers.spec-studio.pack-page: A Pack page shows the Pack's design as one card per member · declared Spec
  • spec:consumers.spec-studio.pack-page.maturity-map: A Pack page's maturity map places every member by its stated rung and its floor · declared Spec
  • spec:consumers.spec-studio: The Spec Studio is a static HTML workbench over the one graph · declared Spec
  • impl:protocol.studio-maturity-map: places resolved Pack members by their stated rung and floor in authored order · anchored code · src/projections/studio/pages/maturity-map.ts:7
  • impl:protocol.studio-pack-page: renders Pack members, maturity and boundary joins · anchored code · src/projections/studio/pages/pack-page.ts:68
  • test:protocol.roadmap-priority: checks Pack priority extraction, comparison and Studio change notes · anchored test binding · binding present · test/roadmap-priority.test.ts:44
  • test:protocol.studio-architecture-maturity-requirement: test:protocol.studio-architecture-maturity-requirement · anchored test binding · binding present · test/studio-panels.test.ts:35
  • test:protocol.studio-pages: test:protocol.studio-pages · anchored test binding · binding present · test/studio-pages.test.ts:18
  • test:protocol.studio-panels: test:protocol.studio-panels · anchored test binding · binding present · test/studio-s2.test.ts:256
  • spec:consumers.spec-studio.pack-page refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.pack-page.maturity-map refines spec:consumers.spec-studio.pack-page · declared
  • impl:protocol.studio-maturity-map satisfies spec:consumers.spec-studio.pack-page.maturity-map · anchored
  • impl:protocol.studio-pack-page satisfies spec:consumers.spec-studio.pack-page · anchored
  • test:protocol.roadmap-priority verifies spec:consumers.spec-studio.pack-page · anchored
  • test:protocol.studio-architecture-maturity-requirement verifies spec:consumers.spec-studio.pack-page.maturity-map · anchored
  • test:protocol.studio-pages verifies spec:consumers.spec-studio.pack-page · anchored
  • test:protocol.studio-panels verifies spec:consumers.spec-studio.pack-page.maturity-map · 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
  • 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-pack-page · renders Pack members, maturity and boundary joins · src/projections/studio/pages/pack-page.ts:68

    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.pack-page
The diagram as text
  • spec:consumers.binding-language-views: Views speak binding language, never the internal fact name
  • spec:consumers.derived-readiness-banner: Derived readiness renders beside the stated rung and warns in one direction
  • spec:consumers.pack-design: The Pack context carries the Pack's design
  • 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.export: A Pack exports as one file, and every page prints as a document
  • spec:consumers.spec-studio.pack-page: A Pack page shows the Pack's design as one card per member
  • spec:consumers.spec-studio.pack-page.maturity-map: A Pack page's maturity map places every member by its stated rung and its floor
  • spec:consumers.spec-studio.shell: The Studio's shell frames every page with navigation, a rail and a canvas
  • spec:consumers.spec-studio.slice-page: A slice page shows a Pack's design as one whole
  • spec:model.open-question-fields: An open question may name who decides it, its links, a provisional reading and a re-entry trigger
  • spec:consumers.spec-studio.pack-page dependsOn spec:consumers.binding-language-views · declared
  • spec:consumers.spec-studio.pack-page dependsOn spec:consumers.derived-readiness-banner · declared
  • spec:consumers.spec-studio.pack-page dependsOn spec:consumers.pack-design · declared — the page renders the Pack design the Pack context carries
  • spec:consumers.spec-studio.pack-page dependsOn spec:consumers.spec-studio.data · declared
  • spec:consumers.spec-studio.pack-page dependsOn spec:consumers.spec-studio.shell · declared
  • spec:consumers.spec-studio.pack-page dependsOn spec:model.open-question-fields · declared
  • spec:consumers.spec-studio.pack-page refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.export dependsOn spec:consumers.spec-studio.pack-page · declared — an export opens with its Pack page's content
  • spec:consumers.spec-studio.slice-page dependsOn spec:consumers.spec-studio.pack-page · declared — each member links to its card on the Pack page, whose element id is the member's id
  • spec:consumers.spec-studio.pack-page.maturity-map refines spec:consumers.spec-studio.pack-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

Distance 2

Relations

Relation and directionOther endClaimReasonExercised keys
dependsOn · outgoingViews speak binding language, never the internal fact name
spec:consumers.binding-language-views · resolves
declaredNoneNone
dependsOn · outgoingDerived readiness renders beside the stated rung and warns in one direction
spec:consumers.derived-readiness-banner · resolves
declaredNoneNone
dependsOn · outgoingThe Pack context carries the Pack's design
spec:consumers.pack-design · resolves
declaredthe page renders the Pack design the Pack context carriesNone
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 · outgoingAn open question may name who decides it, its links, a provisional reading and a re-entry trigger
spec:model.open-question-fields · resolves
declaredNoneNone
refines · outgoingThe Spec Studio is a static HTML workbench over the one graph
spec:consumers.spec-studio · resolves
declaredNoneNone
dependsOn · incomingA Pack exports as one file, and every page prints as a document
spec:consumers.spec-studio.export · resolves
declaredan export opens with its Pack page's contentNone
dependsOn · incomingA slice page shows a Pack's design as one whole
spec:consumers.spec-studio.slice-page · resolves
declaredeach member links to its card on the Pack page, whose element id is the member's idNone
refines · incomingA Pack page's maturity map places every member by its stated rung and its floor
spec:consumers.spec-studio.pack-page.maturity-map · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.studio-pack-page · renders Pack members, maturity and boundary joins · src/projections/studio/pages/pack-page.ts:68 · role projection · component component:protocol.projections · layer edge · context protocol

Design reference: none

Verifier binding: present

  • test:protocol.roadmap-priority · checks Pack priority extraction, comparison and Studio change notes · anchored · test/roadmap-priority.test.ts:44 · test anchor
  • test:protocol.studio-pages · anchored · test/studio-pages.test.ts:18 · 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.