LearnNewsExamplesServices
Frontmatter
id19707
titleDockFlip landing leaves an active CSS transform transition
stateClosed
labels
bugaitestingdashboard
assigneesneo-gpt
createdAtOct 13, 2026, 3:47 AM
updatedAtOct 13, 2026, 5:29 AM
githubUrlhttps://github.com/neomjs/neo/issues/19707
authorneo-gpt
commentsCount0
parentIssue19655
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtOct 13, 2026, 5:29 AM

DockFlip landing leaves an active CSS transform transition

Closed Backlog/active-chunk-8 bugaitestingdashboard
neo-gpt
neo-gpt commented on Oct 13, 2026, 3:47 AM

Context

The hosted Brain-gated run 38329136878 at 72dd30789e exposes two boundaries in WorkstationNestedColumnResizeNL: its active-motion precondition can expire before resize begins, and a local replay that reaches resize observes residual transformed pane geometry after fixed staging is removed.

Root's exact-head replay, three attempts, reaches the active/fixed-stage precondition but fails the preview width oracle each time: Feed measures about 907.88px against its 904.1875px column. Its excess decays after release. Both panes' inline styles and fixed-stage classes are already cleared. The same remaining FLIP fraction predicts their other rect coordinates; that attribution was initially an inference.

A separate real-Chrome control isolates the browser mechanism: start a 280ms transform transition on a 100px element, wait 80ms, then clear transform/origin/transition inline styles in the current cleanup order. Chrome still reports a running transform transition and a 176.18px visual width. Suppressing the transition and flushing its animation state before restoring styles produces 100px and no transition.

The Problem

Clearing inline presentation is insufficient to cancel an already-running CSS transition. A pointer can therefore reclaim flex layout while a residual FLIP effect still changes the pane's visual geometry. The existing witness also races the motion lifetime: its nominal admission sample follows several asynchronous reads and a 105ms dwell, but the Mouse sensor's 5px distance threshold has not been crossed yet. Both hosted attempts settle before that sample and never exercise resize.

The Architectural Reality

Design authority: DockFlip.land promises to instantly land host-scoped presentation before direct manipulation measures geometry; Main DragDrop.onDragStart calls landFromPath synchronously before Resize.start. The resolved #17985 contract requires transform-inclusive panes to follow their nested column within 2px.

src/main/addon/DockFlip.mjs owns active cleanup, pending waits, exact inline-style snapshots and host scope. MotionSignal remains worker-side observability. This is not a reducer, recursive descendant-sizing or Group-supersession problem.

The Fix

Restore the captured geometry while CSS transitions are suppressed, flush that restored state, then reinstate the caller's transition policy. This stops an active effect and prevents a new effect when landing interrupts the inverse frame. Preserve pre-existing inline values, unrelated animations, host scope, idempotence and interruption outcomes. Exercise the real transition lifecycle in a browser, with a negative control against the current cleanup.

Make the existing nested-column witness deliberately reach the real native admission boundary while fixed staging exists. Use the actual Mouse sensor and trusted pointer path; preserve the model, preview geometry, release, identity and Escape oracles. Do not fabricate motion flags, lengthen timeouts or loosen geometry tolerances.

Contract Ledger

Surface Authority Behavior Fallback / evidence
DockFlip cleanup / land existing DockFlip host-scoped lifecycle and inline snapshot owner transitions stop before restored geometry is read; prior inline values return missing motion remains a synchronous no-op; real-browser transition and lifetime controls
Native resize admission Main DragDrop before Resize.start controlled witness proves fixed staging before admission and clean computed geometry afterward original no-op-landing negative control remains red
Nested preview and terminal resolved #17985 contract shells within 1px, transform-inclusive panes within 2px; conserved pair and unchanged preview document; release/cancel unchanged current and repaired full existing journey

Decision Record impact: aligned with ADR 0029 §2.1; no persisted schema, operation or public API change.

Acceptance Criteria

  • Real-browser red/green controls prove cleanup lands both the pending inverse frame and a running transition, including a pre-existing nonzero transition policy, while restoring the exact prior inline presentation.
  • The Workstation witness proves actual active-stage native admission, rather than racing a prior motion sample.
  • The existing nested-column journey passes with its original width, topology, identity, release and Escape assertions.
  • Existing DockFlip and Main admission lifecycle/order controls remain green.
  • A source-bound hosted receipt discharges the nested-column quarantine; remaining ten-shard rollout stays owned by #19657.

Out of Scope

The FiveBeat preview flip diagnosis, grid font parity already repaired in #19704, Group projection revision fencing, archive provisioning, and broader animation architecture.

Avoided Traps

Restoring style strings as proof of cancelled effects; treating an expired precondition as a MotionSignal bug; widening tolerances; assigning recursive pixel widths to panes; cancelling another host's animation.

Related

#19655 · #19657 · #17844 · resolved predecessor #17985 · PR #19705 quarantine

Live latest-open sweep: latest 20 open issues checked 2026-10-13T01:46Z; no equivalent. Recent all-status A2A sweep shows Grace transferring only the nested-column diagnosis to Root. Own assignments include #17844, which owns evidence and explicitly requires repairs in their own leaf. MC sweep on DockFlip / running CSS transition / inline transform returned earlier snapshot-ownership history, not this cleanup defect. Current dev de92007b11 leaves DockFlip and this witness unchanged from the measured 72dd30789e.

Origin Session ID: 8c0f4f80-c07d-415b-b4f9-3f323d031ce3

Retrieval Hint: DockFlip land empty inline transform running CSS transition nested column resize

tobiu closed this issue on Oct 13, 2026, 5:29 AM
tobiu referenced in commit 3f2c99b - "fix(dock): fully land CSS transitions before resize (#19707) (#19708) on Oct 13, 2026, 5:29 AM