Context
Increment 2 of the #15252 capstone ladder, minted by the operator-directed reshape (2026-07-25): the one-PR-vehicle plan is superseded — increments merge as they green, the film iterates against merged reality. Increment 1 (PR #15840, ready-for-review) shipped the vessel shell, tear-out composition, journey executor, and the green scene-1/2 witnesses including the morph. This ticket is the remaining WIRING: the popup that knows it is a dock.
The Problem
The workstation can tear a pane OUT into a live vessel and bring it home mid-gesture — but a vessel is not yet a dock TARGET. Scenes 3–4 of the five-beat journey are contracted test.fixme legs in test/playwright/e2e/workstation/WorkstationFiveBeatNL.spec.mjs, each naming its worker-truth receipts:
- Scene 3: a second pane converts to a vessel WHILE ITS DRAG CONTINUES (park-not-close lifecycle); dragged over the first popup, the TARGET popup's zones preview (remote previews rendered inside the other window); with overlapping candidates EXACTLY ONE preview claims (deterministic arbitration asserted from the claim registry, never pixels); release docks — two panes in one popup, both stores streaming.
- Scene 4: stack-handle drag home; the commit lands the WHOLE stack atomically (one document transaction); the emptied vessel closes itself AFTER the commit, terminal only when the runtime windowId leaves the connected topology (dispatch success is never effect proof); same-instance identity + heartbeat continuity across the return.
- Scene 5: the full five-beat journey in ONE run, two-take beat-log equality — the capstone determinism contract and the film's recording form.
The Architectural Reality
- Shipped mechanism (compose, never rebuild):
src/dashboard/DockVesselConversion.mjs (308 — convert-while-dragging sensor), DockVesselPark.mjs (391 — park/reshow/dispose lifecycle), DockWorkspaceSet.mjs (172 — multi-workspace registry), CrossWindowDragTarget.mjs (204) + DockCrossWindowParticipation.mjs (288 — the remote-target machinery), plus the tear-out/embodiment already composed by increment 1.
- Sibling source (map, not verbatim lift):
apps/agentos/childapps/dockdemo/view/DemoBWorkspace.mjs — executeCrossWindowStep (:1965, the two-window transfer executor), the cross-window stage composition (:460-553), transfer commit via the atomic two-document transferItem/transferNode seams. Its app-local DemoBCrossWindowStage.mjs (727 lines) carries per-workspace geometry registries and hit-testing that the workstation must NOT replicate — see the binding below.
- BINDING (production-record D-013, from the operator's
manager.Window probe, recorded publicly on #15895): the workstation consumes Neo.manager.Window — the live screen-space geometry authority (inner/outer/chrome rects, high-frequency updates) with getWindowAt(x, y) — for cross-window hit-testing and vessel-follow receipts. DemoB's parallel hitTestWorkspace + crossWindowGeometry registry pattern is explicitly rejected for this consumer: one geometry authority, less app-local state.
- The workstation remains single-document-plus-vessels; the popup workspace document (the vessel's own dock document, seeded on first dock-INTO) is new state this increment introduces — the DemoB popup-document pattern applies at workstation grain.
- App-work gate applies (
apps/**): the five neo-core contracts load before authoring; structural-pre-flight fires for any new .mjs file (sibling expectation: composition stays inside Workspace.mjs unless the cross-window block outgrows the class — decided at authoring time).
The Fix
- Workspace composition: vessel-conversion seams (
createVesselParkHandlers + conversion sensor wiring via the adapter's enableVesselConversion + threshold options), createDockWorkspaceSet registration (main + vessel workspaces), cross-window participation + drag-target composition consuming manager.Window.
- Popup-document lifecycle: seed the vessel's dock document on first dock-into;
transferItem/transferNode commits for cross-window moves and the stack return; commit-precedes-close on the emptied vessel (windowId-leaves-topology terminal).
- App-owned executors:
executeCrossWindowStep-class (workstation-shaped, DemoB :1965 pattern) + the stack-return drive; both with the D-010 film tunables the tear-out executor established.
- Activate scenes 3–4 spec legs; author scene 5 (full journey, two-run equality, zero-residue reload).
- Post-merge: the film's v1 capture consumes the full journey (the v0 draft cut ships from increment 1 alone).
Acceptance Criteria
Out of Scope
- The film itself (capture/compose/QA/delivery —
#15252 close condition, iterating v0→v1 per the operator's step-by-step review loop).
- The density scene exploration (production-record D-012 — assessed after this lands).
- Keyboard-command a11y parity for cross-window moves (DemoB has it; the workstation adds it when the journey demands it — separate leaf if wanted).
- The re-entry window-membership semantic fork (recorded on
#15895; awaits an interest signal).
Related
#15252 (capstone — the film; BLOCKED BY this ticket), epic #15239 (parent), PR #15840 (increment 1, consumed by this work), #15895/#15899 (the engine fixes the morph witness extracted en route), D#15204 (screenplay source).
Live latest-open sweep: checked latest 15 open issues at 2026-07-25T13:27Z; no equivalent. A2A herd window current to the minute; own-lane continuation, no colliding claim.
Origin Session ID: b8c9e338-27b3-4385-99ac-dce459733940
Retrieval Hint: "workstation cross-window stage B conversion arbitration stack return manager.Window D-013"
Context
Increment 2 of the
#15252capstone ladder, minted by the operator-directed reshape (2026-07-25): the one-PR-vehicle plan is superseded — increments merge as they green, the film iterates against merged reality. Increment 1 (PR #15840, ready-for-review) shipped the vessel shell, tear-out composition, journey executor, and the green scene-1/2 witnesses including the morph. This ticket is the remaining WIRING: the popup that knows it is a dock.The Problem
The workstation can tear a pane OUT into a live vessel and bring it home mid-gesture — but a vessel is not yet a dock TARGET. Scenes 3–4 of the five-beat journey are contracted
test.fixmelegs intest/playwright/e2e/workstation/WorkstationFiveBeatNL.spec.mjs, each naming its worker-truth receipts:The Architectural Reality
src/dashboard/DockVesselConversion.mjs(308 — convert-while-dragging sensor),DockVesselPark.mjs(391 — park/reshow/dispose lifecycle),DockWorkspaceSet.mjs(172 — multi-workspace registry),CrossWindowDragTarget.mjs(204) +DockCrossWindowParticipation.mjs(288 — the remote-target machinery), plus the tear-out/embodiment already composed by increment 1.apps/agentos/childapps/dockdemo/view/DemoBWorkspace.mjs—executeCrossWindowStep(:1965, the two-window transfer executor), the cross-window stage composition (:460-553), transfer commit via the atomic two-documenttransferItem/transferNodeseams. Its app-localDemoBCrossWindowStage.mjs(727 lines) carries per-workspace geometry registries and hit-testing that the workstation must NOT replicate — see the binding below.manager.Windowprobe, recorded publicly on#15895): the workstation consumesNeo.manager.Window— the live screen-space geometry authority (inner/outer/chrome rects, high-frequency updates) withgetWindowAt(x, y)— for cross-window hit-testing and vessel-follow receipts. DemoB's parallelhitTestWorkspace+crossWindowGeometryregistry pattern is explicitly rejected for this consumer: one geometry authority, less app-local state.apps/**): the five neo-core contracts load before authoring;structural-pre-flightfires for any new.mjsfile (sibling expectation: composition stays insideWorkspace.mjsunless the cross-window block outgrows the class — decided at authoring time).The Fix
createVesselParkHandlers+ conversion sensor wiring via the adapter'senableVesselConversion+ threshold options),createDockWorkspaceSetregistration (main + vessel workspaces), cross-window participation + drag-target composition consumingmanager.Window.transferItem/transferNodecommits for cross-window moves and the stack return; commit-precedes-close on the emptied vessel (windowId-leaves-topology terminal).executeCrossWindowStep-class (workstation-shaped, DemoB :1965 pattern) + the stack-return drive; both with the D-010 film tunables the tear-out executor established.Acceptance Criteria
manager.Window/getWindowAt; no app-local per-workspace geometry registry exists in the diff (reviewer-checkable by grep).Out of Scope
#15252close condition, iterating v0→v1 per the operator's step-by-step review loop).#15895; awaits an interest signal).Related
#15252(capstone — the film; BLOCKED BY this ticket), epic#15239(parent), PR #15840 (increment 1, consumed by this work),#15895/#15899(the engine fixes the morph witness extracted en route), D#15204 (screenplay source).Live latest-open sweep: checked latest 15 open issues at 2026-07-25T13:27Z; no equivalent. A2A herd window current to the minute; own-lane continuation, no colliding claim.
Origin Session ID: b8c9e338-27b3-4385-99ac-dce459733940
Retrieval Hint: "workstation cross-window stage B conversion arbitration stack return manager.Window D-013"