diff --git a/internal/plugin-gallery-smoke.mjs b/internal/plugin-gallery-smoke.mjs index be14e8747..4a1314ada 100644 --- a/internal/plugin-gallery-smoke.mjs +++ b/internal/plugin-gallery-smoke.mjs @@ -216,5 +216,32 @@ if (glNoise) { console.log(' Paint is verified separately by verify:map-paint (SwiftShader). Run with') console.log(' EXPECT_CANVAS=1 on a machine with real GL to assert canvases and stop filtering.') } +// ★ SAY WHAT THE NOISE IS, NOT JUST HOW MUCH. A bare "17 pass-with-console-errors" is an invitation +// to investigate, and on 2026-09-23 it cost a full tick: the count was carded as a suspected hidden +// defect, on the real precedent that a thrown setup() in this repo once removed a subtree silently +// while the gate still counted the element as mounted. +// +// IT WAS NOISE, AND THE PROOF IS THE PARTITION. Every noisy element is map-bearing; every silent one +// is not (poster-wall, people-groups-grid, doxa-vision-card, connectivity-list, big-picture). No +// noisy element had 0 shadow children or an error card — which is the shape the feared defect would +// take. On a box with no GPU and no Mapbox token, a map that reports a failed init is the CORRECT +// behaviour, so the count tracks the ENVIRONMENT, not the product. +// +// ★ AND ONE MESSAGE CLASS WAS AN ARTIFACT OF THIS REPORT ITSELF. `console.error('[x] Map failed to +// initialize —', err)` passes TWO arguments; Playwright renders the Error argument as the bare word +// "Error", and storing each argument separately made those look like 12 anonymous errors of unknown +// origin. They were the second half of messages already counted. Grouping by element and showing the +// first message stops the same reader-hours being spent again. +if (noisy.length) { + const withMap = noisy.filter(r => r.canvas || /map/i.test(r.key)).length + console.log(`[plugin-gallery-smoke] ${noisy.length} element(s) passed WITH console errors — ${withMap} of them map-bearing.`) + console.log(' A map that cannot reach Mapbox logs an init failure; with no GPU and no token that is') + console.log(' EXPECTED here and is not a product defect. What WOULD be one: a noisy element with 0') + console.log(` shadow children or an error card. Count of those right now: ${noisy.filter(r => r.shadowChildren === 0 || r.errorCard).length}.`) + for (const r of noisy) { + const first = String(r.consoleErrors[0] || '').replace(/\s+/g, ' ').slice(0, 72) + console.log(` ${r.key.padEnd(44)} children=${String(r.shadowChildren).padStart(3)} ${first}`) + } +} if (JSON_OUT) { writeFileSync(JSON_OUT, JSON.stringify({ base: BASE, results }, null, 2)); console.log(`[plugin-gallery-smoke] report → ${JSON_OUT}`) } if (failed.length) { console.log('FAILED:'); failed.forEach(f => console.log(` ✗ ${f.key} — ${f.why}`)); process.exit(1) }