LearnNewsExamplesServices
Frontmatter
id16626
titleThe returning vessel yanks its content raw instead of departing
stateClosed
labels
enhancementdesignai
assigneesneo-fable
createdAtAug 7, 2026, 12:53 PM
updatedAtAug 7, 2026, 2:44 PM
githubUrlhttps://github.com/neomjs/neo/issues/16626
authorneo-fable
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 7, 2026, 2:44 PM

The returning vessel yanks its content raw instead of departing

Closed Backlog/active-chunk-13 enhancementdesignai
neo-fable
neo-fable commented on Aug 7, 2026, 12:53 PM

Context

Split-leaf of #16499's S-3b (probe r4 carries the measured timeline). When a vessel returns its stack home, its content is adopted away at documents-adopted and the window then lives a measured remainder (probe: adoption at +210ms, close-dispatched at +719ms pre-#16621; shorter now that the fast path landed, but not zero) as a raw black emptied surface until the OS close. On camera the closing window reads as a corpse, not an exit. #16623 retires the orphaned drag chip half of the residue; this leaf owns the presentation of the remaining seconds.

The Problem

The source vessel has no terminal visual state. Its un-projection is a content yank — the panes leave, nothing replaces them, and the theme background of an empty dock body is near-black. Film pacing makes the gap a starring frame.

The Architectural Reality

  • The commit handler resolves sourceState (with its windowId) and pushes documents-adopted synchronously (Workspace.mjs commitCrossWindowTransfer) — the exact moment the departing state must engage, scoped to the vesselToMain direction only (no other direction closes a window).
  • retireReturnedVessel dispatches the close later in the same chain; phase ORDER is scene-4-pinned contract and stays untouched.
  • Workstation styling is SCSS-token based (--workstation-ground et al. in resources/scss/src/apps/workstation/Workspace.scss); zero CSS-in-JS per the app-work gate.
  • A body-opacity fade would flash the html underlay; the correct shape is a fixed full-viewport ::after overlay fading IN to the theme ground — it covers the yank AND any residual overlay artifacts, then holds until the OS close.

The Fix

  1. SCSS: a workstation-vessel-departing body class in Workspace.scss — fixed-inset ::after overlay, var(--workstation-ground) background, ~250ms ease-out fade-in, forwards.
  2. commitCrossWindowTransfer: on the vesselToMain branch at receipt creation, fire-and-forget one Neo.applyDeltas(sourceState.windowId, [{cls: {add: […]}, id: 'document.body'}]) — presentation only, no phase/order changes, no awaits added to the chain.
  3. Witness: scene-4 during-step poll on the source popup for the class (it must appear between the return drop and the popup close) + film-truth frames at the next take (the parent's film QA gate).

Acceptance Criteria

  • The departing class lands on the source vessel's body during every stack-return (e2e poll green; red-proven by its absence at the pre-fix head).
  • The overlay fades to --workstation-ground (both themes) — no white/underlay flash, no raw black yank frame at film pace.
  • Phase order and transfer receipts byte-identical (existing scene-4 assertions green).
  • Outbound (main→vessel) and cancel paths untouched — the class only ever targets a closing return vessel.

Out of Scope

  • The drag-proxy orphan (#16623, in review). The filmed whole-take receipts (#16499 closes on them at the next take).

Related

#16499 (parent, S-3b + r4 timeline), #16623 / PR #16624 (sibling residue leaf), #16621 / PR #16622 (merged — compresses the window this leaf decorates).

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

Retrieval Hint: query_raw_memories("departing vessel terminal presentation overlay theme ground yank")

tobiu referenced in commit fed9bf6 - "feat: The returning vessel departs behind a theme-ground overlay (#16626) (#16627) on Aug 7, 2026, 2:44 PM
tobiu closed this issue on Aug 7, 2026, 2:44 PM