LearnNewsExamplesServices
Frontmatter
id19297
titleLarge-over-small NL arms assert the old proxy and never run headless
stateClosed
labels
bugaitesting
assigneesneo-opus-ada
createdAtSep 26, 2026, 10:13 PM
updatedAtOct 1, 2026, 7:49 PM
githubUrlhttps://github.com/neomjs/neo/issues/19297
authorneo-opus-ada
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[x] 19278 Under a hand drag the parked vessel covers the target popup''s drop zones, [x] 19288 Headless Chrome''s 800 px screen clamps every script-moved popup
blocking[]
closedAtOct 1, 2026, 7:49 PM

Large-over-small NL arms assert the old proxy and never run headless

neo-opus-ada
neo-opus-ada commented on Sep 26, 2026, 10:13 PM

Context

Grace measured this on 2026-09-26: receipts on #19288 (issuecomment-5849264672), plus a bisect in her A2A.

WorkstationHumanPopupOverlapNL's two large-over-small arms are the only e2e witnesses of the operator's goal-1 journey at a realistic size. A large converted vessel is dragged over a smaller target popup, and the target must show the tab-header proxy and its drop zones. The two arms are "large-over-small: one local proxy plus readable target choices" and "large-over-small: pointer release transfers one pane with undo and redo".

  • Headless CI (800 px screen): both arms test.skip, because screen.width < requiredStageWidth. They have never run in CI.
  • With #19288's --screen-info={1920x1080} flag, at dev 6ceaf4f555 (after #19254): both fail at "target proxy width follows the live source viewport", |Δ| = 712 px.
  • The same flag at 108b6ccb1c (before #19254): both fail one assertion later, at "…height follows the live source viewport".

The Problem

The arms still assert the pre-goal-1 contract, "the target-local proxy takes the live source viewport's size". #19248 / #19254 replaced it: a converted tab drag enters the target as its tab-header proxy. So once the flag lets the arms run, they are red for the right product. Meanwhile the goal-1 journey has no headless coverage.

With the flag, the arms get past the partial-overlap premise that #16472 found failing. That points to the 800 px clamp as #16472's cause. This is Grace's measurement; it is not re-run here.

The Architectural Reality

  • The proxy-geometry expectations sit in the arms' shared body (proxyRectA width and height against sourceBefore.managed). The skip sits beside requiredStageWidth.
  • The goal-1 contract has three parts:
    • the proxy is the tab header (#19248);
    • the target shows its zones before and after the park, and the vessel parks clear of the target (#19278, PR #19289, lastVesselParkReceipt.cleared);
    • "exactly five rendered target choices remain readable" and the preview stay as asserted.

The Fix

  1. Re-aim the proxy-geometry expectation to the tab-header contract: the proxy's extent is the header's, not the source viewport's.
  2. Assert the goal-1 witnesses beside it: the target's zones rendered while the proxy stands, and lastVesselParkReceipt.cleared after the park.
  3. Keep the partial-overlap premise and the target-choice assertions unchanged.
  4. The arms run in CI once #19288's screen flag is on the NL config.

Acceptance Criteria

  • AC-1: with the 1920×1080 screen flag, both large-over-small arms pass at the head that carries #19289. Red first at the same head with the old proxy expectation.
  • AC-2: the arms assert the tab-header proxy extent, rendered target zones, and cleared: true on the park receipt.
  • AC-3: without the flag (800 px), the arms still skip with their stated reason; the skip is not removed.

Out of Scope

  • The screen flag itself (#19288, Grace's).
  • The near-equal and post-resize-asymmetric cells.
  • The hand witness of #19278 AC-5, which stays the operator's.

Related

#19248, #19254, #19278 / #19289, #19288, #16472, #16358, #17844.

Blocked by #19288 (the arms need its screen flag to run) and #19289 (the contract they re-aim to).

Sweeps:

  • The latest 20 open issues, read live at 20:12Z: no equivalent. #16472 is the same spec's premise failure, and #16358 is an intermittent park miss. Neither covers the stale proxy expectation.
  • A2A: Grace's measurement names this as my surface.
  • My own open assignments: #19278 only, which this follows.

Origin Session ID: 40558e40-aee4-4461-946d-a389266a3256 Retrieval Hint: "large-over-small proxy width follows the live source viewport tab header goal 1"

tobiu referenced in commit 1e49d62 - "test(workstation): the large-over-small arms assert the tab-header proxy and the clear park (#19297) (#19353)" on Oct 1, 2026, 7:49 PM
tobiu closed this issue on Oct 1, 2026, 7:49 PM