LearnNewsExamplesServices
Frontmatter
id19283
titleDemoBVesselConversionNL never opens its vessel, headless or headed
stateClosed
labels
bugaidashboardtest
assigneesneo-opus-grace
createdAtSep 26, 2026, 3:26 PM
updatedAtSep 26, 2026, 3:48 PM
githubUrlhttps://github.com/neomjs/neo/issues/19283
authorneo-opus-grace
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtSep 26, 2026, 3:48 PM

DemoBVesselConversionNL never opens its vessel, headless or headed

Closed v13.2.0/archive-v13-2-0-chunk-23 bugaidashboardtest
neo-opus-grace
neo-opus-grace commented on Sep 26, 2026, 3:26 PM

Context

DemoBVesselConversionNL is one of #17844's unowned census reds: no popup event in 30 s at line 170. #19242 re-aimed the row today and recorded it as a headed-only witness whose tear-out popup never opens headless. Measured at 9a45c43ad8, the row fails the same way headed and headless, so the environment is not the cause.

The Problem

The spec has two stale contracts. The second is hidden behind the first.

  1. No vessel opens. The row calls DemoBWorkspace#openTearOutVessel directly. Since #18383 (3a0773c9a5, 09-06), that effect returns null unless it receives the topologyIdentity that NativeLifecycle#acquire mints (examples/dashboard/crossWindow/DemoBWorkspace.mjs:3955).
  2. The window rects cannot agree. With the vessel admitted, the first parity check fails by 67 px in both modes. browserRect pairs the frame origin (screenX/Y) with the viewport extent. Since #18068 (09-02), manager.Window#calculateGeometry publishes innerRect as the viewport's screen rect (src/manager/Window.mjs:84). The difference between the two is the title bar.

The Architectural Reality

  • Opening a vessel. The product opens one through the Group's admission. The tear-out and keyboard handlers' openVessel is nativeWindows.acquire(vesselSourceId, request) (DemoBWorkspace.mjs:645, :694). It reserves the slot and passes the identity into the effect (src/manager/transaction/NativeLifecycle.mjs:191).
  • Sampling the vessel. Conversion samples manager.Window's innerRect for the vessel (DemoBWorkspace#resolveVesselConversionSourceRect, :3874). Before the park, the row asserts that vesselConversionSourceRect equals the rect the spec reads for that window.
  • What the browser reports. Chromium reports no viewport origin. It does report the frame origin, the frame extent and the viewport extent. manager.Window#toJSON publishes the same quantities as outerRect and innerRect.

The Fix

The change is test-only, in test/playwright/e2e/dashboard/DemoBVesselConversionNL.spec.mjs:

  • Open the vessel through nativeWindows.acquire(vesselSourceId, …), as a gesture does.
  • Compare like with like. The frame's origin and extent go against outerRect, and the viewport's extent against innerRect. Once they agree, the row works in innerRect, the rect the conversion consumes.

Acceptance Criteria

  • AC-1: The row passes headless under playwright.config.e2e.mjs with NEO_AGENTOS_RUNTIME_ROOT set. On dev it fails at line 170.
  • AC-2: The row's calibration receipt meets #19242's re-aimed expectations: six commitEligible: true decisions (the first one converting), zero flips, and a re-show on claim loss.
  • AC-3: No assertion compares a frame origin with a viewport origin, and the vessel comes from the Group's admission, not from the bare effect.
  • Post-merge: #19242's headed Post-Merge Validation row can be answered from this row. The headed run happens only on the operator's go, because it places windows on the operator's displays.

Out of Scope

  • DemoBPerspectivesNL, which is a different red: the paced tour does not reach its cross-window step within 10 s.
  • Product code and the matrix runner.

Related

#17844 · #19242 · #18383 · #18068 · #19101

Live latest-open sweep: latest 20 open at 2026-09-26T13:24:52Z; no equivalent. A2A sweep: latest 30, all read states; no claim on this row. MC sweep: "Demo B vessel conversion row … popup never opens at line 170, headed-only witness, window geometry parity 67 px title bar", 10 results. The only prior reading is #19242's headed-only classification, which this ticket refutes. No decision on either contract. Own-assignment sweep: 10 open. #17844 lists this row as unowned.

Origin Session ID: 81d1894c-d8fd-4192-8350-42e32eb0101e Retrieval Hint: "DemoBVesselConversionNL openTearOutVessel topologyIdentity acquire innerRect frame origin title bar"

tobiu referenced in commit fb73ad2 - "test(dashboard): the Demo B conversion row opens its vessel and runs again (#19283) (#19284) on Sep 26, 2026, 3:48 PM
tobiu closed this issue on Sep 26, 2026, 3:48 PM