Spec Studio

Each watch cycle writes the page set a plain run writes

spec:consumers.spec-studio.publisher.watch.matches-plain-runExample / Scenario · 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/consumers/spec-studio.publisher.watch.matches-plain-run.sdp.md

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

Intent
outcome
Execute the watch on a root whose member carrier changes, and hold each cycle's page set to a plain run's.
assumptions
  • The world writes a root with one Pack of two member Specs and plants the stale page, starts the watch through the command's watch hooks, changes the first member's title twice, waiting for each cycle, and after each cycle runs a plain studio command over a copy of the root as it stands and compares the two page sets file by file; it then stops the watch with SIGINT and reads the exit code.
Behavior

Examples

Given an extraction root holding a Pack and its member Specs and a stale Studio page {stalePage: "specs/probe.departed.html"}
When the studio command runs under watch at that root while one member carrier changes {changes: 2} times
Then the watch exits {exitCode: 0} on SIGINT
Then each watch cycle wrote the page set a plain run writes: {cyclesMatchPlainRun: true}
Then the page set holds a script the plain run does not write: {injectedScript: false}
Then the stale page survives: {staleSurvives: false}
Then a temporary Studio sibling survives: {temporarySurvives: false}
Verification

Verifier bindings

  • test:protocol.studio-watch-plain · anchored · test anchor binding present · test/studio-s5.test.ts:359

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

    Test 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

    NameSuiteResultDuration
    executes the bound example against a fresh worldRefreshing a tab keeps every gathered intent (spec:consumers.spec-studio.intent-panel.refresh-keeps-intents)passed10.32 ms
    executes the bound example against a fresh worldRecipe 49 and the composing panel write one memo for one proposal (spec:consumers.intent-composition.proposal.memo.shared)passed4.64 ms
    executes the bound example against a fresh worldA Pack's export opens alone and keeps its links inside it (spec:consumers.spec-studio.export.self-contained)passed63.72 ms
    executes the bound example against a fresh worldEach watch cycle writes the page set a plain run writes (spec:consumers.spec-studio.publisher.watch.matches-plain-run)passed133.79 ms
    keeps unsupported intents apart and expands Pack members only against the stamped basenot recordedpassed2.36 ms
    returns the same schema problems as recipe 38 and renders in any corpusnot recordedpassed8.22 ms
    composes locally without changing source or requesting a network servicenot recordedpassed1.63 ms
    keeps the last local intents when storage refuses writesnot recordedpassed0.28 ms
    keeps unsaved local intents when storage remains readable but its quota refuses writesnot recordedpassed0.34 ms
    rewrites SVG and accessibility references without changing subject attributes or authored textnot recordedpassed3.98 ms
    opens disclosures for print and restores exactly their prior statenot recordedpassed1.63 ms
    leaves Mermaid source closed for print unless the reader opened itnot recordedpassed1.13 ms
    stops the actual Studio watch process with exit zero on SIGINTnot recordedpassed492.7 ms
    removes a failed watch publication, keeps watching and recovers on the next carrier editnot recordedpassed38.33 ms
    ships a phone layout and a print stylesheet for the whole canvasnot recordedpassed14.52 ms
    keeps exports graph-only when the browsing pages receive a base and run recordsnot recordedpassed25.05 ms
    starts no cycle for source or input-file eventsnot recordedpassed26.7 ms
    merges concurrent panels before gathering or discarding and flags rejected storage recordsnot recordedpassed0.51 ms
    refreshes the browser panel on storage and pageshow and removes those listeners on disconnectnot recordedpassed1.55 ms
    prefills compose with the authored entry text including code spans and no rendered annotationsnot recordedpassed13.61 ms
    omits blank exact text and reports whitespace requests in the compose dialognot recordedpassed2.32 ms
    uses the stamp base, labels fields, orders actions and copies and saves the named documentsnot recordedpassed4.06 ms
    copies distinct actions and recorded scopes for both Pack choices without a stampnot recordedpassed3.09 ms
    keeps Pack framing changes apart and gathers scenario editor steps verbatimnot recordedpassed2.64 ms
    matches the literal memo for the shared proposal, including the full relation and documentnot recordedpassed0.82 ms
    keeps the last watch pages when an optional base becomes unreadable, just like a plain runnot recordedpassed1014.27 ms
    inlines the selected stylesheet asset in exports and publishes those same style bytesnot recordedpassed22.14 ms
    introduces studio before its watch option and gives recipe 49 a use casenot recordedpassed1.43 ms
    renders edit scenario steps outside inert templates without scriptnot recordedpassed1.08 ms
    renders propose scenario steps outside inert templates without scriptnot recordedpassed0.75 ms
    writes both memo reasons as code spans: "<details>Review the design.</details>", "`Keep` the ``literal`` reason`"not recordedpassed0.71 ms
    writes both memo reasons as code spans: "`Review` the ``design`` reason`", "<details>Keep the change.</details>"not recordedpassed0.44 ms
    fences requests so their Markdown cannot alter the memo: "Fix a typo.\n<!--"not recordedpassed0.96 ms
    fences requests so their Markdown cannot alter the memo: "Use this text.\n```\n## Forged heading\n``````\n<!--hidden-->"not recordedpassed0.81 ms
    contains phone navigation, stamp and wide tables within the viewportnot recordedpassed12.93 ms
    keeps the maturity caption readable and empty cells compact on a phonenot recordedpassed25.57 ms
    aligns maturity cell counts with the empty cell dashesnot recordedpassed14.09 ms
    keeps table headers and one-word cells intact while allowing word-boundary wrappingnot recordedpassed18.22 ms
    keeps natural desktop diagram size and fits only on phonesnot recordedpassed10.27 ms
    hides phone scroll advice and closed source in print while keeping opened source printablenot recordedpassed13.92 ms
Design view

Requirement drawing

  • Satisfying or referencing units: no recorded binding.
Requirement drawing for spec:consumers.spec-studio.publisher.watch.matches-plain-run
The diagram as text
  • spec:consumers.spec-studio.publisher.watch.matches-plain-run: Each watch cycle writes the page set a plain run writes · declared Spec
  • spec:consumers.spec-studio.publisher.watch: sdp studio --watch rebuilds the page set on each carrier change · declared Spec
  • test:protocol.studio-watch-plain: test:protocol.studio-watch-plain · anchored test binding · binding present · test/studio-s5.test.ts:359
  • spec:consumers.spec-studio.publisher.watch.matches-plain-run refines spec:consumers.spec-studio.publisher.watch · declared
  • spec:consumers.spec-studio.publisher.watch.matches-plain-run verifies spec:consumers.spec-studio.publisher.watch · declared
  • test:protocol.studio-watch-plain verifies spec:consumers.spec-studio.publisher.watch.matches-plain-run · 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

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:consumers.spec-studio.publisher.watch.matches-plain-run
  • E2: verifies · declared
The diagram as text
  • spec:consumers.spec-studio.publisher.watch: sdp studio --watch rebuilds the page set on each carrier change
  • spec:consumers.spec-studio.publisher.watch.matches-plain-run: Each watch cycle writes the page set a plain run writes
  • spec:consumers.spec-studio.publisher.watch.matches-plain-run refines spec:consumers.spec-studio.publisher.watch · declared
  • spec:consumers.spec-studio.publisher.watch.matches-plain-run verifies spec:consumers.spec-studio.publisher.watch · 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
refines · outgoingsdp studio --watch rebuilds the page set on each carrier change
spec:consumers.spec-studio.publisher.watch · resolves
declaredNoneNone
verifies · outgoingsdp studio --watch rebuilds the page set on each carrier change
spec:consumers.spec-studio.publisher.watch · resolves
declaredNonewatch

Bindings

Implementation binding: none

Design reference: none

Verifier binding: present

  • test:protocol.studio-watch-plain · anchored · test/studio-s5.test.ts:359 · 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.