outcomeA Pack page shows the Pack's design as one card per member
spec:consumers.spec-studio.pack-pagePacks: 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
- 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.headerline 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.summaryline 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 orderwhen the Pack statesorder: priority, otherwisein authored reading order.no example exercises it
rule.holdsline 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.memberCardsline 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 blocksor 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.cardBodyline 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.cardHoldsline 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.cardDesignline 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.cardQuestionsline 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.cardCodeline 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.cardVerifiersline 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
ruleline 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.boundaryline 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.unboundVerifiersline 37 ·specs/consumers/spec-studio.pack-page.sdp.md:37- Then come the members with no verifier binding, those stated
readyfirst, under one sentence saying the graph records bindings and never runs; then the findings that name the Pack.no example exercises it
rule.openAllline 38 ·specs/consumers/spec-studio.pack-page.sdp.md:38Open allandClose allopen 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
headerBlockline 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 designto its slice page; then the summary; then the framing under aFramingheading, and the vocabulary references. summaryListline 42 ·specs/consumers/spec-studio.pack-page.sdp.md:42- the totals as a short list of sentences under a
Where the design standsheading, each opening with its count, a zero written as No. memberCardline 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. cardBodyline 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.
questionItemline 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. unitItemline 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. boundaryTableline 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:44External run evidence from
test/roadmap-priority.test.tsTest 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 391 · Branch: cursor/media-plan-and-articles-09b1 · Commit: 076cd4f1f85640d8236e5cca1bffffa68ab79a33 · Start: 2026-10-31T15:32:20.471Z · Stop: 2026-10-31T15:34:02.073Z
Name Suite Result Duration derives equal Markdown and TypeScript Pack nodes and edges, serializes order last, and exposes it through the reader roadmap priority manifest passed 45.69 ms refuses the invalid Markdown value reading roadmap priority manifest passed 1.85 ms refuses the invalid Markdown value arbitrary roadmap priority manifest passed 1.57 ms refuses the invalid Markdown value true roadmap priority manifest passed 1.49 ms refuses the invalid Markdown value null roadmap priority manifest passed 1.94 ms refuses the invalid Markdown value [] roadmap priority manifest passed 1.71 ms refuses the invalid Markdown value {} roadmap priority manifest passed 1.43 ms refuses the invalid TypeScript value "reading" roadmap priority manifest passed 7.24 ms refuses the invalid TypeScript value "arbitrary" roadmap priority manifest passed 2.88 ms refuses the invalid TypeScript value true roadmap priority manifest passed 3.36 ms refuses the invalid TypeScript value null roadmap priority manifest passed 3.31 ms refuses the invalid TypeScript value [] roadmap priority manifest passed 9.61 ms refuses the invalid TypeScript value {} roadmap priority manifest passed 3.83 ms refuses the invalid TypeScript value undefined roadmap priority manifest passed 2.87 ms refuses the invalid TypeScript value chosenOrder roadmap priority manifest passed 4.04 ms names a removed Pack by its order meaning (priority true) roadmap priority design diff passed 19.39 ms names a removed Pack by its order meaning (priority false) roadmap priority design diff passed 17.38 ms names an added roadmap and preserves manifest order in its member delta roadmap priority design diff passed 26.27 ms labels Pack membership by its order meaning (priority true) roadmap priority design diff passed 15.16 ms labels Pack membership by its order meaning (priority false) roadmap priority design diff passed 6.39 ms states order values when a change is not a known roadmap transition roadmap priority design diff passed 11.93 ms documents the order comparison fields, default and diagnostic in the recipe contract roadmap priority design diff passed 1.3 ms compares a priority transition to true without a membership edit roadmap priority design diff passed 10.9 ms compares a priority transition to false without a membership edit roadmap priority design diff passed 6.76 ms reads an absent order as reading order in a base schema that predates the field roadmap priority design diff passed 14.49 ms marks the absent side of an added or removed roadmap as null (true) roadmap priority design diff passed 10.48 ms marks the absent side of an added or removed roadmap as null (false) roadmap priority design diff passed 4.24 ms diagnoses an unknown order at the base without reporting an order change roadmap priority design diff passed 3.41 ms diagnoses an unknown order at the head without reporting an order change roadmap priority design diff passed 4.06 ms still compares membership and member order when the base order is unknown roadmap priority design diff passed 5.37 ms still compares membership and member order when the head order is unknown roadmap priority design diff passed 9.28 ms keeps an order-only change in the selected Pack's comparison scope roadmap priority design diff passed 3.1 ms shows no roadmap transition for a membership-only change (priority true) roadmap priority design diff passed 8.38 ms shows no roadmap transition for a membership-only change (priority false) roadmap priority design diff passed 7.43 ms shows the roadmap transition to true on the diff and Pack pages roadmap priority design diff passed 8.78 ms shows the roadmap transition to false on the diff and Pack pages roadmap priority design diff passed 17.15 ms - test:protocol.studio-pages · anchored · test anchor binding present ·
test/studio-pages.test.ts:18External run evidence from
test/studio-pages.test.tsTest 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 391 · Branch: cursor/media-plan-and-articles-09b1 · Commit: 076cd4f1f85640d8236e5cca1bffffa68ab79a33 · Start: 2026-10-31T15:32:20.471Z · Stop: 2026-10-31T15:34:02.073Z
Name Suite Result Duration rejects malformed page links: <div id="same"></div><div id="same"></div> not recorded passed 3.03 ms rejects malformed page links: <a href="missing.html">Missing</a> not recorded passed 0.61 ms rejects malformed page links: <a href="#missing">Missing</a> not recorded passed 0.42 ms rejects malformed page links: <a href="https://example.com">Outside</a> not recorded passed 0.3 ms renders Model definitions without exposing the derived term key map Studio static pages passed 9.63 ms frames every browsing page with a skip link, labelled search, rail, canvas, classic script and stamp Studio static pages passed 2.2 ms lists example-space owners only in Pack and Spec rails Studio static pages passed 0.36 ms shows a keyed question once with a copy action naming its full address Studio static pages passed 0.35 ms opens the index with counts, four task routes, every filter and stable section ids Studio static pages passed 0.84 ms gives each Spec row one rung badge and binding words Studio static pages passed 1.06 ms puts Pack totals before framing and folds holds into that summary Studio static pages passed 0.53 ms leaves member names out when every member waits only for its author Studio static pages passed 15.8 ms agrees each boundary verb with its count Studio static pages passed 13.16 ms shows only the Spec's own Packs in its rail and every Pack on the index Studio static pages passed 21.3 ms asserts every index summary sentence including fact-based verifier counts Studio static pages passed 10.79 ms renders code spans in titles on every page and strips them in document titles Studio static pages passed 13.22 ms orders rung filters by the ladder and uses none everywhere for an unmet idea floor Studio static pages passed 12.07 ms keeps navigation links outside Pack disclosure controls Studio static pages passed 0.23 ms labels next rungs, UI and finding links and avoids repeating absent bindings Studio static pages passed 0.49 ms renders Pack members in authored order, closed and with one colored badge per summary Studio static pages passed 0.7 ms renders the four Pack boundary sections and the verifier gap sentence once Studio static pages passed 0.29 ms shows the stated rung beside its floor and warns only in the dishonest direction Studio static pages passed 0.24 ms renders every section in order and every addressable entry with its key and recorded line Studio static pages passed 0.49 ms names the first unmet clause and renders a missing idea floor as none Studio static pages passed 5.38 ms shows question fields, code location, component, bindings and relations both ways Studio static pages passed 0.93 ms escapes authored text, reads only code spans and links resolving mentions Studio static pages passed 0.42 ms links validator-readable escaped mentions and preserves unequal code delimiters Studio static pages passed 0.36 ms shows findings on the index and only links page-bearing subjects Studio static pages passed 10.06 ms embeds the index only on search and supplies its element and no-script explanation Studio static pages passed 0.78 ms resolves all probe links including fragments in dynamic search results Studio static pages passed 9.25 ms keeps unresolved component bindings as text and resolves every remaining link Studio static pages passed 22.76 ms renders deterministically with no time or commit metadata Studio static pages passed 11.35 ms ships the native layout and focus stylesheet in the browser assets Studio static pages passed 0.4 ms resolves every page link and element fragment Protocol Studio page set passed 1364.19 ms contains the complete Spec prose without executing script Protocol Studio page set passed 103.58 ms
Design view
Requirement drawing
- Declared verifying examples: no declared verifying example.
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:68Component:
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
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
- refines · spec:consumers.spec-studio · stated ready, floor ready
- dependsOn · spec:consumers.binding-language-views · stated ready, floor ready
- dependsOn · spec:consumers.derived-readiness-banner · stated ready, floor ready
- dependsOn · spec:consumers.pack-design · stated ready, floor ready
- dependsOn · spec:consumers.spec-studio.data · stated ready, floor ready
- dependsOn · spec:consumers.spec-studio.shell · stated ready, floor ready
- dependsOn · spec:model.open-question-fields · stated ready, floor ready
Rested on by
Distance 1
- spec:consumers.spec-studio.export
Implementing units
impl:protocol.studio-diagram-element·src/studio-elements/diagram.ts:23impl:protocol.studio-expander·src/studio-elements/expander.ts:16impl:protocol.studio-pack-export·src/projections/studio/pages/export-page.ts:35impl:protocol.studio-pack-page·src/projections/studio/pages/pack-page.ts:68
Referencing units
None.
Enabled verifiers: spec:consumers.spec-studio.export.self-contained, test:protocol.studio-intent-handoff
- spec:consumers.spec-studio.pack-page.maturity-map
Implementing units
impl:protocol.studio-maturity-map·src/projections/studio/pages/maturity-map.ts:7
Referencing units
None.
Enabled verifiers: test:protocol.studio-architecture-maturity-requirement, test:protocol.studio-panels
- spec:consumers.spec-studio.slice-page
Implementing units
impl:protocol.studio-slice-page·src/projections/studio/pages/slice-page.ts:25
Referencing units
None.
Enabled verifiers: test:protocol.studio-slice-page
Distance 2
- spec:consumers.spec-studio.export.self-contained
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-export-contained
- spec:consumers.studio-on-ramp
Implementing units
impl:protocol.studio-on-ramp·test/skills.test.ts:1693
Referencing units
None.
Enabled verifiers: test:protocol.studio-on-ramp
Relations
| Relation and direction | Other end | Claim | Reason | Exercised keys |
|---|---|---|---|---|
| dependsOn · outgoing | Views speak binding language, never the internal fact namespec:consumers.binding-language-views · resolves | declared | None | None |
| dependsOn · outgoing | Derived readiness renders beside the stated rung and warns in one directionspec:consumers.derived-readiness-banner · resolves | declared | None | None |
| dependsOn · outgoing | The Pack context carries the Pack's designspec:consumers.pack-design · resolves | declared | the page renders the Pack design the Pack context carries | None |
| dependsOn · outgoing | The Studio renders from the reader's values and embeds only what its script readsspec:consumers.spec-studio.data · resolves | declared | None | None |
| dependsOn · outgoing | The Studio's shell frames every page with navigation, a rail and a canvasspec:consumers.spec-studio.shell · resolves | declared | None | None |
| dependsOn · outgoing | An open question may name who decides it, its links, a provisional reading and a re-entry triggerspec:model.open-question-fields · resolves | declared | None | None |
| refines · outgoing | The Spec Studio is a static HTML workbench over the one graphspec:consumers.spec-studio · resolves | declared | None | None |
| dependsOn · incoming | A Pack exports as one file, and every page prints as a documentspec:consumers.spec-studio.export · resolves | declared | an export opens with its Pack page's content | None |
| dependsOn · incoming | A slice page shows a Pack's design as one wholespec:consumers.spec-studio.slice-page · resolves | declared | each member links to its card on the Pack page, whose element id is the member's id | None |
| refines · incoming | A Pack page's maturity map places every member by its stated rung and its floorspec:consumers.spec-studio.pack-page.maturity-map · resolves | declared | None | None |
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.