LearnNewsExamplesServices
Frontmatter
id18409
titlePointer tear-out duplicates its pane DOM beside PopupWorkspace
stateClosed
labels
bugaitestingdashboard
assigneesneo-gpt
createdAtSep 7, 2026, 1:14 AM
updatedAtSep 7, 2026, 2:19 AM
githubUrlhttps://github.com/neomjs/neo/issues/18409
authorneo-gpt
commentsCount0
parentIssue18303
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtSep 7, 2026, 2:19 AM

Pointer tear-out duplicates its pane DOM beside PopupWorkspace

Closed Backlog/active-chunk-21 bugaitestingdashboard
neo-gpt
neo-gpt commented on Sep 7, 2026, 1:14 AM

Context and problem

While checking #18303's actual-pointer acceptance on merged dev at 2bbcd5e26b, the Metrics tear-out commits its document and native owner, but the pane remains directly in the popup viewport beside the new PopupWorkspace. Two initial headed runs measured the cached pane at 360 × 2 px, the workspace at 360 × 231 px starting at y=2, and the viewport at 360 × 233 px. This happens before dragging a second popup. A focused DOM census on merged 3ac48bb1 shows two DOM elements with the same pane id: one under the viewport and one under the committed card body. The App Worker has one live pane and its parent is the correct card body. The earlier getElementById reading selected the old viewport copy; the defect is duplicate rendering, not absent worker adoption.

The existing WorkstationHumanPopupOverlapNL first fails on its obsolete bare-popup selector. Replacing that observation with the live PopupWorkspace id and getPaneIdentity('metrics') exposes the collapse; removing the layout assertion would conceal it. A later diagnostic attempt failed earlier at pointer initiation and does not strengthen this result.

Architectural reality and fix

apps/workstation/view/Workspace.mjs#onTearOutDocumentChange creates the full PopupWorkspace, transfers the item through WorkspaceSet, adopts the native owner and mounts the workspace. createDockVesselEmbodiment initially stages the same pane directly in the provisional native viewport. Its promote clears the transient record; committed document projection must take over the pane.

Repair the earliest incorrect handoff between that transient staging and the committed PopupWorkspace projection. The focused regression now compares exact DOM identity census, card geometry, worker parent and native window identity. Three diagnostic controls did not eliminate the duplicate: non-silent reconciler insertion, an explicit full viewport update after failure, and waiting for the already-started stage promise before pointer release. All diagnostic mutations were reverted. The delta stream identified the missing transaction boundary: the destination published an insert for the existing pane id before the external source's common ancestor could publish a move. Reconciler now collects those ancestors and awaits them before descendant commits, for both initial and retained-topology projections. The focused browser witness and its original-source control verify exact DOM-node continuity; deferred-settlement unit controls cover the ordering. Keep one pane instance and one document owner; do not introduce a second projection implementation or compensate with CSS sizing.

Acceptance criteria

  • An actual-pointer Metrics tear-out followed by release leaves the same live pane inside the committed PopupWorkspace card body, with matching worker and DOM ownership and usable nonzero geometry.
  • A focused permanent regression fails on the pre-fix source and passes with the repair, independently of a subsequent popup-overlap gesture.
  • Native owner/document identity remain correct; existing action-driven popup transfer and native retirement controls remain green.

Out of scope

The rest of the human overlap matrix, park admission/recovery API changes, header overflow, full-root/canvas work, broad Workspace decomposition and #18400's active-hover resize fix. No additions to approved #18405.

Avoided traps

Do not call a tear-out/conversion executor in place of the user gesture, weaken the old assertion until it passes, force a replacement pane, or treat native ownership alone as successful rendering.

Prior art and related work

Parent: #18303. The original human overlap issue #16117 is closed; this is the new full-workspace handoff after #18314. #18400 covers a different warmed geometry cache defect. Existing #16498 concerns resident card children after a place-cycle restore, not initial pointer adoption.

Live latest-20 open issues, latest-30 all-status A2A claims, exact all-state popup/pane search, and own assignments checked on 2026-09-06 at 23:13 UTC. Seven own open issues; bodies of same-surface #18303 and #18400 checked. No equivalent narrow repair or competing claim found. MC query Workstation Metrics pane popup viewport 2px after tear-out terminal projection returned two unrelated geometry/inspection records; no prior decision found. No new module or API is prescribed. Decision Record impact: none; implement the existing full-workspace ownership contract.

Origin Session ID: 01a07609-5e09-70f0-bf2c-a27d77d1b7f2

Retrieval Hint: 18303-human-full-workspace Metrics pane 2px initial pointer adoption