Commit graph

115 commits

Author SHA1 Message Date
Doxa Maps
6d48d8b178 Rebuild the Share button's importers for the Embed tab's three codes (shareable pages P3b); tree and SRI regenerated
The 14 bundles that import ShareButton (or read the share catalogue area), built
one at a time on the merged pilot cee32f273, then bun run tree + fix:sri. The
build-config key and define reach every bundle; the others are byte-identical
(the in-lock freshness check runs on every bundle).
2026-10-03 08:33:24 +00:00
Doxa Maps
f6594b77c7 Rebuild the Share button's importers for the Share menu (shareable pages P3); tree and SRI regenerated
The precondition's scope against the pilot (its own step-4 rule): every bundle
that imports ShareButton/MapControlMenu or reads the share catalogue area, plus
the P1 shells. Built one bundle at a time, then bun run tree + fix:sri.
gates:pre 141/0/1, gates:post 99/0/16.
2026-10-03 06:48:36 +00:00
Doxa Maps
34073e7c13 Shareable pages P1: rebuild the reached bundles from the merged source, then the tree and SRI 2026-10-03 05:37:18 +00:00
Doxa Maps
1ca13f60ae Rebuild every bundle for the packet v2 (the renamed catalogues are shared areas): poster-render and packet-strings re-pinned, the tree and SRI regenerated 2026-10-02 21:56:58 +00:00
Doxa Maps
e855e6f371 Rebuild the wording's bundles on the merged pilot
The merge took the pilot's built files where both sides had rebuilt them; this rebuilds the landing's
freshness scope (22 bundles, now including bless-india-posters) on the merged source, then the tree and
SRI. Against the pilot's bundles, with data-v ids normalised and the old->new wording applied, eight are
identical, gospel-resources differs only by minifier renaming, and gospel-internet's one further change
is notice.pin no longer passing {country}. Pages and manifests differ from the pilot only in integrity
hashes.
2026-10-02 18:21:00 +00:00
Doxa Maps
bc1e82a93e Rebuild 7 bundles for phone prints that save what the preview shows, and regenerate the tree and SRI 2026-10-02 17:24:01 +00:00
Doxa Maps
73db18cc51 Rebuild every bundle for the measure-once host floor (ProfileLoader is in each), and regenerate the tree and SRI 2026-10-02 10:14:40 +00:00
Doxa Maps
0a5d2fea53 Rebuild the bundles for panel-close and the legend drag (MapControlMenu, LegendMobile), and regenerate the tree and SRI 2026-10-02 06:59:06 +00:00
Doxa Maps
4649304e2a Rebuild every bundle for the panel-opens-pointer-away fix (MapControlMenu and MapInfo), and regenerate the tree and SRI 2026-10-02 06:12:49 +00:00
Doxa Maps
8683107b46 Rebuild every bundle for the phone top bar and the host-sized map floor (ProfileLoader is in each), and regenerate the tree and SRI 2026-10-02 05:31:28 +00:00
Doxa Maps
f4066c36fc Rebuild every bundle for the phone shell modes and the svh map floor (ProfileLoader is in each), and regenerate the tree and SRI 2026-10-02 04:49:01 +00:00
Doxa Maps
f8b8609854 P: rebuild 7 bundle(s) from the merged source, and regenerate the tree and SRI 2026-10-01 07:21:53 +00:00
Doxa Maps
f7275efd59 P: rebuild 7 bundle(s) from the merged source, and regenerate the tree and SRI 2026-10-01 06:45:02 +00:00
Doxa Maps
d3b879c940 P: rebuild 22 bundle(s) from the merged source, and regenerate the tree and SRI 2026-10-01 06:01:49 +00:00
Doxa Maps
47c5c68c69 Merge origin/development into gospel/gi-csv-guard 2026-10-01 05:37:47 +00:00
Doxa Maps
650b478a3e Regenerate the tree: the leaf pages' print-host comment, reworded (66 pages, 0 bundles) 2026-10-01 00:07:35 +00:00
Doxa Maps
757327932b Regenerate the tree: the pages' A9 hint comment, reworded (0 bundles) 2026-09-30 22:36:47 +00:00
Doxa Maps
56f149afeb Rebuild gospel-internet for the CSV guard, and regenerate the tree 2026-09-30 21:35:35 +00:00
Doxa Maps
b4dd84c1b5 Rebuild the legend batch's bundles (LegendMobile + PinHint) from the merged source, and regenerate the tree and SRI 2026-09-30 12:42:41 +00:00
Doxa Maps
2f49d2c382 Rebuild the PILLFAB train's union from the merged source (PinHint + the corner ☰ + LegendMobile + development), composites after their children, then the tree and SRI 2026-09-30 10:21:43 +00:00
Doxa Maps
fdb06b8b56 Phone pages: the app's height no longer changes as the address bar hides or shows
The host page of every full-page map (and the Plugin Studio) sized the
element to the viewport in a way that tracks the phone's address bar:
- the built fixed-viewport leaf used position:fixed with inset:0, which
  follows the DYNAMIC viewport, so the map and its legend sheet resized
  on every scroll that moved the bar;
- the Plugin Studio page and the dev server's leaf and studio pages used
  100vh, the LARGE viewport, taller than the view while the bar shows, so
  the page itself scrolled by the bar's height and the app seemed to
  resize.
All four now use height:100svh (100% first as the fallback where svh is
unknown), anchored top-left, and set --profile-min-h:0 so ProfileLoader's
100dvh floor cannot grow the element when the bar hides. On a desktop svh
equals the viewport, so nothing moves there. Scroll-page leaves (the
cap-4 stacks) are unchanged.

Regenerated the tree: 51 leaf pages and the Plugin Studio page change
only this rule and its comment; no bundle changes.
2026-09-30 09:31:46 +00:00
Doxa Maps
9c67a630db Rebuild the nine bundles the print rollout reaches from the merged source in the lock 2026-09-30 08:23:54 +00:00
Doxa Maps
ce27cc02a6 Rebuild the nine bundles the print rollout reaches 2026-09-30 07:37:49 +00:00
Doxa Maps
3c87d5c033 The pin-hint pill counts the map credit only when it lies below the pill
A host may move the engine's credit to the TOP of the map (a phone layout with the sheet flush at the
bottom). creditFloor() would then have used a credit near y=10 as the floor, and syncAttribClearance()
would have reserved the whole map height (capped at 120px), so the pill lifted itself for nothing. Now
a credit in the upper half of the pill's layout parent is not counted: no floor, and the 20px default
clearance. Every credit is at the bottom today, so this changes nothing yet.
Every bundle rebuilt (PinHint ships through ProfileLoader), composites after their children, then the
tree and SRI.
2026-09-30 06:35:15 +00:00
Doxa Maps
d287dca663 The pin-hint pill: dismissed by the first pin tap, and above the gallery's menu button
- It is dismissed when the reader taps a pin, the gesture it teaches. The signals are
  uiStore.selectedPeopleGroup (the maps that select through uiStore.selectPeopleGroup) or a
  'dxmaps:pin-selected' event inside the map's root (a map with its own selection). It was left
  standing over the detail card that the tap had opened. A pan still does not dismiss it.
- Wide, the pill reached the gallery's round menu button (bottom-left). Its bottom now takes the
  larger of the credit clearance and --map-fab-clearance, which the layout publishes only while the
  button is rendered.
- Every bundle rebuilt (PinHint ships through ProfileLoader), composites after their children, then
  the tree and SRI.
2026-09-30 06:11:45 +00:00
Doxa Maps
04a00ebc54 Rebuild every bundle for the pin-hint pill (PinHint ships in every bundle through ProfileLoader), then the tree and SRI 2026-09-30 05:48:26 +00:00
Doxa Maps
3d5cd9ab74 Rebuild 5 library-reach composites left stale by the parallel build (all-people-groups, cities-internet, demo-map, gospel-internet, prayer-walk-planner) 2026-09-30 05:28:47 +00:00
Doxa Maps
f6c2e92846 Full tree rebuild on merged development (BP-C3 header buttons + PP2 grace) 2026-09-30 04:48:50 +00:00
Doxa Maps
08e7e3c681 Rebuild the 16 bundles the PinHint floor reaches, and the gallery for MapInfo's scrim, and regenerate the tree 2026-09-29 23:45:36 +00:00
Doxa Maps
89794dc883 Rebuild the 17 bundles the PinHint fix and the gallery's example links reach, and regenerate the tree 2026-09-29 22:33:12 +00:00
Doxa Maps
3302f424c8 Rebuild the fifteen consumers this branch's library changes reach
This branch changes five library files -- ProfileLoader.vue, LifeCalendar.vue,
packetCharts.js, RegionSectionCard.vue and packet/countrySheet.js -- and
ProfileLoader alone is carried by sixteen bundles. Built every one of those
sixteen, one at a time (memory is the limit on this box), then regenerated the
tree and refreshed SRI.

FIFTEEN CHANGED, which is the measurement that matters: all-people-groups,
cities-internet, country-map, country-posters, demo-map, doxa-research-map,
doxa-simple-map, gospel-internet, gospel-resources, my-upg-100-list,
pplr-data-maps, research-dashboard, template-bundle, upg-neighbor and
wall-of-people-groups. Only regions-dashboard was already current, because it was
rebuilt for the label fix.

A previous claim of mine that this tree was fresh rested on `bun run tree` and
`fix:sri` producing no diff. That proves neither: tree does not rebuild bundles,
and SRI only proves a leaf loads the bundle its integrity names. The test that
distinguishes the two is building the consumers and seeing whether their bytes
move -- and fifteen of them did.

The shadow-style label fix survives the rebuild: ,"regions-list") appears once
and ,"region-section-card") once in regions-dashboard.js.
2026-09-29 16:42:04 +00:00
Doxa Maps
769d863f99 Rebuild the twenty consumers the merged library changes reach
The branch merges thirteen shared library files, including two new modules, so
every bundle that imports them was carrying older bytes than its source.

Found by building each of the twenty-two bundles the freshness step names, one
at a time: all twenty-two build cleanly in 8-24 seconds, none fails and none
hangs -- and twenty of them produce different bytes. Big Picture alone moves
510 bytes.

That also corrects a check I trusted earlier in this branch. `bun run tree`
reported zero changed files and I read it as "the consumers are fresh". It is
not: tree stages assets and regenerates leaf pages, and does NOT rebuild the
bundles, so it can report a clean tree over twenty stale ones. Only a build
answers that question.

Hashes rebaked and check:sri passes across every leaf.
2026-09-29 16:26:23 +00:00
Doxa Maps
b005629f75 Merge remote-tracking branch 'origin/development' into dx-base/handoff-integration 2026-09-29 15:31:23 +00:00
Doxa Maps
2efde93a31 Rebuild the five composites the handoff merges touched
BUNDLE=<name> bun x vite build for cities-internet, gospel-internet,
gospel-resources, plugin-studio and rudder-voice, then bun run tree and fix:sri.
Regenerated on this tip, never merged: the scan refused the previous sha with
gospel-internet stale (committed 7361a689e3a6 against a rebuild of ce15dd0ba73f).
2026-09-29 15:02:05 +00:00
doxa-maps
3ea2e3ce69 A9 leaf hints: cover a composite whose engine is in a composed child bundle
dx-shepherd/rega: both production composites should get hints, but 37/27 showed
only regions-mfe was reclassified. research-map-plus-grid was still bare: it
composes doxa-research-map (74 engine refs) but its OWN bundle has 0, so keying
on the own-bundle signal alone missed it.

builtBundleLoadsEngine now also scans the bundles a leaf `composes`, resolving a
composes entry that names its child by element TAG (stack-demo composes
"research-dashboard-map", bundle "research-dashboard") through an
element→bundle map built from the scanned bundles. So a composite is hinted
when its own bundle OR any composed child's bundle loads an engine; big-picture
(composes only non-maps) stays out.

Result: both production composites hinted (regions-mfe via own bundle,
research-map-plus-grid via its child), and stack-demo too (it composes a map).
check:leaf-hints mirrors the same tag→bundle resolution from the manifest, so
gate and generator can't drift: PASS 41 hinted / 23 bare. Poison-tested the
composes-child case (stripped → fails) and the pure-non-map case (big-picture
given a hint → fails). Also carries the comment reword from the token-ladder
correction across every hinted leaf.
2026-09-29 14:40:28 +00:00
doxa-maps
fcebf2c589 A9 lever 1: engine-aware resource hints on map leaves
A cold map ran serially: leaf HTML, then the bundle (250-470 KiB gz, parsed),
then only the engine (from cdn.jsdelivr.net or api.mapbox.com), then the style
host, tiles, and data. Four origins discovered one after another, none
pre-connected. That waterfall is the shape behind A9's 3-5 s cold map.

generate-tree now emits, in each MAP leaf's <head>, a preconnect for the
engine origin, the style host and the data origin, and -- only on the 'auto'
leaf, which carries no engine <script> today -- a preload of the engine, so
DNS/TLS and the engine download start alongside the bundle instead of after
it. A non-map leaf (grid/card/chart-table/app-shell/composite) gets nothing.

The engine is decided at build time from the SAME inputs the runtime ladder
reads (profile-config.provider, then a baked token or a token endpoint; 'auto'
with no token path is MapLibre keyless), so the hint and the ladder cannot
disagree. Every URL, integrity and crossorigin comes from
library/constants/cdn.js, so a preload cannot drift from ensureEngineScript's
tag. The one case a static hint cannot foresee -- an explicit ?provider= or
window.MAP_PROVIDER overriding the build default at runtime -- costs one unused
preconnect.

New gate check:leaf-hints (gates:post): a map leaf without hints fails, a
non-map leaf carrying a map-engine hint fails, and a hint origin must be one
the code uses. PASS: 36 map leaves carry hints, 28 non-map leaves carry none.
Poison-tested both sides.

Unlanded (dx-base/a9-leaf-hints); the bundled-vs-shared-vs-today trade-off
report and any landing wait on rega's timing and regions' tiles.
2026-09-29 14:40:27 +00:00
Doxa Maps
9db9f519d4 Rebuild cities-internet, gospel-internet and gospel-resources
Regenerated on this base rather than carried over: BUNDLE=<name> bun x vite
build for each, then bun run tree and fix:sri.

Three integrity hashes move, one per bundle. The MapLibre and Mapbox CDN pins
are byte-identical on both sides, and the only bundle paths in any changed
manifest line are ./cities-internet/, ./gospel-internet/ and ./gospel-resources/.

Verified in the BUILT output, not only in source: the shipped
cities-internet.js carries position:relative on :host, which is the declaration
the partner-page overlap depends on.
2026-09-29 14:03:14 +00:00
Doxa Maps
004d1d3f51 Rebuild the consumers main left stale (build owner, README rule 5)
check:composite-freshness found stale on main: none. Rebuilt, tree + SRI
regenerated; the landing precondition (fresh, one folder, SRI) passed in main-capture scan.
2026-09-29 13:45:44 +00:00
Doxa Maps
3fbed0aea2 Rebuild the consumers main left stale (build owner, README rule 5)
check:composite-freshness found stale on main: template-bundle. Rebuilt, tree + SRI
regenerated; the landing precondition (fresh, one folder, SRI) passed in main-capture scan.
2026-09-29 12:07:55 +00:00
Doxa Maps
ba619b78bf The engine rule reads as it is everywhere it is written: auto is MapLibre, token or not
Since 2026-09-28 resolveMapProvider returns MapLibre for 'auto' whether or not a token is present;
only an explicit provider selects Mapbox. Four comments still said "Mapbox when a token is
available": useMapProvider.js's own header (and its note on the `token` argument),
useMapInstance.js at the provider option, check-provider-switch.mjs's contract note, and the
PROVIDER note that generate-tree writes into every leaf page.

The leaf page's note now says what the page does: it finds a token first only when one is on offer,
because place search uses one on either engine, and the element decides the engine. The 64 leaf
pages are regenerated and differ only in that note. The three JS files change in comments only
(compared minified, without renaming).
2026-09-29 11:04:22 +00:00
Doxa Maps
051a876768 Rebuild the consumers main left stale (build owner, README rule 5)
check:composite-freshness found stale on main: doxa-maps-spa
plugin-studio
prayer-walk-planner
template-bundle. Rebuilt, tree + SRI
regenerated; the landing precondition (fresh, one folder, SRI) passed in main-capture scan.
2026-09-29 09:33:14 +00:00
Doxa Maps
4ea988a4c9 Ten facet labels froze in the boot language
GiCombos built its facets object inside provide() at setup, so T() ran once and
the result was handed to the consumer as a literal. After a live switch to Arabic
every facet name stayed in English — the labels were keyed, the keys resolved,
and the reader still saw the wrong language, because what was wrong was WHEN they
were read rather than whether they were translated.

check:frozen-labels cannot see this: every call site passes a real key and every
key exists in all eleven locales. The defect is a lifetime, not a string.

The facets are a computed now, provided through a getter so a consumer reading
.facets re-reads it rather than taking a snapshot. Demonstrated rather than
asserted: with a locale ref driven en -> ar, the old shape keeps returning
"Access" and the new one returns "الوصول".

Audited all 179 t() call sites across the three plugins by enclosing scope, not
by grep. This was the only frozen one; the six GiDrawer hits my first pass
flagged are inside a computed 60 lines up, which is why a lookback window is the
wrong tool for a lifetime question.
2026-09-29 09:06:28 +00:00
Doxa Maps
3a004068b7 Rebuild the consumers main left stale (build owner, README rule 5)
check:composite-freshness found stale on main: template-bundle. Rebuilt, tree + SRI
regenerated; the landing precondition (fresh, one folder, SRI) passed in main-capture scan.
2026-09-29 08:48:43 +00:00
Doxa Maps
9991abbdd7 Rebuild the consumers main left stale (build owner, README rule 5)
check:composite-freshness found stale on main: template-bundle. Rebuilt, tree + SRI
regenerated; the landing precondition (fresh, one folder, SRI) passed in main-capture scan.
2026-09-29 07:44:06 +00:00
Doxa Maps
51ef6f7ec4 One phone flag per map, and the leaf page follows it as well as the Gallery
A map says how it behaves on a narrow screen once, in its <profile>.meta.json:
"mobile": "desktop-only" (blocked on a phone) or "larger-screens" (opens,
under a dismissible notice). Absent means phone-ready. Until now the rule
lived only in the Research Gallery, as two hard-coded id sets, so a map
opened standalone on its own leaf page on a phone got neither the block nor
the notice.

- profile-meta.mjs knows the vocabulary; generate-tree and the dev manifest
  carry the flag into each profile's manifest entry, and generate-tree into
  the leaf page's BASE_CONFIG (with the map's name for the desktop-only
  sentence).
- ProfileLoader mounts library/components/LargerScreenNotice.vue on a screen
  under 640px: for desktop-only the profile is never mounted and a centred
  message says why; for larger-screens a slim in-flow bar sits above the map
  (it cannot cover the map's controls), dismissible per profile for the
  session, in the element's own locale and direction. Inside the Gallery it
  stays quiet: every Gallery pane now carries data-doxa-gallery.
- One text: the Gallery's two sentences moved into the library catalogue as
  messages.largerScreenNotice / desktopOnlyNotice (+ noticeDismiss), all 11
  locales moved as they were, and the Gallery reads them from there.
- The Gallery derives its rules from the manifest's flags. On a phone it
  mounts nothing until the manifest has landed: its baked first tab (Big
  Picture) would otherwise mount there before the flags say it is
  desktop-only.
- dashboard-plus-grid is desktop-only and gospel-internet/board is
  larger-screens, the two sets the Gallery held; nothing changes for either.
- check:mobile-gating now asserts the vocabulary, that each flagged leaf page
  carries its flag, the Gallery's derivation and its closed-before-manifest
  rule, that Big Picture stays desktop-only, the 11 locales, and the
  notice's mounting. Its self-test plants one failure per rule.
2026-09-29 07:31:16 +00:00
Doxa Maps
694b00991c Rebuild the consumers main left stale (build owner, README rule 5)
check:composite-freshness found stale on main: template-bundle. Rebuilt, tree + SRI
regenerated; the landing precondition (fresh, one folder, SRI) passed in main-capture scan.
2026-09-29 05:51:17 +00:00
Doxa Maps
ced1eb73ce Rebuild gospel-internet for the legend default and the print-only poster
The collapsed-legend default and the removal of the SVG download both reach the
bundle. Verified in the artefact rather than the source: the download filename
and the posterSvg key are gone, the print path remains.
2026-09-29 04:29:37 +00:00
Doxa Maps
ea610ce691 Rebuild the consumers main left stale (build owner, README rule 5)
check:composite-freshness found stale on main: none. Rebuilt, tree + SRI
regenerated; the landing precondition (fresh, one folder, SRI) passed in main-capture scan.
2026-09-29 04:14:33 +00:00
Doxa Maps
e5b7dc8afe Rebuild gospel-internet for the caption and the citation landing
The caption and its eleven locale keys reach the bundle, so this is a real
rebuild rather than a docs-only change. fix:sri reports 127 hashes already
agreed, 0 rewritten; manifest churn is this bundle and the spa manifest's own
self-reference.
2026-09-29 03:35:10 +00:00
Doxa Maps
fd118fa2b5 Rebuild the consumers main left stale (build owner, README rule 5)
check:composite-freshness found stale on main: none. Rebuilt, tree + SRI
regenerated; the landing precondition (fresh, one folder, SRI) passed in main-capture scan.
2026-09-29 02:47:12 +00:00