Spec Studio

A Spec page's core shows the whole Spec, with an anchor for every entry

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

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

Design: 8 design entries · no pinned declarations · 1 decision

Findings: no errors, no warnings

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

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

The full Spec page adds panels to this core: diagrams, a runtime neighborhood, verification and evidence panels, impact, and actions that compose intent. The core shows what the Spec context holds, as text, so a reviewer with only a link reads the whole Spec and can cite any entry by its address.

Intent
outcome
Show everything the graph holds about one Spec on one page that reads without script: its header, its sections in order with an anchor for every addressable entry, its relations both ways, its bindings and its findings.
Behavior
rule.header line 27 · specs/consumers/spec-studio.spec-page.core.sdp.md:27
The header shows the title; the id with a copy action; the kind's display label and the altitude; the stated rung beside the floor reached on one line, with the divergence banner only in the dishonest direction; the stated next rung with nothing blocks or each unmet clause and its targets; the Packs the Spec belongs to, linked; its design columns; its findings by severity; and its carrier file as text with a copy action. It shows no owner, capability, tag or last-verified time: the envelope holds none, the Packs stand for a capability, and a binding never records a run.

no example exercises it

rule.summary line 28 · specs/consumers/spec-studio.spec-page.core.sdp.md:28
A summary in words follows the header with what the header does not show: the open and blocking questions, and the implementation, verifier and oracle bindings as present or none. It repeats no rung the header shows.

no example exercises it

rule.sections line 29 · specs/consumers/spec-studio.spec-page.core.sdp.md:29
The narrative comes next, then each section the Spec carries as a panel open by default, in the order intent, behavior, constraints, model, design, decision, verification, ui, with its entries in authored order. A section the Spec lacks is absent, and the page adds no section the graph does not hold. The narrative carries the element id narrative and each section panel section.<name>, such as section.behavior.

no example exercises it

rule.entryIds line 30 · specs/consumers/spec-studio.spec-page.core.sdp.md:30
Every entry an entry address can name, a keyed Design or UI entry, a keyed rule or flow and a keyed open question, carries an element id equal to its address after the #, such as design.<key>, and shows its key and its recorded line.

no example exercises it

rule.questions line 31 · specs/consumers/spec-studio.spec-page.core.sdp.md:31
Each open question shows its blocking flag in words, its key as code with a copy action for the full entry address when it has one, its text, its decider, its links, linked, its provisional reading and its trigger when present, and its recorded line. It shows no date: git records when a line changed.

no example exercises it

rule line 32 · specs/consumers/spec-studio.spec-page.core.sdp.md:32
A gwt or gwt-vocabulary fence shows as preformatted step text, as authored.
rule.relations line 33 · specs/consumers/spec-studio.spec-page.core.sdp.md:33
Relations show both ways, each with its type, its direction, its claim, the other endpoint, linked when it is a Spec or a Pack, whether it resolves, and its reason and the rule keys it exercises when present.

no example exercises it

rule.bindings line 34 · specs/consumers/spec-studio.spec-page.core.sdp.md:34
Bindings speak binding language. The implementation binding, design reference, verifier binding and expected-outcome oracle each read present or none, and list each unit, test anchor, example or oracle by id, label, and recorded file and line as text with a copy action; a unit adds its role and component, and an example verifier says whether it is enabled. Runtime observation reads not tracked, and run results read not recorded in the graph.

no example exercises it

rule.findings line 35 · specs/consumers/spec-studio.spec-page.core.sdp.md:35
The findings that name the Spec close the page, each with its severity in words, its validator id and its message.

no example exercises it

1 unkeyed rule.

UI
headerBlock line 38 · specs/consumers/spec-studio.spec-page.core.sdp.md:38
the title as the page heading; below it a line with the id, kind, altitude, the rung badge with the floor in words, and the next rung; then the Packs, the design columns, the finding counts and the carrier file.
summaryLine line 39 · specs/consumers/spec-studio.spec-page.core.sdp.md:39
one sentence under the header.
sectionPanel line 40 · specs/consumers/spec-studio.spec-page.core.sdp.md:40
an open disclosure per section, headed with the section's name, and for Verification its mode.
entryRow line 41 · specs/consumers/spec-studio.spec-page.core.sdp.md:41
an entry's key as code, its value, and line <n> when recorded, in a definition list.
questionItem line 42 · specs/consumers/spec-studio.spec-page.core.sdp.md:42
the blocking flag in words, question.<key> as code when keyed, a copy action whose text and accessible name carry the full entry address, with no second code span of that address, the text, each present field on its own labelled line, and line <n> when recorded.
relationsTable line 43 · specs/consumers/spec-studio.spec-page.core.sdp.md:43
five columns, relation and direction, other end, claim, reason, and exercised keys, with an unresolved endpoint marked in words.
bindingsBlock line 44 · specs/consumers/spec-studio.spec-page.core.sdp.md:44
four labelled lines, each present or none with its items below it, then runtime observation and run results.
findingsList line 45 · specs/consumers/spec-studio.spec-page.core.sdp.md:45
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.spec-page.core
The diagram as text
  • spec:consumers.spec-studio.spec-page.core: A Spec page's core shows the whole Spec, with an anchor for every entry · declared Spec
  • spec:consumers.spec-studio.spec-page: A Spec page shows one Spec in collapsible panels, in a fixed order · declared Spec
  • impl:protocol.studio-spec-page: renders Spec intent, relations and realization bindings · anchored code · src/projections/studio/pages/spec-page.ts:201
  • test:protocol.studio-pages: test:protocol.studio-pages · anchored test binding · binding present · test/studio-pages.test.ts:18
  • spec:consumers.spec-studio.spec-page.core refines spec:consumers.spec-studio.spec-page · declared
  • impl:protocol.studio-spec-page satisfies spec:consumers.spec-studio.spec-page.core · anchored
  • test:protocol.studio-pages verifies spec:consumers.spec-studio.spec-page.core · 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

  • The Design Review renders open-section entries as a list

    The Design Review renders each entry of a design or ui section as a list item in authored order, its key as inline code. A string value renders as Markdown text through the prose escaping rule; a number or boolean renders as inline code; an array or object renders as a fenced JSON block nested under its item, so a structured value the TypeScript carrier admits survives without loss. The fenced-JSON rule of the Design Review stops covering an open section as a whole and keeps covering a structured value inside one entry. The freeze on the four shipped projections stands for everything else.

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-spec-page · renders Spec intent, relations and realization bindings · src/projections/studio/pages/spec-page.ts:201

    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.spec-page.core
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.data: The Studio renders from the reader's values and embeds only what its script reads
  • spec:consumers.spec-studio.shell: The Studio's shell frames every page with navigation, a rail and a canvas
  • spec:consumers.spec-studio.spec-page: A Spec page shows one Spec in collapsible panels, in a fixed order
  • spec:consumers.spec-studio.spec-page.core: A Spec page's core shows the whole Spec, with an anchor for every entry
  • spec:decisions.authored-entry-order: The Design Review renders open-section entries as a list
  • spec:extraction.entry-locations: The graph records where each addressable entry is written
  • spec:model.open-question-fields: An open question may name who decides it, its links, a provisional reading and a re-entry trigger
  • spec:model.relation-reasons: An authored relation may carry its reason
  • spec:model.rule-keys: A rule or flow entry may carry a key that addresses it
  • spec:consumers.spec-studio.spec-page.core decidedBy spec:decisions.authored-entry-order · declared
  • spec:consumers.spec-studio.spec-page.core dependsOn spec:consumers.binding-language-views · declared
  • spec:consumers.spec-studio.spec-page.core dependsOn spec:consumers.derived-readiness-banner · declared
  • spec:consumers.spec-studio.spec-page.core dependsOn spec:consumers.spec-studio.data · declared
  • spec:consumers.spec-studio.spec-page.core dependsOn spec:consumers.spec-studio.shell · declared
  • spec:consumers.spec-studio.spec-page.core dependsOn spec:extraction.entry-locations · declared
  • spec:consumers.spec-studio.spec-page.core dependsOn spec:model.open-question-fields · declared
  • spec:consumers.spec-studio.spec-page.core dependsOn spec:model.relation-reasons · declared
  • spec:consumers.spec-studio.spec-page.core dependsOn spec:model.rule-keys · declared
  • spec:consumers.spec-studio.spec-page.core refines spec:consumers.spec-studio.spec-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

No Spec rests on this Spec.

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingThe Design Review renders open-section entries as a list
spec:decisions.authored-entry-order · resolves
declaredNoneNone
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
dependsOn · outgoingThe graph records where each addressable entry is written
spec:extraction.entry-locations · 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
dependsOn · outgoingAn authored relation may carry its reason
spec:model.relation-reasons · resolves
declaredNoneNone
dependsOn · outgoingA rule or flow entry may carry a key that addresses it
spec:model.rule-keys · resolves
declaredNoneNone
refines · outgoingA Spec page shows one Spec in collapsible panels, in a fixed order
spec:consumers.spec-studio.spec-page · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.studio-spec-page · renders Spec intent, relations and realization bindings · src/projections/studio/pages/spec-page.ts:201 · 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.