Frontmatter
| title | fix: Stack-return adoption keeps the stable projection shell (#16621) |
| author | neo-fable |
| state | Merged |
| createdAt | Aug 7, 2026, 11:32 AM |
| updatedAt | Aug 7, 2026, 12:28 PM |
| closedAt | Aug 7, 2026, 12:28 PM |
| mergedAt | Aug 7, 2026, 12:28 PM |
| branches | dev ← agent/16499-reentry-render-truth |
| url | https://github.com/neomjs/neo/pull/16622 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: The split leaf owns one measured paint defect and the patch uses the existing reconciler proof boundary. It is smaller and safer than the falsified preservation-set proposal: thread the committed operation, admit only the existing transfer verb, and retain the staged fallback.
Peer-Review Opening: This is ready. The strongest part is not the two-line production change; it is that the witness was moved from pane DOM continuity, which could not distinguish the paths, to shell identity, which can.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #16621; parent #16499; exact changed-file list; current dev; HarnessDockZoneModel; DockProjectionReconciler, DockZoneModel, DockCrossWindowParticipation, dockPreviewContract, Workspace, and the focused unit/E2E surfaces; prior-art KB and Memory Core searches.
- Expected Solution Shape: Preserve the existing projection shell only for a vessel→main transfer whose next projection proves identical structural node identity, ancestry, order, and orientation. Any split/edge or otherwise structure-changing transfer must keep the staged full path. The path witness must observe shell identity rather than pane identity or pane DOM.
- Patch Verdict: Matches. The return call threads descriptor.operation, transferNode joins detachItem at the existing retainTopology admission, and reconcileStableTopology remains the fail-closed authority. The unit arrival pin covers in-place materialization; the scene-4 witness observes the production path.
- Premise Coherence: Cohesive with verify-before-assert: the author records the refused pane-DOM red proof, narrows to the actual discriminator, and leaves the parent’s distinct S-3 family open instead of overclaiming closure.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #16621
- Related Graph Nodes: #16499, #16500, #16620; stable-topology projection, transferNode, shell identity
- Origin Session ID: 84d669f4-2271-4d6a-8878-45e8754be6b3
🔬 Depth Floor
Documented search: I actively looked for over-broad transferNode admission, a structure-changing transfer that could evade the validator, witness circularity, and a main→vessel scope leak. I found no concern: split/edge placements alter the structural graph and fall back; transferItem remains on the prior path; only the vessel→main branch forwards the operation; and the E2E witness reads the shell before and after the real gesture.
Rhetorical-Drift Audit:
- PR description: the stable-shell framing matches the two production deltas and the validator boundary.
- Anchor & Echo summaries: they describe durable shell/topology intent without ticket-local coordinates.
-
[RETROSPECTIVE]tag: N/A — none added. - Linked anchors: #16499 retains the remaining defect family; #16620 owns the separately measured ambient race.
Findings: Pass.
🧠 Graph Ingestion Notes
[KB_GAP]: None.[TOOLING_GAP]: None in the implementation evidence.[RETROSPECTIVE]: For projection-path regressions, pane instance and DOM continuity can survive both paths; shell identity is the discriminating witness. Stable-path admission remains a structural proof, not an operation-name shortcut.
🎯 Close-Target Audit
- Close-targets identified: #16621.
- #16621 is open and carries bug, ai, and performance labels; it is not epic-labeled.
Findings: Pass.
N/A Audits — 📑 📡 🔗
N/A across listed dimensions: this PR changes an app-owned projection choice and adds a test introspection seam; it introduces no external contract ledger surface, MCP description, skill, convention, or cross-substrate primitive.
🪜 Evidence Audit
- PR body contains the greppable
Evidence: L3 ... → L3 required ...declaration. - Achieved evidence meets the close-target’s L3 render-truth requirement: red/green shell identity plus fixed-head film luminance receipt.
- Residuals for #16621: none; #16499 S-3 and #16620 remain explicitly separate scopes.
- The evidence does not promote unit evidence into visual proof.
- No deployment-causality claim is used.
Findings: Pass.
🧪 Test-Evidence & Location Audit
- Execution evidence: exact head
eca092cb878995b009c9e4ceb898a53067f3e589has all 14 reported checks green; author supplies current-head unit, headed scene-4, dense-tour, and film receipts. - Reviewer falsifier:
NEO_TEST_SKIP_CI=true npm run test-unit -- test/playwright/unit/dashboard/DockProjectionReconciler.spec.mjs test/playwright/unit/apps/workstation/Workspace.spec.mjs --workers=1— 50/50 passed from an isolated exact-head archive. Source audit confirmed split/edge transferNode placements change the structural graph and therefore fall back. - Test location: pass; reconciler behavior is pinned in dashboard unit coverage and the path discriminator lives in the existing workstation E2E journey.
Findings: Pass.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 98 - Reuses the existing structural validator and preserves the staged fallback.[CONTENT_COMPLETENESS]: 97 - All four close-target ACs have direct evidence; parent residuals remain out of scope.[EXECUTION_QUALITY]: 98 - Minimal production delta, exact-head green CI, focused units, and a genuine path-level red/green witness.[PRODUCTIVITY]: 98 - The failed witness and falsified r2 proposal were converted into a smaller patch rather than defended.[IMPACT]: 94 - Removes the whole-workspace blank and ghost re-stage from the filmed stack-return beat.[COMPLEXITY]: 96 - Small surface area with complexity contained by the reconciler’s existing proof.[EFFORT_PROFILE]: Maintenance - A narrow runtime fix backed by unusually strong rendering evidence.
The exact head is approval-ready.
Resolves #16621
The vessel→main stack-return now projects through the reconciler's stable-topology fast path instead of the staged full rebuild: the return-transfer call site threads its committed reducer operation into
refreshDockWorkspace, and theretainTopologyadmission accepts'transferNode'alongside'detachItem'. A topologically stable adoption (structural node set unchanged, one tabs node's items grow) now reconciles in place on the retained shell — the measured whole-workspace blank frame (~40ms, every pane un-rendered) and the ghosted landing re-stage at film pace are gone because the shell swap that painted them no longer happens for this operation. The reconciler's structural validator remains the gate: any transfer that genuinely mutates structure still takes the staged full path (existing negative unit case).New introspection surface:
Workspace#getShellIdentity()— the worker-side discriminator between the two projection paths (pane instances and their DOM survive BOTH paths via native reparenting; only the shell identity flips). The scene-4 witness set builds on it, and the merge-staging helper now asserts the tear-out receipt BEFORE its popup wait, converting silent 90s timeouts into the step's own arming diagnostics.Evidence: L3 (headed browser runtime on the film host) → L3 required (close-target ACs are render-truth and film-pace assertions). Residual: none for #16621; parent #16499's S-3 family and the native-input discriminator stay on the parent.
Deltas from ticket
previewTOCTOU in the dwell chain, proxy-render misses) surfaced in BOTH fix and no-fix arms of a 10-run controlled table — including one face in a beat where this diff provably does not execute. Filed as #16620 with the full evidence; solo runs are 6/6 green and the film pipeline (solo takes) is unaffected.Test Evidence
test/playwright/unit/dashboard/DockProjectionReconciler.spec.mjs: 14/14 — includes the NEW same-topology item-ARRIVAL pin (live unplaced pane materialized into the retained shell) beside the existing detachment + structural-negative cases.test/playwright/unit/apps/workstation/Workspace.spec.mjs: 36/36 at the final head.WorkstationFiveBeatNL): shell-identity witness RED-PROVEN at the pre-fix behavior (Expected "neo-container-21", Received "neo-container-28"— full-path shell replacement) → GREEN with the fix (spec-paced 6.2s and film-paced 12.9s runs).WorkstationNL, headed): green 27.1s at the fixed head.Post-Merge Validation
Commits (if multi-commit)
fix(workstation): stack-return adoption keeps the stable projection shell (#16621)Evolution (optional, only if pivots occurred during implementation)
The witness design pivoted once: pane-DOM continuity was the planned discriminator until its red-proof run stayed green against the reverted fix — the reconciler's full path preserves pane DOM via the common-ancestor transaction, so the discriminator moved up one level to shell identity. The refused red-proof is the reason this PR's witness actually witnesses.
Related: #16499 (parent — classification r1-r3 + receipts), #16500 (shared presentation family + shared instrument candidate), #16620 (ambient suite instability, filed from this lane's table).
Authored by Mnemosyne (Claude Fable 5, Claude Code). Session 84d669f4-2271-4d6a-8878-45e8754be6b3.