Spec Studio

The Packs lens groups every Spec by the Packs that hold it

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

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.packs.sdp.md

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

Packs collect Specs for review, while the separate Capabilities page reads authored refinement. The index remains the landing page and keeps each Pack's members in authored order.

Intent
outcome
Let a person reach every Spec through the Packs that hold it, each Pack's members in the order its manifest gives.
Behavior
rule.landing line 20 · specs/consumers/spec-studio.lenses.packs.sdp.md:20
The Packs lens is the index page, the page a person lands on.

no example exercises it

rule.packGrouping line 21 · specs/consumers/spec-studio.lenses.packs.sdp.md:21
The Packs lens groups Specs by Pack, each Pack's members in authored order. The separate Capabilities page reads refinement; selecting an epic narrows the index's Specs section without changing any Pack.

no example exercises it

rule.everySpec line 22 · specs/consumers/spec-studio.lenses.packs.sdp.md:22
A Spec in no Pack is still listed, in the index's Specs section, so the lens hides no Spec.

no example exercises it

0 unkeyed rules.

UI
packsLens line 25 · specs/consumers/spec-studio.lenses.packs.sdp.md:25
the index page's Packs section, one closed disclosure per Pack in id order, its summary line the Pack's title, id and member count, its body the members in authored order with their rung badges.
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 391 · Branch: cursor/media-plan-and-articles-09b1 · Commit: 076cd4f1f85640d8236e5cca1bffffa68ab79a33 · Start: 2026-10-31T15:32:20.471Z · Stop: 2026-10-31T15:34:02.073Z

    NameSuiteResultDuration
    bounds and folds 12 componentsStudio diagramspassed30.61 ms
    bounds and folds 45 componentsStudio diagramspassed7.71 ms
    bounds and folds 50 componentsStudio diagramspassed18.03 ms
    keeps every edge in an open text fallbackStudio diagramspassed2.56 ms
    orders grid contexts and layers and wraps cells within the fixed width budgetStudio diagramspassed4.7 ms
    draws planned-use edges dashed independently of planned box outlinesStudio diagramspassed0.78 ms
    checks the edge bound even when boxes fitStudio diagramspassed0.69 ms
    places folded contexts and layers in their own bands below the gridStudio diagramspassed4.25 ms
    places outgoing relation bands above the subject and folds ties in relation orderStudio diagramspassed10.09 ms
    folds trace relation groups and leaves member overflow as textStudio diagramspassed3.04 ms
    keeps recipe and diagram edges in code-unit order under forced Czech collationStudio lensespassed129.74 ms
    publishes all five ordered lenses and honest evidence without scriptStudio lensespassed41.5 ms
    reads verifier binding from the delivery fact and gives absent coverage its own filter valueStudio lensespassed17.84 ms
    labels a primitive-only space with no examples not measurable and hides it under coveredStudio lensespassed27.26 ms
    classifies 'number' with points [ '1' ] and mixed=false as 'not-measurable'Studio lensespassed17.82 ms
    classifies 'string' with points [ '"a"' ] and mixed=false as 'not-measurable'Studio lensespassed11.69 ms
    classifies 'boolean' with points [ 'true' ] and mixed=false as 'not-measurable'Studio lensespassed13.27 ms
    classifies '"a"|"b"' with points [] and mixed=false as 'uncovered'Studio lensespassed6.82 ms
    classifies '"a"|"b"' with points [ '"a"' ] and mixed=false as 'uncovered'Studio lensespassed7.04 ms
    classifies '"a"|"b"' with points [ '"a"', '"b"' ] and mixed=false as 'covered'Studio lensespassed20.44 ms
    classifies '"a"|"b"' with points [ '"a"' ] and mixed=true as 'uncovered'Studio lensespassed19.79 ms
    classifies '"a"|"b"' with points [ '"a"', '"b"' ] and mixed=true as 'covered'Studio lensespassed23.06 ms
    renders member subjects, code spans, used-by counts, differences and empty componentsStudio lensespassed16.1 ms
    describes evidence sources as not trackedStudio lensespassed2.69 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)passed18.43 ms
    executes the bound example against a fresh worldAn architecture over the bound folds by context (spec:consumers.spec-studio.diagrams.folds-by-context)passed11.36 ms
    executes the bound example against a fresh worldOne context over the bound folds by layer (spec:consumers.spec-studio.diagrams.folds-by-layer)passed11.28 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)passed21.54 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)passed20.54 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)passed5.25 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.13 ms
    reuses the build's reader and validation findings during Studio recipe evaluationnot recordedpassed3.65 ms
    documents the component and member fields recipe 17 addsnot recordedpassed1.47 ms
    evaluates each shipped recipe once for its assigned parameters and shares Pack totals, with base falsenot recordedpassed18.31 ms
    evaluates each shipped recipe once for its assigned parameters and shares Pack totals, with base truenot recordedpassed15.91 ms
    keeps label lines bounded and orders member depths numerically with outside units lastnot recordedpassed1.76 ms
    labels planned uses, reports unreadable designs and keeps unknown structure visiblenot recordedpassed9.16 ms
    gives unstated context and layer folds addressable text descriptionsnot recordedpassed1.11 ms
    names a single edge relation once in the legend and preserves its text equivalentnot recordedpassed1.76 ms
    names solid and planned uses once without repeating edge labelsnot recordedpassed0.58 ms
Design view

Requirement drawing

  • Declared verifying examples: no declared verifying example.
Requirement drawing for spec:consumers.spec-studio.lenses.packs
The diagram as text
  • spec:consumers.spec-studio.lenses.packs: The Packs lens groups every Spec by the Packs that hold it · 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.lenses: Five lenses read the graph as Packs, capabilities, architecture, tests and evidence · 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-lenses: test:protocol.studio-lenses · anchored test binding · binding present · test/studio-s1.test.ts:273
  • 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
  • spec:consumers.spec-studio.lenses.packs refines spec:consumers.spec-studio.lenses · declared
  • impl:protocol.studio-index-page satisfies spec:consumers.spec-studio.index-page · anchored
  • impl:protocol.studio-index-page satisfies spec:consumers.spec-studio.lenses.packs · anchored
  • test:protocol.studio-lenses verifies spec:consumers.spec-studio.lenses.packs · 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.lenses.packs
The diagram as text
  • spec:consumers.spec-studio.index-page: The index says where the corpus stands and narrows every Spec
  • spec:consumers.spec-studio.lenses: Five lenses read the graph as Packs, capabilities, architecture, tests and evidence
  • spec:consumers.spec-studio.lenses.packs: The Packs lens groups every Spec by the Packs that hold it
  • spec:extraction.pack-member-order: A Pack node keeps its members in authored order
  • spec:consumers.spec-studio.lenses.packs dependsOn spec:extraction.pack-member-order · declared — the lens lists each Pack's members in the order its manifest gives
  • spec:consumers.spec-studio.lenses.packs refines spec:consumers.spec-studio.lenses · 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
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

  • 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 · outgoingA Pack node keeps its members in authored order
spec:extraction.pack-member-order · resolves
declaredthe lens lists each Pack's members in the order its manifest givesNone
refines · outgoingFive lenses read the graph as Packs, capabilities, architecture, tests and evidence
spec:consumers.spec-studio.lenses · resolves
declaredNoneNone
refines · incomingThe index says where the corpus stands and narrows every Spec
spec:consumers.spec-studio.index-page · resolves
declaredthe index is the Packs lens and where a person landsNone

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