outcomeThe index says where the corpus stands and narrows every Spec
spec:consumers.spec-studio.index-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.index-page.sdp.md
No open questions and no blocking questions; implementation binding present, verifier binding present, and expected-outcome oracle none.
A reader of a large design needs two ways in: by the task they came to do and by a word they remember. The index gives the first and links to search for the second, opens with a summary the build counts, and replaces one long table with a list a person narrows.
Intent
- Give a person one landing page that says where the corpus stands, routes them by task, lists every Pack with its members, and narrows every Spec by the coordinates and bindings they ask about.
Behavior
rule.summaryline 24 ·specs/consumers/spec-studio.index-page.sdp.md:24- The page opens with a summary the build counts from reader values, each count in a sentence: the Specs and Packs; the Specs at each stated rung; the Specs stated above their floor; the open and blocking questions; the Specs with an implementation binding and with a verifier binding; and the findings by severity.
no example exercises it
rule.taskRoutesline 25 ·specs/consumers/spec-studio.index-page.sdp.md:25- A short list then routes by task, in fixed words that quote nothing from the corpus: read a Pack's design, find a Spec, entry or file by a word, narrow the Specs, and read the findings; each route links to its place in the page set.
no example exercises it
rule.packsLensline 26 ·specs/consumers/spec-studio.index-page.sdp.md:26- The Packs section lists every Pack in id order with its title and its members in authored order, each member with its stated rung beside its floor; it draws no capability tree.
no example exercises it
rule.specRowsline 27 ·specs/consumers/spec-studio.index-page.sdp.md:27- The Specs section lists every Spec in id order, one row each: its title and id, kind and altitude, stated rung beside the floor reached, implementation binding and verifier binding as present or none, open and blocking questions, and its Packs.
no example exercises it
rule.filtersline 28 ·specs/consumers/spec-studio.index-page.sdp.md:28- Filters narrow the Specs section by kind, altitude, stated rung, floor reached, implementation binding, verifier binding, Pack and epic; each filter takes one value or any, the epic filter also takes no epic, the filters combine, and the section says how many of its rows it shows. Without script every row shows.
no example exercises it
rule.findingsline 29 ·specs/consumers/spec-studio.index-page.sdp.md:29- The findings section lists the validation report's findings in its order, each with its severity in words, its validator id, its subject when it has one, linked to its page when it is a Spec or a Pack and as text otherwise, its message, and its recorded file and line as text.
no example exercises it
0 unkeyed rules.
UI
summaryline 32 ·specs/consumers/spec-studio.index-page.sdp.md:32- a short list of sentences under the page title, each with a count.
taskRoutesline 33 ·specs/consumers/spec-studio.index-page.sdp.md:33- links under a
Start hereheading, these four first: Read a Pack's design, Find a Spec, entry or file by a word, Narrow the Specs, Read the findings. packListline 34 ·specs/consumers/spec-studio.index-page.sdp.md:34- one closed disclosure per Pack, its summary line the Pack's title, id and member count, its body the members in authored order as links with their rung badges.
specRowline 35 ·specs/consumers/spec-studio.index-page.sdp.md:35- one line per Spec: the title linked to its page, the id as code, the rung badge, then as plain text the kind, altitude, floor in words, the two binding values, the question counts and the Packs; the line wraps on a narrow screen.
filterBarline 36 ·specs/consumers/spec-studio.index-page.sdp.md:36- one labelled select per filter above the Specs, each listing any and the values the rows hold, and a line saying how many of all rows show.
sectionIdsline 37 ·specs/consumers/spec-studio.index-page.sdp.md:37- the Packs, Specs and findings sections carry the element ids
packs,specsandfindings, which the top navigation, the rail and the task routes link to. findingsListline 38 ·specs/consumers/spec-studio.index-page.sdp.md:38- one line per finding, the severity word first.
Verification
Verifier bindings
- 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.index-page: The index says where the corpus stands and narrows every Spec · declared Spec
- spec:consumers.spec-studio.lenses.packs: The Packs lens groups every Spec by the Packs that hold it · declared Spec
- impl:protocol.studio-index-page: renders Pack disclosures and filterable Spec rows · anchored code ·
src/projections/studio/pages/index-page.ts:8 - test:protocol.studio-pages: test:protocol.studio-pages · anchored test binding · binding present ·
test/studio-pages.test.ts:18 - spec:consumers.spec-studio.index-page refines spec:consumers.spec-studio.lenses.packs · declared — the index is the Packs lens and where a person lands
- impl:protocol.studio-index-page satisfies spec:consumers.spec-studio.index-page · anchored
- test:protocol.studio-pages verifies spec:consumers.spec-studio.index-page · 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-index-page· renders Pack disclosures and filterable Spec rows ·src/projections/studio/pages/index-page.ts:8Component:
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.spec-studio.capability-map-page: The capability map page makes refinement readable by epic
- spec:consumers.spec-studio.data: The Studio renders from the reader's values and embeds only what its script reads
- spec:consumers.spec-studio.index-page: The index says where the corpus stands and narrows every Spec
- spec:consumers.spec-studio.lenses.packs: The Packs lens groups every Spec by the Packs that hold it
- spec:consumers.spec-studio.navigation: Every page of the page set is reached from the top navigation and the index
- spec:consumers.spec-studio.shell: The Studio's shell frames every page with navigation, a rail and a canvas
- spec:consumers.spec-studio.index-page dependsOn spec:consumers.binding-language-views · declared
- spec:consumers.spec-studio.index-page dependsOn spec:consumers.derived-readiness-banner · declared
- spec:consumers.spec-studio.index-page dependsOn spec:consumers.spec-studio.data · declared
- spec:consumers.spec-studio.index-page dependsOn spec:consumers.spec-studio.shell · declared
- spec:consumers.spec-studio.index-page refines spec:consumers.spec-studio.lenses.packs · declared — the index is the Packs lens and where a person lands
- spec:consumers.spec-studio.capability-map-page dependsOn spec:consumers.spec-studio.index-page · declared — the Epic filter extends the index's Specs filters
- spec:consumers.spec-studio.navigation dependsOn spec:consumers.spec-studio.index-page · declared — the routes extend the index's task list
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.lenses.packs · 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.spec-studio.data · stated ready, floor ready
- dependsOn · spec:consumers.spec-studio.shell · stated ready, floor ready
Rested on by
Distance 1
- spec:consumers.spec-studio.capability-map-page
Implementing units
impl:protocol.studio-capabilities-page·src/projections/studio/pages/capabilities-page.ts:78impl:protocol.studio-filter·src/studio-elements/filter.ts:25impl:protocol.studio-frame·src/projections/studio/pages/frame.ts:6impl:protocol.studio-index-page·src/projections/studio/pages/index-page.ts:8
Referencing units
None.
Enabled verifiers: test:protocol.studio-capabilities
- spec:consumers.spec-studio.navigation
Implementing units
impl:protocol.studio-frame·src/projections/studio/pages/frame.ts:6impl:protocol.studio-index-page·src/projections/studio/pages/index-page.ts:8
Referencing units
None.
Enabled verifiers: test:protocol.studio-navigation, test:protocol.studio-roadmap-page
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 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 |
| refines · outgoing | The Packs lens groups every Spec by the Packs that hold itspec:consumers.spec-studio.lenses.packs · resolves | declared | the index is the Packs lens and where a person lands | None |
| dependsOn · incoming | The capability map page makes refinement readable by epicspec:consumers.spec-studio.capability-map-page · resolves | declared | the Epic filter extends the index's Specs filters | None |
| dependsOn · incoming | Every page of the page set is reached from the top navigation and the indexspec:consumers.spec-studio.navigation · resolves | declared | the routes extend the index's task list | None |
Bindings
Implementation binding: present
impl:protocol.studio-index-page· renders Pack disclosures and filterable Spec rows ·src/projections/studio/pages/index-page.ts:8· role projection · component component:protocol.projections· layer edge · context protocol
Design reference: none
Verifier binding: present
- 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.