LearnNewsExamplesServices
Frontmatter
id14973
titleDock motion e2e: the dock-animating signal brackets real motion — resize glide, FLIP commit, reveal slide + reduced-motion collapse
stateClosed
labels
enhancementai
assigneesneo-opus-grace
createdAtJul 10, 2026, 7:16 PM
updatedAtJul 10, 2026, 11:44 PM
githubUrlhttps://github.com/neomjs/neo/issues/14973
authorneo-opus-grace
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 10, 2026, 11:44 PM

Dock motion e2e: the dock-animating signal brackets real motion — resize glide, FLIP commit, reveal slide + reduced-motion collapse

Closed Backlog/active-chunk-5 enhancementai
neo-opus-grace
neo-opus-grace commented on Jul 10, 2026, 7:16 PM

Context

The #14591 reconciliation (recorded 2026-07-10 on the ticket) re-homed its animation-assertion half to "its own leaf once ONE dock-animating contract exists". That condition is now fully met on dev: #14947 shipped the contract (tokens + DockMotionSignal), #14966 shipped the choreography producers (splitter ease, reveal slide) with Euclid's converged counted-window semantics, #14944 shipped the FLIP commit layer as a consumer (tokens sole authority; play() resolves post-motion), and #14971 made the token scope ride every projection. Three independent producers emit neo-dashboard-dock-animating; nothing asserts it end-to-end.

The Problem

The motion pipeline is the product of a three-author merge train against one contract. Unit specs pin each producer in isolation; NOTHING pins the integrated live truth: that a committed dock operation on the real app actually MOVES pixels, that the observability signal brackets the motion (appears on start, clears on settle — the exact lifecycle tour step-gating and recording pipelines will consume), and that reduced-motion collapses to instant through the token layer alone. The v13.2 cornerstone-2 done-signal says "animated, e2e-tested" — the "e2e-tested" half of "animated" is this leaf.

The Fix

One PR: a motion-assertion e2e range (new DockMotionNL.spec.mjs beside the landed DockOperationsNL.spec.mjs — the "same suite, later range" the original #14591 structure prescribed):

  1. Committed resize glides + signals: execute_dock_operation resizeSplit → assert the neo-dashboard-dock-animating class APPEARS on the workspace and CLEARS (event/state-driven waits — expect.poll/locator waits, no timing sleeps per the house rule) + observeMotion samples real geometry change across the window (the pane actually moves).
  2. FLIP brackets structural commits: a committed moveItem → signal appears/clears around the FLIP play (the #14944 consumer path).
  3. Reveal slide signals: rail-click reveal → signal appears/clears via the overlay's counted window (the #14966 converged semantics).
  4. Reduced-motion collapse: test.use({reducedMotion: 'reduce'}) context → the same ops complete with correct documents and NO sustained motion (geometry settles immediately); the signal lifecycle under 0ms durations is asserted at its HONEST contract — a zero-duration CSS transition fires no transitionend, so the producer-side leave may ride the fail-safe backstop; the spec pins "clears within the fail-safe horizon", not a false instant-clear claim. If review wants a tighter bound, the fix belongs in the producer seam (skip enter when motion is collapsed), which is a separate recorded decision.

Acceptance Criteria

  • Each motion class with a live producer (resize glide, FLIP commit, reveal slide) has an e2e assertion: real geometry motion occurs AND the dock-animating signal brackets it, event-driven waits only.
  • Reduced-motion: ops stay correct, geometry settles instantly, signal clears within the contract's honest bound.
  • Runs via the named e2e config (NEO_E2E_PORT isolation); no CI-hardcoded skips.
  • Cross-family review before merge.

Out of Scope

  • Tour-replay as spec (waits on the tour surface per the #14591 reconciliation).
  • Arrival-settle assertions (#14769 owns the trigger wiring).
  • Producer-seam changes (any reduced-motion enter-skip is its own recorded decision).

Related

Parent #13158 · extends the #14591 structural suite (PR #14940) · consumes #14947/#14966/#14944/#14971 · the §4.1 closure matrix's "e2e spec" evidence column for the motion rows.

Live sweep: title/body search observe_motion + motion assertion open = 0 this minute; the #14591 reconciliation note is the lineage. Origin Session ID: ef6b9a4a-54ec-4afb-8438-f89a3ee46ad2 Retrieval Hint: "dock motion e2e observe_motion dock-animating signal bracket reduced-motion assertions"

tobiu referenced in commit 29693de - "test(dashboard): motion e2e — the signal brackets real motion + the three integration defects it exposed (#14973) (#14981) on Jul 10, 2026, 11:44 PM
tobiu closed this issue on Jul 10, 2026, 11:44 PM
tobiu referenced in commit 155e17e - "fix(test): DemoATourNL reveal detector — any-match by computed style, diagnosable red (#14984) (#14986) on 12:17 AM