LearnNewsExamplesServices
Frontmatter
id19273
titleClosing a popped-out pane's window never returns the pane to the main layout
stateClosed
labels
bugaidashboard
assigneesneo-gpt-emmy
createdAtSep 26, 2026, 2:21 PM
updatedAtSep 26, 2026, 9:54 PM
githubUrlhttps://github.com/neomjs/neo/issues/19273
authorneo-opus-grace
commentsCount4
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtSep 26, 2026, 9:54 PM

Closing a popped-out pane's window never returns the pane to the main layout

neo-opus-grace
neo-opus-grace commented on Sep 26, 2026, 2:21 PM

Context

WorkstationPopOutPaneIdentityNL › component, provider, store and descendant identities survive pop-out AND return reaches its return leg once #19272 stops its identity leg from counting the grid's row pool. The return leg then fails:

vessel death reintegrates the Feed pane into a tab flow   (30 s poll)

Measured:

  • Headless at dev a87a89e293, and headed (one display run, 12:18Z): same failure.
  • With #19272's identity fix applied over d9ea7a5b44 (the arm's authoring commit, 09-06), 03219a75b7 and e66b6f8142: same failure at every one. The arm's return leg has not passed on this host at any commit tested; the identity leg masked it.
  • The close path does not matter: closeTearOutVessel({itemId: 'feed', windowName: 'tearout-feed'}) (stage acknowledged) and a physical close (page.close({runBeforeUnload: true})) both leave the same state.
  • Probed 3 s after the close: no main-document node holds feed, dockModel.items.feed is null, and lastVesselRestoreReceipt is null. The pane left the main document at pop-out and nothing brings it back.

The Problem

A pane popped out through the header action does not reintegrate when its window closes. TearOut#onBindingReleased holds the reintegration path (committed → releasePane → reintegrateItem), but nothing reaches it here. Unmeasured: whether the Group's retirement clears the binding before the vessel dies, whether the pop-out path registers a binding that release would find, or whether the item leaves the catalog at adoption.

The Architectural Reality

  • VesselWorkspace#closeTearOutVessel documents itself as the gesture's retirement seam ("a vessel the gesture no longer needs: re-entry, cancel, or a refused model commit"). The spec's comment treats it as the user's close. Either way, the physical close fails the same.
  • The spec's poll encodes the contract: "vessel death reintegrates the Feed pane into a tab flow".

The Fix

Open for the owner. First, decide the product behaviour: does closing a popped-out pane's window return it? If it does, trace which link breaks: binding registration at pop-out, release on death, or the catalog entry kept for return. If it does not, the arm's return leg is wrong and goes.

Acceptance Criteria

  • AC-1: the product behaviour for "close a popped-out pane's window" is stated (return, or not).
  • AC-2: WorkstationPopOutPaneIdentityNL passes, whole file, headless and headed, with its return leg matching AC-1.

Out of Scope

  • The identity leg's row pool (#19272).

Related

#17844 (census) · #19272 (the identity leg) · #18395 / #18396 (the arm) · src/dashboard/dock/window/TearOut.mjs (onBindingReleased)

Origin Session ID: 81d1894c-d8fd-4192-8350-42e32eb0101e Retrieval Hint: "popped-out pane window close never reintegrates feed item null dockModel onBindingReleased closeTearOutVessel"

tobiu referenced in commit 91fd233 - "feat(workstation): return popup panes to main on native close (#19273) (#19292) on Sep 26, 2026, 9:54 PM
tobiu closed this issue on Sep 26, 2026, 9:54 PM