doxa-maps/internal
doxa-maps-88655c70 3a2cf0e8f2 Research Gallery: embed on someone else's page, in both modes
The gallery is going onto the DX-life research page, and nothing had tried
it on a page it didn't generate. From a second origin, a bare
<script> + <doxa-maps-spa> drew over the host's header, and 8 of 13 tabs
showed an error card.

Three causes, each fixed in the shell:

- No :host box. The layout root is position:absolute, so it anchored to the
  viewport instead of the element. :host is now a positioned block with a
  default height the host can override.
- A foreign page sets none of the globals a leaf page bakes. Every data call
  hit the host's own origin and got HTML back. The manifest now publishes a
  `runtime` block (apiBaseUrl + the public token every leaf already carries).
  The shell fills window.MAP_APP_API_URL / window.MAP_TOKEN only when the page
  hasn't set them, and forwards tk in profile-config.
- Nested elements resolved assets to <tree>/../assets, a sibling pool the
  publisher doesn't ship (404 live). The shell now forwards an absolute
  <tree>/assets. This also fixes the iframe mode, where Cities with Internet
  and Gospel Resources were failing the same way.

Also adds a `tab` attribute (plus ?tab=) to deep-link into one map, and a
`tab-change` event for the host.

check:gallery-embed drives every tab in both modes from a second origin. It
passes here and fails on the previous tree (7 findings).

EMBED.md documents the contract. The Traefik template now sends CORS for the
whole tree: live manifest.json answers without Access-Control-Allow-Origin.
2026-09-24 19:03:37 +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
_serves-this-tree.mjs Queue the browser gates, and let them serve their own tree 2026-09-24 17:43:32 +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 Browser gates now prove the server is serving THIS checkout 2026-09-24 12:54:35 +00:00
check-aria-labels-localized.mjs legend: the controls no longer read their own i18n key aloud 2026-09-24 13:16:18 +00:00
check-backlog-status-enum.mjs The backlog-status enum was too narrow, not the nine cards wrong 2026-09-24 11:58:39 +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 check:done-evidence knew one card schema and failed the best-evidenced cards on the board 2026-09-24 11:38:17 +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 Merge main into bundler-2/work 2026-09-24 17:00:25 +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 Browser gates: prove the server is THIS build before believing it 2026-09-24 17:00:11 +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-gospel-coverage-consistent.mjs Add Scripture Earth, and lift 28 groups off "nothing found" 2026-09-24 17:46:27 +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-export-reachable.mjs country-posters: a phone can export too — and the gate was shutting the panel 2026-09-24 18:21:35 +00:00
check-legend-info-localized.mjs legend: the info popovers explain the map in the reader's own language 2026-09-24 12:49:04 +00:00
check-legend-matches-source.mjs gates: two unwired checks were red on main, and nothing could tell us 2026-09-24 15:53:58 +00:00
check-library-index.mjs library-index gate: ask whether the menu drifted, not whether a file is older 2026-09-24 13:29:58 +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 Browser gates: prove the server is THIS build before believing it 2026-09-24 17:00:11 +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 Wire the seven gates that could run, and make wave membership visible 2026-09-24 11:24:01 +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 Queue the browser gates, and let them serve their own tree 2026-09-24 17:43:32 +00:00
check-packet-render.mjs packets: give CI something to check, instead of a sweep that always SKIPs 2026-09-24 14:33:36 +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 Sweep every browser gate for English-text matchers; fix the fifth and last 2026-09-24 11:00:29 +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 Queue the browser gates, and let them serve their own tree 2026-09-24 17:43:32 +00:00
check-quoted-scripts.mjs consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
check-research-gallery-embed.mjs Research Gallery: embed on someone else's page, in both modes 2026-09-24 19:03:37 +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-snapshot-guard.mjs A half-finished catalogue fetch can no longer overwrite a good one 2026-09-24 11:59:48 +00:00
check-spa-tab-order.mjs spa tab-order gate: the product honoured the Driver, the gate over-read him 2026-09-24 16:56:10 +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-packet-fixture.mjs packets: give CI something to check, instead of a sweep that always SKIPs 2026-09-24 14:33:36 +00:00
generate-tree.mjs Research Gallery: embed on someone else's page, in both modes 2026-09-24 19:03:37 +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 Queue the browser gates, and let them serve their own tree 2026-09-24 17:43:32 +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 Browser gates now prove the server is serving THIS checkout 2026-09-24 12:54:35 +00:00
verify-gospel-map.mjs Gospel presentations in 94 languages, from Cru's API rather than its parked domain 2026-09-24 13:51:56 +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