Spec Studio

The build renders every Studio view, and an element only enhances it

spec:decisions.studio-build-rendersDecision Record · storyready floor ready

Packs: pack:self-hosting-v1, pack:spec-studio-v1

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

Findings: no errors, no warnings

specs/decisions/studio-build-renders.sdp.md

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

Intent
outcome
Let every Studio view read in full without script, print, and travel inside a Pack export, while its custom element adds only the interaction the view needs.
Decision
context
The custom-elements decision frames an element as a view that renders from graph data its host page supplies. The Studio's pages read in full without script and open from file://, a Pack export carries no script, two builds of one graph write the same bytes, and the page computes no join, claim, fact or floor; the page elements the Studio ships already add behavior to markup the build wrote.
decision
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.
rationale
  • A view rendered at build time reads without script, prints, survives the Pack export, and keeps one graph to one set of bytes.
  • An element that holds no graph data cannot compute a join, claim, fact or floor in the browser, which the Studio refuses.
alternatives
  • Elements that render their views from graph data a host supplies, as the custom-elements decision first framed them, show nothing without script and put a second rendering path in the browser.
consequences
  • An element's attributes name its subject and its interaction, never a setting the build did not render, so the original's readiness-pill, depth, highlight and group-by attributes are gone.
  • The custom-elements decision still rules how the elements are written: as custom elements without a framework.
Verification

Verifier bindings

No verifier binding recorded.

Design view

Requirement drawing

  • Declared verifying examples: no declared verifying example.
  • Test or oracle bindings: no recorded binding.
Requirement drawing for spec:decisions.studio-build-renders

Scroll horizontally to read the whole drawing.

The diagram as text
  • spec:decisions.studio-build-renders: The build renders every Studio view, and an element only enhances it · declared Spec
  • spec:decisions.studio-web-components: The Studio is built from custom elements, not a framework · declared Spec
  • impl:protocol.studio-architecture-lens: renders recipe component rows and planned designs as architecture and member diagrams · anchored code · src/projections/studio/pages/architecture-page.ts:50
  • 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-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-evidence-lens: names the four evidence sources and what would bring each into the Studio · anchored code · src/projections/studio/pages/evidence-page.ts:3
  • impl:protocol.studio-recipes: evaluates shipped recipe bodies once and shares answers between Studio pages · anchored code · src/projections/studio/recipes.ts:34
  • impl:protocol.studio-tests-lens: renders shared rule and example-space coverage with filters and verifier bindings · anchored code · src/projections/studio/pages/tests-page.ts:34
  • spec:decisions.studio-build-renders refines spec:decisions.studio-web-components · declared — narrows where a view's values come from; the build writes them into the markup, so a host carries that markup and supplies no graph data
  • impl:protocol.studio-architecture-lens references spec:decisions.studio-build-renders · anchored
  • impl:protocol.studio-diagram-element references spec:decisions.studio-build-renders · anchored
  • impl:protocol.studio-diagrams references spec:decisions.studio-build-renders · anchored
  • impl:protocol.studio-evidence-lens references spec:decisions.studio-build-renders · anchored
  • impl:protocol.studio-recipes references spec:decisions.studio-build-renders · anchored
  • impl:protocol.studio-tests-lens references spec:decisions.studio-build-renders · anchored
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred syntax: requirementDiagram. Chosen syntax: flowchart TB because references require exact labels unavailable in requirement syntax.

Decisions

No decision record named.

Runtime

No implementation neighborhood recorded.

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:decisions.studio-build-renders
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:decisions.studio-build-renders: The build renders every Studio view, and an element only enhances it
  • spec:decisions.studio-web-components: The Studio is built from custom elements, not a framework
  • spec:decisions.studio-build-renders refines spec:decisions.studio-web-components · declared — narrows where a view's values come from; the build writes them into the markup, so a host carries that markup and supplies no graph data
  • spec:consumers.spec-studio decidedBy spec:decisions.studio-build-renders · declared
  • spec:consumers.spec-studio.components decidedBy spec:decisions.studio-build-renders · 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

Distance 1

  • spec:consumers.spec-studio

    Implementing units

    • impl:protocol.studio-command · src/cli/studio-command.ts:106
    • impl:protocol.studio-data · src/projections/studio/data.ts:279
    • impl:protocol.studio-frame · src/projections/studio/pages/frame.ts:6

    Referencing units

    None.

    Enabled verifiers: test:protocol.studio-publisher

    Packs: pack:self-hosting-v1, pack:spec-studio-v1

  • spec:consumers.spec-studio.components

    Implementing units

    • component:protocol.studio-elements · src/studio-elements/index.ts:13
    • impl:protocol.studio-compose · src/studio-elements/compose.ts:13
    • impl:protocol.studio-diagram-element · src/studio-elements/diagram.ts:23
    • impl:protocol.studio-filter · src/studio-elements/filter.ts:25
    • impl:protocol.studio-intent-panel-element · src/studio-elements/intent-panel-element.ts:14
    • impl:protocol.studio-maturity-map · src/projections/studio/pages/maturity-map.ts:7
    • impl:protocol.studio-pack-page · src/projections/studio/pages/pack-page.ts:68
    • impl:protocol.studio-scenario-editor · src/studio-elements/scenario-editor.ts:17
    • impl:protocol.studio-search-results · src/studio-elements/search-results.ts:95
    • impl:protocol.studio-spec-structure · src/projections/studio/pages/spec-structure.ts:44
    • impl:protocol.studio-verification-panels · src/projections/studio/pages/spec-verification.ts:74

    Referencing units

    None.

    Enabled verifiers: test:protocol.studio-intent-handoff

    Packs: pack:self-hosting-v1, pack:spec-studio-v1

Distance 2

Distance 3

Distance 4

Relations

Relation and directionOther endClaimReasonExercised keys
refines · outgoingThe Studio is built from custom elements, not a framework
spec:decisions.studio-web-components · resolves
declarednarrows where a view's values come from; the build writes them into the markup, so a host carries that markup and supplies no graph dataNone
decidedBy · incomingThe Spec Studio is a static HTML workbench over the one graph
spec:consumers.spec-studio · resolves
declaredNoneNone
decidedBy · incomingThe Studio's custom elements each hold one view the build renders
spec:consumers.spec-studio.components · resolves
declaredNoneNone

Bindings

Implementation binding: none

Design reference: present

  • impl:protocol.studio-architecture-lens · renders recipe component rows and planned designs as architecture and member diagrams · src/projections/studio/pages/architecture-page.ts:50 · role projection · component component:protocol.projections · layer edge · context protocol
  • 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:23 · role interaction · component component:protocol.studio-elements · layer edge · context protocol
  • impl:protocol.studio-diagrams · deterministic grid and band layouts with bounded folds and full text equivalents · src/projections/studio/diagrams/svg.ts:73 · role projection · component component:protocol.projections · layer edge · context protocol
  • impl:protocol.studio-evidence-lens · names the four evidence sources and what would bring each into the Studio · src/projections/studio/pages/evidence-page.ts:3 · role projection · component component:protocol.projections · layer edge · context protocol
  • impl:protocol.studio-recipes · evaluates shipped recipe bodies once and shares answers between Studio pages · src/projections/studio/recipes.ts:34 · role service · component component:protocol.projections · layer edge · context protocol
  • impl:protocol.studio-tests-lens · renders shared rule and example-space coverage with filters and verifier bindings · src/projections/studio/pages/tests-page.ts:34 · role projection · component component:protocol.projections · layer edge · context protocol

Verifier binding: none

Expected-outcome oracle: none

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.