outcomeThe Packs lens groups every Spec by the Packs that hold it
spec:consumers.spec-studio.lenses.packsChanged since the base graph base da4b141: narrative; rule.packGrouping
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.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
- Let a person reach every Spec through the Packs that hold it, each Pack's members in the order its manifest gives.
Behavior
rule.landingline 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.packGroupingline 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.everySpecline 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
packsLensline 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:273External run evidence from
test/studio-s1.test.tsTest 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
Name Suite Result Duration bounds and folds 12 components Studio diagrams passed 21.4 ms bounds and folds 45 components Studio diagrams passed 4.18 ms bounds and folds 50 components Studio diagrams passed 10.57 ms keeps every edge in an open text fallback Studio diagrams passed 1.76 ms orders grid contexts and layers and wraps cells within the fixed width budget Studio diagrams passed 3.65 ms draws planned-use edges dashed independently of planned box outlines Studio diagrams passed 0.48 ms checks the edge bound even when boxes fit Studio diagrams passed 0.41 ms places folded contexts and layers in their own bands below the grid Studio diagrams passed 3.19 ms places outgoing relation bands above the subject and folds ties in relation order Studio diagrams passed 9.26 ms folds trace relation groups and leaves member overflow as text Studio diagrams passed 2.95 ms keeps recipe and diagram edges in code-unit order under forced Czech collation Studio lenses passed 116.83 ms publishes all five ordered lenses and honest evidence without script Studio lenses passed 33.06 ms reads verifier binding from the delivery fact and gives absent coverage its own filter value Studio lenses passed 18.02 ms labels a primitive-only space with no examples not measurable and hides it under covered Studio lenses passed 14.75 ms classifies 'number' with points [ '1' ] and mixed=false as 'not-measurable' Studio lenses passed 26.11 ms classifies 'string' with points [ '"a"' ] and mixed=false as 'not-measurable' Studio lenses passed 22.83 ms classifies 'boolean' with points [ 'true' ] and mixed=false as 'not-measurable' Studio lenses passed 11.69 ms classifies '"a"|"b"' with points [] and mixed=false as 'uncovered' Studio lenses passed 9.5 ms classifies '"a"|"b"' with points [ '"a"' ] and mixed=false as 'uncovered' Studio lenses passed 11.11 ms classifies '"a"|"b"' with points [ '"a"', '"b"' ] and mixed=false as 'covered' Studio lenses passed 15.58 ms classifies '"a"|"b"' with points [ '"a"' ] and mixed=true as 'uncovered' Studio lenses passed 16.25 ms classifies '"a"|"b"' with points [ '"a"', '"b"' ] and mixed=true as 'covered' Studio lenses passed 20.2 ms renders member subjects, code spans, used-by counts, differences and empty components Studio lenses passed 14.17 ms describes evidence sources as not tracked Studio lenses passed 2.87 ms executes the bound example against a fresh world An architecture within the bound draws in one diagram, the same bytes twice (spec:consumers.spec-studio.diagrams.within-bound) passed 13 ms executes the bound example against a fresh world An architecture over the bound folds by context (spec:consumers.spec-studio.diagrams.folds-by-context) passed 7.68 ms executes the bound example against a fresh world One context over the bound folds by layer (spec:consumers.spec-studio.diagrams.folds-by-layer) passed 8.85 ms executes the bound example against a fresh world A component design no anchor realizes draws planned beside the built one (spec:consumers.spec-studio.lenses.architecture.planned-apart) passed 26.33 ms executes the bound example against a fresh world A Spec's row on the tests lens counts its exercised keyed rules (spec:consumers.spec-studio.lenses.tests.coverage-row) passed 13.82 ms executes the bound example against a fresh world A literal no example binds is reported uncovered, and an unbound child is named (spec:consumers.agent-surface.example-space-coverage.uncovered-literal) passed 4.85 ms executes the bound example against a fresh world A number slot is not enumerable and reports no uncovered value (spec:consumers.agent-surface.example-space-coverage.number-not-enumerable) passed 3.01 ms reuses the build's reader and validation findings during Studio recipe evaluation not recorded passed 3.94 ms documents the component and member fields recipe 17 adds not recorded passed 1.22 ms evaluates each shipped recipe once for its assigned parameters and shares Pack totals, with base false not recorded passed 14.63 ms evaluates each shipped recipe once for its assigned parameters and shares Pack totals, with base true not recorded passed 20.61 ms keeps label lines bounded and orders member depths numerically with outside units last not recorded passed 2.32 ms labels planned uses, reports unreadable designs and keeps unknown structure visible not recorded passed 8.33 ms gives unstated context and layer folds addressable text descriptions not recorded passed 1.14 ms names a single edge relation once in the legend and preserves its text equivalent not recorded passed 1.75 ms names solid and planned uses once without repeating edge labels not recorded passed 0.63 ms
Design view
Requirement drawing
- Declared verifying examples: no declared verifying example.
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: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.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
- refines · spec:consumers.spec-studio.lenses · stated ready, floor ready
- dependsOn · spec:extraction.pack-member-order · stated ready, floor ready
Rested on by
Distance 1
- spec:consumers.spec-studio.index-page
Implementing units
impl:protocol.studio-index-page·src/projections/studio/pages/index-page.ts:8
Referencing units
None.
Enabled verifiers: test:protocol.studio-pages
Distance 2
- 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 | A Pack node keeps its members in authored orderspec:extraction.pack-member-order · resolves | declared | the lens lists each Pack's members in the order its manifest gives | None |
| refines · outgoing | Five lenses read the graph as Packs, capabilities, architecture, tests and evidencespec:consumers.spec-studio.lenses · resolves | declared | None | None |
| refines · incoming | The index says where the corpus stands and narrows every Specspec:consumers.spec-studio.index-page · resolves | declared | the index is the Packs lens and where a person lands | 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-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.