LearnNewsExamplesServices
Frontmatter
id19879
titleFiveBeat scene 5's hosted stack return aims outside the main window
stateClosed
labels
bugaitestingdashboard
assigneesneo-opus-grace
createdAtOct 20, 2026, 10:53 AM
updatedAtOct 20, 2026, 2:20 PM
githubUrlhttps://github.com/neomjs/neo/issues/19879
authorneo-opus-grace
commentsCount1
parentIssue19655
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtOct 20, 2026, 2:20 PM

FiveBeat scene 5's hosted stack return aims outside the main window

Closed Backlog/active-chunk-9 bugaitestingdashboard
neo-opus-grace
neo-opus-grace commented on Oct 20, 2026, 10:53 AM

Context

WorkstationFiveBeatNL › scene 5 — the signature: full journey in ONE run is the flagship journey's own scene. On hosted CI it fails often, it is neither quarantined nor ticketed, and it reddens unrelated PRs: dependabot bumps, a spec-only fix, and three dev pushes.

Measured (every hosted E2E (Brain-gated tier) run since 2026-10-17, shard 10/10 job logs per attempt, test-level marks):

sample failed passed
32 shard-10 jobs on 29 heads, excluding neo#19871 20 of 44 test attempts 24
jobs red (both attempts failed) 8 (incl. dev 74ed8d1d, 18adbb52, a4eafc17) —
first failure → retry also failed 8 of 12 —

Retries fail together, so the cause is tied to the runner, not to timing.

The Problem

Every failure stops at the same assertion: the stack-return step, after the vessel-dock beat, reports main workspace did not reach one semantic + rendered stack-return claim. The claim trace shows the main window as a candidate with intersects: false, so the gesture never claimed main at all.

Here is what the failure JSON records (run 39322381695, attempt 2):

fact value
aimed.rect (main's right-top-tabs, client coords) x 2304, y 121, w 220, h 240
windows.main.innerRect x 10, y 10, w 1280, h 800 (the spec's emulated viewport)

A node inside a 1280-wide viewport should not be measured at x 2304. Two readings fit these numbers, and the evidence does not yet decide between them:

  • Uniform 2× scale: all four values are exactly twice a plausible in-viewport rect (1152 / 60.5 / 110 / 120).
  • Horizontal offset only: y 121 and h 240 are plausible as they are for a top-right tabs node in an 800-px viewport, and a 220-px zone is also what the quarantined showcase dwell previews align with their zones test measures ("the tab-into preview reads 110 px against its 220 px zone", where 110 may be an edge-half preview, not a scale). Then only x is wrong: the dock layout overflows or is translated.

Neither reading has been observed. Either way the aim leaves main, and the claim correctly refuses.

The Architectural Reality

  • apps/workstation/tour/NativeGestureDriver.mjs executeStackReturnStep (~l. 755–775) aims at WindowManager.get(me.windowId).innerRect.{x,y} + the centre of returnHost.getDomRect([returnNode.id], me.windowId). It mixes window geometry with a DOM rect and assumes both use one CSS-pixel space.
  • src/manager/DragCoordinator.mjs claim candidates (~l. 990) test Window.get(windowId).innerRect.intersects(screenX, screenY). So a doubled DOM rect sends the pointer outside main, and no zone is asked.
  • The spec emulates viewport 1280×800 and screen 1920×1080 in ordinary mode (WorkstationFiveBeatNL.spec.mjs l. 75–76, 507–514).

The Fix

Diagnose first, then fix the coordinate space at the place the scale enters:

  1. Instrument: at aim time, the stack-return proof records main's devicePixelRatio, visualViewport.scale, innerWidth/innerHeight, the document's and the dock root's clientWidth/scrollWidth/scrollLeft, and the raw getBoundingClientRect() of the return node, beside innerRect. A failing hosted run then tells the two readings apart: a scale shows in the ratios, an offset in the scroll widths.
  2. Fix by observed cause: the aim and the claim must agree on one coordinate space and on one laid-out main. Fix the producer of the wrong value (lost emulation, a scaled document, a twice-converted rect, or an overflowing layout), not the test's tolerance.
  3. If the same cause explains the showcase-dwell quarantine, lift that quarantine in the same PR.

Acceptance Criteria

  • The stack-return proof carries the scale facts in step 1, and a failing hosted run prints them.
  • The root cause is named in the PR body with the failing run's facts.
  • Scene 5 passes on every attempt across ≥ 10 hosted shard-10 runs (re-runs count), against the 55 % baseline above.
  • No tolerance widening or retry increase in e2eCiSelection.mjs substitutes for the fix.
  • The showcase-dwell quarantine is either lifted (same cause) or keeps an exit naming its own cause.

Out of Scope

  • The other workstation quarantines (film tour hop 3, reclaim embodiment, DockMotion reveal), unless the diagnosis proves they share this cause.
  • neo#19871's own diff. Its reds on scene 5 are this defect (its parent head passed 2 of 2; the base fails at the rate above).

Related

  • Parent: #19655 (hosted Workstation NL tier).
  • neo#19871 and neo#19873 were both red on this scene on 10-19. #19873 is spec-only and touches another file.

Sweeps: live latest-20 open issues and the A2A lane-claims of the last hour, checked immediately before filing; no equivalent found. Memory Core (FiveBeat scene 5 stack-return claim intersects false innerRect hosted): no prior diagnosis. Issues/PRs mentioning FiveBeat: only closed predecessors (#18674, #19594).

Retrieval Hint: "FiveBeat scene 5 stack return aims outside main intersects false hosted"

Revised 2026-10-20 ~09:00Z by the author: the first version presented the 2× scale as the leading reading; the offset reading fits the same numbers.

Origin Session ID: c0d45e7f-5685-4c1a-93e4-68c8b40b13da

tobiu referenced in commit 5239d55 - "fix(workstation): spec tours queue their projections behind an in-flight one (#19879) (#19880) on Oct 20, 2026, 2:20 PM
tobiu closed this issue on Oct 20, 2026, 2:20 PM