Spec Studio

Five lenses read the graph as Packs, capabilities, architecture, tests and evidence

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

Changed since the base graph base da4b141: intent; narrative; rule.order; title; ui.lensPages

Base input: schema 0.11.0, 405 Specs.

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

Design: 1 design entry · no pinned declarations · no decisions

Findings: no errors, no warnings

specs/consumers/spec-studio.lenses.sdp.md

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

Each lens is a page with a Spec of its own, so each builds on the graph it reads today: the Packs, capabilities, architecture and tests lenses read what the graph records, and the evidence lens reads not tracked until the graph records an observation. This Spec keeps what the five share.

Intent
outcome
Let a person see the graph five ways, by Pack, by capability, by architecture, by verification and by evidence, from one top navigation.
Behavior
rule.order line 18 · specs/consumers/spec-studio.lenses.sdp.md:18
The lenses are pages of the page set, reached from the top navigation in the order Packs, capabilities, architecture, tests, evidence; the index page is the Packs lens and the default landing page.

no example exercises it

rule.lensValues line 19 · specs/consumers/spec-studio.lenses.sdp.md:19
A lens renders reader values and the recipe answers its own Spec names, and computes none of them in the page.

no example exercises it

rule.readOnly line 20 · specs/consumers/spec-studio.lenses.sdp.md:20
A lens writes nothing and states nothing: it lists, groups, draws and links, and a change a person wants from it leaves through the composing panel as scoped intent.

no example exercises it

0 unkeyed rules.

UI
lensPages line 23 · specs/consumers/spec-studio.lenses.sdp.md:23
index.html for the Packs lens, capabilities.html for the capabilities lens, architecture.html, tests.html and evidence.html, each opening with its name and one sentence saying what it reads.
Verification

Verifier bindings

  • test:protocol.studio-lenses · anchored · test anchor binding present · test/studio-s1.test.ts:273

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

    Test anchors: test:protocol.studio-architecture-planned-apart, test:protocol.studio-coverage-literal, test:protocol.studio-coverage-number, test:protocol.studio-diagram-folds-context, test:protocol.studio-diagram-folds-layer, test:protocol.studio-diagram-within-bound, test:protocol.studio-lenses, test:protocol.studio-tests-coverage-row. Specs verified by those bindings: spec:consumers.agent-surface.example-space-coverage, spec:consumers.agent-surface.example-space-coverage.number-not-enumerable, spec:consumers.agent-surface.example-space-coverage.uncovered-literal, spec:consumers.spec-studio.data.recipe-answers, spec:consumers.spec-studio.diagrams, spec:consumers.spec-studio.diagrams.folds-by-context, spec:consumers.spec-studio.diagrams.folds-by-layer, spec:consumers.spec-studio.diagrams.within-bound, spec:consumers.spec-studio.lenses, spec:consumers.spec-studio.lenses.architecture, spec:consumers.spec-studio.lenses.architecture.planned-apart, spec:consumers.spec-studio.lenses.evidence, spec:consumers.spec-studio.lenses.packs, spec:consumers.spec-studio.lenses.tests, spec:consumers.spec-studio.lenses.tests.coverage-row.

    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
    bounds and folds 12 componentsStudio diagramspassed21.4 ms
    bounds and folds 45 componentsStudio diagramspassed4.18 ms
    bounds and folds 50 componentsStudio diagramspassed10.57 ms
    keeps every edge in an open text fallbackStudio diagramspassed1.76 ms
    orders grid contexts and layers and wraps cells within the fixed width budgetStudio diagramspassed3.65 ms
    draws planned-use edges dashed independently of planned box outlinesStudio diagramspassed0.48 ms
    checks the edge bound even when boxes fitStudio diagramspassed0.41 ms
    places folded contexts and layers in their own bands below the gridStudio diagramspassed3.19 ms
    places outgoing relation bands above the subject and folds ties in relation orderStudio diagramspassed9.26 ms
    folds trace relation groups and leaves member overflow as textStudio diagramspassed2.95 ms
    keeps recipe and diagram edges in code-unit order under forced Czech collationStudio lensespassed116.83 ms
    publishes all five ordered lenses and honest evidence without scriptStudio lensespassed33.06 ms
    reads verifier binding from the delivery fact and gives absent coverage its own filter valueStudio lensespassed18.02 ms
    labels a primitive-only space with no examples not measurable and hides it under coveredStudio lensespassed14.75 ms
    classifies 'number' with points [ '1' ] and mixed=false as 'not-measurable'Studio lensespassed26.11 ms
    classifies 'string' with points [ '"a"' ] and mixed=false as 'not-measurable'Studio lensespassed22.83 ms
    classifies 'boolean' with points [ 'true' ] and mixed=false as 'not-measurable'Studio lensespassed11.69 ms
    classifies '"a"|"b"' with points [] and mixed=false as 'uncovered'Studio lensespassed9.5 ms
    classifies '"a"|"b"' with points [ '"a"' ] and mixed=false as 'uncovered'Studio lensespassed11.11 ms
    classifies '"a"|"b"' with points [ '"a"', '"b"' ] and mixed=false as 'covered'Studio lensespassed15.58 ms
    classifies '"a"|"b"' with points [ '"a"' ] and mixed=true as 'uncovered'Studio lensespassed16.25 ms
    classifies '"a"|"b"' with points [ '"a"', '"b"' ] and mixed=true as 'covered'Studio lensespassed20.2 ms
    renders member subjects, code spans, used-by counts, differences and empty componentsStudio lensespassed14.17 ms
    describes evidence sources as not trackedStudio lensespassed2.87 ms
    executes the bound example against a fresh worldAn architecture within the bound draws in one diagram, the same bytes twice (spec:consumers.spec-studio.diagrams.within-bound)passed13 ms
    executes the bound example against a fresh worldAn architecture over the bound folds by context (spec:consumers.spec-studio.diagrams.folds-by-context)passed7.68 ms
    executes the bound example against a fresh worldOne context over the bound folds by layer (spec:consumers.spec-studio.diagrams.folds-by-layer)passed8.85 ms
    executes the bound example against a fresh worldA component design no anchor realizes draws planned beside the built one (spec:consumers.spec-studio.lenses.architecture.planned-apart)passed26.33 ms
    executes the bound example against a fresh worldA Spec's row on the tests lens counts its exercised keyed rules (spec:consumers.spec-studio.lenses.tests.coverage-row)passed13.82 ms
    executes the bound example against a fresh worldA literal no example binds is reported uncovered, and an unbound child is named (spec:consumers.agent-surface.example-space-coverage.uncovered-literal)passed4.85 ms
    executes the bound example against a fresh worldA number slot is not enumerable and reports no uncovered value (spec:consumers.agent-surface.example-space-coverage.number-not-enumerable)passed3.01 ms
    reuses the build's reader and validation findings during Studio recipe evaluationnot recordedpassed3.94 ms
    documents the component and member fields recipe 17 addsnot recordedpassed1.22 ms
    evaluates each shipped recipe once for its assigned parameters and shares Pack totals, with base falsenot recordedpassed14.63 ms
    evaluates each shipped recipe once for its assigned parameters and shares Pack totals, with base truenot recordedpassed20.61 ms
    keeps label lines bounded and orders member depths numerically with outside units lastnot recordedpassed2.32 ms
    labels planned uses, reports unreadable designs and keeps unknown structure visiblenot recordedpassed8.33 ms
    gives unstated context and layer folds addressable text descriptionsnot recordedpassed1.14 ms
    names a single edge relation once in the legend and preserves its text equivalentnot recordedpassed1.75 ms
    names solid and planned uses once without repeating edge labelsnot recordedpassed0.63 ms
Design view

Requirement drawing

Requirement drawing for spec:consumers.spec-studio.lenses
Requirement drawing for spec:consumers.spec-studio.lensesmodels · anchoredrefines · declaredrefines · declaredrefines · declaredrefines · declaredrefines · declaredsatisfies · anchoredsatisfies · anchoredsatisfies · anchoredverifies · anchoredverifies · anchoredverifies · anchoredverifies · anchoredrefines, verifies · declaredrefines · declaredIntended Specs2 modeled Specs · anchored, folded2 modeled Specs · anchored3 refining Specs · declared, folded3 refining Specs · declaredspec:consumers.spec-studio.lensesFive lenses read the graphas Packs, capabilities,architecture, tests andevidence…lensesdeclared SpecDeclared verifying examples2 verifying examples · declared, folded2 verifying examples ·declaredSatisfying or referencingunits7 satisfying units · anchored, folded7 satisfying units ·anchoredTest or oracle bindings2 oracle bindings · anchored, folded2 oracle bindings · anchored5 test bindings · anchored, folded5 test bindings · anchoredOutside the selected set2 refining Specs · declared, folded2 refining Specs · declared2 refined Specs · declared, folded2 refined Specs · declared
The diagram as text
  • spec:consumers.spec-studio.lenses: Five lenses read the graph as Packs, capabilities, architecture, tests and evidence · declared Spec
  • spec:consumers.spec-studio.capability-map-page: The capability map page makes refinement readable by epic · declared Spec
  • spec:consumers.spec-studio.lenses.architecture: The architecture lens draws components by context and layer, the planned beside the built · declared Spec
  • spec:consumers.spec-studio.lenses.evidence: The evidence lens names each source of runtime evidence and reads it as not tracked · declared Spec
  • spec:consumers.spec-studio.lenses.packs: The Packs lens groups every Spec by the Packs that hold it · declared Spec
  • spec:consumers.spec-studio.lenses.tests: The tests lens shows how far each Spec's verification reaches · declared Spec
  • spec:consumers.spec-studio.lenses.architecture.planned-apart: A component design no anchor realizes draws planned beside the built one · declared Spec
  • spec:consumers.spec-studio.lenses.tests.coverage-row: A Spec's row on the tests lens counts its exercised keyed rules · declared Spec
  • spec:consumers.capability-map: The capability map reads every epic and its refinement descendants · declared Spec
  • spec:consumers.spec-studio.index-page: The index says where the corpus stands and narrows every Spec · declared Spec
  • spec:consumers.spec-studio: The Spec Studio is a static HTML workbench over the one graph · declared Spec
  • spec:consumers.spec-studio.lenses.architecture.unit-register: The architecture page lists each component's significant units by role · declared Spec
  • impl:protocol.studio-architecture-lens: renders recipe component rows and planned designs as architecture and member diagrams · anchored code · src/projections/studio/pages/architecture-page.ts:50
  • impl:protocol.studio-capabilities-page: renders epic evidence, refinement and unreached Specs from the capability map · anchored code · src/projections/studio/pages/capabilities-page.ts:78
  • impl:protocol.studio-evidence-lens: names the four evidence sources and what would bring each into the Studio · anchored code · src/projections/studio/pages/evidence-page.ts:3
  • impl:protocol.studio-filter: filters build-rendered rows through their recorded attributes · anchored code · src/studio-elements/filter.ts:25
  • impl:protocol.studio-frame: renders Studio navigation, page rails and composing controls · anchored code · src/projections/studio/pages/frame.ts:6
  • impl:protocol.studio-index-page: renders Pack disclosures and filterable Spec rows · anchored code · src/projections/studio/pages/index-page.ts:8
  • impl:protocol.studio-tests-lens: renders shared rule and example-space coverage with filters and verifier bindings · anchored code · src/projections/studio/pages/tests-page.ts:34
  • oracle:protocol.studio-architecture: oracle:protocol.studio-architecture · anchored oracle binding · test/studio-s1.test.ts:707
  • oracle:protocol.studio-tests: oracle:protocol.studio-tests · anchored oracle binding · test/studio-s1.test.ts:760
  • 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-architecture-planned-apart: test:protocol.studio-architecture-planned-apart · anchored test binding · binding present · test/studio-s1.test.ts:716
  • test:protocol.studio-capabilities: test:protocol.studio-capabilities · anchored test binding · binding present · test/studio-capabilities.test.ts:89
  • test:protocol.studio-lenses: test:protocol.studio-lenses · anchored test binding · binding present · test/studio-s1.test.ts:273
  • test:protocol.studio-tests-coverage-row: test:protocol.studio-tests-coverage-row · anchored test binding · binding present · test/studio-s1.test.ts:769
  • spec:consumers.spec-studio.capability-map-page refines spec:consumers.capability-map · declared — the page is the capability map's reading for a person
  • spec:consumers.spec-studio.capability-map-page refines spec:consumers.spec-studio.lenses · declared — the Capabilities page is a lens that reads refinement
  • 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.lenses refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.lenses.architecture refines spec:consumers.spec-studio.lenses · declared
  • spec:consumers.spec-studio.lenses.architecture.planned-apart refines spec:consumers.spec-studio.lenses.architecture · declared
  • spec:consumers.spec-studio.lenses.architecture.planned-apart verifies spec:consumers.spec-studio.lenses.architecture · declared
  • spec:consumers.spec-studio.lenses.architecture.unit-register refines spec:consumers.spec-studio.lenses.architecture · declared
  • spec:consumers.spec-studio.lenses.evidence refines spec:consumers.spec-studio.lenses · declared
  • spec:consumers.spec-studio.lenses.packs refines spec:consumers.spec-studio.lenses · declared
  • spec:consumers.spec-studio.lenses.tests refines spec:consumers.spec-studio.lenses · declared
  • spec:consumers.spec-studio.lenses.tests.coverage-row refines spec:consumers.spec-studio.lenses.tests · declared
  • spec:consumers.spec-studio.lenses.tests.coverage-row verifies spec:consumers.spec-studio.lenses.tests · declared
  • impl:protocol.studio-architecture-lens satisfies spec:consumers.spec-studio.lenses.architecture · anchored
  • impl:protocol.studio-architecture-lens satisfies spec:consumers.spec-studio.lenses · anchored
  • impl:protocol.studio-capabilities-page satisfies spec:consumers.spec-studio.capability-map-page · anchored
  • impl:protocol.studio-evidence-lens satisfies spec:consumers.spec-studio.lenses.evidence · anchored
  • impl:protocol.studio-evidence-lens satisfies spec:consumers.spec-studio.lenses · anchored
  • impl:protocol.studio-filter satisfies spec:consumers.spec-studio.capability-map-page · anchored
  • impl:protocol.studio-frame satisfies spec:consumers.spec-studio.lenses · anchored
  • impl:protocol.studio-frame satisfies spec:consumers.spec-studio.capability-map-page · anchored
  • impl:protocol.studio-index-page satisfies spec:consumers.spec-studio.lenses.packs · anchored
  • impl:protocol.studio-index-page satisfies spec:consumers.spec-studio.capability-map-page · anchored
  • impl:protocol.studio-tests-lens satisfies spec:consumers.spec-studio.lenses.tests · anchored
  • impl:protocol.studio-tests-lens satisfies spec:consumers.spec-studio.lenses · anchored
  • oracle:protocol.studio-architecture models spec:consumers.spec-studio.lenses.architecture · anchored
  • oracle:protocol.studio-tests models spec:consumers.spec-studio.lenses.tests · anchored
  • test:protocol.studio-architecture-maturity-requirement verifies spec:consumers.spec-studio.lenses.architecture · anchored
  • test:protocol.studio-architecture-planned-apart verifies spec:consumers.spec-studio.lenses.architecture.planned-apart · anchored
  • test:protocol.studio-capabilities verifies spec:consumers.spec-studio.capability-map-page · anchored
  • test:protocol.studio-lenses verifies spec:consumers.spec-studio.lenses · anchored
  • test:protocol.studio-lenses verifies spec:consumers.spec-studio.lenses.packs · anchored
  • test:protocol.studio-lenses verifies spec:consumers.spec-studio.lenses.evidence · anchored
  • test:protocol.studio-tests-coverage-row verifies spec:consumers.spec-studio.lenses.tests.coverage-row · anchored
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred syntax: requirementDiagram. Chosen syntax: flowchart TB because models, folds require exact labels unavailable in requirement syntax.

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-architecture-lens · renders recipe component rows and planned designs as architecture and member diagrams · src/projections/studio/pages/architecture-page.ts:50

    Component: component:protocol.projections · read-only output, layout and owned publication · src/projections/design-review.ts:29 · layer edge · context protocol

    Uses

    None.

  • impl:protocol.studio-evidence-lens · names the four evidence sources and what would bring each into the Studio · src/projections/studio/pages/evidence-page.ts:3

    Component: component:protocol.projections · read-only output, layout and owned publication · src/projections/design-review.ts:29 · layer edge · context protocol

    Uses

    None.

  • impl:protocol.studio-frame · renders Studio navigation, page rails and composing controls · src/projections/studio/pages/frame.ts:6

    Component: component:protocol.projections · read-only output, layout and owned publication · src/projections/design-review.ts:29 · layer edge · context protocol

    Uses

    None.

  • impl:protocol.studio-tests-lens · renders shared rule and example-space coverage with filters and verifier bindings · src/projections/studio/pages/tests-page.ts:34

    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.lenses
The diagram as text
  • spec:consumers.spec-studio: The Spec Studio is a static HTML workbench over the one graph
  • 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.lenses: Five lenses read the graph as Packs, capabilities, architecture, tests and evidence
  • spec:consumers.spec-studio.lenses.architecture: The architecture lens draws components by context and layer, the planned beside the built
  • spec:consumers.spec-studio.lenses.evidence: The evidence lens names each source of runtime evidence and reads it as not tracked
  • spec:consumers.spec-studio.lenses.packs: The Packs lens groups every Spec by the Packs that hold it
  • spec:consumers.spec-studio.lenses.tests: The tests lens shows how far each Spec's verification reaches
  • 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.lenses dependsOn spec:consumers.spec-studio.data · declared
  • spec:consumers.spec-studio.lenses refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.navigation dependsOn spec:consumers.spec-studio.lenses · declared — the lens entries keep the order the lenses take
  • spec:consumers.spec-studio.shell dependsOn spec:consumers.spec-studio.lenses · declared — the top navigation opens each lens
  • spec:consumers.spec-studio.capability-map-page refines spec:consumers.spec-studio.lenses · declared — the Capabilities page is a lens that reads refinement
  • spec:consumers.spec-studio.lenses.architecture refines spec:consumers.spec-studio.lenses · declared
  • spec:consumers.spec-studio.lenses.evidence refines spec:consumers.spec-studio.lenses · declared
  • spec:consumers.spec-studio.lenses.packs refines spec:consumers.spec-studio.lenses · declared
  • spec:consumers.spec-studio.lenses.tests refines spec:consumers.spec-studio.lenses · 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

Distance 3

Distance 4

Relations

Relation and directionOther endClaimReasonExercised keys
dependsOn · outgoingThe Studio renders from the reader's values and embeds only what its script reads
spec:consumers.spec-studio.data · resolves
declaredNoneNone
refines · outgoingThe Spec Studio is a static HTML workbench over the one graph
spec:consumers.spec-studio · resolves
declaredNoneNone
dependsOn · incomingEvery page of the page set is reached from the top navigation and the index
spec:consumers.spec-studio.navigation · resolves
declaredthe lens entries keep the order the lenses takeNone
dependsOn · incomingThe Studio's shell frames every page with navigation, a rail and a canvas
spec:consumers.spec-studio.shell · resolves
declaredthe top navigation opens each lensNone
refines · incomingThe capability map page makes refinement readable by epic
spec:consumers.spec-studio.capability-map-page · resolves
declaredthe Capabilities page is a lens that reads refinementNone
refines · incomingThe architecture lens draws components by context and layer, the planned beside the built
spec:consumers.spec-studio.lenses.architecture · resolves
declaredNoneNone
refines · incomingThe evidence lens names each source of runtime evidence and reads it as not tracked
spec:consumers.spec-studio.lenses.evidence · resolves
declaredNoneNone
refines · incomingThe Packs lens groups every Spec by the Packs that hold it
spec:consumers.spec-studio.lenses.packs · resolves
declaredNoneNone
refines · incomingThe tests lens shows how far each Spec's verification reaches
spec:consumers.spec-studio.lenses.tests · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.studio-architecture-lens · renders recipe component rows and planned designs as architecture and member diagrams · src/projections/studio/pages/architecture-page.ts:50 · role projection · component component:protocol.projections · layer edge · context protocol
  • impl:protocol.studio-evidence-lens · names the four evidence sources and what would bring each into the Studio · src/projections/studio/pages/evidence-page.ts:3 · role projection · component component:protocol.projections · layer edge · context protocol
  • impl:protocol.studio-frame · renders Studio navigation, page rails and composing controls · src/projections/studio/pages/frame.ts:6 · role projection · component component:protocol.projections · layer edge · context protocol
  • impl:protocol.studio-tests-lens · renders shared rule and example-space coverage with filters and verifier bindings · src/projections/studio/pages/tests-page.ts:34 · role projection · component component:protocol.projections · layer edge · context protocol

Design reference: none

Verifier binding: present

  • test:protocol.studio-lenses · anchored · test/studio-s1.test.ts:273 · 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.