doxa-maps/internal
doxa-maps-88655c70 718ad723dc Check that the numbers the maps show match the numbers the source has
Every gate in this repo verifies INTERNAL consistency. check:facet-changes-map
proves the dots change and that the categories sum to 2,107 — but it asserts
that inside the page, against data the page already loaded. If the upstream
corpus shifted, the page would stay perfectly self-consistent while its legend
quietly stopped describing reality. Nothing fetched the live endpoint: not the
six data guards, not check:label-joins, not any browser gate.

That is the worst failure this product can ship, because it is invisible to
every structural check. The element mounts, the canvas paints, the counts are
formatted correctly, the partition sums. Only comparison against the SOURCE
catches a legend that is beautifully wrong — and these maps exist to say where
the gospel has not reached, so a wrong number is not a cosmetic defect.

Measured by hand first, then encoded. The cap-2 engagement legend shows
Unengaged 2,080 / Engaged 27; the live API returns 2,107 rows splitting exactly
2,080 / 27, with no third bucket and no remainder. The cap-4 dashboard KPI strip
prints "1% ADOPTED"; the live API gives 21 of 2,107, which is 1.0%. Three
independent surfaces agreeing to the unit.

The gate also asserts the partition is COMPLETE and that no category exists which
the two-row legend does not show — a third engagement value would hide rows from
the reader while every count still looked right.

The expected values are a baseline, not a law, and the failure message says so:
the corpus is living data and these numbers will move. A mismatch is a prompt to
update the legend, the KPI and the baseline TOGETHER, which is the coupling that
was missing. Updating the baseline alone would silence the gate and leave the
maps wrong.

Offline SKIPs at exit 0 rather than failing, because reporting a mismatch that
may not exist is the fail-open mistake in reverse. Negative-tested both ways:
drifting the baseline fails naming the exact category and both numbers;
an unreachable host skips and says why.

The browser user-agent is deliberate — pray.doxa.life answers 403 to a default
script UA, a trap already recorded here, and one that presents as "the data is
gone".
2026-09-23 10:54:59 +00:00
..
acceptance Session work: strobe fix, grid layout, stacked tree legend, selection camera, chip bounding, asset inheritance, gates 2026-09-20 04:49:25 +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 Checkpoint the swarm's in-flight work 2026-09-22 21:42:18 +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 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
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-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 Give nested ProfileLoader children the profile-config they require 2026-09-22 09:37:35 +00:00
check-csv-export-shape.mjs Checkpoint the swarm's in-flight work 2026-09-22 21:42:18 +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 Do not report a filter bug when the gate's own map handle went stale 2026-09-22 22:50:21 +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 Point the filter-width gate at pages that exist, and make it say so when they do not 2026-09-23 10:03:03 +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-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 Check that the numbers the maps show match the numbers the source has 2026-09-23 10:54:59 +00:00
check-library-index.mjs consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +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-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 Gate that every shipped leaf carries its own map token 2026-09-22 07:56:34 +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-profile-descriptions.mjs Gate: every shipped profile must say what it is 2026-09-22 03:23:55 +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 Catch the live-CSS backtick by parsing, not by guessing 2026-09-22 11:04:10 +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-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
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
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 Land the swarm's work: no iframes anywhere, a tree that keeps its shape, deeper facets 2026-09-22 14:51:52 +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 Let smoke:gallery report what it can actually see 2026-09-22 21:10:37 +00:00
public-hygiene-check.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
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
serve-strict.mjs Refuse to serve a half-built tree, so a gate cannot mistake one for a regression 2026-09-23 03:52:30 +00:00
settled-tree-gate.mjs Archive the repo-root staging page; the studio is the only entry now 2026-09-22 14:34:58 +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 document the leaf-deletion blind spot in check:sri and point to the settled-tree leaf-count signal 2026-09-20 06:24:43 +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 verify:map-paint now covers 11 of 12 map profiles, up from 4 2026-09-22 04:21:33 +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