LearnNewsExamplesServices
Frontmatter
id17863
titleRepair the committed-drag journey family for v13.2 mechanics
stateClosed
labels
bugaitesting
assigneesneo-fable
createdAtAug 29, 2026, 10:50 PM
updatedAtAug 30, 2026, 12:06 AM
githubUrlhttps://github.com/neomjs/neo/issues/17863
authorneo-fable
commentsCount2
parentIssue13158
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 29, 2026, 11:51 PM

Repair the committed-drag journey family for v13.2 mechanics

neo-fable
neo-fable commented on Aug 29, 2026, 10:50 PM

Context

The #17844 battery classified 7 deterministic whitebox reds as the "pre-existing committed-drag family". Re-baselined twice at the post-#17858 merge head 5f3cf84ebf (identical batch, one-to-one identity match with the battery ledger — no new reds, no accidental fixes), then diagnosed from the captured failure log plus source reads. Four evidenced mechanisms; none of them indicts the engine — the green unit/component tiers plus the six passing siblings in the same files pin the engine behavior these journeys mean to witness.

Live latest-open sweep: checked latest 20 open issues at 2026-08-29T21:05Z; no equivalent found. A2A claim sweep over the herd window: no competing claim.

The Problem

Seven tests across six specs. (Amended 2026-08-29 after implementation-phase diagnosis: the mechanism map below is the corrected record; the original A-bucket framing under-attributed the wrong-splitter genus and stated an incomplete arming model.)

THE DOMINANT MECHANISM — the wrong-splitter genus (4 tests): since edge zones became resizable, the workstation boots three .neo-dashboard-dock-splitter-horizontal elements (left edge + main split + right edge share the orientation class per LayoutAdapter.createEdgeSplitterAffordance). Every first-match consumer — querySelector, queryVdom(...)[0], a strict-mode locator — silently binds the LEFT EDGE splitter, whose drag commits resizeEdgeZone, never the resizeSplit the specs settle on:

  • WorkstationGridRepaintNL.spec.mjs (both tests): first-match queryVdom + page reader → the drive arms and resizes the edge band while the poll awaits split-main.sizes to change. (Its simulateEvent drive with 60ms inter-event delays arms correctly — this file never had an arm problem.)
  • WorkstationSplitterGridGeometryNL.spec.mjs:330: the strict-mode locator throws outright at 3 matches.
  • WorkstationDockFlipResizeNL.spec.mjs:39: first-match queryVdom → drags the edge band; no split FLIP can ever play.

ARMING (2 of the above additionally): the Mouse sensor arms once delay AND minDistance are both satisfied — evaluated at move events and once more when the delay timer re-enters onDistanceChange with the latest tracked coords (Mouse.mjs:166). Consequences: move-then-HOLD drives arm at t=delay via the timer; move-then-RELEASE drives die because mouseup clears the timer. FlipResize (release ~30ms after down) needed the arm wait; SplitterGridGeometry's drive timer-armed mid-hold but all its travel was pre-arm — zero drag:move, terminal at start size — so it needed the arm wait before the travel too.

C — premise mechanics shifted (1 test):

  • WorkstationStarvedGeometryNL.spec.mjs:64 — the trigger mutation (flex: 0 0 60px on the bottom band) frees far less height than its +100px literal expects: the band's theme floor (min-block-size) clamps the shrink, and the literal itself was calibrated to the pre-rewrite band chrome. The rig must release the floor it fights, and the bound must derive from the height actually freed.

D — composite reds, both diagnosed to SIBLINGS (2 tests):

  • WorkstationDragAffordancesNL.spec.mjs:271 — engine defect, escalated to #17864: DragAffordances#ensureGeometry passes the raw descriptor object (zones.center = {nodeId}) where produceCandidates requires a node-id string → the root edge chips are never offered → the spec's topChip read is undefined. The spec is correct and needs no change; it greens when #17864 merges.
  • WorkstationNL.spec.mjs:484 (dense tour) — three mechanical layers repaired in this lane (splitter census 2→5; the band-geometry model rewritten from the retired preferred-width clamp to committed extents with floors + the 50% per-edge cap; one stale 0.28 fraction). The remaining layers are film-stage density literals (260/320/200 band px, heavyWidth ≥ 700) that encode the capped-band look — a product-design decision escalated to #17865 (re-tune boot extents vs accept the proportional look).
  • Discriminator receipts: both persisted solo with this seat's preview tab closed — the shared-bridge multi-worker environment excluded as this seat's contribution.

The Architectural Reality

  • The Mouse sensor's arm gate (delay + minDistance before drag:start) is engine-correct and deliberate; journeys must speak it. The component tier already documents the idiom.
  • Edge splitters sharing the dock splitter classes is by design (#17845 made edges resizable; they ride the generic single-target path).
  • These journeys are the film's material (#15252 arc) and the epic's journey-tier witness debt — the engine contract they witness is already pinned green at unit/component tier.

The Fix

One PR, spec-tier only:

  1. Wrong-splitter genus: the structural child-combinator '.neo-dashboard-dock-split-horizontal > .neo-dashboard-dock-splitter-horizontal' (page-side) at every first-match site — a queryVdom cn-walk was tried and rejected (the vdom shape gamble failed; the page-side selector is the proven route).
  2. Arming: the arm wait (waitForTimeout(130) after down(), before the travel) where drives release early or travel pre-arm, with the timer-re-entry model documented at each site.
  3. Premise: the StarvedGeometry rig releases the band floor it mutates against and derives its bound from the height actually freed (proportional, era-proof, still failing-capable).
  4. FlipResize's instrument additionally rewritten mode-aware: when a FLIP plays, the ≤34ms exposure bound applies; under the live boundary preview (nothing to invert — terminal parity), assert no untransformed frame leaves the landed width (the double-take's actual signature). Bounded scope: a jump-cut-without-flip is motion-absence, owned by the DockMotion specs.
  5. Escalations per the clause: engine fix → #17864 (root chips vs descriptor-shaped center zones); film-stage density decision → #17865.

Acceptance Criteria

  • WorkstationDockFlipResizeNL:39, WorkstationGridRepaintNL (both) green solo and in the family batch — the drives target the split-node splitter, arm, and the documents commit.
  • WorkstationSplitterGridGeometryNL:330 green — locator resolves exactly one element; the deterministic reproducer stays green.
  • WorkstationStarvedGeometryNL:64 green — premise derived from the freed height, still failing-capable (the derivation must not tautologize the trigger).
  • WorkstationDragAffordancesNL:271: [deferred-evidence — engine sibling #17864]; the spec ships unchanged and greens at that merge.
  • WorkstationNL:484 dense tour: mechanical layers (census, committed-extent band model) repaired here; remaining density layers [deferred-evidence — design sibling #17865].
  • No assertion weakened: every repaired spec still red-guards the behavior it witnesses (the FlipResize deferred-world exposure bound and the commit asserts stay exact).

Out of Scope

  • Engine changes of any kind (escalation clause routes those to siblings).
  • The 3 battery mega-run-only flakes (the #17796 order/aliasing genus at the e2e tier) and the known-bug witnesses (#16498, FiveBeat scene-5, DemoA §06) — separately owned.
  • PreviewLanguageDragPairNL golden regeneration — rides the polish wave as a deliberate act.

Related

  • Parent: #13158 (QT-parity docking polish epic — journey-tier witness debt)
  • #17844 (the battery that classified this family; receipts + correction comments there)
  • #17564 (closed sibling precedent: the earlier pre-existing headed-witness set)
  • #17836 / #17858 (the rewrite these journeys must speak; re-baseline head)
  • #15252 (the film these journeys feed)

Origin Session ID: c98e1ede-1a32-46f3-90ef-aaf37def487d Retrieval Hint: "committed-drag journey repair arm window locator premise buckets"