Spec Studio

The index says where the corpus stands and narrows every Spec

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

Changed since the base graph base da4b141: rule.filters

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.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
outcome
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.summary line 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.taskRoutes line 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.packsLens line 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.specRows line 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.filters line 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.findings line 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
summary line 32 · specs/consumers/spec-studio.index-page.sdp.md:32
a short list of sentences under the page title, each with a count.
taskRoutes line 33 · specs/consumers/spec-studio.index-page.sdp.md:33
links under a Start here heading, these four first: Read a Pack's design, Find a Spec, entry or file by a word, Narrow the Specs, Read the findings.
packList line 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.
specRow line 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.
filterBar line 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.
sectionIds line 37 · specs/consumers/spec-studio.index-page.sdp.md:37
the Packs, Specs and findings sections carry the element ids packs, specs and findings, which the top navigation, the rail and the task routes link to.
findingsList line 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: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.index-page
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:8

    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.index-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.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

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:78
    • impl:protocol.studio-filter · src/studio-elements/filter.ts:25
    • impl:protocol.studio-frame · src/projections/studio/pages/frame.ts:6
    • impl:protocol.studio-index-page · src/projections/studio/pages/index-page.ts:8

    Referencing units

    None.

    Enabled verifiers: test:protocol.studio-capabilities

    Packs: pack:roadmaps-and-slices-v1, pack:self-hosting-v1

  • spec:consumers.spec-studio.navigation

    Implementing units

    • impl:protocol.studio-frame · src/projections/studio/pages/frame.ts:6
    • impl: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

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

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 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
refines · outgoingThe Packs lens groups every Spec by the Packs that hold it
spec:consumers.spec-studio.lenses.packs · resolves
declaredthe index is the Packs lens and where a person landsNone
dependsOn · incomingThe capability map page makes refinement readable by epic
spec:consumers.spec-studio.capability-map-page · resolves
declaredthe Epic filter extends the index's Specs filtersNone
dependsOn · incomingEvery page of the page set is reached from the top navigation and the index
spec:consumers.spec-studio.navigation · resolves
declaredthe routes extend the index's task listNone

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.