diff --git a/internal/verify-browser-all.mjs b/internal/verify-browser-all.mjs index ad74d2726..d2d6b0d7c 100644 --- a/internal/verify-browser-all.mjs +++ b/internal/verify-browser-all.mjs @@ -25,11 +25,25 @@ * smoke:embeds PASS 43/43 leaf pages mount cleanly * verify:map-paint PASS 11/11 map leaves paint a real canvas under SwiftShader * - * ★ ONE GATE IS DELIBERATELY EXCLUDED. `smoke:share` is NOT in this list and that is not an - * oversight: it takes required arguments (--url / --plugin-gallery) and its gallery mode reads - * /__plugin-gallery/registry.json, which only the VITE DEV SERVER serves — a different runtime - * dependency from the static built tree every gate here targets. Run it separately against - * `bun x vite`. Listing it would make this aggregate fail for a reason that is not a defect. + * ★ I EXCLUDED smoke:share HERE AND THAT WAS WRONG — corrected 2026-09-22, two ticks later. + * The original note read: "it takes required arguments (--url / --plugin-gallery) and its gallery + * mode reads /__plugin-gallery/registry.json, which only the VITE DEV SERVER serves". Every clause + * is true and the CONCLUSION did not follow. I had tested exactly two invocations — bare (exit 2, + * usage) and --plugin-gallery (needs vite) — and never tried --url, which the script's own header + * documents FIRST. It runs perfectly against the static tree: measured 8/8 pass, each Share button + * reopening the correct custom element with a live canvas. + * + * That is the same shape as AP-a-plausible-disposition-recorded-without-checking-it, found in my + * own work: a not-applicable verdict is more durable than a wrong bug report, because it closes the + * question. It cost this suite its highest-consequence surface for two ticks — a share URL is the + * one artefact a partner pastes into an email, and it fails SILENTLY. + * + * It now runs as `smoke:share-all`, a script carrying its own 8 --url flags plus --browser chromium + * (Firefox headless has no WebGL on this box, so the default engine stops — see + * BUG-SHARE-SMOKE-FIREFOX-DEFAULT-FALSE-FAILURES). The 8 leaves are the set derived by grepping + * plugin-designs for ShareButton, not a guess. + * + * Still not covered here: `--plugin-gallery` mode, which genuinely does need the vite dev server. * * PRECONDITIONS (asserted, not assumed): a built tree, and a static server on the BASE port. Both * are checked up front so a missing server reports as a SETUP problem rather than six mystery @@ -55,6 +69,7 @@ const GATES = [ { script: 'verify:gate1', why: 'the Gate-1 chain filters live data end to end' }, { script: 'check:a11y-button-names', why: 'every visible button has an accessible name' }, { script: 'check:nav-reachable', why: 'a phone can open the cap-5 tab rail' }, + { script: 'smoke:share-all', why: 'every Share button emits a URL that reopens the right element' }, ] // ── PRECONDITION 1: a built tree ──────────────────────────────────────────── diff --git a/package.json b/package.json index 239d17c99..566ca40fc 100644 --- a/package.json +++ b/package.json @@ -76,8 +76,9 @@ "check:composite-srcs": "node internal/check-composite-srcs.mjs", "check:nested-token": "node internal/check-nested-token-delivery.mjs", "check:nav-reachable": "node internal/check-nav-reachable-mobile.mjs # a cap-5 shell must have ONE on-screen control that opens its tab rail at phone width (needs `bun run serve` on 4173; browser gate, not in build:unlocked)", - "verify:browser-all": "node internal/verify-browser-all.mjs # runs ALL 6 browser gates over the built tree in one command (needs `bun run serve` on 4173). Every gate listed was RUN before being listed. smoke:share is excluded on purpose — it needs the vite dev server.", - "check:shot-fonts": "node internal/check-shot-fonts.mjs # can THIS machine render the emoji the UI uses? Run BEFORE `bun run shots` — no font = tofu boxes in every committed PNG, which every other shot gate passes. Deliberately NOT in build:unlocked: it reports an ENVIRONMENT condition (this box has no emoji font), and a gate that always fails in the build makes the build useless." + "verify:browser-all": "node internal/verify-browser-all.mjs # runs ALL 7 browser gates over the built tree in one command (needs `bun run serve` on 4173 + MAPBOX_TOKEN). Every gate listed was RUN before being listed. Only smoke:share --plugin-gallery mode is out of scope; it needs the vite dev server.", + "check:shot-fonts": "node internal/check-shot-fonts.mjs # can THIS machine render the emoji the UI uses? Run BEFORE `bun run shots` — no font = tofu boxes in every committed PNG, which every other shot gate passes. Deliberately NOT in build:unlocked: it reports an ENVIRONMENT condition (this box has no emoji font), and a gate that always fails in the build makes the build useless.", + "smoke:share-all": "sh -c 'B=${BASE_URL:-http://127.0.0.1:4173}; exec node internal/share-roundtrip-smoke.mjs --url \"$B/doxa-maps/cities-internet/connectivity-map/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/country-posters/countries-map/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/demo-map/demo-map/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/doxa-research-map/research-map/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/doxa-simple-map/doxa-simple-map/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/gospel-resources/resources-map/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/my-upg-100-list/upg-100-list/index.html?tk=$MAPBOX_TOKEN\" --url \"$B/doxa-maps/my-upg-100-list/upg-100-mfe/index.html?tk=$MAPBOX_TOKEN\" --browser chromium'" }, "devDependencies": { "@capacitor/android": "^7.6.9",