Context
An isolated packaged Fleet candidate (Institution 5622344, Brain e7ee18ee, Engine 2d3e6fa8) opens a second cockpit in the same App Worker and closes it during the native smoke journey. A subsequent primary-window position event throws:
NativeLifecycle.ownerEntries: sources is undefined
→ VesselContainer.resolveNativeWindowDrag
→ DragTarget.getNativeWindowDrag
→ DragCoordinator.getNativeWindowDragSource
→ DragCoordinator.onWindowPositionChange
Neural Link inspection after the close finds the popup cockpit and its DragTarget still registered under the disconnected window id. Its NativeLifecycle reports isDestroyed: true; the primary cockpit's owner is live. Current window topology contains the primary only. This is candidate evidence, not an installed-fleet incident. The Fleet delivery record owns the native context.
The Problem
Native source lookup invokes every retained sort-zone resolver without first checking whether that source's physical window is still registered. An unrelated live window's geometry event can therefore call a disconnected projection whose native owner has already retired.
The separate missing-parent DOM insertion observation from the previous smoke remains unclassified; this ticket does not claim to repair it. Historical #18390 repairs source withdrawal when a DemoB is destroyed, and #19462 concerns legacy Dashboard return. Neither describes this live-window lookup boundary.
Design authority: an observed uncaught exception; Window.onWindowDisconnect removes the window from the live geometry registry, and the coordinator already reads that registry for physical popup/target geometry.
The Architectural Reality
src/manager/DragCoordinator.mjs#getNativeWindowDragSource iterates registered zones and invokes getNativeWindowDrag.
src/manager/Window.mjs#onWindowDisconnect unregisters physical-window geometry.
src/dashboard/dock/window/DragTarget.mjs#getNativeWindowDrag delegates to the participation's resolver.
- Group-owned NativeLifecycle records and view lifetime are separate. Closing a window does not authorize deleting retained documents or ownership.
The Fix
Bound native source lookup by the existing Window registry before invoking a zone's resolver. Preserve the live main-window resolver which can name a distinct physical popup. Do not catch and discard arbitrary resolver exceptions or recreate a retired Group.
Add red-first coverage in the existing test/playwright/unit/manager/DragCoordinator.spec.mjs, including disconnected-source exclusion and the live-source positive control. No new module or API is expected.
| Target surface |
Source of authority |
Proposed behavior |
Fallback |
Docs |
Evidence |
DragCoordinator.getNativeWindowDragSource |
registered physical windows in Neo.manager.Window |
invokes only resolvers whose source window is live; permits a live source to identify another live popup |
no eligible resolver returns null |
existing method JSDoc |
disconnected callback is never invoked; live native drag still resolves |
Decision Record impact: none; restores physical-window eligibility without changing Group/document retention.
Acceptance Criteria
Post-Merge Validation
The actual Fleet update and operator verification remain on neomjs/neo-agent-institution#12. This source leaf does not close the runtime-continuity or installed-seat acceptance outcome.
Out of Scope
Retiring semantic documents, changing NativeLifecycle ownership, global component cleanup, the missing-parent delta diagnosis, and any live Fleet installation or seat restart.
Sweeps and ownership
Live latest-open sweep: latest 20 open Engine issues read on 2026-10-15 at approximately 16:57 UTC; no equivalent. Recent 30 all-state A2A records contain no competing native-window lookup claim. Own-assignment sweep: one open Engine issue, #19515, is unrelated. Historical NativeLifecycle search and #18390/#19462 bodies were read. Memory Core surfaced the Group-owned lifecycle history (aea04d76-5215-4367-a591-2db1d74ec2d1) and popup-return work; no existing resolution of this lookup boundary was found. KB's older CrossWindowDragTarget path was treated as a retrieval lead, not current source authority.
Triage decision: promote the directly observed candidate exception so the owning Engine repair can be tested and reviewed before the Fleet cut. Sophie owns this bounded restoration. Structure map: N/A, existing Engine manager and unit spec; no Agent OS module or new file.
Related: neomjs/neo-agent-institution#674, neomjs/neo-agent-institution#702, neomjs/neo-agent-institution#12, #18314, #18390.
Origin Session ID: 7d0b6e29-3d57-4c3c-87a7-473974395a2f
Retrieval Hint: "closed popup native drag ownerEntries sources destroyed live Window registry"
Context
An isolated packaged Fleet candidate (Institution
5622344, Braine7ee18ee, Engine2d3e6fa8) opens a second cockpit in the same App Worker and closes it during the native smoke journey. A subsequent primary-window position event throws:Neural Link inspection after the close finds the popup cockpit and its DragTarget still registered under the disconnected window id. Its NativeLifecycle reports
isDestroyed: true; the primary cockpit's owner is live. Current window topology contains the primary only. This is candidate evidence, not an installed-fleet incident. The Fleet delivery record owns the native context.The Problem
Native source lookup invokes every retained sort-zone resolver without first checking whether that source's physical window is still registered. An unrelated live window's geometry event can therefore call a disconnected projection whose native owner has already retired.
The separate missing-parent DOM insertion observation from the previous smoke remains unclassified; this ticket does not claim to repair it. Historical #18390 repairs source withdrawal when a DemoB is destroyed, and #19462 concerns legacy Dashboard return. Neither describes this live-window lookup boundary.
Design authority: an observed uncaught exception;
Window.onWindowDisconnectremoves the window from the live geometry registry, and the coordinator already reads that registry for physical popup/target geometry.The Architectural Reality
src/manager/DragCoordinator.mjs#getNativeWindowDragSourceiterates registered zones and invokesgetNativeWindowDrag.src/manager/Window.mjs#onWindowDisconnectunregisters physical-window geometry.src/dashboard/dock/window/DragTarget.mjs#getNativeWindowDragdelegates to the participation's resolver.The Fix
Bound native source lookup by the existing Window registry before invoking a zone's resolver. Preserve the live main-window resolver which can name a distinct physical popup. Do not catch and discard arbitrary resolver exceptions or recreate a retired Group.
Add red-first coverage in the existing
test/playwright/unit/manager/DragCoordinator.spec.mjs, including disconnected-source exclusion and the live-source positive control. No new module or API is expected.DragCoordinator.getNativeWindowDragSourceNeo.manager.WindowDecision Record impact: none; restores physical-window eligibility without changing Group/document retention.
Acceptance Criteria
Post-Merge Validation
The actual Fleet update and operator verification remain on neomjs/neo-agent-institution#12. This source leaf does not close the runtime-continuity or installed-seat acceptance outcome.
Out of Scope
Retiring semantic documents, changing NativeLifecycle ownership, global component cleanup, the missing-parent delta diagnosis, and any live Fleet installation or seat restart.
Sweeps and ownership
Live latest-open sweep: latest 20 open Engine issues read on 2026-10-15 at approximately 16:57 UTC; no equivalent. Recent 30 all-state A2A records contain no competing native-window lookup claim. Own-assignment sweep: one open Engine issue, #19515, is unrelated. Historical NativeLifecycle search and #18390/#19462 bodies were read. Memory Core surfaced the Group-owned lifecycle history (
aea04d76-5215-4367-a591-2db1d74ec2d1) and popup-return work; no existing resolution of this lookup boundary was found. KB's older CrossWindowDragTarget path was treated as a retrieval lead, not current source authority.Triage decision: promote the directly observed candidate exception so the owning Engine repair can be tested and reviewed before the Fleet cut. Sophie owns this bounded restoration. Structure map: N/A, existing Engine manager and unit spec; no Agent OS module or new file.
Related: neomjs/neo-agent-institution#674, neomjs/neo-agent-institution#702, neomjs/neo-agent-institution#12, #18314, #18390.
Origin Session ID: 7d0b6e29-3d57-4c3c-87a7-473974395a2f Retrieval Hint: "closed popup native drag ownerEntries sources destroyed live Window registry"