LearnNewsExamplesServices
Frontmatter
id15968
titleRelease-truth journey red on dev: drag release leaves scale zone uncommitted
stateClosed
labels
bugaitesting
assigneesneo-gpt-emmy
createdAtJul 26, 2026, 6:02 AM
updatedAtJul 26, 2026, 8:36 AM
githubUrlhttps://github.com/neomjs/neo/issues/15968
authorneo-kimi-iris
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 26, 2026, 8:36 AM

Release-truth journey red on dev: drag release leaves scale zone uncommitted

Closed Backlog/active-chunk-10 bugaitesting
neo-kimi-iris
neo-kimi-iris commented on Jul 26, 2026, 6:02 AM

Context

Surfaced during the #15967 review cycle (2026-07-26 ~04:00Z): @neo-gpt-emmy bracketed it out of her overlay-geometry repair as pre-existing, and this reviewer reproduced it independently at three dev heads32cd74a370, 61a8d34e6d lineage, and f33eb328c2 — deterministic, identical signature each time. It is invisible to every gate because the e2e Neural Link journeys do not run in CI.

The Problem

The journey "a real drag lights the menu + preview, and the release commits release truth" (test/playwright/e2e/workstation/WorkstationDragAffordancesNL.spec.mjs:96 at dev) fails on current dev: the parked hover builds the candidate set and the preview renders (worker truth + paint truth both live), but the release does NOT commit — the scale zone's items stay ['scale'] instead of gaining 'audit'. Repro:

NEO_E2E_PORT=8131 npx playwright test workstation/WorkstationDragAffordancesNL \
  -c test/playwright/playwright.config.e2e.mjs --workers=1 --grep "release commits release truth"

Observed context (Emmy's bracket + reviewer reproduction): the gesture crosses zones, a second window connects mid-drag, and the release leaves the document unmutated. Mechanism unknown — the §06 drop seam (DockDragAffordances.onDroppreviewToOperationapplyDockZoneOperation) has a release-truth break somewhere between the painted preview and the reducer.

The Architectural Reality

  • The release-truth path: src/dashboard/DockDragAffordances.mjs:241-274 (release-coordinate re-hit-test → descriptor → reducer → onDockZoneDocumentChange).
  • Suspect window: merges of the last ~36h in the drag/dock seam (#15952 showcase choreography, #15946 pane-skin travels, #15951 stable projection frames, #15933) — bisect is the first work item; all three repro heads postdate them.
  • The second-window-connect observation points at the cross-window participation seam (#15906 is mid-flight on adjacent machinery but does NOT cover this journey — its ACs are the fixme scene 3–5 legs).
  • Gate gap (named, not solved here): this failure mode is only visible when someone runs the NL e2e suite locally; CI runs unit/lint only.

The Fix

  1. Bisect to the introducing merge (candidate window above; the journey was green in the take-15 era, ~2026-07-25 22:00Z).
  2. Repair the release-truth seam at the reducer/descriptor boundary the bisect names.
  3. The journey returns green unmodified at the fix head.

Acceptance Criteria

  • Introducing merge identified (SHA + mechanism).
  • Release commits audit into the scale zone again (items contains 'audit') at the fix head.
  • Full WorkstationDragAffordancesNL file green (all journeys, including the #15967 geometry journey once it merges).
  • The WorkstationFiveBeatNL suite stays green at the same head (no cross-suite regression).

Out of Scope

  • The e2e-in-CI gate gap (named above — a separate build/CI conversation; #15861/#15807 own adjacent CI topology).
  • The scene 3–5 fixme legs (#15906).
  • The overlay containing-block repair (#15966 / PR #15967 — this failure predates it).

Related

  • PR #15967 (whose review surfaced this — bracket verified honest) · #15966 · #15906 (adjacent cross-window seam) · #15952/#15946/#15951/#15933 (bisect candidate window) · #15861 (CI coverage gap context).

Live latest-open sweep: checked latest 20 open issues at 2026-07-26T04:05Z; no equivalent found. A2A in-flight sweep: no claim on this scope in the current window.

Origin Session ID: 76078575-a2c3-43f5-82dc-2d06b154e2cd Retrieval Hint: query_raw_memories("release truth journey audit absent scale node dev regression bisect")

Contract Ledger (backfilled by the ticket author during the #15969 review)

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
DockLayoutAdapter.project(model, options) — new options.dockTearOutBoundaryContainerId (String|String[]|null) JSDoc on src/dashboard/DockLayoutAdapter.mjs:322-323 Names the main-thread DOM boundary whose EXIT starts a tear-out; a drag crossing tab strips inside it stays an ordinary cross-zone gesture Omitted / null → prior tab-toolbar boundary, byte-identical for existing consumers (DemoA, DemoB, FleetCockpit) Option JSDoc + the sortZoneConfig threading comment (DockLayoutAdapter.mjs:848-852) Unit threading witness (DockLayoutAdapter.spec.mjs); e2e: release journey + FiveBeatNL green at 38b4032884

Known consumer gap (not this ticket's scope): DemoBWorkspace.mjs:3615 and FleetCockpit.mjs:981 pass enableDockTearOut with the inherited toolbar boundary — the same misclassification class lives there if their layouts allow cross-zone tab-strip drags. Left to their lanes by design (the option is opt-in).