doxa-maps/library/composables
Doxa Maps 1aa9a0ac99 A composite embedded bare dropped tokenUrl, and passed because a ProfileLoader sat above it
PM-tok, PRODUCTION-MATRIX.md:285. `tokenUrl` names a token SERVICE a host points at
instead of pasting a key: the element asks that URL when it was handed no token. Only
ProfileLoader ever read it. A pane composite bakes its children in rather than mounting
them through ProfileLoader, so a composite embedded BARE -- one tag on a partner's page,
which is the entire point of a composite -- dropped a tokenUrl-only config on the floor.

It worked in every place anyone looked, because a ProfileLoader elsewhere on the page
fetched and published the token: the composite was passing an exam somebody else sat.
And the failure wears the wrong face. No token is "No Mapbox access token provided",
0 tiles, no canvas -- identical to a missing `tk`, which IS threaded -- so the natural
reading is that the host mistyped their config rather than that a knob is unread.

The rule lives in library/composables, not in each composite, because it has already
been copied once (ProfileLoader.vue:132) and a third and fourth copy is how one of them
later learns to ask ALWAYS -- which a token service billed per call notices before we do.
The pure decision is split into host-token-url.js with NO framework import, because a
fresh worktree has no node_modules and a module importing vue is unloadable by the gate
that proves it right. Same shape as describeGroup keeping countryName injectable.

check-composite-token-url takes its expectation from ProfileLoader -- the contract a
composite REPLACES -- not from the composites it audits, so it cannot pass by
construction; it exercises the decision rather than grepping for it; and it finds its
subjects by a PROPERTY, a production bundle already forwarding `tk: hostToken`, so a
third composite is covered the day it is written. stack-demo has the same shape and is
excluded by its STAGE, not by name, so promoting it pulls it in automatically.

Negative-tested 5 ways. The fifth found a bug in the gate itself: /tokenUrl/ also matches
`tokenUrlX`, so the check meant to notice the contract being renamed could not fail. It
is \btokenUrl\b now. A guard that cannot fail is the one nobody ever finds by reading.
2026-09-28 15:52:47 +00:00
..
legends The packet's generated description, and the language name it prints was index-ordered 2026-09-28 13:56:06 +00:00
poster engineFor(map): build markers, popups and poster maps with the map's OWN engine 2026-09-25 18:38:17 +00:00
.gitkeep doxa-maps — portable bundler for embeddable JAMstack maps 2026-09-10 01:53:07 +00:00
host-token-url.js A composite embedded bare dropped tokenUrl, and passed because a ProfileLoader sat above it 2026-09-28 15:52:47 +00:00
printInPlace.js Export poster opens the print dialog on the poster, and downloads nothing 2026-09-28 02:01:46 +00:00
retryableAsyncComponent.js A lazy view that fails to load says so and offers Retry; map controls carry data-control 2026-09-28 11:42:54 +00:00
useAvatarGenerator.js Keep the prayer yellow to the prayer palette; other palettes keep their orange 2026-09-16 21:21:07 -05:00
useCardSurface.js The prayer-progress cards become shared components too 2026-09-27 04:14:31 +00:00
useCountryOutline.js The interactive maps fetch the web-sized boundaries 2026-09-27 03:25:59 +00:00
useCsvExport.js A CSV export honours the typed search, so the file matches the table on screen 2026-09-27 19:01:10 +00:00
useDashboardData.js Kit 4d-2: useDashboardData moves to the library 2026-09-27 06:04:09 +00:00
useDashboardLayout.js RTL drag: the direction probe reads the handle, and two handle margins become logical 2026-09-27 06:42:54 +00:00
useDashboardSearch.js Kit landing 4a: the shared search, because the facet rail cannot move yet 2026-09-27 02:17:35 +00:00
useDocumentFont.js Vendor Oswald, because Bebas Neue cannot render Russian at all 2026-09-24 21:05:12 +00:00
useEdgeScrollAffordance.js doxa-maps — portable bundler for embeddable JAMstack maps 2026-09-10 01:53:07 +00:00
useFacetAggregation.js Kit 4c-1: the counting half, and the bucket that said "Other" in every locale 2026-09-27 04:14:13 +00:00
useGeocoderSearch.js 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
useHostTokenUrl.js A composite embedded bare dropped tokenUrl, and passed because a ProfileLoader sat above it 2026-09-28 15:52:47 +00:00
useMapAttribution.js The map credit names the basemap that was actually drawn: OpenFreeMap / OpenMapTiles under MapLibre 2026-09-26 08:51:38 +00:00
useMapClustering.js useMapClustering: no console.log in shipped bundles 2026-09-28 02:01:47 +00:00
useMapData.js The prayer map's legends see the pins it draws 2026-09-27 02:17:35 +00:00
useMapEvents.js Map popups show data as text: a people-group name or country field can no longer run script 2026-09-26 05:50:24 +00:00
useMapFly.js useMapFly's zoomToLegendRow comment names readSourceFeatures, not the engine-private _data 2026-09-28 10:13:29 +00:00
useMapInstance.js Maps start their engine download at setup, and the dashboard's country boundaries download beside the basemap 2026-09-28 02:38:49 +00:00
useMapLayers.js The interactive maps fetch the web-sized boundaries 2026-09-27 03:25:59 +00:00
useMapProvider.js Three maps asked the window which engine drew them; now they ask the map 2026-09-26 17:28:46 +00:00
useMapSelection.js doxa-maps — portable bundler for embeddable JAMstack maps 2026-09-10 01:53:07 +00:00
useMapTheme.js Research map: religion joins prayer, adoption and engagement on the night look; only people, regions and languages are monochrome day 2026-09-16 21:01:37 -05:00
useOptionalT.js gospel takes the locale-honouring fallback, and it is their call that made it 2026-09-26 22:06:59 +00:00
usePosterPrints.js A prayer packet printed from the browser includes its evangelical-share page 2026-09-28 13:57:23 +00:00
usePplrInstance.js legend: open on the UPG-100 list, which is what the Driver asked for first 2026-09-24 17:59:57 +00:00
usePrayedLocally.js Public builds carry zero platform surface + copy-embed on staging 2026-09-16 05:13:44 +00:00
usePrayerStatistics.js doxa-maps — portable bundler for embeddable JAMstack maps 2026-09-10 01:53:07 +00:00
useSearch.js Religion families follow the reader; the value they filter on does not 2026-09-27 01:57:23 +00:00
useSelectedPin.js engineFor(map): build markers, popups and poster maps with the map's OWN engine 2026-09-25 18:38:17 +00:00
useSelectionBus.js D3: the bus can point at a record without choosing it 2026-09-27 02:17:35 +00:00
useSelectionCamera.js Dashboard kit, landing 3: the camera and the CSV exporter 2026-09-27 01:16:52 +00:00
useShadowStyles.js Every shadow root honours prefers-reduced-motion 2026-09-27 05:05:04 +00:00
useShareableView.js A shared link reads a list separated by , or |, so partner links already published keep working 2026-09-27 19:10:08 +00:00
useSharedMapToken.js Engine and token props: a token-service URL is honoured, Clear clears, and a pending token is awaited 2026-09-26 03:34:15 +00:00
useTextHighlight.js Two plugins built the same search highlighter; now there is one 2026-09-27 01:16:50 +00:00