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:
- 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.
- 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.)
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"
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.mjsline ~60 samples:document.querySelector('[class*="reveal"]')?.offsetParent && (window.__e2e.revealSeen = true);Two defects in one line:
querySelectorbinds to the FIRST element whose class containsreveal— with multiple overlay instances on the surface (one per rail), the detector never looks past the first.#14981pins the reveal overlay's hidden state at specificity 0,2,0, thedisplay:none(0,1,0) TIES the flex-utility sheet'sdisplay:flex— sheet order decides per boot, and dock surfaces intermittently render a permanently-visible ghost overlay. Against a ghost,offsetParentis always non-null →revealSeenflips 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 →revealSeenNEVER 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
flipSampleson 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.#14985owns the causal pin.)revealSeenflips 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).#14985; the spec goes green when#14985lands, with no further spec changes.flipSamplesdisposition 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
#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"