LearnNewsExamplesServices
Frontmatter
id15407
titleDock tear-out contract tier: the zone gesture surface + the admission machine
stateClosed
labels
enhancementaiarchitecture
assigneesneo-fable
createdAtJul 18, 2026, 5:11 AM
updatedAtJul 18, 2026, 5:45 AM
githubUrlhttps://github.com/neomjs/neo/issues/15407
authorneo-fable
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 18, 2026, 5:45 AM

Dock tear-out contract tier: the zone gesture surface + the admission machine

Closed Backlog/active-chunk-7 enhancementaiarchitecture
neo-fable
neo-fable commented on Jul 18, 2026, 5:11 AM

Context

Split from #15244 (G1 dock tear-out) per the honest-close-target discipline: G1's engine half is complete, fully witnessed, and independently reviewable TONIGHT, while its host/evidence half (flagship wiring, hysteresis calibration receipts, e2e gesture witnesses, matrix-fed platform defaults) is a second implementer arc partly gated on the #15243 matrix's macOS column. Parking two green pushed commits on a branch until the whole leaf lands is the exact anti-pattern the tempo ruling forbids; this leaf gives the engine tier its own honest Resolves.

Scope (the contract tier — what this leaf delivers)

  1. Neo.dashboard.DockTabSortZone — the dock gesture surface over the INHERITED boundary grammar. The base container SortZone's window-boundary hysteresis (checkWindowBoundary, 0.8/0.6, the #8160 lineage) fires on dock tab drags once the composition arms enableProxyToPopup; the zone re-fires the boundary events as dock gesture events on the owner tab.Container (dockTearOutExit / dockTearOutEntry — the clone-safe closure home its cross-zone events already use) and the drag-end outcome chain gains the two DETACHED terminals: dockTearOutTerminal (the ONE seam a host may commit detachItem on) and dockTearOutCancel (vessel retirement, zero model mutation). Deterministic outcome order: cancel → remote transfer → tear-out terminal → in-window cross-zone drop. startWindowDrag / endWindowDrag land dock-tier per the §2.3 contract-not-class constraint (dock surfaces never inherit the dashboard sort zone).
  2. Neo.dashboard.DockTearOut — the admission machine (createDockTearOutHandlers): the pure choreography between the four gesture events and injected host seams (applyOperation / openVessel / closeVessel / onDocumentChange), implementing ADR 0029 §2.8: admission fails CLOSED (a blocked popup degrades to the in-window fallback via endWindowDrag — load-bearing because the base arms isWindowDragging BEFORE firing the exit event), detachItem commits exactly once at the detached terminal never at a boundary, a committed tear-out KEEPS its vessel while a model refusal retires it, re-entry/cancel retire with zero mutation, hysteresis re-crossing yields two vessels / one commit / one retirement.
  3. DockLayoutAdapter threading: enableDockTearOut opt-in → enableProxyToPopup on every projected tab sort zone + the four gesture seams on the tab.Container listeners block. Absent = fully in-window, the unchanged default (pinned).

Evidence class (contract tier = unit floor)

Model/contract-tier leaves keep unit floors per the epic family's own evidence language. 23 witnesses across DockTabSortZone.spec.mjs (outcome routing, boundary re-fires, embodiment arm/disarm) + DockTearOut.spec.mjs (the admission machine end-to-end through its seams) + DockLayoutAdapter.spec.mjs (threading + default-off pin); full dashboard suite 359/359. The LIVE gesture (real popup mid-drag), calibration receipts, and e2e falsifier witnesses are #15244's retained half — L3 evidence belongs to the tier that wires a host.

Acceptance Criteria

  • The two commits (6518195cd5, e9c69067d5) land via one READY PR with the witnesses green at exact head.
  • No behavior change for compositions that do not opt in (enableDockTearOut absent ⇒ enableProxyToPopup: false projected — pinned).
  • #15244 retains: host wiring (flagship + demo), AC-2 calibration receipts, AC-3 e2e falsifier witnesses, AC-4 #14980 arming receipt, AC-6 matrix-fed platform defaults (the #15243 seam).

Out of Scope

Everything #15244 retains (host tier + evidence tiers above unit). No app-tier files in this leaf.

Related

Parent context: #15239 (epic) · split-from: #15244 (retains the host half; blocked-by #15243 only on its AC-6) · authority: ADR 0029 §2.8 (#15240, CLOSED) · lineage: #8160 hysteresis, #15208 proxy contract.

Decision Record impact: aligned-with ADR 0029 (§2.8 consumed as contract; nothing amended).

Live latest-open sweep: checked latest 20 open issues at 2026-07-18T03:12Z; no equivalent. A2A in-flight claim sweep: my own [lane-claim][#15244] (02:21) covers this scope; no competing claim.

Origin Session ID: 89818500-8a12-4162-b41f-8947703b1b06

Retrieval Hint: "dock tear-out contract tier gesture surface admission machine commit-at-terminal"