outcomeThe Studio's custom elements each hold one view the build renders
spec:consumers.spec-studio.componentsChanged since the base graph base da4b141: design.maturityMap
Base input: schema 0.11.0, 405 Specs.
Packs: pack:self-hosting-v1, pack:spec-studio-v1
Design: 10 design entries · 10 pinned declarations · 3 decisions
Findings: no errors, no warnings
specs/consumers/spec-studio.components.sdp.md
No open questions and no blocking questions; implementation binding present, verifier binding present, and expected-outcome oracle none.
The original's harness element has no subject in the graph, which holds example spaces, bound points and oracle bindings but no harness node, so its successor takes the Spec that owns an example space. The build renders every view into the page's markup and an element adds only the interaction its view needs, as spec:decisions.studio-build-renders rules, so a trace graph draws one hop, a maturity map places members by stated rung and floor, a card always shows its rung, and the attributes the original used to choose another setting are gone.
Intent
- Give the Studio a small set of custom elements that each hold one view of the graph, rendered by the build, in a Studio page or in any HTML page that holds that markup and loads the element script.
Contract
rule.selfContainedline 25 ·specs/consumers/spec-studio.components.sdp.md:25- Each element is self-contained and light on dependencies, and works in any HTML page that holds the markup the build wrote for it and loads the Studio's script.
no example exercises it
rule.buildRendersline 26 ·specs/consumers/spec-studio.components.sdp.md:26- The build renders every element's view into its markup, from reader values and the recipe answers the page names, so the view reads without script; the element adds only interaction, and an element whose view needs none is defined with no behavior.
no example exercises it
rule.subjectAttributeline 27 ·specs/consumers/spec-studio.components.sdp.md:27- An element with a graph subject takes that subject's graph id in the attribute its Design entry names; an element over gathered intents has no single graph subject.
no example exercises it
ruleline 28 ·specs/consumers/spec-studio.components.sdp.md:28- Every element's name starts with
sdp-. rule.diagramRendererline 29 ·specs/consumers/spec-studio.components.sdp.md:29- A diagram is laid out by the engine when the page set is built and written as inline SVG, and its element adds only pan, zoom and pinch, as
spec:decisions.studio-diagram-rendererrules; one diagram draws within the boundspec:consumers.spec-studio.diagrams#design.boundnames.no example exercises it
rule.oneScriptline 30 ·specs/consumers/spec-studio.components.sdp.md:30- Every element ships in the one classic script the page elements ship in, and none loads anything at run time.
no example exercises it
1 unkeyed rule.
Design
The elements in the original's order, with their attributes.
specCardline 34 ·specs/consumers/spec-studio.components.sdp.md:34sdp-spec-cardwithspec-idandvariant: one Spec as a card;fullis a Pack page's member card,shortone line with the title linked, the id, the rung badge and the floor in words; no behavior.no citation recorded
traceGraphline 35 ·specs/consumers/spec-studio.components.sdp.md:35sdp-trace-graphwithspec-id: the Spec's relations one hop each way, drawn in relation bands inside ansdp-diagram, then its text equivalent; no behavior of its own.no citation recorded
maturityMapline 36 ·specs/consumers/spec-studio.components.sdp.md:36sdp-maturity-mapwithpack-id: the Pack's members placed by stated rung and floor reached, drawn as a static SVG grid of counts, then its count table and each populated cell's member list; no behavior.no citation recorded
exampleSpaceline 37 ·specs/consumers/spec-studio.components.sdp.md:37sdp-example-spacewithspec-id, naming the Spec that owns the example space: the space's slots with their types and the step that declares each, its children's bound points as a table with one row per example and one column per slot, an unbound slot writtenunbound, its expected-outcome oracle binding as present or none, and recipe 44's coverage; its coverage is a report, never a verifier run or a delivery fact; no behavior beyond the composing actions inside it.no citation recorded
diagramViewline 38 ·specs/consumers/spec-studio.components.sdp.md:38sdp-diagramwithsubject, the elementspec:consumers.spec-studio.diagrams#design.diagramElementstates.no citation recorded
scenarioEditorline 39 ·specs/consumers/spec-studio.components.sdp.md:39sdp-scenario-editorwithspec-idandmode: ineditmode a form holding the example's given, when and then steps, inproposemode the parent's step vocabulary as a starting point; submitting gathers an intent scoped to the example or to the parent, with the steps as its exact text; without script it shows the steps as text and says that composing needs the script.no citation recorded
impactViewline 40 ·specs/consumers/spec-studio.components.sdp.md:40sdp-impact-viewwithspec-id: a Spec's impact panel on its own, its trace graph, what it rests on and what rests on it; no behavior.no citation recorded
intentPanelline 41 ·specs/consumers/spec-studio.components.sdp.md:41sdp-intent-panelwithpage-rootand no graph-subject attribute, rendering the gathered intents across their scopes asspec:consumers.spec-studio.intent-panelstates.no citation recorded
composeActionline 42 ·specs/consumers/spec-studio.components.sdp.md:42sdp-composewithscopeandaction: a button labelled with what it composes that opens the compose dialog and gathers the intent in the composing panel;scopeis a Spec id, entry address or Pack id, with a Pack's space-separated resolved member ids inmembers,members-completeset totrueonly when every manifest member resolves, and aChange applies tochoice between member Specs and Pack membership or framing;actionis one ofresolve-question,promote-question,edit-example,propose-example,change-target,propose-target,propose-valuesandchange-entry; hidden without script.no citation recorded
validationFindingsline 43 ·specs/consumers/spec-studio.components.sdp.md:43sdp-validation-findingswithfilter: the validation report's findings for the Spec or Pack id the filter names; no behavior.no citation recorded
Verification
Verifier bindings
- test:protocol.studio-intent-handoff · anchored · test anchor binding present ·
test/studio-s5.test.ts:407External run evidence from
test/studio-s5.test.tsTest anchors:
test:protocol.studio-export-contained,test:protocol.studio-intent-handoff,test:protocol.studio-intents-refresh,test:protocol.studio-memo-shared,test:protocol.studio-watch-plain. Specs verified by those bindings: spec:consumers.edit-model, spec:consumers.intent-composition, spec:consumers.intent-composition.proposal.memo, spec:consumers.intent-composition.proposal.memo.shared, spec:consumers.spec-studio.components, spec:consumers.spec-studio.export, spec:consumers.spec-studio.export.self-contained, spec:consumers.spec-studio.intent-panel, spec:consumers.spec-studio.intent-panel.refresh-keeps-intents, spec:consumers.spec-studio.publisher.watch, spec:consumers.spec-studio.publisher.watch.matches-plain-run, spec:consumers.spec-studio.responsive.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 executes the bound example against a fresh world Refreshing a tab keeps every gathered intent (spec:consumers.spec-studio.intent-panel.refresh-keeps-intents) passed 10.32 ms executes the bound example against a fresh world Recipe 49 and the composing panel write one memo for one proposal (spec:consumers.intent-composition.proposal.memo.shared) passed 4.64 ms executes the bound example against a fresh world A Pack's export opens alone and keeps its links inside it (spec:consumers.spec-studio.export.self-contained) passed 63.72 ms executes the bound example against a fresh world Each watch cycle writes the page set a plain run writes (spec:consumers.spec-studio.publisher.watch.matches-plain-run) passed 133.79 ms keeps unsupported intents apart and expands Pack members only against the stamped base not recorded passed 2.36 ms returns the same schema problems as recipe 38 and renders in any corpus not recorded passed 8.22 ms composes locally without changing source or requesting a network service not recorded passed 1.63 ms keeps the last local intents when storage refuses writes not recorded passed 0.28 ms keeps unsaved local intents when storage remains readable but its quota refuses writes not recorded passed 0.34 ms rewrites SVG and accessibility references without changing subject attributes or authored text not recorded passed 3.98 ms opens disclosures for print and restores exactly their prior state not recorded passed 1.63 ms leaves Mermaid source closed for print unless the reader opened it not recorded passed 1.13 ms stops the actual Studio watch process with exit zero on SIGINT not recorded passed 492.7 ms removes a failed watch publication, keeps watching and recovers on the next carrier edit not recorded passed 38.33 ms ships a phone layout and a print stylesheet for the whole canvas not recorded passed 14.52 ms keeps exports graph-only when the browsing pages receive a base and run records not recorded passed 25.05 ms starts no cycle for source or input-file events not recorded passed 26.7 ms merges concurrent panels before gathering or discarding and flags rejected storage records not recorded passed 0.51 ms refreshes the browser panel on storage and pageshow and removes those listeners on disconnect not recorded passed 1.55 ms prefills compose with the authored entry text including code spans and no rendered annotations not recorded passed 13.61 ms omits blank exact text and reports whitespace requests in the compose dialog not recorded passed 2.32 ms uses the stamp base, labels fields, orders actions and copies and saves the named documents not recorded passed 4.06 ms copies distinct actions and recorded scopes for both Pack choices without a stamp not recorded passed 3.09 ms keeps Pack framing changes apart and gathers scenario editor steps verbatim not recorded passed 2.64 ms matches the literal memo for the shared proposal, including the full relation and document not recorded passed 0.82 ms keeps the last watch pages when an optional base becomes unreadable, just like a plain run not recorded passed 1014.27 ms inlines the selected stylesheet asset in exports and publishes those same style bytes not recorded passed 22.14 ms introduces studio before its watch option and gives recipe 49 a use case not recorded passed 1.43 ms renders edit scenario steps outside inert templates without script not recorded passed 1.08 ms renders propose scenario steps outside inert templates without script not recorded passed 0.75 ms writes both memo reasons as code spans: "<details>Review the design.</details>", "`Keep` the ``literal`` reason`" not recorded passed 0.71 ms writes both memo reasons as code spans: "`Review` the ``design`` reason`", "<details>Keep the change.</details>" not recorded passed 0.44 ms fences requests so their Markdown cannot alter the memo: "Fix a typo.\n<!--" not recorded passed 0.96 ms fences requests so their Markdown cannot alter the memo: "Use this text.\n```\n## Forged heading\n``````\n<!--hidden-->" not recorded passed 0.81 ms contains phone navigation, stamp and wide tables within the viewport not recorded passed 12.93 ms keeps the maturity caption readable and empty cells compact on a phone not recorded passed 25.57 ms aligns maturity cell counts with the empty cell dashes not recorded passed 14.09 ms keeps table headers and one-word cells intact while allowing word-boundary wrapping not recorded passed 18.22 ms keeps natural desktop diagram size and fits only on phones not recorded passed 10.27 ms hides phone scroll advice and closed source in print while keeping opened source printable not recorded passed 13.92 ms
Design view
Requirement drawing
The diagram as text
- spec:consumers.spec-studio.components: The Studio's custom elements each hold one view the build renders · declared Spec
- spec:consumers.spec-studio.diagrams: A diagram is laid out from graph values into SVG with a text equivalent · declared Spec
- spec:consumers.spec-studio.page-elements: A few custom elements filter, search, open and copy on a rendered page · declared Spec
- spec:consumers.spec-studio.diagrams.folds-by-context: An architecture over the bound folds by context · declared Spec
- spec:consumers.spec-studio.diagrams.folds-by-layer: One context over the bound folds by layer · declared Spec
- spec:consumers.spec-studio.diagrams.within-bound: An architecture within the bound draws in one diagram, the same bytes twice · declared Spec
- spec:consumers.spec-studio: The Spec Studio is a static HTML workbench over the one graph · declared Spec
- spec:consumers.spec-studio.diagram-kinds: The Studio chooses diagram kinds from graph values · declared Spec
- spec:consumers.spec-studio.diagram-kinds.edge-routing: Edges route around boxes with deterministic orthogonal paths · declared Spec
- spec:consumers.spec-studio.diagram-kinds.legibility: A diagram preserves readable labels before zoom · declared Spec
- component:protocol.studio-elements: optional browser behavior and proposal handoff · anchored code ·
src/studio-elements/index.ts:13 - impl:protocol.studio-architecture-diagrams: architecture grids and bounded context and layer folds · anchored code ·
src/projections/studio/diagrams/architecture.ts:4 - impl:protocol.studio-compose: opens a native request dialog beside build-rendered scopes without changing their content · anchored code ·
src/studio-elements/compose.ts:13 - impl:protocol.studio-copy: copies text with selection fallback and failure feedback · anchored code ·
src/studio-elements/copy.ts:22 - impl:protocol.studio-diagram-element: adds view-box pan, zoom and pinch to build-rendered SVG without changing its layout · anchored code ·
src/studio-elements/diagram.ts:23 - impl:protocol.studio-diagram-model: shared diagram boxes, edges and drawing bounds · anchored code ·
src/projections/studio/diagrams/model.ts:1 - impl:protocol.studio-diagrams: deterministic grid and band layouts with bounded folds and full text equivalents · anchored code ·
src/projections/studio/diagrams/svg.ts:73 - impl:protocol.studio-expander: opens fragment ancestors and expands disclosures for print · anchored code ·
src/studio-elements/expander.ts:16 - impl:protocol.studio-filter: filters build-rendered rows through their recorded attributes · anchored code ·
src/studio-elements/filter.ts:25 - impl:protocol.studio-intent-panel-element: displays gathered requests and writes copy selections or local download links · anchored code ·
src/studio-elements/intent-panel-element.ts:14 - impl:protocol.studio-maturity-map: places resolved Pack members by their stated rung and floor in authored order · anchored code ·
src/projections/studio/pages/maturity-map.ts:7 - impl:protocol.studio-pack-page: renders Pack members, maturity and boundary joins · anchored code ·
src/projections/studio/pages/pack-page.ts:68 - impl:protocol.studio-relation-diagrams: relation and member bands and bounded relation folds · anchored code ·
src/projections/studio/diagrams/bands.ts:10 - impl:protocol.studio-scenario-editor: gathers the edited Given, When and Then as exact text scoped to its subject · anchored code ·
src/studio-elements/scenario-editor.ts:17 - impl:protocol.studio-search-form: routes search forms through page-root URLs and fragments · anchored code ·
src/studio-elements/search.ts:18 - impl:protocol.studio-search-results: ranks and renders concept, entry and file search hits · anchored code ·
src/studio-elements/search-results.ts:95 - impl:protocol.studio-spec-structure: renders requirement and trace diagrams and the recorded structural neighborhood · anchored code ·
src/projections/studio/pages/spec-structure.ts:44 - impl:protocol.studio-stamp: resolves published stamps and source links in the browser · anchored code ·
src/studio-elements/stamp.ts:30 - impl:protocol.studio-verification-panels: renders rule coverage, example cards, constraint targets, verifiers and example-space coverage · anchored code ·
src/projections/studio/pages/spec-verification.ts:74 - oracle:protocol.studio-diagrams: oracle:protocol.studio-diagrams · anchored oracle binding ·
test/studio-s1.test.ts:564 - test:protocol.studio-copy-source: test:protocol.studio-copy-source · anchored test binding · binding present ·
test/studio-diagram-core.test.ts:191 - test:protocol.studio-diagram-core: test:protocol.studio-diagram-core · anchored test binding · binding present ·
test/studio-diagram-core.test.ts:37 - test:protocol.studio-diagram-folds-context: test:protocol.studio-diagram-folds-context · anchored test binding · binding present ·
test/studio-s1.test.ts:675 - test:protocol.studio-diagram-folds-layer: test:protocol.studio-diagram-folds-layer · anchored test binding · binding present ·
test/studio-s1.test.ts:681 - test:protocol.studio-diagram-within-bound: test:protocol.studio-diagram-within-bound · anchored test binding · binding present ·
test/studio-s1.test.ts:669 - test:protocol.studio-intent-handoff: test:protocol.studio-intent-handoff · anchored test binding · binding present ·
test/studio-s5.test.ts:407 - test:protocol.studio-page-elements: test:protocol.studio-page-elements · anchored test binding · binding present ·
test/studio-elements.test.ts:26 - spec:consumers.spec-studio.components refines spec:consumers.spec-studio · declared
- spec:consumers.spec-studio.diagram-kinds refines spec:consumers.spec-studio.diagrams · declared
- spec:consumers.spec-studio.diagram-kinds.edge-routing refines spec:consumers.spec-studio.diagrams · declared
- spec:consumers.spec-studio.diagram-kinds.legibility refines spec:consumers.spec-studio.diagrams · declared
- spec:consumers.spec-studio.diagrams refines spec:consumers.spec-studio.components · declared
- spec:consumers.spec-studio.diagrams.folds-by-context refines spec:consumers.spec-studio.diagrams · declared
- spec:consumers.spec-studio.diagrams.folds-by-context verifies spec:consumers.spec-studio.diagrams · declared
- spec:consumers.spec-studio.diagrams.folds-by-layer refines spec:consumers.spec-studio.diagrams · declared
- spec:consumers.spec-studio.diagrams.folds-by-layer verifies spec:consumers.spec-studio.diagrams · declared
- spec:consumers.spec-studio.diagrams.within-bound refines spec:consumers.spec-studio.diagrams · declared
- spec:consumers.spec-studio.diagrams.within-bound verifies spec:consumers.spec-studio.diagrams · declared
- spec:consumers.spec-studio.page-elements refines spec:consumers.spec-studio.components · declared
- component:protocol.studio-elements satisfies spec:consumers.spec-studio.page-elements · anchored
- component:protocol.studio-elements satisfies spec:consumers.spec-studio.components · anchored
- impl:protocol.studio-architecture-diagrams satisfies spec:consumers.spec-studio.diagrams · anchored
- impl:protocol.studio-compose satisfies spec:consumers.spec-studio.components · anchored
- impl:protocol.studio-copy satisfies spec:consumers.spec-studio.page-elements · anchored
- impl:protocol.studio-diagram-element satisfies spec:consumers.spec-studio.diagrams · anchored
- impl:protocol.studio-diagram-element satisfies spec:consumers.spec-studio.components · anchored
- impl:protocol.studio-diagram-model satisfies spec:consumers.spec-studio.diagrams · anchored
- impl:protocol.studio-diagrams satisfies spec:consumers.spec-studio.diagrams · anchored
- impl:protocol.studio-expander satisfies spec:consumers.spec-studio.page-elements · anchored
- impl:protocol.studio-filter satisfies spec:consumers.spec-studio.page-elements · anchored
- impl:protocol.studio-filter satisfies spec:consumers.spec-studio.components · anchored
- impl:protocol.studio-intent-panel-element satisfies spec:consumers.spec-studio.components · anchored
- impl:protocol.studio-maturity-map satisfies spec:consumers.spec-studio.components · anchored
- impl:protocol.studio-pack-page satisfies spec:consumers.spec-studio.components · anchored
- impl:protocol.studio-relation-diagrams satisfies spec:consumers.spec-studio.diagrams · anchored
- impl:protocol.studio-scenario-editor satisfies spec:consumers.spec-studio.components · anchored
- impl:protocol.studio-search-form satisfies spec:consumers.spec-studio.page-elements · anchored
- impl:protocol.studio-search-results satisfies spec:consumers.spec-studio.page-elements · anchored
- impl:protocol.studio-search-results satisfies spec:consumers.spec-studio.components · anchored
- impl:protocol.studio-spec-structure satisfies spec:consumers.spec-studio.components · anchored
- impl:protocol.studio-stamp satisfies spec:consumers.spec-studio.page-elements · anchored
- impl:protocol.studio-verification-panels satisfies spec:consumers.spec-studio.components · anchored
- oracle:protocol.studio-diagrams models spec:consumers.spec-studio.diagrams · anchored
- test:protocol.studio-copy-source verifies spec:consumers.spec-studio.page-elements · anchored
- test:protocol.studio-diagram-core verifies spec:consumers.spec-studio.diagrams · anchored
- test:protocol.studio-diagram-folds-context verifies spec:consumers.spec-studio.diagrams.folds-by-context · anchored
- test:protocol.studio-diagram-folds-layer verifies spec:consumers.spec-studio.diagrams.folds-by-layer · anchored
- test:protocol.studio-diagram-within-bound verifies spec:consumers.spec-studio.diagrams.within-bound · anchored
- test:protocol.studio-intent-handoff verifies spec:consumers.spec-studio.components · anchored
- test:protocol.studio-page-elements verifies spec:consumers.spec-studio.page-elements · 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
- The build renders every Studio view, and an element only enhances it
The build renders every Studio view into the page's markup from reader values and the recipe answers its page names, and a custom element adds only the interaction its view needs; a host page that embeds a view carries the markup the build wrote and loads the element script, and supplies no graph data.
- The engine lays out every Studio diagram as static SVG when the page set is built
The engine lays out every Studio diagram at build time with its own deterministic layered layout and writes it into the page as inline SVG followed by a text equivalent. The custom element that holds a diagram adds only pan, zoom and pinch, by changing the SVG's view box. One diagram draws at most the bound
spec:consumers.spec-studio.diagrams#design.boundnames, and above it the diagram folds, by context and then by layer, as that Spec states. - The Studio is built from custom elements, not a framework
The Studio is built from Web Components, custom elements written without React, Vue, Svelte or another framework.
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
component:protocol.studio-elements· optional browser behavior and proposal handoff ·src/studio-elements/index.ts:13· layer edge · context protocol Uses
component:protocol.projections· read-only output, layout and owned publication ·src/projections/design-review.ts:29· layer edge · context protocol component:protocol.reader· the typed graph contract and body evaluator ·src/reader/reader.ts:671· layer application · context protocol
impl:protocol.studio-compose· opens a native request dialog beside build-rendered scopes without changing their content ·src/studio-elements/compose.ts:13Component:
component:protocol.studio-elements· optional browser behavior and proposal handoff ·src/studio-elements/index.ts:13· layer edge · context protocol Uses
None.
impl:protocol.studio-diagram-element· adds view-box pan, zoom and pinch to build-rendered SVG without changing its layout ·src/studio-elements/diagram.ts:23Component:
component:protocol.studio-elements· optional browser behavior and proposal handoff ·src/studio-elements/index.ts:13· layer edge · context protocol Uses
None.
impl:protocol.studio-filter· filters build-rendered rows through their recorded attributes ·src/studio-elements/filter.ts:25Component:
component:protocol.studio-elements· optional browser behavior and proposal handoff ·src/studio-elements/index.ts:13· layer edge · context protocol Uses
None.
impl:protocol.studio-intent-panel-element· displays gathered requests and writes copy selections or local download links ·src/studio-elements/intent-panel-element.ts:14Component:
component:protocol.studio-elements· optional browser behavior and proposal handoff ·src/studio-elements/index.ts:13· layer edge · context protocol Uses
None.
impl:protocol.studio-maturity-map· places resolved Pack members by their stated rung and floor in authored order ·src/projections/studio/pages/maturity-map.ts:7Component:
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-pack-page· renders Pack members, maturity and boundary joins ·src/projections/studio/pages/pack-page.ts:68Component:
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-scenario-editor· gathers the edited Given, When and Then as exact text scoped to its subject ·src/studio-elements/scenario-editor.ts:17Component:
component:protocol.studio-elements· optional browser behavior and proposal handoff ·src/studio-elements/index.ts:13· layer edge · context protocol Uses
None.
impl:protocol.studio-search-results· ranks and renders concept, entry and file search hits ·src/studio-elements/search-results.ts:95Component:
component:protocol.studio-elements· optional browser behavior and proposal handoff ·src/studio-elements/index.ts:13· layer edge · context protocol Uses
None.
impl:protocol.studio-spec-structure· renders requirement and trace diagrams and the recorded structural neighborhood ·src/projections/studio/pages/spec-structure.ts:44Component:
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-verification-panels· renders rule coverage, example cards, constraint targets, verifiers and example-space coverage ·src/projections/studio/pages/spec-verification.ts:74Component:
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: The Spec Studio is a static HTML workbench over the one graph
- spec:consumers.spec-studio.components: The Studio's custom elements each hold one view the build renders
- spec:consumers.spec-studio.data: The Studio renders from the reader's values and embeds only what its script reads
- spec:consumers.spec-studio.diagrams: A diagram is laid out from graph values into SVG with a text equivalent
- spec:consumers.spec-studio.intent-panel: A composing panel on every page gathers scoped intent for an agent
- spec:consumers.spec-studio.page-elements: A few custom elements filter, search, open and copy on a rendered page
- spec:decisions.studio-build-renders: The build renders every Studio view, and an element only enhances it
- spec:decisions.studio-diagram-renderer: The engine lays out every Studio diagram as static SVG when the page set is built
- spec:decisions.studio-web-components: The Studio is built from custom elements, not a framework
- spec:consumers.spec-studio.components decidedBy spec:decisions.studio-build-renders · declared
- spec:consumers.spec-studio.components decidedBy spec:decisions.studio-diagram-renderer · declared
- spec:consumers.spec-studio.components decidedBy spec:decisions.studio-web-components · declared
- spec:consumers.spec-studio.components dependsOn spec:consumers.spec-studio.data · declared
- spec:consumers.spec-studio.components dependsOn spec:consumers.spec-studio.intent-panel · declared — the panel element renders the gathered intents that Spec designs
- spec:consumers.spec-studio.components refines spec:consumers.spec-studio · declared
- spec:consumers.spec-studio.diagrams refines spec:consumers.spec-studio.components · declared
- spec:consumers.spec-studio.page-elements refines spec:consumers.spec-studio.components · 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
- refines · spec:consumers.spec-studio · stated ready, floor ready
- dependsOn · spec:consumers.spec-studio.data · stated ready, floor ready
- dependsOn · spec:consumers.spec-studio.intent-panel · stated ready, floor ready
- decidedBy · spec:decisions.studio-build-renders · stated ready, floor ready
- decidedBy · spec:decisions.studio-diagram-renderer · stated ready, floor ready
- decidedBy · spec:decisions.studio-web-components · stated ready, floor ready
Rested on by
Distance 1
- spec:consumers.spec-studio.diagrams
Implementing units
impl:protocol.studio-architecture-diagrams·src/projections/studio/diagrams/architecture.ts:4impl:protocol.studio-diagram-element·src/studio-elements/diagram.ts:23impl:protocol.studio-diagram-model·src/projections/studio/diagrams/model.ts:1impl:protocol.studio-diagrams·src/projections/studio/diagrams/svg.ts:73impl:protocol.studio-relation-diagrams·src/projections/studio/diagrams/bands.ts:10
Referencing units
None.
Enabled verifiers: spec:consumers.spec-studio.diagrams.folds-by-context, spec:consumers.spec-studio.diagrams.folds-by-layer, spec:consumers.spec-studio.diagrams.within-bound, test:protocol.studio-diagram-core
- spec:consumers.spec-studio.page-elements
Implementing units
component:protocol.studio-elements·src/studio-elements/index.ts:13impl:protocol.studio-copy·src/studio-elements/copy.ts:22impl:protocol.studio-expander·src/studio-elements/expander.ts:16impl:protocol.studio-filter·src/studio-elements/filter.ts:25impl:protocol.studio-search-form·src/studio-elements/search.ts:18impl:protocol.studio-search-results·src/studio-elements/search-results.ts:95impl:protocol.studio-stamp·src/studio-elements/stamp.ts:30
Referencing units
None.
Enabled verifiers: test:protocol.studio-copy-source, test:protocol.studio-page-elements
Distance 2
- spec:consumers.spec-studio.diagram-kinds
Implementing units
impl:protocol.studio-architecture-lens·src/projections/studio/pages/architecture-page.ts:50impl:protocol.studio-capability-diagrams·src/projections/studio/diagrams/capability.ts:101impl:protocol.studio-diagram-layout·src/projections/studio/diagrams/layout.ts:140impl:protocol.studio-diagram-source·src/projections/studio/diagrams/mermaid.ts:13impl:protocol.studio-diagrams·src/projections/studio/diagrams/svg.ts:73impl:protocol.studio-maturity-map·src/projections/studio/pages/maturity-map.ts:7impl:protocol.studio-requirement-diagram·src/projections/studio/diagrams/requirement.ts:12impl:protocol.studio-slice-architecture·src/projections/studio/diagrams/slice.ts:219impl:protocol.studio-slice-dependencies·src/projections/studio/diagrams/slice.ts:10
Referencing units
None.
Enabled verifiers: test:protocol.studio-diagram-catalog
- spec:consumers.spec-studio.diagram-kinds.edge-routing
Implementing units
impl:protocol.studio-diagram-routing·src/projections/studio/diagrams/routing.ts:38impl:protocol.studio-diagrams·src/projections/studio/diagrams/svg.ts:73
Referencing units
None.
Enabled verifiers: test:protocol.studio-diagram-core
- spec:consumers.spec-studio.diagram-kinds.legibility
Implementing units
impl:protocol.studio-diagram-element·src/studio-elements/diagram.ts:23impl:protocol.studio-diagram-layout·src/projections/studio/diagrams/layout.ts:140impl:protocol.studio-diagrams·src/projections/studio/diagrams/svg.ts:73
Referencing units
None.
Enabled verifiers: test:protocol.studio-diagram-core
- spec:consumers.spec-studio.diagram-kinds.mermaid-source
Implementing units
impl:protocol.studio-diagram-source·src/projections/studio/diagrams/mermaid.ts:13impl:protocol.studio-diagrams·src/projections/studio/diagrams/svg.ts:73
Referencing units
None.
Enabled verifiers: test:protocol.studio-diagram-core
- spec:consumers.spec-studio.diagrams.folds-by-context
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-diagram-folds-context
- spec:consumers.spec-studio.diagrams.folds-by-layer
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-diagram-folds-layer
- spec:consumers.spec-studio.diagrams.within-bound
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-diagram-within-bound
- spec:consumers.spec-studio.lenses.architecture
Implementing units
impl:protocol.studio-architecture-lens·src/projections/studio/pages/architecture-page.ts:50
Referencing units
None.
Enabled verifiers: spec:consumers.spec-studio.lenses.architecture.planned-apart, test:protocol.studio-architecture-maturity-requirement
- spec:consumers.spec-studio.slice-page
Implementing units
impl:protocol.studio-slice-page·src/projections/studio/pages/slice-page.ts:25
Referencing units
None.
Enabled verifiers: test:protocol.studio-slice-page
- spec:consumers.spec-studio.spec-page
Implementing units
impl:protocol.studio-requirement-view·src/projections/studio/pages/requirement-view.ts:8impl:protocol.studio-spec-page·src/projections/studio/pages/spec-page.ts:201impl:protocol.studio-spec-structure·src/projections/studio/pages/spec-structure.ts:44
Referencing units
None.
Enabled verifiers: spec:consumers.spec-studio.spec-page.cited-declaration, test:protocol.studio-architecture-maturity-requirement, test:protocol.studio-panels
Distance 3
- 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.diagram-kinds.capability-tree
Implementing units
impl:protocol.studio-capability-diagrams·src/projections/studio/diagrams/capability.ts:101impl:protocol.studio-diagram-source·src/projections/studio/diagrams/mermaid.ts:13
Referencing units
None.
Enabled verifiers: test:protocol.studio-capabilities
- spec:consumers.spec-studio.diagram-kinds.dependency
Implementing units
impl:protocol.studio-slice-dependencies·src/projections/studio/diagrams/slice.ts:10
Referencing units
None.
Enabled verifiers: test:protocol.studio-slice-dependency
- spec:consumers.spec-studio.diagram-kinds.maturity-picture
Implementing units
impl:protocol.studio-maturity-map·src/projections/studio/pages/maturity-map.ts:7
Referencing units
None.
Enabled verifiers: test:protocol.studio-architecture-maturity-requirement
- spec:consumers.spec-studio.diagram-kinds.requirement-trace
Implementing units
impl:protocol.studio-requirement-diagram·src/projections/studio/diagrams/requirement.ts:12impl:protocol.studio-requirement-view·src/projections/studio/pages/requirement-view.ts:8
Referencing units
None.
Enabled verifiers: test:protocol.studio-architecture-maturity-requirement, test:protocol.studio-diagram-core
- spec:consumers.spec-studio.diagram-kinds.scoped-architecture
Implementing units
impl:protocol.studio-slice-architecture·src/projections/studio/diagrams/slice.ts:219
Referencing units
None.
Enabled verifiers: test:protocol.studio-slice-architecture
- spec:consumers.spec-studio.export
Implementing units
impl:protocol.studio-diagram-element·src/studio-elements/diagram.ts:23impl:protocol.studio-expander·src/studio-elements/expander.ts:16impl:protocol.studio-pack-export·src/projections/studio/pages/export-page.ts:35impl:protocol.studio-pack-page·src/projections/studio/pages/pack-page.ts:68
Referencing units
None.
Enabled verifiers: spec:consumers.spec-studio.export.self-contained, test:protocol.studio-intent-handoff
- spec:consumers.spec-studio.lenses.architecture.planned-apart
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-architecture-planned-apart
- spec:consumers.spec-studio.lenses.architecture.unit-register
Implementing units
impl:protocol.studio-unit-register·src/projections/studio/pages/architecture-register.ts:7
Referencing units
None.
Enabled verifiers: test:protocol.studio-architecture-maturity-requirement
Packs: pack:roadmaps-and-slices-v1, pack:self-hosting-v1, pack:spec-studio-v1
- spec:consumers.spec-studio.spec-page.cited-declaration
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-cited-declaration
- spec:consumers.spec-studio.spec-page.core
Implementing units
impl:protocol.studio-spec-page·src/projections/studio/pages/spec-page.ts:201
Referencing units
None.
Enabled verifiers: test:protocol.studio-pages
- spec:consumers.spec-studio.verification-panels
Implementing units
impl:protocol.studio-run-rows·src/projections/studio/pages/run-rows.ts:69impl:protocol.studio-verification-panels·src/projections/studio/pages/spec-verification.ts:74
Referencing units
None.
Enabled verifiers: spec:consumers.spec-studio.verification-panels.rule-coverage, test:protocol.studio-panels
- spec:consumers.structural-mermaid
Implementing units
None.
Referencing units
None.
Enabled verifiers: None
Distance 4
- spec:consumers.spec-studio.export.self-contained
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-export-contained
- spec:consumers.spec-studio.pack-page.maturity-map
Implementing units
impl:protocol.studio-maturity-map·src/projections/studio/pages/maturity-map.ts:7
Referencing units
None.
Enabled verifiers: test:protocol.studio-architecture-maturity-requirement, test:protocol.studio-panels
- spec:consumers.spec-studio.verification-panels.rule-coverage
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-rule-coverage
- spec:consumers.studio-on-ramp
Implementing units
impl:protocol.studio-on-ramp·test/skills.test.ts:1693
Referencing units
None.
Enabled verifiers: test:protocol.studio-on-ramp
Relations
| Relation and direction | Other end | Claim | Reason | Exercised keys |
|---|---|---|---|---|
| decidedBy · outgoing | The build renders every Studio view, and an element only enhances itspec:decisions.studio-build-renders · resolves | declared | None | None |
| decidedBy · outgoing | The engine lays out every Studio diagram as static SVG when the page set is builtspec:decisions.studio-diagram-renderer · resolves | declared | None | None |
| decidedBy · outgoing | The Studio is built from custom elements, not a frameworkspec:decisions.studio-web-components · resolves | declared | None | None |
| dependsOn · outgoing | The Studio renders from the reader's values and embeds only what its script readsspec:consumers.spec-studio.data · resolves | declared | None | None |
| dependsOn · outgoing | A composing panel on every page gathers scoped intent for an agentspec:consumers.spec-studio.intent-panel · resolves | declared | the panel element renders the gathered intents that Spec designs | None |
| refines · outgoing | The Spec Studio is a static HTML workbench over the one graphspec:consumers.spec-studio · resolves | declared | None | None |
| refines · incoming | A diagram is laid out from graph values into SVG with a text equivalentspec:consumers.spec-studio.diagrams · resolves | declared | None | None |
| refines · incoming | A few custom elements filter, search, open and copy on a rendered pagespec:consumers.spec-studio.page-elements · resolves | declared | None | None |
Bindings
Implementation binding: present
component:protocol.studio-elements· optional browser behavior and proposal handoff ·src/studio-elements/index.ts:13· role interaction · layer edge · context protocol impl:protocol.studio-compose· opens a native request dialog beside build-rendered scopes without changing their content ·src/studio-elements/compose.ts:13· role interaction · component component:protocol.studio-elements· layer edge · context protocolimpl:protocol.studio-diagram-element· adds view-box pan, zoom and pinch to build-rendered SVG without changing its layout ·src/studio-elements/diagram.ts:23· role interaction · component component:protocol.studio-elements· layer edge · context protocolimpl:protocol.studio-filter· filters build-rendered rows through their recorded attributes ·src/studio-elements/filter.ts:25· role interaction · component component:protocol.studio-elements· layer edge · context protocolimpl:protocol.studio-intent-panel-element· displays gathered requests and writes copy selections or local download links ·src/studio-elements/intent-panel-element.ts:14· role interaction · component component:protocol.studio-elements· layer edge · context protocolimpl:protocol.studio-maturity-map· places resolved Pack members by their stated rung and floor in authored order ·src/projections/studio/pages/maturity-map.ts:7· role projection · component component:protocol.projections· layer edge · context protocolimpl:protocol.studio-pack-page· renders Pack members, maturity and boundary joins ·src/projections/studio/pages/pack-page.ts:68· role projection · component component:protocol.projections· layer edge · context protocolimpl:protocol.studio-scenario-editor· gathers the edited Given, When and Then as exact text scoped to its subject ·src/studio-elements/scenario-editor.ts:17· role interaction · component component:protocol.studio-elements· layer edge · context protocolimpl:protocol.studio-search-results· ranks and renders concept, entry and file search hits ·src/studio-elements/search-results.ts:95· role projection · component component:protocol.studio-elements· layer edge · context protocolimpl:protocol.studio-spec-structure· renders requirement and trace diagrams and the recorded structural neighborhood ·src/projections/studio/pages/spec-structure.ts:44· role projection · component component:protocol.projections· layer edge · context protocolimpl:protocol.studio-verification-panels· renders rule coverage, example cards, constraint targets, verifiers and example-space coverage ·src/projections/studio/pages/spec-verification.ts:74· role projection · component component:protocol.projections· layer edge · context protocol
Design reference: none
Verifier binding: present
- test:protocol.studio-intent-handoff · anchored ·
test/studio-s5.test.ts:407· 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.