Spec Studio

A refinement drawing follows the capability map

spec:consumers.spec-studio.diagram-kinds.capability-treeUse 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: 5 design entries · 1 pinned declaration · no decisions

Findings: no errors, no warnings

specs/consumers/spec-studio.diagram-kinds.capability-tree.sdp.md

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

Intent
outcome
Read the capability map as a hierarchy without inventing parentage from names or hiding multiple parents.
Behavior
rule.mapInput line 16 · specs/consumers/spec-studio.diagram-kinds.capability-tree.sdp.md:16
Draw the roots, refinement edges, unreached Specs and repeated reach supplied by the capability map. Root selection and reach belong to that reader, never to label prefixes, files or the drawing.

no example exercises it

rule.multipleParents line 17 · specs/consumers/spec-studio.diagram-kinds.capability-tree.sdp.md:17
Place a Spec at its first visit in the capability map page's traversal of the epic and draw each later visit as a repeat box that links to the first occurrence and keeps its own refines arrow. A cycle is a labelled group whose internal relations stay in the text equivalent; the drawing never cuts an edge silently.

no example exercises it

rule.fold line 18 · specs/consumers/spec-studio.diagram-kinds.capability-tree.sdp.md:18
Above the shared bound, retain each root and fold the largest descendant branch below a non-root parent first, ties by root order then id, linking to its full branch list. If siblings still exceed the bound, keep their first entries in supplied order and replace the remaining siblings of one parent together with their descendant boxes with a labelled folded remainder, keeping that parent's relation explicit and counting every hidden unique Spec. Count unique Specs and rendered boxes separately where a cycle or repeated reach needs an occurrence. If no lawful fold fits, omit the SVG and open the text equivalent.

no example exercises it

0 unkeyed rules.

Design
layout line 21 · specs/consumers/spec-studio.diagram-kinds.capability-tree.sdp.md:21
Roots lead, then depth bands of children; label each box with its title, altitude and shortened id. A refines arrow still points child to parent. Unreached Specs occupy a labelled band apart. Within a depth band, children sit together under their placement parent as one labelled sibling group, in parent order; a band never interleaves siblings of different parents.
wordsBesideStyle line 22 · specs/consumers/spec-studio.diagram-kinds.capability-tree.sdp.md:22
The legend says Arrows: refines (declared). Later visits repeat a Spec and link to its first occurrence. A group says cycle or folded in words and names its unique member count.
textEquivalent line 23 · specs/consumers/spec-studio.diagram-kinds.capability-tree.sdp.md:23
List every root and reachable Spec, all declared refines edges, cycle membership and unreached ids using full identities. Grouping confers no delivery fact or readiness.
elementIds line 24 · specs/consumers/spec-studio.diagram-kinds.capability-tree.sdp.md:24
Use diagram.<subject>.capability.text, .capability.arrow and .capability.branch.<encoded-root-id>; encoded identities are injective and stable, not truncated labels.
mermaidKind line 25 · specs/consumers/spec-studio.diagram-kinds.capability-tree.sdp.md:25
mindmap for a strict tree, with title and full id per node. Use flowchart BT with exact refines edges whenever there is repeated parentage, a cycle, an unreached band or a fold that mindmap cannot state losslessly. TreeView is an optional equivalent export of a strict tree with icons disabled.

no citation recorded

Verification

Verifier bindings

  • test:protocol.studio-capabilities · anchored · test anchor binding present · test/studio-capabilities.test.ts:89

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

    Test anchors: test:protocol.studio-capabilities. Specs verified by those bindings: spec:consumers.spec-studio.capability-map-page, spec:consumers.spec-studio.diagram-kinds.capability-tree.

    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
    folds whole sibling branches for 30 features with 1 storiesStudio capabilitiespassed43.76 ms
    folds whole sibling branches for 45 features with 5 storiesStudio capabilitiespassed341.22 ms
    folds whole sibling branches for 40 features with 40 storiesStudio capabilitiespassed1950.89 ms
    keeps reached children out of the unreached drawing and complete rowsStudio capabilitiespassed23.26 ms
    shows cycle diagnostics outside closed disclosuresStudio capabilitiespassed13.52 ms
    exports every cycle member and exact edge with the Mermaid fallback reasonStudio capabilitiespassed1.79 ms
    renders code-span titles as plain drawing words and questions as linked proseStudio capabilitiespassed5.4 ms
    initializes epic filtering from the URL, intersects every control and resets native rowsStudio capabilitiespassed8.57 ms
    reflows capability cards, caps deep indentation and opens complete text for printStudio capabilitiespassed36.15 ms
    folds only a leaf remainder at the root, preserves first siblings and falls back for too many rootsStudio capabilitiespassed51.61 ms
    condenses a cycle into a labelled group and retains its internal relations in wordsStudio capabilitiespassed4.43 ms
    shares the detailed recipe answer and publishes a lens immediately after PacksStudio capabilitiespassed0.75 ms
    labels nested epics, scopes distinct rollups and separates examples and decisionsStudio capabilitiespassed0.3 ms
    keeps depth-first repeats, every relation and question links to real idsStudio capabilitiespassed0.5 ms
    renders a repeat box with its own child-to-parent arrow and groups siblingsStudio capabilitiespassed1.58 ms
    uses mindmap only for a strict tree and folds large branches without losing textStudio capabilitiespassed36.37 ms
    keeps cycles finite, labelled and complete, and handles no epics or an empty corpusStudio capabilitiespassed10.01 ms
    records all epic memberships on index rows and preserves Pack disclosuresStudio capabilitiespassed0.41 ms
    intersects epic selection with every existing filter and treats no epic explicitlyStudio capabilitiespassed0.92 ms
Design view

Requirement drawing

  • Declared verifying examples: no declared verifying example.
Requirement drawing for spec:consumers.spec-studio.diagram-kinds.capability-tree
The diagram as text
  • spec:consumers.spec-studio.diagram-kinds.capability-tree: A refinement drawing follows the capability map · declared Spec
  • spec:consumers.spec-studio.diagram-kinds: The Studio chooses diagram kinds from graph values · declared Spec
  • impl:protocol.studio-capability-diagrams: places refinement occurrences and bounded branches from the capability map · anchored code · src/projections/studio/diagrams/capability.ts:101
  • impl:protocol.studio-diagram-source: escaped Mermaid flowchart and mindmap source in placed box order · anchored code · src/projections/studio/diagrams/mermaid.ts:13
  • test:protocol.studio-capabilities: test:protocol.studio-capabilities · anchored test binding · binding present · test/studio-capabilities.test.ts:89
  • spec:consumers.spec-studio.diagram-kinds.capability-tree refines spec:consumers.spec-studio.diagram-kinds · declared
  • impl:protocol.studio-capability-diagrams satisfies spec:consumers.spec-studio.diagram-kinds.capability-tree · anchored
  • impl:protocol.studio-diagram-source satisfies spec:consumers.spec-studio.diagram-kinds.capability-tree · anchored
  • test:protocol.studio-capabilities verifies spec:consumers.spec-studio.diagram-kinds.capability-tree · 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-capability-diagrams · places refinement occurrences and bounded branches from the capability map · src/projections/studio/diagrams/capability.ts:101

    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-diagram-source · escaped Mermaid flowchart and mindmap source in placed box order · src/projections/studio/diagrams/mermaid.ts:13

    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.capability-tree
The diagram as text
  • spec:consumers.capability-map: The capability map reads every epic and its refinement descendants
  • spec:consumers.spec-studio.diagram-kinds: The Studio chooses diagram kinds from graph values
  • spec:consumers.spec-studio.diagram-kinds.capability-tree: A refinement drawing follows the capability map
  • spec:consumers.spec-studio.diagram-kinds.capability-tree dependsOn spec:consumers.capability-map · declared
  • spec:consumers.spec-studio.diagram-kinds.capability-tree refines spec:consumers.spec-studio.diagram-kinds · 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
dependsOn · outgoingThe capability map reads every epic and its refinement descendants
spec:consumers.capability-map · resolves
declaredNoneNone
refines · outgoingThe Studio chooses diagram kinds from graph values
spec:consumers.spec-studio.diagram-kinds · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.studio-capability-diagrams · places refinement occurrences and bounded branches from the capability map · src/projections/studio/diagrams/capability.ts:101 · role projection · component component:protocol.projections · layer edge · context protocol
  • impl:protocol.studio-diagram-source · escaped Mermaid flowchart and mindmap source in placed box order · src/projections/studio/diagrams/mermaid.ts:13 · role projection · component component:protocol.projections · layer edge · context protocol

Design reference: none

Verifier binding: present

  • test:protocol.studio-capabilities · anchored · test/studio-capabilities.test.ts:89 · 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.