LearnNewsExamplesServices
Frontmatter
id14984
titleDemoATourNL reveal detector goes vacuous: first-match offsetParent must become any-match
stateClosed
labels
bugaitesting
assigneesneo-fable-clio
createdAtJul 10, 2026, 9:36 PM
updatedAt12:17 AM
githubUrlhttps://github.com/neomjs/neo/issues/14984
authorneo-fable-clio
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt12:17 AM

DemoATourNL reveal detector goes vacuous: first-match offsetParent must become any-match

Closed Backlog/active-chunk-5 bugaitesting
neo-fable-clio
neo-fable-clio commented on Jul 10, 2026, 9:36 PM

Context

Handed over by @neo-opus-grace (A2A, 2026-07-10 18:35) with the complete diagnosis, found while building #14973's motion assertions: the Demo-A tour e2e's reveal detector is structurally wrong and its pass has been vacuous.

The Problem

test/playwright/e2e/dashboard/DemoATourNL.spec.mjs line ~60 samples:

document.querySelector('[class*="reveal"]')?.offsetParent && (window.__e2e.revealSeen = true);

Two defects in one line:

  1. First-match: querySelector binds to the FIRST element whose class contains reveal — with multiple overlay instances on the surface (one per rail), the detector never looks past the first.
  2. Vacuous against the ghost: until PR #14981 pins the reveal overlay's hidden state at specificity 0,2,0, the display:none (0,1,0) TIES the flex-utility sheet's display:flex — sheet order decides per boot, and dock surfaces intermittently render a permanently-visible ghost overlay. Against a ghost, offsetParent is always non-null → revealSeen flips regardless of whether the scripted reveal beat executed. The assertion has never been load-bearing.

Post-#14981 (ghost dead), the first-match defect inverts the failure: the detector binds a legitimately hidden overlay instance → revealSeen NEVER flips even during a genuine reveal → the tour spec becomes the dashboard sweep's standing red.

The Fix

Any-match over the overlay instances (Grace's handed shape):

[...document.querySelectorAll('[class*="reveal-overlay"]')].some(el => el.offsetParent) && (window.__e2e.revealSeen = true);

Plus the handed follow-through: re-verify flipSamples on the demo surface after the detector fix (it may have been shielded by the same vacuous pass ordering).

Acceptance Criteria

(AC 2 amended 2026-07-10 after the honest detector invalidated its own premise — the original "runs green on current dev" assumed the vacuous pass was the only defect. It was not: independent exact-head repeats fail under TWO alternating signatures — reveal-never-paints and flipSamples === 0 — both matching the recurred vdom-update-wedge fingerprint. #14985 owns the causal pin.)

  • The detector any-matches overlay instances; revealSeen flips only on a reveal where semantic state and physical rendering AGREE (no semantic hidden cls + positive rendered geometry + visibility neither hidden nor collapse) — each guard kills a named falsifier (ghost-forced-visible, ancestor-hidden, collapse).
  • The spec's standing reds are HONEST and ticket-bound: whichever of the two wedge-class signatures a run hits (reveal-red or FLIP-zero) is diagnosable from the harvested histogram/output alone and points at #14985; the spec goes green when #14985 lands, with no further spec changes.
  • flipSamples disposition recorded: not shielded by the old vacuous pass — it is the wedge's OTHER victim (four of five reviewer repeats), bound to the same regression ticket.

Out of Scope

  • The ghost-overlay specificity pin, entry-slide origin, and focus race (all #14981, Grace).

Decision Record impact

none — test-tier defect.

Related: #14981 (the pin that turns the vacuous pass into a standing red) · #14973 (the sweep that found it) · #14912 (the spec's origin PR) · parent #13158.

Live latest-open sweep: latest-15 checked 2026-07-10T19:35Z; no equivalent. A2A: this ticket IS the accepted handoff (explicit hand-over message, complete diagnosis included).

Origin Session ID: 183ac080-2f24-4837-8f63-69bfc536af0d Retrieval Hint: "DemoATourNL reveal detector vacuous first-match offsetParent any-match ghost overlay"

tobiu referenced in commit 155e17e - "fix(test): DemoATourNL reveal detector — any-match by computed style, diagnosable red (#14984) (#14986) on 12:17 AM
tobiu closed this issue on 12:17 AM