Context
R2 readiness finding for #15252 (named first as a follow-up concern in the PR #16328 screenplay review). The flagship screenplay's scene 7 (film-perspectives-undo, apps/workstation/tour/fiveBeatFilm.mjs) is conditional: "activates when the workstation perspective + transaction wiring lands." The undo/redo half is now provable on the workstation (below); the perspective half is not — and no ticket owned that gap until this one.
The Problem
apps/workstation's Workspace is a ready dock-document holder — applyDockZoneOperation (Workspace.mjs:568) + getDockZoneDocument (Workspace.mjs:702) — but exposes no perspectiveStore (grep receipt: zero DockPerspectiveStore hits in apps/workstation/, 2026-08-02). Against the NL perspective trio this means:
capture_perspective → captured: true, stored: false (the agent holds the record; storing is declared absent, never silently absorbed — src/ai/client/DockService.mjs:195-199)
list_perspectives → fail-closed structured error (:222-224)
restore_perspective → fail-closed structured error (:264-266)
So scene 7's "save this arrangement… one click restores it" is not provable today on the film's primary surface, even though it is fully witnessed on the dockdemo (DemoBPerspectiveToolsNL.spec.mjs).
The undo/redo half needs no app change: the recording hook (Neo.ai.client.DockService#buildDockReverse, merged via PR #16332) fires on the NL execute_dock_operation path against any holder. Live receipt on the workstation at head 5703e0d18f (headed, this host, session 4800f3f4): begin_transaction → moveItem(feed → scale-tabs) → commit_transaction (committed: true, ops: 1) → undo (exact baseline document) → redo (re-applied). The transaction cell of scene 7 is provable TODAY.
The Architectural Reality
- Store precedent:
DemoBWorkspace.mjs:461 instantiates Neo.dashboard.DockPerspectiveStore; its switcher bar is born from store lifecycle events (:618-631) and restores via loadPerspectiveByName (:1223, :4396)
- The NL tools resolve the store from the HOLDER (
holder.perspectiveStore) — wiring the store onto the workstation Workspace activates all three tools with zero service changes
- The screenplay's
conditional marker lifts only when the beats have witnesses (spec = authority, film = derivative)
The Fix
- Wire a
DockPerspectiveStore into the workstation Workspace (Demo B precedent): instantiate + lifecycle binding, and the minimal restore surface the screenplay automation needs (the NL trio is the drive path; a switcher-equivalent UI is optional garnish, not required for scene 7).
- Whitebox-e2e witness on the workstation: NL capture → disruptive rearrangement → restore (exact document + same instances) + list, sibling to
DemoBPerspectiveToolsNL.spec.mjs.
- Comment on #15252 when green so scene 7's perspective half flips to provable.
Acceptance Criteria
Out of Scope
- Undo/redo machinery (merged; workstation receipt already in hand — this ticket's Problem section)
- A perspective switcher UI for the workstation (optional; the NL drive path is the film's surface)
- Dockdemo perspective work (done —
#16315 / PR #16319)
Related
- Parent epic: #15252 (scene-7 activation leaf)
- Screenplay + conditional: PR #16328 (
apps/workstation/tour/fiveBeatFilm.mjs, scene film-perspectives-undo)
- Precedents:
#16315 (dockdemo path), PR #16332 (transaction machinery)
- R2 witness matrix: #15252 comment (this ticket is the scene-7 perspective cell)
Live latest-open sweep: checked latest 20 open issues at 2026-08-02T11:3xZ; no equivalent found. A2A in-flight sweep: no competing claim on this scope.
Origin Session ID: 1a7e3f91-8356-48bb-a353-9fd7da2647f5
Retrieval Hint: "workstation perspective store scene-7 activation DockPerspectiveStore"
Context
R2 readiness finding for #15252 (named first as a follow-up concern in the PR #16328 screenplay review). The flagship screenplay's scene 7 (
film-perspectives-undo,apps/workstation/tour/fiveBeatFilm.mjs) isconditional: "activates when the workstation perspective + transaction wiring lands." The undo/redo half is now provable on the workstation (below); the perspective half is not — and no ticket owned that gap until this one.The Problem
apps/workstation's Workspace is a ready dock-document holder —applyDockZoneOperation(Workspace.mjs:568) +getDockZoneDocument(Workspace.mjs:702) — but exposes noperspectiveStore(grep receipt: zeroDockPerspectiveStorehits inapps/workstation/, 2026-08-02). Against the NL perspective trio this means:capture_perspective→captured: true, stored: false(the agent holds the record; storing is declared absent, never silently absorbed —src/ai/client/DockService.mjs:195-199)list_perspectives→ fail-closed structured error (:222-224)restore_perspective→ fail-closed structured error (:264-266)So scene 7's "save this arrangement… one click restores it" is not provable today on the film's primary surface, even though it is fully witnessed on the dockdemo (
DemoBPerspectiveToolsNL.spec.mjs).The undo/redo half needs no app change: the recording hook (
Neo.ai.client.DockService#buildDockReverse, merged via PR #16332) fires on the NLexecute_dock_operationpath against any holder. Live receipt on the workstation at head5703e0d18f(headed, this host, session4800f3f4):begin_transaction→moveItem(feed → scale-tabs)→commit_transaction(committed: true, ops: 1) →undo(exact baseline document) →redo(re-applied). The transaction cell of scene 7 is provable TODAY.The Architectural Reality
DemoBWorkspace.mjs:461instantiatesNeo.dashboard.DockPerspectiveStore; its switcher bar is born from store lifecycle events (:618-631) and restores vialoadPerspectiveByName(:1223,:4396)holder.perspectiveStore) — wiring the store onto the workstation Workspace activates all three tools with zero service changesconditionalmarker lifts only when the beats have witnesses (spec = authority, film = derivative)The Fix
DockPerspectiveStoreinto the workstation Workspace (Demo B precedent): instantiate + lifecycle binding, and the minimal restore surface the screenplay automation needs (the NL trio is the drive path; a switcher-equivalent UI is optional garnish, not required for scene 7).DemoBPerspectiveToolsNL.spec.mjs.Acceptance Criteria
capture_perspectiveagainst the workstation Workspace returnsstored: truelist_perspectives/restore_perspectivereturn store-backed results (no fail-closed absence)#15243→#15245)Out of Scope
#16315/ PR #16319)Related
apps/workstation/tour/fiveBeatFilm.mjs, scenefilm-perspectives-undo)#16315(dockdemo path), PR #16332 (transaction machinery)Live latest-open sweep: checked latest 20 open issues at 2026-08-02T11:3xZ; no equivalent found. A2A in-flight sweep: no competing claim on this scope.
Origin Session ID: 1a7e3f91-8356-48bb-a353-9fd7da2647f5
Retrieval Hint: "workstation perspective store scene-7 activation DockPerspectiveStore"