Context
#17844's census lists WorkstationHumanPopupOverlapNL › pointer tear-out commits the same pane into its full PopupWorkspace (#18409) red at dev a9abb6c1dc and at 08a84ef3be:
the same DOM node moves with its pane
Expected: true Received: false (WorkstationHumanPopupOverlapNL.spec.mjs:713)
Bisected on the unmodified spec file (headless, --workers=1): 2 passed at 4dc6f744e5, red from bc70dfbf72 (#19212, Resolves #19210). The poll just before the failing line still passes: one element carries the pane id, its parent is the committed card body, and the worker parent matches. The node is re-created, not duplicated (#18409's original defect).
The Problem
The spec takes the pane's element in the popup while the vessel is staged (:667) and asserts that the same node is connected after the terminal (:713). Since #19212 the staged pane lives in a provisional DockTabContainer. At the terminal the committed projection mounts in its place through VesselWorkspace#retireProvisionalVesselChrome(windowId, {releasePanes: true}) (#19214):
body.remove(pane, false, true) detaches the pane silently, so no DOM move is emitted;
- the chrome is then removed with
destroy, and its DOM subtree still holds the pane's node;
- the committed projection re-parents the pane "by identity" (the method's docblock), which renders a new node.
The pane instance survives, but its DOM node does not. For a pane holding an iframe, a canvas, media or a scroll position, the commit reloads or resets it. That is the object-permanence contract #18409 pinned, and it shows at the one moment the operator is watching: the drop.
The Architectural Reality
- The pre-#19212 path moved the node: 2 passed at
4dc6f744e5.
- Dock re-projection elsewhere keeps live panes by moving their nodes (the projection's reconciler stages its child;
DockPreview and DockDropIndicators stay persistent siblings, Workspace.mjs). The provisional chrome is the one handover that releases detached.
The Fix
Direction for the owner: hand the pane from the provisional chrome's body to the committed card body as a move, one non-silent reparent that emits a node move, before the chrome is destroyed. Do not re-render it after the chrome's subtree is gone. The exact seam is the owner's call (#19214 chose the release-then-adopt order).
Acceptance Criteria
Out of Scope
- #19186 (the park's z-order under a real drag).
- The census, refreshed on #17844.
Related
#17844 (census) · #18409 (same pane, no duplicate) · #19210 / #19212 / #19214 (the provisional chrome) · #19250 / #19251 (its compact header)
Origin Session ID: 81d1894c-d8fd-4192-8350-42e32eb0101e
Retrieval Hint: "tear-out commit re-renders pane DOM provisional chrome retireProvisionalVesselChrome releasePanes same DOM node #18409"
Context
#17844's census lists
WorkstationHumanPopupOverlapNL › pointer tear-out commits the same pane into its full PopupWorkspace (#18409)red at deva9abb6c1dcand at08a84ef3be:Bisected on the unmodified spec file (headless,
--workers=1): 2 passed at4dc6f744e5, red frombc70dfbf72(#19212, Resolves #19210). The poll just before the failing line still passes: one element carries the pane id, its parent is the committed card body, and the worker parent matches. The node is re-created, not duplicated (#18409's original defect).The Problem
The spec takes the pane's element in the popup while the vessel is staged (
:667) and asserts that the same node is connected after the terminal (:713). Since #19212 the staged pane lives in a provisionalDockTabContainer. At the terminal the committed projection mounts in its place throughVesselWorkspace#retireProvisionalVesselChrome(windowId, {releasePanes: true})(#19214):body.remove(pane, false, true)detaches the pane silently, so no DOM move is emitted;destroy, and its DOM subtree still holds the pane's node;The pane instance survives, but its DOM node does not. For a pane holding an iframe, a canvas, media or a scroll position, the commit reloads or resets it. That is the object-permanence contract #18409 pinned, and it shows at the one moment the operator is watching: the drop.
The Architectural Reality
4dc6f744e5.DockPreviewandDockDropIndicatorsstay persistent siblings,Workspace.mjs). The provisional chrome is the one handover that releases detached.The Fix
Direction for the owner: hand the pane from the provisional chrome's body to the committed card body as a move, one non-silent reparent that emits a node move, before the chrome is destroyed. Do not re-render it after the chrome's subtree is gone. The exact seam is the owner's call (#19214 chose the release-then-adopt order).
Acceptance Criteria
WorkstationHumanPopupOverlapNLpasses at the head (headless,--workers=1, runtime root bound).Out of Scope
Related
#17844 (census) · #18409 (same pane, no duplicate) · #19210 / #19212 / #19214 (the provisional chrome) · #19250 / #19251 (its compact header)
Origin Session ID: 81d1894c-d8fd-4192-8350-42e32eb0101e Retrieval Hint: "tear-out commit re-renders pane DOM provisional chrome retireProvisionalVesselChrome releasePanes same DOM node #18409"