LearnNewsExamplesServices
Frontmatter
id16621
titleStack-return adoption re-stages the entire workspace instead of the landing region
stateClosed
labels
bugaiperformance
assigneesneo-fable
createdAtAug 7, 2026, 11:30 AM
updatedAtAug 7, 2026, 12:28 PM
githubUrlhttps://github.com/neomjs/neo/issues/16621
authorneo-fable
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 7, 2026, 12:28 PM

Stack-return adoption re-stages the entire workspace instead of the landing region

Closed Backlog/active-chunk-13 bugaiperformance
neo-fable
neo-fable commented on Aug 7, 2026, 11:30 AM

Context

Split-leaf of #16499 (classification r1-r3 live there with full receipts). Measured at head ea5b3058ff, film pace: when a vessel returns its stack home, the main window's entire workspace body un-renders for ≥1 frame (~40ms; full-res frame + YAVG receipts on #16499 r1) and the landing region then composites a ghosted re-stage before settling (≤400ms). Every pane blanks — including the ~17 that did not move.

The Problem

The vessel→main transfer projection takes the reconciler's staged FULL path (hidden new shell built, chrome moved, shell swapped) although a stack-return adoption is topologically stable: the structural node set is identical and exactly one tabs node's item set grows. The swap's reveal is the on-camera whole-workspace blank — the film-visible defect class of #16500, second trigger.

The Architectural Reality

  • DockProjectionReconciler.reconcileProjection owns a strict stable-topology fast path; with reconcileItems: true it explicitly admits tab item/active deltas on the proven-identical shell and materializes arriving pane/button pairs through the same reconcileTabChrome the full path uses (DockProjectionReconciler.mjs:112-213).
  • refreshDockWorkspace keys that admission to operation === 'detachItem' only (Workspace.mjs:2126 pre-fix), and the return-transfer call site passes no operation at all — so adoption is forced through the full path.
  • The validator is its own safety net: any transfer that genuinely mutates structure fails the identity checks and falls back to the staged full path unchanged.

The Fix

Thread operation: descriptor?.operation through the return-transfer's refreshDockWorkspace call and widen the retainTopology admission to 'transferNode'. Witness set: (1) unit — the reconciler's same-topology item-ARRIVAL case on the retained shell (sibling of the existing detachment case); (2) e2e — shell-identity discriminator across the scene-4 return (worker-side pane identity survives BOTH paths; only the shell instance flips) red-proven at the pre-fix head, plus a pane-DOM continuity guard (native reparenting).

Acceptance Criteria

  • The scene-4 stack-return retains the projection shell (shell-identity witness green; red-proven pre-fix).
  • The reconciler's stable path materializes an arriving live pane into the retained shell (unit pin).
  • Film-truth: no body-clear frame in the film-paced scene-4 video at the fixed head (YAVG receipt).
  • Non-stable transfer placements still take the staged full path (existing structural-negative unit case stays green).

Out of Scope

  • #16499's S-3 family (emptied-vessel residue + surviving drag affordance) — stays on the parent.
  • The outbound main→vessel transfer's identical admission (same one-line class, different witness scene) — follow-up decision on the parent after this lands.
  • The ambient suite-load gesture instability — #16620.

Related

#16499 (parent classification + receipts), #16500 (presentation family), #16620 (ambient race found during this lane's suite table), closed #16497.

Origin Session ID: 84d669f4-2271-4d6a-8878-45e8754be6b3

Retrieval Hint: query_raw_memories("stack-return adoption stable topology fast path shell identity witness")

tobiu referenced in commit 4d8e9ea - "fix(workstation): stack-return adoption keeps the stable projection shell (#16621) (#16622)" on Aug 7, 2026, 12:28 PM
tobiu closed this issue on Aug 7, 2026, 12:28 PM