LearnNewsExamplesServices
Frontmatter
id15244
titleDock tear-out: lift the proxy-to-popup opt-out into dock semantics
stateOpen
labels
enhancementaiarchitecture
assignees[]
createdAt1:23 PM
updatedAt1:23 PM
githubUrlhttps://github.com/neomjs/neo/issues/15244
authorneo-fable-clio
commentsCount0
parentIssue15239
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[ ] 15240 Amend ADR 0029: claim arbitration, gesture outcome states, vessel lifecycle, [ ] 15243 Headed three-OS portability spike: the seven-row tear-out matrix
blocking[ ] 15251 Fleet cockpit consumes the dock tear-out seam, [ ] 15250 Keyboard detach path: a11y parity for the multi-window choreography, [ ] 15246 Workspace-set composition, continuous remote preview, claim arbitration

Dock tear-out: lift the proxy-to-popup opt-out into dock semantics

Open Backlog/active-chunk-6 enhancementaiarchitecture
neo-fable-clio
neo-fable-clio commented on 1:23 PM

Context

Epic #15239 leaf G1 — the dock becomes a consumer of the landed Dynamic Proxy Transitioning lineage (D#15204 OQ1 [RESOLVED_TO_AC], cycle-2: the tear-out grammar IS the landed hysteretic boundary-cross contract; remaining work = dock-tier consumption + calibration). Lane self-selected by @neo-gpt-emmy in the Discussion (G1/G2 + spike); assignment stays self-select.

The Problem

Neo.dashboard.DockTabSortZone deliberately opts OUT of the landed live-popup embodiment (enableProxyToPopup: false) — beats 1–2 of the epic's five-beat story (tear-out; convert-to-popup while dragging) do not exist on dock surfaces. The generic dashboard tier already ships the whole grammar: Container#onDragBoundaryExit (opens a real popup on boundary-cross), #onDragBoundaryEntry (reintegrates the SAME widget), DragDrop pointer-follow.

The Architectural Reality

  • src/draggable/container/SortZone.mjs#checkWindowBoundary: direction-aware intersection-ratio hysteresis, defaults 0.8 detach / 0.6 reattach (#8160).
  • src/dashboard/DockTabSortZone.mjs: the dock sort zone (carries the #15208 carried-scope proxy contract; sortGroup-gated coordinator feeds).
  • The preview→operation contract (dockPreviewContract.mjs) must survive the transition — a tear-out is a dock SEMANTIC (detach to vessel), not a parallel drag path.
  • Blocked-by: #15243 (the matrix results select this leaf's platform defaults) + #15240 (the outcome-machine authority governs the gesture states this consumes).

The Fix

One PR: dock-tier tear-out semantics in the dock sort-zone family — enable the boundary transition on dock tab drags, route the detach through the dock model (detachItem per ADR 0029 §2.1), preserve preview→operation, and calibrate thresholds empirically.

Acceptance Criteria (from the graduated OQ1 contract + Step-Back ⚠5)

  • A dock tab drag past the window boundary detaches into a real OS popup mid-gesture (the landed grammar, now on dock surfaces), committing through the dock model — never a parallel drag system.
  • Threshold calibration is empirical: the inherited 0.8/0.6 hysteresis is calibrated for false detaches + re-entry jitter ON the dock surface (the flagship's density: 20 items / 9 nodes / 6 tab nodes) — never restored to an ancestral number by memory. The chosen values carry their calibration receipts.
  • A dock-specific falsifier witness: middle-tab drag from the 12-item group + a rail/overflow-adjacent drag, proving overflow/rail reachability is preserved and at most one target window exposes one menu + one preview per gesture.
  • The #14980 click-vs-drag arming truth (100 ms + distance) composes beneath the boundary grammar unchanged.
  • Gesture states follow the #15240 outcome machine (IN_SOURCE → DETACHED_MOVING → …); a cancelled tear-out restores the source with zero model mutation.
  • Platform defaults (acquisition/embodiment per OS) selected FROM the #15243 matrix, cited in the PR.

Out of Scope

Popup-over-popup arbitration (G3) · whole-stack reintegration (G4) · acquisition-contract implementation (G2) · the wow-demo.

Related

Parent #15239 · blocked-by #15243 + #15240 · D#15204 (OQ1) · #7204 / #8114 / #8160 (lineage) · #15207 (the shared affordance owner the dock host composes).

Live latest-open sweep: latest 20 at 2026-07-16T10:56Z + last-step re-check 11:09Z; no equivalent. A2A claim sweep: Emmy's self-selected Discussion lane; no competing filing.

Origin Session ID: c5d7cd6b-4e01-45fd-aa59-5ccbc0e5f091 Retrieval Hint: "G1 dock tear-out enableProxyToPopup hysteresis calibration dock falsifier"