Context
Epic #15239 leaf G3 — beat 3 of the five-beat story: dragging over ANOTHER popup lights dock-zone previews INSIDE it, deterministically, with exactly one target claiming the gesture. Implements the #15240 amendment's claim protocol (from D#15204 OQ3 [RESOLVED_TO_AC], cycle-4). Unowned — self-select.
The Problem
Three gaps compose this beat: (a) the App Worker holds ONE dock document per workspace today — multi-window needs the {workspaceId → document} workspace-set (ADR 0029 §2.1's nested-workspaces shape); (b) a remote target renders NO continuous preview during a foreign hover (only the landed 450 ms/250 ms candidate dwell); (c) physical target resolution is Window.getWindowAt() first-intersecting-rect — overlapping windows resolve by REGISTRATION ORDER (falsified in the Discussion), so popup-over-popup is nondeterministic today.
The Architectural Reality
Neo.manager.DragCoordinator: already N-window shaped (sortGroup → Map(windowId → zone)); the #13028 native-popup candidate path (450 ms dwell / 250 ms settle) is EXTENDED, never replaced.
DockCrossWindowParticipation / CrossWindowDragTarget: the preview→operation seam the remote preview feeds.
- The claim contract (authority:
#15240): session-scoped gesture token; short-lived hit-claims on STABLE workspace/zone identity (never windowId/registration order); validity/expiry; deterministic tie (earliest valid claim; stable-identity lexicographic final tiebreak), stale (ignored), no-claim (fail closed).
- Blocked-by:
#15240 (the contract must be ratified ADR text first) + #15244 (G1's tear-out produces the vessels this arbitrates).
The Fix
One PR: the workspace-set registry on the App-Worker dock service; continuous native-geometry remote preview through the participation seam (the target window renders its own affordances via the shared #15207 consumer); the claim-protocol implementation in the coordinator.
Acceptance Criteria (the graduated OQ3 contract + Step-Back ✓7)
Out of Scope
Whole-stack reintegration + vessel close (G4) · tear-out itself (G1/G2) · teardown-residue hygiene (its own leaf).
Related
Parent #15239 · blocked-by #15240 + #15244 · D#15204 (OQ3; the falsified getWindowAt reality) · #13028 · #15207 (the shared consumer).
Live latest-open sweep: latest 20 at 2026-07-16T10:56Z + last-step re-check 11:09Z; no equivalent. A2A claim sweep: no competing claim.
Origin Session ID: c5d7cd6b-4e01-45fd-aa59-5ccbc0e5f091
Retrieval Hint: "G3 workspace-set claim arbitration continuous remote preview three-window overlap witness"
Context
Epic
#15239leaf G3 — beat 3 of the five-beat story: dragging over ANOTHER popup lights dock-zone previews INSIDE it, deterministically, with exactly one target claiming the gesture. Implements the#15240amendment's claim protocol (from D#15204 OQ3[RESOLVED_TO_AC], cycle-4). Unowned — self-select.The Problem
Three gaps compose this beat: (a) the App Worker holds ONE dock document per workspace today — multi-window needs the
{workspaceId → document}workspace-set (ADR 0029 §2.1's nested-workspaces shape); (b) a remote target renders NO continuous preview during a foreign hover (only the landed 450 ms/250 ms candidate dwell); (c) physical target resolution isWindow.getWindowAt()first-intersecting-rect — overlapping windows resolve by REGISTRATION ORDER (falsified in the Discussion), so popup-over-popup is nondeterministic today.The Architectural Reality
Neo.manager.DragCoordinator: already N-window shaped (sortGroup → Map(windowId → zone)); the#13028native-popup candidate path (450 ms dwell / 250 ms settle) is EXTENDED, never replaced.DockCrossWindowParticipation/CrossWindowDragTarget: the preview→operation seam the remote preview feeds.#15240): session-scoped gesture token; short-lived hit-claims on STABLE workspace/zone identity (neverwindowId/registration order); validity/expiry; deterministic tie (earliest valid claim; stable-identity lexicographic final tiebreak), stale (ignored), no-claim (fail closed).#15240(the contract must be ratified ADR text first) +#15244(G1's tear-out produces the vessels this arbitrates).The Fix
One PR: the workspace-set registry on the App-Worker dock service; continuous native-geometry remote preview through the participation seam (the target window renders its own affordances via the shared
#15207consumer); the claim-protocol implementation in the coordinator.Acceptance Criteria (the graduated OQ3 contract + Step-Back ✓7)
{workspaceId → document}composition: each vessel's document registered under a stable workspace id;windowIdstays runtime-only (never persisted identity).#15240: token, stable-identity claims, expiry, deterministic tie/stale/no-claim — fail closed (no preview, no commit) when unclaimed.windowId/geometry are never active identity.getWindowAtfirst-intersecting) is fully replaced on the dock path; the old path's behavior is pinned as the negative witness.Out of Scope
Whole-stack reintegration + vessel close (G4) · tear-out itself (G1/G2) · teardown-residue hygiene (its own leaf).
Related
Parent
#15239· blocked-by#15240+#15244· D#15204 (OQ3; the falsifiedgetWindowAtreality) ·#13028·#15207(the shared consumer).Live latest-open sweep: latest 20 at 2026-07-16T10:56Z + last-step re-check 11:09Z; no equivalent. A2A claim sweep: no competing claim.
Origin Session ID: c5d7cd6b-4e01-45fd-aa59-5ccbc0e5f091 Retrieval Hint: "G3 workspace-set claim arbitration continuous remote preview three-window overlap witness"