LearnNewsExamplesServices
Frontmatter
id19893
titleDockMotion's rail-reveal witness stops on the setup's motion signal
stateClosed
labels
bugaitestingdashboard
assigneesneo-opus-grace
createdAtOct 20, 2026, 12:45 PM
updatedAtOct 20, 2026, 2:19 PM
githubUrlhttps://github.com/neomjs/neo/issues/19893
authorneo-opus-grace
commentsCount0
parentIssue19655
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtOct 20, 2026, 2:19 PM

DockMotion's rail-reveal witness stops on the setup's motion signal

Closed Backlog/active-chunk-9 bugaitestingdashboard
neo-opus-grace
neo-opus-grace commented on Oct 20, 2026, 12:45 PM

Context

test/playwright/e2e/dashboard/DockMotionNL.spec.mjs › a rail-click reveal SLIDES has been quarantined since 2026-10-13 (e2eCiSelection.mjs BRAIN_QUARANTINES, accountable: me). The quarantine reads: "hosted, intermittent on both attempts: the entry witness records no sample of the revealed overlay"; its exit is "a diagnosis lands as a fix or a ticket".

Observed in runs 38422728929 (job 115384271007) and 38339077604 (job 115105930716): every attempt fails at the samples assertion with Expected: > 5, Received: 0, while the signal bracket's appear and clear both pass. Red attempts ran shorter than green ones: about 2.2–2.35 s of App Worker lifetime, against 2.6–2.7 s. The ~0.4 s gap is roughly the 280 ms reveal plus its settle. A launch-args A/B (38292768089) was red in both arms.

The Problem

expectSignalBracket counts any .neo-dashboard-dock-animating element. The test's setup step, setItemAutoHidden, returns from executeDockOperation (src/ai/client/DockService.mjs ~776–786) while that setup's own projection motion is still signalled (the workspace FLIP and the header overflow). Unlike the addTab test (settle poll at ~l. 319–322), the SLIDES test arms its witness and bracket with no settle. When the setup's signal is still up, the bracket sees it appear and clear, and readMotionSamples stops the witness before the overlay paints. Result: 0 samples, with a reveal that did happen. This is inferred from the code and the duration split; the run's trace artifact can confirm it.

The Architectural Reality

The reveal overlay carries its own signal: RevealOverlay#beginRevealMotion → MotionSignal.enter(this) → addCls('neo-dashboard-dock-animating') (src/dashboard/dock/interaction/RevealOverlay.mjs ~236–250, src/dashboard/dock/projection/MotionSignal.mjs:106). So .neo-dashboard-dock-reveal-overlay.neo-dashboard-dock-animating names exactly the motion under test.

The Fix (test-only)

  1. expectSignalBracket takes a selector option, default SIGNAL. The SLIDES test brackets the overlay's own signal.
  2. The SLIDES test waits for the setup motion to settle before it starts the witness, as the addTab test does.
  3. The samples assertion reports gaps: gaps with 0 samples means the read was too early, and 0 gaps means rAF never ticked.
  4. Its BRAIN_QUARANTINES entry is removed.

Acceptance Criteria

  • AC-1: The SLIDES test brackets .neo-dashboard-dock-reveal-overlay.neo-dashboard-dock-animating and settles the setup's signal before it starts the witness.
  • AC-2: The quarantine entry is gone, and the test passes on every attempt across ≥ 5 hosted runs of the PR.
  • AC-3: A failing samples assertion names gaps.

Out of Scope

  • The sibling resizeSplit GLIDES test uses the same any-element bracket and once read only 5 samples hosted (38333432524). It is not diagnosed here.

Related

#19655 (hosted Workstation NL tier).

Sweeps at 10:45Z: live latest-20 open issues (no motion/reveal match), A2A claims (none).

Origin Session ID: 1cc54e4a-b230-43bc-ac83-7519d425f6e7

tobiu referenced in commit 7593518 - "test(e2e): the rail-reveal witness brackets the overlay's own signal and leaves quarantine (#19893) (#19894) on Oct 20, 2026, 2:19 PM
tobiu closed this issue on Oct 20, 2026, 2:19 PM