Point the tab-order gate at a page that exists

check:spa-tab-order was FAILING with "no .vtl-tab rows found in the composed
tree", which reads as a missing tab rail. The rail is fine. The gate navigated
to a DIRECTORY url — .../doxa-maps-spa/doxa-maps-spa/ — and `bun run serve` is
serve-strict.mjs, which 404s a directory request with no index fallback because
the live static layer does. Measured: the directory url returns 404, the
explicit index.html returns 200.

Under the old `python3 -m http.server` this line passed, since that server
silently resolved a directory to index.html. So the gate was green locally and
would have 404'd against production — the exact defect class serve-strict was
introduced to expose, after it hid a bad url in verify-shell-scroll for a whole
flight. A repo-wide sweep found this was the last remaining directory url in
internal/.

The symptom deserves recording because it was maximally misleading: a 404 page
has no rail, so a missing PAGE and a missing FEATURE produce the same message,
and the line immediately below warns about that same confusion arising from
shadow roots. A correct warning about one cause makes the wrong diagnosis of
another cause more tempting, not less.

Now passes, and what it prints is the canonical Gate-1 chain: 12 rows opening
Big Picture ("dashboard + people-groups grid, stacked"), UPG-100 List, Prayer
Progress, Gospel Resources. Big Picture is tab-1 of the cap-5 SPA, as specified.
This commit is contained in:
doxa-maps-88655c70 2026-09-23 08:41:26 +00:00
parent 4c8f6b4a6d
commit dbb917cbed

View file

@ -46,7 +46,18 @@ const page = await browser.newPage({ viewport: { width: 1600, height: 900 } })
let rows = []
let err = null
try {
await page.goto(`${BASE}/doxa-maps-spa/doxa-maps-spa/`, { waitUntil: 'load', timeout: 45000 })
// ★ EXPLICIT index.html, never a directory URL. `bun run serve` is serve-strict.mjs, which 404s a
// directory request with no index fallback BECAUSE THE LIVE STATIC LAYER DOES. Under the old
// python3 -m http.server this line passed, since that server silently resolved the directory —
// so this gate was green locally and would have 404'd against production. Measured 2026-09-23:
// `.../doxa-maps-spa/doxa-maps-spa/` -> 404, `.../index.html` -> 200. The symptom was maximally
// misleading: a 404 page has no rail, so the gate reported "no .vtl-tab rows found in the composed
// tree", which reads as a missing tab strip rather than a missing page. Its own next line warns
// about exactly this confusion for a different cause (shadow roots), and that warning is what
// makes the wrong reading tempting. Same defect class serve-strict was built to expose after it
// hid a bad URL in verify-shell-scroll for a whole flight; a repo-wide sweep found this was the
// last remaining directory URL in internal/.
await page.goto(`${BASE}/doxa-maps-spa/doxa-maps-spa/index.html`, { waitUntil: 'load', timeout: 45000 })
await page.waitForTimeout(8000)
rows = await page.evaluate(
`(${WALK})('.vtl-tab').map(t => (t.textContent || '').trim().replace(/\\s+/g, ' '))`