LearnNewsExamplesServices
Frontmatter
id16123
titleWorkstation native-titlebar return cannot discover or embody terminal popup drags
stateClosed
labels
bugdesignaitestingregressioncore
assigneesneo-gpt
createdAtJul 29, 2026, 9:19 AM
updatedAtJul 29, 2026, 11:56 PM
githubUrlhttps://github.com/neomjs/neo/issues/16123
authorneo-gpt-emmy
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 29, 2026, 11:56 PM

Workstation native-titlebar return cannot discover or embody terminal popup drags

Closed Backlog/active-chunk-10 bugdesignaitestingregressioncore
neo-gpt-emmy
neo-gpt-emmy commented on Jul 29, 2026, 9:19 AM

Context

Live operator QA on 2026-07-29 reproduced the missing inverse gesture: tear a Workstation tab out, release it as a real popup, then grab that popup by its native OS title bar and move it over the main Workstation. Nothing becomes visible in the main app—no target-local proxy, no drop language, and no reintegration.

This is a new Workstation successor to #13028 / PR #13085, which implemented the generic geometry-only native-titlebar reintegration contract for terminal dashboard popups. That predecessor remains closed; its generic synthetic witness did not compose the Workstation vessel registry or prove this physical route.

The Problem

The current route has multiple sequential blockers:

  1. DragCoordinator#onWindowPositionChange() first calls getNativeWindowDragSource(windowId) and returns/clears hover when no source is found.
  2. The only generic source hook, draggable.dashboard.SortZone#getNativeWindowDrag(), reads owner.detachedItems entries with terminalDrop. Workstation terminal vessels are instead owned by Workspace.tearOutPanes / vessel-workspace state.
  3. Workstation deliberately gives its stable cross-window participation the final coordinator registration slot per window; that target surface has no native-source discovery hook. The committed Workstation popup is therefore invisible to the generic source lookup.
  4. Even after source discovery, getNativeWindowDropCandidate() excludes both the moving popup and sourceSortZone.windowId. For a terminal popup returning home, that latter id can be the originating main window—the exact valid target the user is moving over.
  5. Generic native hover currently sends embodyProxy:false by design and defers target-local embodiment until the inferred commit path. That contract does not satisfy the reported interaction: the user needs visible target feedback and a local embodiment while deciding where the popup will return, not a silent dwell followed by a surprise commit.

Existing unit tests use synthetic generic source stubs and position notifications. They do not create a committed Workstation vessel, drive its physical native title bar, or require a target-local proxy/preview over the originating main app.

The Architectural Reality

A native-titlebar gesture has no browser pointer stream or mouseup. WindowPosition/manager.Window geometry plus conservative dwell/settle inference are therefore the input authority. That constraint does not remove the need for an honest visual state machine:

terminal popup discovered → target claimed → target feedback/embodiment visible → inferred drop commits OR departure restores.

Source discovery must be independent of the one-target-per-window registration slot. A Workstation vessel registry is product ownership; the coordinator should consume an explicit source seam rather than pretend every terminal popup lives in generic detachedItems.

The originating main window is a valid return target for a terminal popup. Excluding it because it owns the historical source sort zone confuses original model ownership with the physical window currently being dragged.

The Fix

  1. Add an explicit Workstation native-popup source record derived from the committed tearOutPanes / vessel-workspace authority, without overwriting stable target registration.
  2. Make the coordinator resolve the moving vessel's exact item, source workspace/window, live instance, and allowed return targets; allow the originating main window while still excluding the moving popup itself and invalid/disconnected targets.
  3. Drive continuous target preview from real WindowPosition updates as soon as a stable target claim exists.
  4. Define and implement the earliest portable target-local embodiment/relegation transition for native-titlebar hover. The real popup must not silently cover all drop choices until commit; the PR must visually prove the chosen platform-safe handoff rather than preserve embodyProxy:false by inertia.
  5. Preserve conservative dwell/settle commit inference, departure/cancel recovery, same-instance continuity, commit-before-close, and exact source retirement.

Contract Ledger

Surface Authority Required behavior Failure fallback Evidence
Native source discovery Workstation tearOutPanes / vessel-workspace registry Resolve exact committed popup item and live instance by window id Unknown/stale window is inert Source record + topology identity
Target eligibility manager.Window + workspace registrations Originating main and other valid connected targets may claim; moving popup cannot No valid target means popup remains standalone Candidate/claim trace
Native intent Window geometry deltas + dwell/settle policy Continuous hover before conservative inferred commit Departure clears preview and restores source state Captured geometry timeline
Target-local visual state Cross-window target/embodiment owner Preview/drop zones and a local embodiment become visibly useful before commit Platform refusal preserves the exact popup and exposes no false commit Same-frame proxy/preview/source evidence
Commit Existing remote drop pipeline Semantic operation commits before source popup closes Decline leaves popup standalone Document/topology/identity receipt

Acceptance Criteria

  • A physical headed macOS witness creates and drops a real Workstation tear-out popup, then moves that exact OS window by its native title bar over the originating main app; a helper-only/synthetic position replay is not the sole positive proof.
  • Current dev fails with getNativeWindowDragSource(popupWindowId) === null or an equivalent no-candidate/no-visual trace, matching the operator report.
  • On the fixed head, source discovery resolves the exact tearOutPanes/workspace item and live pane instance without replacing the stable target registration slot.
  • The originating main window is eligible and can win the claim; only the moving popup and genuinely invalid/disconnected windows are excluded.
  • Continuous native movement produces visible target drop feedback before inferred commit.
  • A target-local proxy/embodiment and readable preview/drop zones are demonstrated in retained frames before commit. If macOS forbids parking during an active titlebar move, the PR must prove the selected portable handoff and its user-visible affordance; retaining a completely silent embodyProxy:false hover is not accepted.
  • Holding over a valid target beyond the calibrated dwell/settle interval commits through the existing semantic path, then closes/retires the source popup only after commit.
  • Crossing the main app without sufficient intent, leaving before settle, target disconnect, or model refusal leaves the popup standalone with zero mutation and no stale proxy/preview.
  • Same pane/store identity and liveness survive reintegration; no clone/recreate.
  • The captured native geometry stream has a deterministic lower-layer replay, but that replay supplements rather than replaces the physical visual witness.

Out of Scope

Same-pointer tear-out re-entry (#16122) · popup-over-popup pointer conversion (#16117) · whole-stack grip gesture · Electron-only move APIs · redesigning the dock operation model.

Avoided Traps

  • Do not reopen #13028.
  • Do not claim generic native-titlebar support from synthetic source stubs alone.
  • Do not store Workstation terminal vessels in detachedItems merely to satisfy a lookup; consume their actual owner registry.
  • Do not let target registration overwrite source discovery or vice versa.
  • Do not exclude the originating main window based on stale source-sort-zone semantics.
  • Do not treat a silent dwell/commit as adequate drag feedback.
  • Do not use unsupported whole-native-window alpha as the portable solution; prove a target-local visual handoff.

Decision Record impact

depends-on ADR 0029 §§2.3 and 2.8.1–2.8.3. No model amendment expected; if native-titlebar target-local embodiment requires a new recorded gesture state, revalidate and amend before implementation.

Related

Successor to #13028 / PR #13085 · #15906 / PR #16035 Workstation cross-window composition · #15484 / PR #15501 explicit stack return (different input) · parent #15239 · QT-parity epic #13158 · siblings #16117 and #16122.

Freshness evidence: live all-state searches for native titlebar/popup reintegration; exact #13028 and Workstation composition bodies; current DragCoordinator, generic dashboard source hook, Workstation vessel registries/registration order, and native unit/e2e census; latest 20 open issues and latest 30 all-state A2A messages checked immediately before creation on 2026-07-29. No equivalent open Workstation defect or competing claim found.

Retrieval Hint: Workstation dropped real popup native titlebar drag over main no proxy source discovery tearOutPanes

tobiu referenced in commit 9e64382 - "feat(workstation): reintegrate native popup titlebar drags (#16123) (#16140)" on Jul 29, 2026, 11:56 PM
tobiu closed this issue on Jul 29, 2026, 11:56 PM