doxa-maps/internal
doxa-maps-88655c70 53ae954a7f
Some checks are pending
build-gate / build (push) Waiting to run
The deck gate asserts its portraits, and can finally run in every locale
Two gaps on the same surface.

1. "116 portraits" was collected, printed, and NEVER asserted — only the QR codes
were checked against the card count, so a deck of 116 cards with ZERO portraits
passed. A prayer card without a face is a data tile, which is the whole difference
between the deck and a spreadsheet. Not hypothetical: card-render.js records that
the deck once shipped with no photos at all, because image_url was never requested
in fetchListRecords.

THE COUNT CANNOT BE PINNED — roughly half the groups have no portrait and the CDN
drops some — so two invariants instead: portraits + typographic === cards (a card
that is NEITHER means a third shape nobody checks), and a deck drawn from records
carrying image_url must have SOME, with DECK_EXPECT_PORTRAITS=0 to declare a
deliberately photo-less deck out loud.

2. The gate matched /card deck/i, so it could ONLY run in English. Pointed at
?lang=es it reported "no Card Deck button" and listed 28 buttons all reading
"Baraja de tarjetas" — the UI correctly translated, the GATE unable to see it. The
card deck is a core prayer artefact and had zero coverage in any of the ten
non-English locales, which is exactly where a rendering bug is most likely. The
label now resolves from the catalog for the page's own locale.

MUTATION-TESTED THROUGH THE REAL CAUSAL PATH, not synthetic DOM edits:
  - image_url removed from the records provider (the historical regression):
    FAIL, "116 cards and NOT ONE portrait", naming the cause.
  - the no-photo branch renamed so cards are NEITHER shape:
    FAIL, "116 cards but 0 portrait + 0 typographic = 0".
  - DECK_EXPECT_PORTRAITS=0 on that same deck: PASS, sum invariant still holding.
  - es cardDeck changed in the CATALOG without rebuilding: FAIL — so this now also
    catches catalog/bundle drift instead of passing on a stale bundle.

VERIFIED IN FOUR LOCALES, each matching its OWN label — en "Card Deck",
es "Baraja de tarjetas", ar "مجموعة البطاقات", hi "कार्ड सेट" — 116 cards, 116
portraits, 116 QR codes, @page 2.5in x 3.5in, 0 page errors in every one.

Same two patterns have now recurred three times: a count printed without an
assertion, and a gate keyed on English text that silently excludes every
translated surface. Worth checking for on any new gate.
2026-09-24 10:38:03 +00:00
..
acceptance Make the interop harness see through shadow DOM, and wait long enough 2026-09-23 15:13:14 +00:00
fixtures Gate the scrim-covers-viewport rule, and say what was not verified 2026-09-22 21:54:39 +00:00
lib Add deepFindAll to the shared browser helper, so counting probes stop being hand-rolled 2026-09-22 06:19:13 +00:00
plugin-gallery dev server: answer the production embed URL instead of silently serving the studio 2026-09-23 19:53:56 +00:00
atomic-public-swap.sh Session work: strobe fix, grid layout, stacked tree legend, selection camera, chip bounding, asset inheritance, gates 2026-09-20 04:49:25 +00:00
build-lock.sh Make bun run build refuse by default instead of asking politely 2026-09-23 17:48:27 +00:00
check-a11y-button-names.mjs name the legend collapse control and gate every button's accessible name 2026-09-21 13:23:35 +00:00
check-backlog-status-enum.mjs Require a queryable status on every backlog card 2026-09-22 20:46:06 +00:00
check-capability-citations.mjs Widen the capability-citation gate to the documentation folder 2026-09-22 10:50:55 +00:00
check-capability-exemplars.mjs consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
check-card-deck.mjs test(cards): a deck must print as CARDS — assert the measured page size 2026-09-24 02:56:33 +00:00
check-catalog-currency.mjs catalog-currency: a bundle missing from the catalog now fails instead of passing 2026-09-22 04:06:55 +00:00
check-catalog-identity.mjs prove the live server serves the catalog's exact bytes 2026-09-21 12:46:48 +00:00
check-composite-freshness.mjs add a composite-freshness gate for stale nested children 2026-09-21 06:06:29 +00:00
check-composite-registration.mjs Compare every silently-failing side effect, not just strategy keys 2026-09-22 20:09:46 +00:00
check-composite-srcs.mjs Make the two gates say where the tree name came from 2026-09-23 11:29:05 +00:00
check-csv-export-shape.mjs Checkpoint the swarm's in-flight work 2026-09-22 21:42:18 +00:00
check-deck-click.mjs The deck gate asserts its portraits, and can finally run in every locale 2026-09-24 10:38:03 +00:00
check-dependency-names.mjs Gate: every declared dependency must be a real package name 2026-09-22 06:49:21 +00:00
check-doc-quotes-scripts.mjs Check that the CLI doc still quotes package.json correctly 2026-09-23 04:19:42 +00:00
check-done-evidence.mjs make check:done-evidence SKIP honestly instead of passing vacuously 2026-09-22 00:35:07 +00:00
check-dxlife-untouched.mjs add a VCS-independent witness for the read-only DX-life clone 2026-09-20 09:45:25 +00:00
check-embed-targets-exist.mjs Track the embed-target gate, which was registered but never committed 2026-09-22 14:57:36 +00:00
check-facet-cascade.mjs Land the swarm's dashboard work: colour, rails, cascade, scroll 2026-09-22 18:57:39 +00:00
check-facet-changes-map.mjs facet gate: say "I cannot measure this engine", not "the map is broken" 2026-09-24 06:41:38 +00:00
check-facet-one-field.mjs Gate the scrim-covers-viewport rule, and say what was not verified 2026-09-22 21:54:39 +00:00
check-filter-width-stable.mjs filter-width: an absent server is not a width regression 2026-09-24 06:34:29 +00:00
check-fits-the-screen.mjs Resolve a composite's child bundles against the tree root, not a guessed depth 2026-09-23 19:34:28 +00:00
check-fixed-anchoring.mjs Point the anchoring gate at index.html too, so it can actually measure 2026-09-23 03:27:10 +00:00
check-heartbeat-threshold.mjs Assert the shipped heartbeat ramp, not just the panel's fallback 2026-09-22 22:44:10 +00:00
check-i18n-parity.mjs All eleven locales complete — the last 162 keys of i18n debt, and the ratchet empties 2026-09-24 08:48:02 +00:00
check-kpi-unit-once.mjs Print each KPI percent sign once 2026-09-22 18:28:53 +00:00
check-label-joins.mjs add a label-join gate: fail on any new equality predicate comparing two independently-derived values 2026-09-20 09:05:18 +00:00
check-legend-matches-source.mjs Re-baseline the source check, and record that the two lostness axes disagree 2026-09-23 13:28:45 +00:00
check-library-index.mjs Watch only the directories the library index is generated from 2026-09-23 11:41:55 +00:00
check-locale-reachable.mjs Fix the import I omitted in the locale-reachable portability fix 2026-09-24 05:40:58 +00:00
check-manifest-covers-discovery.mjs Catch a plugin the manifest forgets, without calling a gated one a defect 2026-09-22 15:21:27 +00:00
check-maplibre-layer-drops.mjs All 12,379 pins were missing on MapLibre, and now a gate says so 2026-09-24 06:24:40 +00:00
check-mfe-two-tab.mjs test(mfe): a two-tab element must mount both panes AND occupy space 2026-09-24 04:35:59 +00:00
check-mjs-parses.mjs Parse the build scripts before the build runs them 2026-09-22 21:33:32 +00:00
check-nav-reachable-mobile.mjs Gate that a phone can actually open the tab rail 2026-09-22 08:23:03 +00:00
check-nested-token-delivery.mjs Make the two gates say where the tree name came from 2026-09-23 11:29:05 +00:00
check-no-absolute-paths.mjs Keep the development-era internal code name out of shipped files 2026-09-22 22:18:18 +00:00
check-no-internal-codename.mjs Keep the development-era internal code name out of shipped files 2026-09-22 22:18:18 +00:00
check-no-orphan-gates.mjs Make the shell-scroll gate runnable, and catch orphan gates 2026-09-22 17:55:43 +00:00
check-no-public-binds.mjs Bind local preview servers to loopback only 2026-09-22 17:32:33 +00:00
check-one-palette.mjs Gate that map, legend and charts share one palette 2026-09-22 18:00:51 +00:00
check-packet-browser.mjs test(packet): gate the packet the READER gets, not the one Node writes 2026-09-24 02:44:06 +00:00
check-packet-render.mjs Guard the packet catalog: the 12 prayer points and the wheel had no parity gate 2026-09-24 08:57:34 +00:00
check-packet-strings-parity.mjs Guard the packet catalog: the 12 prayer points and the wheel had no parity gate 2026-09-24 08:57:34 +00:00
check-packets-all.mjs Assert the packet numbers that were only being printed, and run the gate on every locale 2026-09-24 06:55:58 +00:00
check-poster-degrades-honestly.mjs Gate the default drop: with no poster and no source, nothing prints and the reader is told 2026-09-24 10:16:22 +00:00
check-poster-print-fallback.mjs Delete the 100-list wall's dead hidden-map export, and stop it lying to a gate 2026-09-24 09:12:17 +00:00
check-poster-prints.mjs test(poster): assert the shared PACKET action's shape, not just its bytes 2026-09-24 05:23:05 +00:00
check-poster-raster.mjs test(posters): a poster with no pre-rendered image must still download 2026-09-24 03:05:27 +00:00
check-print-geometry.mjs test(print): each print path must produce its OWN page geometry 2026-09-24 03:55:16 +00:00
check-profile-descriptions.mjs Gate: every shipped profile must say what it is 2026-09-22 03:23:55 +00:00
check-provider-switch.mjs test(provider): ?provider=maplibre must swap the ENGINE, measured by request host 2026-09-24 04:47:54 +00:00
check-quoted-scripts.mjs consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
check-scrim-covers-viewport.mjs Gate the scrim-covers-viewport rule, and say what was not verified 2026-09-22 21:54:39 +00:00
check-script-flags-reachable.mjs Make advertised script flags actually reachable 2026-09-22 17:44:02 +00:00
check-sfc-script-parses.mjs Localize tab labels for it/ro/zh, and prove the catalog is actually read 2026-09-24 06:23:30 +00:00
check-share-policy.mjs prayer-walk-planner can be shared — the last published map with no sharing path 2026-09-24 08:23:30 +00:00
check-shot-distinctness.mjs consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
check-shot-fidelity.mjs Shoot the README with the token the bundles ship, and make the fidelity gate ask 2026-09-23 06:26:39 +00:00
check-shot-fonts.mjs Make the flagship capability-5 screenshot show the studio doing something 2026-09-22 09:48:20 +00:00
check-shot-freshness.mjs consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
check-spa-tab-order.mjs Point the tab-order gate at a page that exists 2026-09-23 08:41:26 +00:00
check-synced-css-copies.mjs Teach the synced-CSS gate what a selector is, and turn it on 2026-09-23 01:22:36 +00:00
check-tab-radius-token.mjs Gate the tab radius so a superseded rationale cannot quietly restore the pill 2026-09-23 01:08:10 +00:00
check-tabs-localized.mjs Localize tab labels for it/ro/zh, and prove the catalog is actually read 2026-09-24 06:23:30 +00:00
check-tauri-config.mjs Commit Cargo.lock: it was ignored by association with real build output 2026-09-22 06:53:27 +00:00
check-url-resolver.mjs Gate the URL-resolver rule the build could never have caught 2026-09-22 14:18:26 +00:00
check-verification-tags.mjs Record which kind of verification closed each card 2026-09-22 17:00:26 +00:00
check-zone-census.mjs zone-census: default to this repo, not one author's worktree 2026-09-24 04:18:24 +00:00
clean.mjs doxa-maps — portable bundler for embeddable JAMstack maps 2026-09-10 01:53:07 +00:00
drop-portability-check.mjs derive the check:drop coverage floor from the manifest instead of hardcoding it 2026-09-20 07:22:07 +00:00
embed-smoke.mjs Say what the embed-smoke node count does and does not mean 2026-09-23 07:53:31 +00:00
fix-sri.mjs Repair SRI hashes without a full rebuild 2026-09-23 20:35:07 +00:00
generate-capability-exemplars.mjs Generate one canonical exemplar per tier, so a miscitation is copy-paste to fix 2026-09-22 05:35:03 +00:00
generate-gallery.mjs Anchor the gallery's assets to the tree, not to the page directory 2026-09-22 22:03:58 +00:00
generate-library-index.mjs consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
generate-tree.mjs The poster print preview rasterises too, and a deployment can ship sources without rasters 2026-09-24 08:07:22 +00:00
inline-parse-check.mjs doxa-maps — portable bundler for embeddable JAMstack maps 2026-09-10 01:53:07 +00:00
install-shell.mjs Brand-neutral shared VerticalTabsLayout with lazy nested-element hosting; fix cap-5 prayer tab leaf path; neutralize library identifiers; add Forgejo CI build-gate workflow 2026-09-19 17:24:30 +00:00
legend-columns-probe.mjs Complete app-profiles->plugin-designs sweep across comments/docs; build green; layouts kept at root (load-bearing) 2026-09-17 18:18:19 +00:00
long-frames-probe.mjs Complete app-profiles->plugin-designs sweep across comments/docs; build green; layouts kept at root (load-bearing) 2026-09-17 18:18:19 +00:00
mobile-sheet-probe.mjs Complete app-profiles->plugin-designs sweep across comments/docs; build green; layouts kept at root (load-bearing) 2026-09-17 18:18:19 +00:00
plugin-gallery-smoke.mjs Say what the console noise is, so the count stops reading as a defect 2026-09-23 12:34:50 +00:00
public-hygiene-check.mjs Close the visa-data leak at its factory + harden the gate 2026-09-24 03:03:53 +00:00
readme-shots-fix.mjs consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
readme-shots.mjs Shoot the README with the token the bundles ship, and make the fidelity gate ask 2026-09-23 06:26:39 +00:00
run-parallel.mjs Run the verification chain in phases instead of one long queue 2026-09-23 20:57:13 +00:00
serve-strict.mjs serve-strict sends Access-Control-Allow-Origin: * -- the tree is embeddable assets 2026-09-24 01:55:20 +00:00
settled-tree-gate.mjs Raise the settled-tree floors, on the gate's own advice 2026-09-23 17:00:40 +00:00
share-roundtrip-smoke.mjs make the share suite refuse to report a false failure, and give it the token 2026-09-21 14:19:09 +00:00
smoke-studio.mjs Stop the capability-5 shells claiming a native element property 2026-09-22 15:03:52 +00:00
smoke.mjs Land the swarm's work: no iframes anywhere, a tree that keeps its shape, deeper facets 2026-09-22 14:51:52 +00:00
sri-consistency-check.mjs Repair SRI hashes without a full rebuild 2026-09-23 20:35:07 +00:00
staging-forge.css feat: map provider swap — mapbox|maplibre engine + hybrid geocoder + provider badge; staging title doxa-maps 2026-09-11 21:47:25 +00:00
staging-forge.js Complete app-profiles->plugin-designs sweep across comments/docs; build green; layouts kept at root (load-bearing) 2026-09-17 18:18:19 +00:00
staging-reference-v2.html doxa-maps — portable bundler for embeddable JAMstack maps 2026-09-10 01:53:07 +00:00
sync-dropin.mjs Public data ships without working notes; unused data files stay out of the drop-in 2026-09-16 20:16:08 -05:00
template-literal-check.mjs Scan all of library/ for backticks in shadow-CSS comments 2026-09-22 18:25:18 +00:00
theme-flash-probe.mjs Make the shell-scroll gate runnable, and catch orphan gates 2026-09-22 17:55:43 +00:00
verify-5-capabilities.mjs classify console errors in the two map gates instead of counting them 2026-09-21 14:04:18 +00:00
verify-browser-all.mjs Hand an inheritor a token that works, and stop claiming one is present without checking 2026-09-23 04:09:07 +00:00
verify-map-paint.mjs Delete the 100-list wall's dead hidden-map export, and stop it lying to a gate 2026-09-24 09:12:17 +00:00
verify-shell-scroll.mjs Serve locally the way production serves, so a bad URL fails here instead of live 2026-09-23 03:09:25 +00:00
vite-plugin-strip-shadow-css-comments.mjs Complete app-profiles->plugin-designs sweep across comments/docs; build green; layouts kept at root (load-bearing) 2026-09-17 18:18:19 +00:00
write-token.mjs write the extensionless token path the client actually requests; ignore it too 2026-09-20 09:55:39 +00:00