Spec Studio

A dependency drawing shows the declared footing of a Spec set

spec:consumers.spec-studio.diagram-kinds.dependencyUse Case / Behavior · storyready floor ready

New since the base graph base da4b141. See the diff.

Base input: schema 0.11.0, 405 Specs.

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

Design: 6 design entries · 2 pinned declarations · no decisions

Findings: no errors, no warnings

specs/consumers/spec-studio.diagram-kinds.dependency.sdp.md

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

Intent
outcome
See multi-hop dependency chains and cycles within a Pack, slice or roadmap without reading them as an execution schedule.
Behavior
rule.declaredOnly line 16 · specs/consumers/spec-studio.diagram-kinds.dependency.sdp.md:16
Draw the design slice answer's structure edges and rests-on boundary, preserving each declared refines, dependsOn, constrainedBy and decidedBy relation's exact direction, reason and claim. The design slice owns its rests-on exception for a refines back to a member that names it by another typed relation: such an edge carries orders: false, is drawn dashed and says in its legend and text that it orders nothing. Membership is scope, never a dependency.

no example exercises it

rule.depth line 17 · specs/consumers/spec-studio.diagram-kinds.dependency.sdp.md:17
Band each member by the depth its supplied answer gives, the design slice's depth for a Pack, slice or roadmap scope; the layout never recomputes it. A cycle's members share one band and are named as a cycle in words.

no example exercises it

rule.boundary line 18 · specs/consumers/spec-studio.diagram-kinds.dependency.sdp.md:18
Show immediate dependencies outside the supplied scope in a separate boundary band, without traversing their dependencies. An unresolved target is named unresolved and has no invented title or link.

no example exercises it

rule.fold line 19 · specs/consumers/spec-studio.diagram-kinds.dependency.sdp.md:19
The boundary band always folds into one box per relation type that names its count, keeping as its own box each outside Spec that holds a member's stated next rung or states below defined, and every folded Spec stays a row of the text equivalent; above the shared bound, whole depth bands fold in descending box count, ties by ascending depth; if the drawing still exceeds the bound, the SVG is omitted and the text equivalent opens.

no example exercises it

rule.examplesInParent line 20 · specs/consumers/spec-studio.diagram-kinds.dependency.sdp.md:20
An example member the design slice folds into its parent is counted on that parent's box and is never drawn as its own box; it keeps its row in the text equivalent. An example the slice does not fold is a box like any other member's.

no example exercises it

0 unkeyed rules.

Design
inputs line 23 · specs/consumers/spec-studio.diagram-kinds.dependency.sdp.md:23
subject and the design slice answer supply ordered members, exampleOf, exampleMembers, depth, cycles, structure edges and the rests-on boundary with its holds and relation reasons; a roadmap passes its explicitly selected ordered Spec set to that same reader. Duplicate or unknown scope ids are that reader's diagnostics, never repaired by layout.

no citation recorded

bands line 24 · specs/consumers/spec-studio.diagram-kinds.dependency.sdp.md:24
Label bands Depth <n> from the deepest at the top down to depth 1, then Outside this scope at the bottom, so a member sits above what it rests on and boundary edges stay short. Within a band keep supplied order. Depths are structural, never phases, dates or priority.
edgeWords line 25 · specs/consumers/spec-studio.diagram-kinds.dependency.sdp.md:25
Show refines, dependsOn, constrainedBy and decidedBy beside their arrow or as a keyed legend where several kinds occur, and in the text equivalent with claim and optional reason. Mixed relations cannot become an unlabeled dependency arrow. Arrows with the same ends, claim and ordering may combine into one arrow naming every relation; the text equivalent retains each original relation and reason.
textEquivalent line 26 · specs/consumers/spec-studio.diagram-kinds.dependency.sdp.md:26
List every scoped and boundary Spec with its full id and title, then every original edge and every cycle's members; folding removes no text row.
elementIds line 27 · specs/consumers/spec-studio.diagram-kinds.dependency.sdp.md:27
Use diagram.<subject>.dependencies.text, .dependencies.arrow and .dependencies.fold.<depth>; a second scope on one page uses a distinct subject occurrence key supplied by the page.
mermaidKind line 28 · specs/consumers/spec-studio.diagram-kinds.dependency.sdp.md:28
flowchart TB with depth subgraphs and exact relation labels; export the displayed folds and name the full text equivalent beside the source.

no citation recorded

Verification

Verifier bindings

  • test:protocol.studio-slice-dependency · anchored · test anchor binding present · test/studio-slice.test.ts:369

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

    Test anchors: test:protocol.studio-slice-architecture, test:protocol.studio-slice-dependency, test:protocol.studio-slice-page. Specs verified by those bindings: spec:consumers.spec-studio.diagram-kinds.dependency, spec:consumers.spec-studio.diagram-kinds.scoped-architecture, spec:consumers.spec-studio.slice-page.

    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
    renders the complete answer in order, keeps held examples folded and independent examples separateslice pagepassed41.17 ms
    keeps declared, unreadable and comparison words in their own design cellsslice pagepassed0.84 ms
    writes the slice's Pack id as text in exports instead of a relative file pathslice pagepassed0.62 ms
    names each manifest member that resolves to no Spec beside the summaryslice pagepassed10.28 ms
    uses singular summary nouns and captions that add to the section headingsslice pagepassed50.67 ms
    keeps every link inside the complete page set and gives every id one ownerslice pagepassed47.47 ms
    names empty architecture and empty sections without inventing bindingsslice pagepassed0.69 ms
    stacks the member's next rung before the labelled design and code runs on a phoneslice pagepassed8.77 ms
    preserves single-member depths and opens complete text when no height-reducing fold fitsslice dependency drawingpassed1.47 ms
    aggregates boundary arrows before testing the bound, retaining every original relation in textslice dependency drawingpassed3.37 ms
    points from the Mermaid source disclosure to the full text equivalentslice dependency drawingpassed0.2 ms
    uses supplied depths, folds its boundary even below the bound, and retains full text and nonordering arrowsslice dependency drawingpassed3.52 ms
    folds largest complete bands first and opens text when protected boundary boxes exceed the boundslice dependency drawingpassed1.82 ms
    gives repeated scopes distinct fold element ids through their drawing occurrenceslice dependency drawingpassed2.52 ms
    keeps synthetic boundary identifiers out of the visible box identity lineslice dependency drawingpassed0.76 ms
    gives context and layer folds distinct ids and preserves all original rowsscoped architecture drawingpassed6.08 ms
    keeps planned and anchored identities apart, folds outside context and retains original unit edgesscoped architecture drawingpassed5.56 ms
    names uses, planned uses and realization in the legend and labels links only when a realization is drawnscoped architecture drawingpassed5.33 ms
    renders question fields as linked prose and dependency titles as plain textnot recordedpassed0.56 ms
    combines relations on one ordered pair while retaining every original text rownot recordedpassed0.73 ms
Design view

Requirement drawing

  • Declared verifying examples: no declared verifying example.
Requirement drawing for spec:consumers.spec-studio.diagram-kinds.dependency
The diagram as text
  • spec:consumers.spec-studio.diagram-kinds.dependency: A dependency drawing shows the declared footing of a Spec set · declared Spec
  • spec:consumers.spec-studio.diagram-kinds: The Studio chooses diagram kinds from graph values · declared Spec
  • impl:protocol.studio-slice-dependencies: supplied depth bands with protected boundary boxes and lossless text · anchored code · src/projections/studio/diagrams/slice.ts:10
  • test:protocol.studio-slice-dependency: test:protocol.studio-slice-dependency · anchored test binding · binding present · test/studio-slice.test.ts:369
  • spec:consumers.spec-studio.diagram-kinds.dependency refines spec:consumers.spec-studio.diagram-kinds · declared
  • impl:protocol.studio-slice-dependencies satisfies spec:consumers.spec-studio.diagram-kinds.dependency · anchored
  • test:protocol.studio-slice-dependency verifies spec:consumers.spec-studio.diagram-kinds.dependency · 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-slice-dependencies · supplied depth bands with protected boundary boxes and lossless text · src/projections/studio/diagrams/slice.ts:10

    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.diagram-kinds.dependency
The diagram as text
  • spec:consumers.design-slice: A slice reads a Pack as one design, with the architecture it touches and what each member needs next
  • spec:consumers.spec-studio.diagram-kinds: The Studio chooses diagram kinds from graph values
  • spec:consumers.spec-studio.diagram-kinds.dependency: A dependency drawing shows the declared footing of a Spec set
  • spec:consumers.spec-studio.slice-page: A slice page shows a Pack's design as one whole
  • spec:consumers.spec-studio.diagram-kinds.dependency dependsOn spec:consumers.design-slice · declared
  • spec:consumers.spec-studio.diagram-kinds.dependency refines spec:consumers.spec-studio.diagram-kinds · declared
  • spec:consumers.spec-studio.slice-page dependsOn spec:consumers.spec-studio.diagram-kinds.dependency · declared — the dependency drawing given the slice's order is a drawing kind, which owns layout, folding and the text equivalent
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

Relations

Relation and directionOther endClaimReasonExercised keys
dependsOn · outgoingA slice reads a Pack as one design, with the architecture it touches and what each member needs next
spec:consumers.design-slice · resolves
declaredNoneNone
refines · outgoingThe Studio chooses diagram kinds from graph values
spec:consumers.spec-studio.diagram-kinds · resolves
declaredNoneNone
dependsOn · incomingA slice page shows a Pack's design as one whole
spec:consumers.spec-studio.slice-page · resolves
declaredthe dependency drawing given the slice's order is a drawing kind, which owns layout, folding and the text equivalentNone

Bindings

Implementation binding: present

  • impl:protocol.studio-slice-dependencies · supplied depth bands with protected boundary boxes and lossless text · src/projections/studio/diagrams/slice.ts:10 · role projection · component component:protocol.projections · layer edge · context protocol

Design reference: none

Verifier binding: present

  • test:protocol.studio-slice-dependency · anchored · test/studio-slice.test.ts:369 · 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.