Spec Studio

A composing panel on every page gathers scoped intent for an agent

spec:consumers.spec-studio.intent-panelUse Case / Behavior · storyready floor ready

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

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

Findings: no errors, no warnings

specs/consumers/spec-studio.intent-panel.sdp.md

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

The change-proposal contract requires the commit whose graph the person read, and a generated page set carries no commit, so a proposal's base comes from the build stamp when one is present and from the person otherwise. The panel hands off the same Markdown memo an agent gets from recipe 49 for the same proposal, so a person, a reviewer and an agent read one text. A static page holds no credentials, so the panel opens no pull request and writes nothing but its own gathered intents in the browser.

Intent
outcome
Let a person gather the changes they want while they read, each bounded by a Spec, its neighbors, a Pack or one open question, and hand them to an agent that edits source.
Behavior
rule.everyPage line 24 · specs/consumers/spec-studio.intent-panel.sdp.md:24
The composing panel is on every page, after the canvas, closed by default with its heading and the count of gathered intents; without script it says that composing needs the script.

no example exercises it

rule line 25 · specs/consumers/spec-studio.intent-panel.sdp.md:25
The panel writes no source; its hand-off follows spec:consumers.intent-composition.
rule line 26 · specs/consumers/spec-studio.intent-panel.sdp.md:26
A person gathers intents across pages before handing them off.
rule.persist line 27 · specs/consumers/spec-studio.intent-panel.sdp.md:27
Gathered intents persist in the browser's local storage under the page set's own key, so refreshing a tab on a phone loses none, and two page sets served from one host never share intents.

spec:consumers.spec-studio.intent-panel.refresh-keeps-intents · enabled

rule line 28 · specs/consumers/spec-studio.intent-panel.sdp.md:28
A composed intent names its scope by id or entry address, so the agent that receives it reads the same Spec, Pack, entry or question through the graph.
rule.handOff line 29 · specs/consumers/spec-studio.intent-panel.sdp.md:29
The panel hands its gathered intents off as one change proposal, on the change-proposal contract, and as the memo recipe 49 renders for it: the person copies the memo or the proposal as text, or saves either as a file. The page opens no pull request, because a static page holds no credentials; any pull request comes from the agent's ordinary source edit.

no example exercises it

rule.sameMemo line 30 · specs/consumers/spec-studio.intent-panel.sdp.md:30
The memo the panel writes for a proposal is byte for byte the memo recipe 49 returns for the same proposal.

no example exercises it

rule.proposalBase line 31 · specs/consumers/spec-studio.intent-panel.sdp.md:31
A proposal's base is the commit a present build stamp names, otherwise one the person supplies, and the person gives one reason for the whole proposal; without a base and a reason the panel exports its intents as scoped-intent text, and the agent that receives them writes the proposal against a commit it knows.

no example exercises it

rule.packScope line 32 · specs/consumers/spec-studio.intent-panel.sdp.md:32
A request scoped to a Pack records the members this page set renders for that Pack, and expands to them at hand-off only when the proposal's base is the commit the page set's stamp names; otherwise it stays scoped-intent text for an agent to resolve against the base. A request that changes a Pack's membership or framing, names an empty Pack or names a Pack with an unresolved member, stays scoped-intent text too, so the change-proposal contract keeps its Spec and entry scopes.

no example exercises it

rule.textApart line 33 · specs/consumers/spec-studio.intent-panel.sdp.md:33
The proposal holds only the intents its contract can carry; every intent that stays scoped-intent text is listed apart under Not in the proposal, and Copy scoped intent copies those intents, so the panel drops none. The copied text names each intent's action and recorded scope: the member Spec ids for a member change, with the Pack id as context, or the Pack id for a membership or framing change.

no example exercises it

Cited at

  • Test line · test/studio-s5.test.ts:1038 · test:protocol.studio-intent-handoff · test:protocol.studio-intents-refresh
rule.noRequest line 34 · specs/consumers/spec-studio.intent-panel.sdp.md:34
The panel requests nothing over the network and sends its intents nowhere.

no example exercises it

3 unkeyed rules.

Verifying examples

Refreshing a tab keeps every gathered intent · spec:consumers.spec-studio.intent-panel.refresh-keeps-intents · ready floor ready

Executable Spec

Given the composing panel holds {gathered: 3} gathered intents
When the person refreshes the tab
Then the composing panel holds {kept: 3} gathered intents

Open example

Example space

Given the composing panel holds {gathered:number} gathered intents
When the person refreshes the tab
Then the composing panel holds {kept:number} gathered intents
Design
storageKey line 44 · specs/consumers/spec-studio.intent-panel.sdp.md:44
sdp-studio:intents:<root path>, where the root path is the URL path of the page set's root as the page's page-root attribute resolves it, so a page set at /preview/12/ and one at /preview/13/ keep apart.

no citation recorded

intentRecord line 45 · specs/consumers/spec-studio.intent-panel.sdp.md:45
{ scope: string[]; request: string; text?: string; replaces?: string; follows?: string; pack?: string; packMembersComplete?: boolean; action: string } per gathered intent, in gathering order, where action names the composing action that gathered it, such as edit-example, and pack keeps the Pack a Pack-scoped request named, with scope holding the resolved members this page set renders for it and packMembersComplete recording whether every manifest member resolved when the request was gathered.

no citation recorded

savedFiles line 46 · specs/consumers/spec-studio.intent-panel.sdp.md:46
proposal.json holding the proposal document and proposal.md holding its memo, each saved through a link the panel writes with the download attribute.

no citation recorded

baseSource line 47 · specs/consumers/spec-studio.intent-panel.sdp.md:47
the panel reads the base from the data-corpus-commit attribute the page's sdp-stamp sets once its stamp loads, and requests no stamp of its own.
UI
gatheredIntents line 37 · specs/consumers/spec-studio.intent-panel.sdp.md:37
the intents gathered so far, headed Composing with their count, each on one line naming its scope and the change it asks for, such as adding an example or changing a constraint's target, with a button that discards it.
baseAndReason line 38 · specs/consumers/spec-studio.intent-panel.sdp.md:38
the base as code when a stamp names it, otherwise a labelled text field for a commit, then a labelled text field for the proposal's reason.
panelActions line 39 · specs/consumers/spec-studio.intent-panel.sdp.md:39
Copy memo, Copy proposal, Save memo, Save proposal and Discard all, the copy and save actions shown only when a base and a reason are present; and Copy scoped intent whenever an intent stays scoped-intent text, every intent without a base and a reason, and otherwise those the proposal cannot hold.
composingActions line 40 · specs/consumers/spec-studio.intent-panel.sdp.md:40
the actions on other panels that compose intent: propose new text for a keyed entry, resolve an open question or promote it to a decision record, propose or edit an example, propose or change a constraint target, and propose examples for values no example binds.
composeDialog line 41 · specs/consumers/spec-studio.intent-panel.sdp.md:41
a native dialog with a labelled text area for the request, a second for the exact entry text when the action proposes one, and Gather and Cancel buttons.
Verification

Verifier bindings

  • spec:consumers.spec-studio.intent-panel.refresh-keeps-intents · Refreshing a tab keeps every gathered intent · declared · example enabled · specs/consumers/spec-studio.intent-panel.refresh-keeps-intents.sdp.md

    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 391 · Branch: cursor/media-plan-and-articles-09b1 · Commit: 076cd4f1f85640d8236e5cca1bffffa68ab79a33 · Start: 2026-10-31T15:32:20.471Z · Stop: 2026-10-31T15:34:02.073Z

    NameSuiteResultDuration
    executes the bound example against a fresh worldRefreshing a tab keeps every gathered intent (spec:consumers.spec-studio.intent-panel.refresh-keeps-intents)passed9.92 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.43 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.32 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)passed124.81 ms
    keeps unsupported intents apart and expands Pack members only against the stamped basenot recordedpassed2.27 ms
    returns the same schema problems as recipe 38 and renders in any corpusnot recordedpassed10.03 ms
    composes locally without changing source or requesting a network servicenot recordedpassed1.54 ms
    keeps the last local intents when storage refuses writesnot recordedpassed0.29 ms
    keeps unsaved local intents when storage remains readable but its quota refuses writesnot recordedpassed0.27 ms
    rewrites SVG and accessibility references without changing subject attributes or authored textnot recordedpassed6.38 ms
    opens disclosures for print and restores exactly their prior statenot recordedpassed1.43 ms
    leaves Mermaid source closed for print unless the reader opened itnot recordedpassed1.06 ms
    stops the actual Studio watch process with exit zero on SIGINTnot recordedpassed491.48 ms
    removes a failed watch publication, keeps watching and recovers on the next carrier editnot recordedpassed33.93 ms
    ships a phone layout and a print stylesheet for the whole canvasnot recordedpassed10.85 ms
    keeps exports graph-only when the browsing pages receive a base and run recordsnot recordedpassed27 ms
    starts no cycle for source or input-file eventsnot recordedpassed30.93 ms
    merges concurrent panels before gathering or discarding and flags rejected storage recordsnot recordedpassed0.6 ms
    refreshes the browser panel on storage and pageshow and removes those listeners on disconnectnot recordedpassed1.47 ms
    prefills compose with the authored entry text including code spans and no rendered annotationsnot recordedpassed15.53 ms
    omits blank exact text and reports whitespace requests in the compose dialognot recordedpassed2.42 ms
    uses the stamp base, labels fields, orders actions and copies and saves the named documentsnot recordedpassed5.09 ms
    copies distinct actions and recorded scopes for both Pack choices without a stampnot recordedpassed2.97 ms
    keeps Pack framing changes apart and gathers scenario editor steps verbatimnot recordedpassed2.66 ms
    matches the literal memo for the shared proposal, including the full relation and documentnot recordedpassed0.93 ms
    keeps the last watch pages when an optional base becomes unreadable, just like a plain runnot recordedpassed986.18 ms
    inlines the selected stylesheet asset in exports and publishes those same style bytesnot recordedpassed25.93 ms
    introduces studio before its watch option and gives recipe 49 a use casenot recordedpassed4.36 ms
    renders edit scenario steps outside inert templates without scriptnot recordedpassed1.08 ms
    renders propose scenario steps outside inert templates without scriptnot recordedpassed0.72 ms
    writes both memo reasons as code spans: "<details>Review the design.</details>", "`Keep` the ``literal`` reason`"not recordedpassed0.7 ms
    writes both memo reasons as code spans: "`Review` the ``design`` reason`", "<details>Keep the change.</details>"not recordedpassed0.43 ms
    fences requests so their Markdown cannot alter the memo: "Fix a typo.\n<!--"not recordedpassed0.89 ms
    fences requests so their Markdown cannot alter the memo: "Use this text.\n```\n## Forged heading\n``````\n<!--hidden-->"not recordedpassed0.7 ms
    contains phone navigation, stamp and wide tables within the viewportnot recordedpassed15.39 ms
    keeps the maturity caption readable and empty cells compact on a phonenot recordedpassed7.6 ms
    aligns maturity cell counts with the empty cell dashesnot recordedpassed4.92 ms
    keeps table headers and one-word cells intact while allowing word-boundary wrappingnot recordedpassed7.32 ms
    keeps natural desktop diagram size and fits only on phonesnot recordedpassed7.69 ms
    hides phone scroll advice and closed source in print while keeping opened source printablenot recordedpassed18.32 ms
  • test:protocol.studio-intent-handoff · anchored · test anchor binding present · test/studio-s5.test.ts:407

Example space

  • gathered · number · declared by the composing panel holds {gathered} gathered intents

Bound points

Oracle binding: present · oracle:protocol.studio-intents · test/studio-s5.test.ts:239

Coverage

gathered: 3 · spec:consumers.spec-studio.intent-panel.refresh-keeps-intents · not enumerable

Unbound

  • gathered: None
Design view

Requirement drawing

Requirement drawing for spec:consumers.spec-studio.intent-panel
The diagram as text
  • spec:consumers.spec-studio.intent-panel: A composing panel on every page gathers scoped intent for an agent · declared Spec
  • spec:consumers.spec-studio.intent-panel.refresh-keeps-intents: Refreshing a tab keeps every gathered intent · declared Spec
  • spec:consumers.intent-composition: Composed intent hands off on one proposal shape · declared Spec
  • 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-frame: renders Studio navigation, page rails and composing controls · anchored code · src/projections/studio/pages/frame.ts:6
  • impl:protocol.studio-intent-panel: gathers ordered intents under the page-root storage key and partitions their hand-off · anchored code · src/studio-elements/intent-panel.ts:51
  • 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-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
  • oracle:protocol.studio-intents: oracle:protocol.studio-intents · anchored oracle binding · test/studio-s5.test.ts:239
  • test:protocol.studio-intent-handoff: test:protocol.studio-intent-handoff · anchored test binding · binding present · test/studio-s5.test.ts:407
  • test:protocol.studio-intents-refresh: test:protocol.studio-intents-refresh · anchored test binding · binding present · test/studio-s5.test.ts:249
  • spec:consumers.spec-studio.intent-panel refines spec:consumers.intent-composition · declared
  • spec:consumers.spec-studio.intent-panel.refresh-keeps-intents refines spec:consumers.spec-studio.intent-panel · declared
  • spec:consumers.spec-studio.intent-panel.refresh-keeps-intents verifies spec:consumers.spec-studio.intent-panel · declared
  • impl:protocol.studio-compose satisfies spec:consumers.spec-studio.intent-panel · anchored
  • impl:protocol.studio-frame satisfies spec:consumers.spec-studio.intent-panel · anchored
  • impl:protocol.studio-intent-panel satisfies spec:consumers.spec-studio.intent-panel · anchored
  • impl:protocol.studio-intent-panel-element satisfies spec:consumers.spec-studio.intent-panel · anchored
  • impl:protocol.studio-scenario-editor satisfies spec:consumers.spec-studio.intent-panel · anchored
  • oracle:protocol.studio-intents models spec:consumers.spec-studio.intent-panel · anchored
  • test:protocol.studio-intent-handoff verifies spec:consumers.spec-studio.intent-panel · anchored
  • test:protocol.studio-intents-refresh verifies spec:consumers.spec-studio.intent-panel.refresh-keeps-intents · 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

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
  • 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:13

    Component: 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-frame · renders Studio navigation, page rails and composing controls · src/projections/studio/pages/frame.ts:6

    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-intent-panel · gathers ordered intents under the page-root storage key and partitions their hand-off · src/studio-elements/intent-panel.ts:51

    Component: 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:14

    Component: 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-scenario-editor · gathers the edited Given, When and Then as exact text scoped to its subject · src/studio-elements/scenario-editor.ts:17

    Component: component:protocol.studio-elements · optional browser behavior and proposal handoff · src/studio-elements/index.ts:13 · 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.intent-panel
The diagram as text
  • spec:consumers.edit-model: Views compose scoped intent instead of patching canonical source
  • spec:consumers.intent-composition: Composed intent hands off on one proposal shape
  • spec:consumers.intent-composition.proposal: A change proposal is addressed, based and checked before it lands
  • spec:consumers.intent-composition.proposal.memo: Recipe 49 renders a change proposal as the Markdown memo a person reviews
  • spec:consumers.spec-studio.components: The Studio's custom elements each hold one view the build renders
  • spec:consumers.spec-studio.intent-panel: A composing panel on every page gathers scoped intent for an agent
  • spec:consumers.spec-studio.intent-panel.refresh-keeps-intents: Refreshing a tab keeps every gathered intent
  • spec:consumers.spec-studio.verification-panels: The panels for examples, targets, verifiers and evidence
  • spec:consumers.studio-on-ramp: The Studio skill teaches agents to publish, share and read the Spec Studio
  • spec:model.open-question-keys: An open question may carry a key that addresses it
  • spec:consumers.spec-studio.intent-panel dependsOn spec:consumers.edit-model · declared
  • spec:consumers.spec-studio.intent-panel dependsOn spec:consumers.intent-composition.proposal · declared — the panel hands off a change proposal
  • spec:consumers.spec-studio.intent-panel dependsOn spec:consumers.intent-composition.proposal.memo · declared — the panel writes the memo recipe 49 renders, byte for byte
  • spec:consumers.spec-studio.intent-panel dependsOn spec:model.open-question-keys · declared
  • spec:consumers.spec-studio.intent-panel refines spec:consumers.intent-composition · 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.verification-panels dependsOn spec:consumers.spec-studio.intent-panel · declared — each panel action gathers intent in the composing panel
  • spec:consumers.studio-on-ramp dependsOn spec:consumers.spec-studio.intent-panel · declared — the skill teaches what the composing panel hands off and what stays scoped-intent text
  • spec:consumers.spec-studio.intent-panel.refresh-keeps-intents refines spec:consumers.spec-studio.intent-panel · declared
  • spec:consumers.spec-studio.intent-panel.refresh-keeps-intents verifies spec:consumers.spec-studio.intent-panel · 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

Distance 2

Distance 3

Distance 4

Distance 5

Relations

Relation and directionOther endClaimReasonExercised keys
dependsOn · outgoingViews compose scoped intent instead of patching canonical source
spec:consumers.edit-model · resolves
declaredNoneNone
dependsOn · outgoingA change proposal is addressed, based and checked before it lands
spec:consumers.intent-composition.proposal · resolves
declaredthe panel hands off a change proposalNone
dependsOn · outgoingRecipe 49 renders a change proposal as the Markdown memo a person reviews
spec:consumers.intent-composition.proposal.memo · resolves
declaredthe panel writes the memo recipe 49 renders, byte for byteNone
dependsOn · outgoingAn open question may carry a key that addresses it
spec:model.open-question-keys · resolves
declaredNoneNone
refines · outgoingComposed intent hands off on one proposal shape
spec:consumers.intent-composition · resolves
declaredNoneNone
dependsOn · incomingThe Studio's custom elements each hold one view the build renders
spec:consumers.spec-studio.components · resolves
declaredthe panel element renders the gathered intents that Spec designsNone
dependsOn · incomingThe panels for examples, targets, verifiers and evidence
spec:consumers.spec-studio.verification-panels · resolves
declaredeach panel action gathers intent in the composing panelNone
dependsOn · incomingThe Studio skill teaches agents to publish, share and read the Spec Studio
spec:consumers.studio-on-ramp · resolves
declaredthe skill teaches what the composing panel hands off and what stays scoped-intent textNone
refines · incomingRefreshing a tab keeps every gathered intent
spec:consumers.spec-studio.intent-panel.refresh-keeps-intents · resolves
declaredNoneNone
verifies · incomingRefreshing a tab keeps every gathered intent
spec:consumers.spec-studio.intent-panel.refresh-keeps-intents · resolves
declaredNonepersist

Bindings

Implementation binding: present

  • 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 protocol
  • impl:protocol.studio-frame · renders Studio navigation, page rails and composing controls · src/projections/studio/pages/frame.ts:6 · role projection · component component:protocol.projections · layer edge · context protocol
  • impl:protocol.studio-intent-panel · gathers ordered intents under the page-root storage key and partitions their hand-off · src/studio-elements/intent-panel.ts:51 · role service · component component:protocol.studio-elements · layer edge · context protocol
  • impl: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 protocol
  • 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:17 · role interaction · component component:protocol.studio-elements · layer edge · context protocol

Design reference: none

Verifier binding: present

  • spec:consumers.spec-studio.intent-panel.refresh-keeps-intents · Refreshing a tab keeps every gathered intent · declared · specs/consumers/spec-studio.intent-panel.refresh-keeps-intents.sdp.md · example enabled
  • test:protocol.studio-intent-handoff · anchored · test/studio-s5.test.ts:407 · test anchor

Expected-outcome oracle: present

  • oracle:protocol.studio-intents · test/studio-s5.test.ts:239

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.