LearnNewsExamplesServices
Frontmatter
id15907
titleWorkstation tear-out: vessel shell, DockTearOut composition, journey executor
stateClosed
labels
enhancementaicore
assigneesneo-fable
createdAtJul 25, 2026, 3:44 PM
updatedAtJul 25, 2026, 4:07 PM
githubUrlhttps://github.com/neomjs/neo/issues/15907
authorneo-fable
commentsCount0
parentIssue15239
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[ ] 15252 The five-beat multi-window wow demo: recorded journey on the workstation
closedAtJul 25, 2026, 4:07 PM

Workstation tear-out: vessel shell, DockTearOut composition, journey executor

Closed Backlog/active-chunk-9 enhancementaicore
neo-fable
neo-fable commented on Jul 25, 2026, 3:44 PM

Context

Increment 1 of the #15252 capstone ladder — filed as its own close-target per the operator rule #12367 (one Resolves per ticket; a ticket needing N PRs becomes subs or is split). The 2026-07-25 reshape replaced the one-PR-vehicle plan with an increment ladder: this ticket (tear-out, delivered by PR #15840), then #15906 (cross-window docking), then #15252 itself (the film, the capstone's close condition).

The Problem

apps/workstation had ZERO multi-window wiring: no vessel shell, no tear-out composition, no gesture executors — the flagship could not demonstrate the engine's window-independent live-state docking. The five-beat journey's scenes 2 (tear-out) and the morph (out-and-back in one drag, the film's cold-open) had no runnable substrate.

The Architectural Reality

Thin-consumer composition of shipped src/dashboard machinery (epic #15239 trap list honored — no new mechanism): createDockTearOutHandlers (admission chain + commit-at-terminal), createDockVesselEmbodiment (live-pane staging with exact-slot placeholder), DockLayoutAdapter's enableDockTearOut opt-in (window-boundary hysteresis + overdrag), the dockdemo ?popout= vessel-shell sibling pattern, and the WindowPosition main-thread addon. Two engine defects extracted en route ship separately (both merged): #15895 (re-entry ratio normalization) and #15899 (entry fire on placeholder-less zones) — this increment's morph witness was their discovery instrument and remains their consumer-grain regression proof.

The Fix (delivered by PR #15840)

Viewport ?popout= empty-vessel-host boot mode · Workspace tear-out composition over workstation seams (vessel owner grants with native-route validation, admission-token connect flow, exact-position reintegration, preserveItemIds projection support, worker connect/disconnect lifecycle) · executeTearOutStep real-pointer executor with film tunables and three terminals (commit / cancel / re-enter) plus permanent three-hop diagnostic probes · NEO_FILM_TAKE=1 capture mode.

Acceptance Criteria

  • Scene-1 witness green (dense-room two-take beat-log determinism) at the increment head.
  • Scene-2 commit leg green: vessel born MID-GESTURE before pointer-up; detachItem committed (item absent from every node, kept in catalog); same pane instance across the hop; heartbeat monotonic.
  • Scene-2 morph leg green: out past the edge and BACK IN — vessel retires mid-drag via dockTearOutEntry; committed document byte-identical.
  • Scenes 3-5 remain contracted test.fixme legs naming their worker-truth receipts (activation = #15906).
  • Post-merge: five-beat witness re-run at the merged head (e2e is post-merge/author-side on this repo).

Out of Scope

Cross-window docking (conversion, remote previews, arbitration, stack return) → #15906. The film (capture/compose/QA/delivery) → #15252.

Related

Parent: epic #15239. Ladder: blocks #15252 (the film consumes this wiring). Siblings: #15906 (increment 2), #15895/#15899 (extracted engine fixes, merged). Screenplay source: D#15204.

Live latest-open sweep: checked latest open issues at 2026-07-25T13:33Z; no equivalent. Own-lane continuation; no colliding claim.

Origin Session ID: b8c9e338-27b3-4385-99ac-dce459733940

Retrieval Hint: "workstation tear-out increment vessel shell executor five-beat scene 2 morph"