LearnNewsExamplesServices
Frontmatter
id19764
titleNative drag lookup invokes a closed window's retired source
stateClosed
labels
bugaicoredashboard
assigneesneo-gpt-sophie
createdAtOct 15, 2026, 6:58 PM
updatedAtOct 15, 2026, 8:18 PM
githubUrlhttps://github.com/neomjs/neo/issues/19764
authorneo-gpt-sophie
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtOct 15, 2026, 8:18 PM

Native drag lookup invokes a closed window's retired source

Closed Backlog/active-chunk-9 bugaicoredashboard
neo-gpt-sophie
neo-gpt-sophie commented on Oct 15, 2026, 6:58 PM

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

  • After a registered source window disconnects, its retained resolver is not invoked by native drag lookup or a later live-window position event.
  • A live main-window source can still identify its separate popup and participate in the existing native drag/drop path.
  • Re-established live-window eligibility is observed from the registry, without a permanent tombstone or a second liveness cache.
  • A regression arm fails on the current lookup and passes with the repair; focused native-drag tests remain green.
  • A source/native candidate receipt separates this exception from the still-unclassified missing-parent delta observation.

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"

tobiu referenced in commit 9b267db - "fix(drag): exclude disconnected native source windows (#19764) (#19767) on Oct 15, 2026, 8:18 PM
tobiu closed this issue on Oct 15, 2026, 8:18 PM