Commit graph

3877 commits

Author SHA1 Message Date
Doxa Maps
087f562e04 Reshoot the 174 country previews with the region hue and ink badges
The poster walls' card THUMBNAILS are stored WebP files, not generated at the
click, and all 174 were last shot on 09-25 -- teal. Since the region hue
landed, the PRINT has been hued, so both Country Posters and the Regions tab
showed a teal thumbnail above a hued poster. The Experimental section shows on
Deep Research, so that mismatch was visible.

Shot in one pass on the shared browser: 174 of 174, 0 failed, 0 retries,
23:00:37-23:10:07Z, one engine, DSF 2. Measured by the shooter: none blank (at
least 1,000 distinct colours each), and the count of sheets by their --zc hue
matches the region census exactly -- 41 Africa, 27 Asia, 27 Europe, 21 Middle
East, 18 Other, 17 Oceania, 14 North America, 9 Latin America. Asia is 27, not
28, because India has no sheet.

★ ALL 174 CHANGE, and that is the check that matters here. make-previews used to
write one directory too high (library/plugin-designs/..., library/data/posters)
while reporting success, so a reshoot could complete, look complete, and change
no served file at all. With that fixed, 174 of 174 source thumbnails, 174 of
174 full-size sources and 174 of 174 served previews differ from development,
with 0 untracked strays.

China was regenerated first with the whole-series count: 'map 174 of 174' and
'one of a 170-map set', where it had printed 'map 1 of 1' and 'a 0-map set'.
2026-09-29 23:18:26 +00:00
Doxa Maps
476989bab5 Merge remote-tracking branch 'origin/development' into regions/country-sheet-onedef
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/regions-dashboard/region-dashboards/index.html
#	public/dx-maps/regions-dashboard/regions-list/index.html
#	public/dx-maps/regions-dashboard/regions-mfe/index.html
2026-09-29 23:17:40 +00:00
Doxa Maps
a6372eea88 Regenerate the tree and SRI after merging development 2026-09-29 23:10:33 +00:00
Doxa Maps
c314e9421a Merge origin/development into studio/batch 2026-09-29 23:10:22 +00:00
Doxa Maps
aaa4b8b690 A poster tier run can be told the whole series size
China's sheet printed 'map 1 of 1' and 'one of a 0-map set'. The cause is that
generate.mjs derives the series facts from the zones THIS run built --
Object.assign(SERIES, seriesFacts(zones)) -- and the two sheet tiers are separate
runs. The 3x4 tier is China alone, so totalLists came out 1, and the body
sentence rounds it (Math.round(1/10)*10 = 0) into a 0-map set.

SERIES_TOTAL overrides the derived count so a tier run can state the size of the
whole series. Regenerated China with SERIES_TOTAL=174 SERIES_INDEX=174: it now
reads 'map 174 of 174' and 'one of a 170-map set', which is what the other 173
sheets' body text already says (174 and 173 both round to 170).

NOT a defect, and worth recording because it reads like one: the header's exact
count and the body's rounded one are the SAME number by design. 173 exact and
170 approximate are not two answers.

The 173 3x3 sheets still say 'of 173' where the set is 174. Regenerating them
plus a full reshoot is about 28 minutes against tonight's hard switch, the body
text is identical either way, and the difference is only visible with two sheets
side by side. Run BOTH tiers with SERIES_TOTAL=174 to close it.
2026-09-29 23:07:20 +00:00
Doxa Maps
0cff02817f Rebuild regions-dashboard after merging development
41 commits of development merged; the merge conflicted only on built output,
resolved by regenerating rather than picking a side, so neither the countrySheet
region forwarding nor development's library changes are lost.
2026-09-29 23:02:44 +00:00
Doxa Maps
baa60ba647 Merge remote-tracking branch 'origin/development' into regions/country-sheet-onedef
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/regions-dashboard/region-dashboards/index.html
#	public/dx-maps/regions-dashboard/regions-dashboard.js
#	public/dx-maps/regions-dashboard/regions-list/index.html
#	public/dx-maps/regions-dashboard/regions-mfe/index.html
2026-09-29 22:59:27 +00:00
Doxa Maps
f3b1566c76 Rebuild doxa-maps-spa after the MapInfo pointer rule
MapInfo is imported by the gallery, so the rule is compiled into this bundle.
landing-preconditions step 4 named doxa-maps-spa alone; built with BUNDLE, then
tree, then fix:sri.
2026-09-29 22:51:12 +00:00
Doxa Maps
2d764b740d Big Picture's info button sits above its filter bar, so it can be clicked
At top 46px the button lay in the empty end of Big Picture's filter area, but that bar is a
positioned layer (z-index 55) painted over the button (z-index 20): nothing opened on click (rega,
1440, en and ar). The filter area wraps with width, so no spot below it is free at every width (at
1024 the stats row moves under a fixed offset). pos.raise lifts the BUTTON to z-index 60; the one-time
pointer stays under the bar, so no filter is covered even visually. Measured on the built tree: no
interactive element or text under the button, the button topmost at its centre, and a click opens the
popup, at 1440, 1024 and 800, en and ar.
2026-09-29 22:48:21 +00:00
Doxa Maps
3b0fb958e1 MapInfo: the one-time nudge is desktop-only, at a measured threshold
The "What can this map do?" pointer is anchored beside the ⓘ and extends ~213px
INWARD, across whatever the tab puts in its top strip. Worst overlap per width,
measured on Deep Research on the shared browser, on 99c22caf7:

     390   Regions "Region Dashboards" 1416px^2   UPG-100 1428px^2
     768   Cities legend 6560   Gospel legend 6560 + input 6240   Regions 4200
     900   Cities legend 2432   Gospel legend 2496 + input 2176   Regions 3696
    1024   Cities CLEAN         Gospel CLEAN                      Regions 2100
    1200   CLEAN                CLEAN                             CLEAN
    1440   CLEAN                CLEAN                             CLEAN

★ IT IS NOT A PHONE PROBLEM, which is how it was first reported and how I first
fixed it. It persists to 1024 and only clears near 1200, so the max-width:600px
version I wrote first would have left 768, 900 and 1024 broken on four tabs.
Two things found that: gospel counted PANELS (.gm-legend/.gm-sheet) as well as
controls -- a control-only probe misses a legend entirely -- and upg100 measured
the same shape on their own tab (768 over "Prayer Resources" and "Map", 1024 over
"Map", clear at 1200+), in en and ar.

★ ARABIC IS MEASURED, not argued. My first attempt used ?lang=ar, which does not
switch the locale -- the page stayed dir=ltr and I reported that run as invalid
rather than as an ar pass. Via DX Life's /ar/ route (dir=rtl confirmed) the
pointer is hidden and clean at 390, 768 and 1024, and at 1440 it mirrors to the
start side (x=104) and is clean there too.

★ TWO OTHER SHAPES WERE MEASURED FIRST AND BOTH WERE WORSE. Stacking it below the
button traded one collision for five: Gospel's "Resources found" chip (2010px^2)
plus the zoom +/- of Prayer Progress, Big Picture and Simple Research. Hiding
only its text shrank it to 30px but still left 675px^2 on "Region Dashboards" and
900px^2 on Gospel's search input.

⚠ NOT A PLACEMENT CHANGE, and an earlier draft of this got it wrong. It also
pinned the button's inline side at narrow widths; studio's pos.narrow values have
since landed and the buttons now sit at x=8, 12, 294 and 346 across the seven
tabs at 390. A pinned inset-inline-* here wins by specificity and would have
silently flattened every one of them. The button is placement's business; this
rule is only about the hint. 0 added lines declare --map-info-side; 0 touch
.mi-btn.

Its own block rather than the existing 600px one, which also full-screens the
dialog and has nothing to do with this.

VERIFIED AFTER THE CHANGE, en and ar: pointer hidden and 0 overlaps at 390, 768
and 1024 on Cities, Gospel, Regions and UPG-100; present and clean at 1200 and
1440.

NOT FIXED HERE: at 1440 Big Picture's pointer lies over the Religion filter by
1050px^2. Stacking it below the button there does not clear it -- it relocates it
to "Adopted" 561 + "1%" 425. The only single rule that clears that too is hiding
the pointer at every width, which deletes the affordance where it does fit. So
BP-1440 wants a per-tab placement value or a known-minor ruling; it is
pointer-events:none, so the filter still opens.
2026-09-29 22:45:49 +00:00
Doxa Maps
e3c631932f Merge origin/development into studio/batch (upg100's example images) 2026-09-29 22:33:34 +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
1c5a6bd589 On a phone, Cities' info button takes the corner above its zoom column, like Gospel's
At 390 Cities' legend spans the same width as Gospel's (344px), and side 56px put the button on
the end of the legend title's first line (gospel's measurement; a probe that also counts visible
text under the button reports the same, 236px2). narrow side 4px, as Gospel.
2026-09-29 22:28:52 +00:00
Doxa Maps
838f6c14b6 Merge remote-tracking branch 'origin/development' into upg100/examples 2026-09-29 22:25:44 +00:00
Doxa Maps
8e081cea44 UPG-100's and Simple Research's popups show the packet and the card deck
UPG-100's info popup lists its Middle East Core poster, then the full packet's 12 pages and the 70-card
deck (upg100's pre-generated files). Simple Research shows the same 12 pages, captioned "Example
packet: Middle East Core": same renderer, method and 'full' variant, but a UPG-100 zone's data, so it
is labelled as an example rather than passed off as a Simple Research selection.
2026-09-29 22:18:35 +00:00
Doxa Maps
c8fde78522 Merge remote-tracking branch 'origin/development' into bundler-2/dirclear-ready 2026-09-29 22:18:12 +00:00
Doxa Maps
04cf5ea9e6 Merge exp-shepherd/pinhint-maplibre (PinHint clears MapLibre's credit) 2026-09-29 22:17:54 +00:00
Doxa Maps
e704bdbbf8 Merge remote-tracking branch 'origin/development' into upg100/examples 2026-09-29 22:17:24 +00:00
Doxa Maps
99c22caf72 Merge origin/development into studio/examples 2026-09-29 22:14:22 +00:00
Doxa Maps
9c5ac8094b The UPG-100 info popup's examples: Middle East Core's packet pages and card deck
Twelve packet pages and seventy prayer cards, rendered from the current
renderers (people-based knows-Christ page, page-filling grids and charts,
sharp card photos) and shot in the fleet's shared browser: pages at 1500px
reduced to 1200px wide, cards at 480x672, WebP q80, 2.8 MB. They ship under
previews/examples/middle-east-core/, which the existing previews staging
copies into the tree, and the popup's pages and deck examples read them.
Middle East Core is the packet covering the most people in unengaged groups
(IMB GSEC 0-1).
2026-09-29 22:07:17 +00:00
Doxa Maps
e40077a50c PinHint clears MapLibre's credit too, so the pill stops covering it on phones
syncAttribClearance() measured the strip it must clear from Mapbox's credit
(.mapboxgl-ctrl-attrib) and our own (.doxa-attribution), never from MapLibre's
(.maplibregl-ctrl-attrib). MapLibre is the default engine. With no match, the
clearance stayed at the 20px fallback. On a phone the MapLibre credit wraps to two
lines, and the "Tap a coloured dot" pill covered it: a licence-required credit
hidden on every map that mounts the hint.

Measured at 390x844 on DX Life's home page (Prayer Progress), on the shared
browser: MapLibre en and ar, pill over the credit by 35px with the clearance at
20px; Mapbox, clearance 72px and 0px overlap.

The selector now also takes .maplibregl-ctrl-bottom-right .maplibregl-ctrl-attrib
and the MapLibre form of our own credit line. The existing measure (the strip from
the credit's top to the box's bottom) and its ResizeObserver then apply unchanged.
Proved on the live DOM, inside the map's shadow root: on MapLibre the old selector
finds nothing and the new one finds the credit; on Mapbox both find it.

Library only. Every ProfileLoader consumer needs a rebuild to ship it.
2026-09-29 22:03:22 +00:00
Doxa Maps
b9514d68d3 On a phone the info button takes each tab's free corner
At 390 the desktop offsets landed on each composite's own top chrome: Regions' and UPG-100's view
selector and Gospel's search box (probe, en and ar). A tab's pos can now carry `narrow`, laid over
it while the shell is narrow (max-width:760px): Regions and UPG-100 put the button at the START of
their strip, which is empty on a phone; Gospel takes the corner above its zoom column. The same
probe then reports no interactive element under the button on any tab, 1440 and 390, en and ar.
The one-time pointer still lies over the selector or search box until first opened; it takes no
clicks (pointer-events:none).
2026-09-29 22:02:08 +00:00
Doxa Maps
a40f5ac686 Merge remote-tracking branch 'origin/development' into upg100/fill-2 2026-09-29 21:58:39 +00:00
Doxa Maps
c79e26a089 Middle East Core's stored poster and preview, regenerated with tonight's renderer
The stored poster (data/posters) and its wall preview predated the ink pin
badge: 57 pin numbers drawn white on the zone hue, 1.44:1. They are what the
UPG-100 info popup shows and opens ("Open full size"). Regenerated from the
current poster-render in its stored 3x4 format (1500x2000) and published;
the pin numbers are now white on #1c1c17, 17.10:1. The preview and the
1500px download are made from a 3000px shot of the regenerated sheet with
make-previews' own sizes and qualities (a 3x4 sheet now makes a 420x560
thumbnail; the wall letterboxes it). The other 27 stored zone posters are
fallback-only and follow after the demo.
2026-09-29 21:50:51 +00:00
Doxa Maps
81a84138c9 Regions and UPG-100: the info button sits clear of their Share button too
A geometry probe (every visible interactive element in every shadow root, intersected with the
button's box, 7 tabs in en and ar at 1440) found the default position covering each composite's Share
button exactly, which no screenshot showed. They take side 56px like the map tabs. With that, the
probe reports no element under the button on any tab in either direction; before this branch it
reported Zoom in/out under it on Prayer Progress, Cities and Gospel and Share on Big Picture.
2026-09-29 21:40:54 +00:00
Doxa Maps
30ca27a84f README: Deep Research as DX Life now publishes it, and development as the branch work lands on
From dx-maps' measurement on development 17d1a07cf; docs only.
Required, because the README contradicted the final page layout (/research shows the research map by
itself, with a link to /deep-research; /deep-research holds the gallery):
- The drop-in paragraph said DX Life's /research is filled with the Research Gallery. It now says the
  drop-in copies the folder into public/dx-maps, and /research shows the research map with a link to
  /deep-research, which holds the gallery as Deep Research.
- The JavaScript-embed section:
  - heading, lead and "one embed replaces the research map" now describe /deep-research;
  - the screenshot shows an earlier build (the gallery on DX Life's research page, the tabs in the old
    order), so its alt text and a caption now say so. A reshoot is rega's.
Also, each a one-line factual fix (the README's structure is unchanged):
- The name, once where the gallery is introduced: the Research Gallery, which DX Life publishes as Deep
  Research. The other 22 mentions and the headings, whose anchors other text links to, are unchanged.
- 7 vs 8 production maps: the eighth is the country map, for DX Life's country pages, not in the gallery.
- development is where work lands, and main moves only on a publish: the goals table, the swarm
  section's two sentences, and the glossary.
- Both production grids now follow the gallery's section order (Prayer Progress before UPG-100 List).
- The embed heading's status reads "✅ works today", the README's own legend for ✅, instead of "production":
  the page is not live on DX Life's production site yet (dx-maps' pre-read).
check:readme-size, check:doc-scripts, check:no-new-driver-references and check:link-coverage pass.
2026-09-29 21:37:17 +00:00
Doxa Maps
9013d5cf46 Rebuild the five packet consumers for the page-fill re-shape, and regenerate the tree 2026-09-29 21:36:53 +00:00
Doxa Maps
190e7665a7 The packet's low pages fill the sheet: measured, then re-shaped
Measured in a browser (content's bounding box against each sheet, en/de/ru):
the knows-Christ grid ended 72% of the way down its sheet (478px of blank
paper below), and the two single-chart sets pages 60% and 69% (702px and
525px). The same 5,200 boxes now lay out 65 x 80 in 14.5px squares, which
spends the height on bigger boxes; the sets charts (SVG, so they scale) grow
from 960px to 1320px (bounded, nothing below it) and 1240px (centered, room
for its ring legend, which widens with it). Now 88%, 79% and 84% of the
height, with no page clipped in en, de or ru. The width classes are hung on
the row (set-solo-<kind>), not on the page, so no page class name enters the
shared stylesheet.
2026-09-29 21:34:14 +00:00
Doxa Maps
c0d9592149 make-previews wrote every WebP one directory too high
REPO was os.path.join(HERE, '..', '..'), and HERE is <root>/library/scripts/posters
-- so REPO resolved to <root>/library, not the repo root. Both outputs went to
directories nothing reads and nothing serves:

    library/plugin-designs/<profile>/assets/previews/   instead of plugin-designs/...
    library/data/posters/                              instead of data/posters/

★ IT REPORTED SUCCESS WHILE DOING NOTHING USEFUL, which is what makes it worth a
commit of its own. The script printed "[make-previews] N posters" and its two
destination lines, wrote genuine WebPs, and exited 0. Only the files were in a
tree no build stages, so the SERVED previews never changed.

MEASURED, on one poster, before and after:
  before  the regenerated thumbnail was byte-identical to the shipped one
          (same sha256, git status clean) -- 0 pixels changed
  after   sha differs, git sees both files modified, and 52.9% of the
          thumbnail's pixels differ (21.1% by more than 40/255, max delta 255)

Found by DRY-RUNNING this step on a single already-shot poster instead of
discovering it after a 174-sheet reshoot. Without the fix that reshoot would have
produced 174 correct WebPs in the wrong tree, the walls would have kept their old
teal thumbnails, and the landing would have looked complete: a teal thumbnail
over a hued print, which is the exact defect the reshoot exists to remove.

The three-level form is what the other scripts in this folder already use to
reach the root; this one was the odd one out.
2026-09-29 21:29:44 +00:00
Doxa Maps
92b90d0767 Rebuild doxa-maps-spa on the merged source, and regenerate the tree 2026-09-29 21:28:20 +00:00
Doxa Maps
63f6071c61 Merge origin/development into studio/examples (MapInfo's logical placement; generated files take development's side and are rebuilt next) 2026-09-29 21:27:40 +00:00
Doxa Maps
f42444ec8c Pass the region in check-poster-render-pinned's test zone
Found in the max-effort re-read of 1ab8524cf. countryZone now colours the sheet
from the region, and this gate's zone omitted it -- so it rendered the FALLBACK
teal and logged '[posterSheets] region undefined is not in POSTER_REGIONS' on
every run. The gate still passed, because what it pins is the served generator's
integrity rather than the colour, but it was exercising the path that does not
ship and shouting about it.

Chad is Africa in library/data/country-posters.json. The warn-once is doing
exactly its job here: it found a caller that had not been updated.
2026-09-29 21:23:23 +00:00
Doxa Maps
933687b146 Merge remote-tracking branch 'origin/development' into upg100/reread-fixes 2026-09-29 21:21:51 +00:00
Doxa Maps
17d1a07cf8 README: the one-map recipe regenerates the tree too, so a .meta.json change reaches the pages
From exp's second read of 4bcce8ff8. "BUNDLE=<map> bun x vite build && bun run fix:sri" is right for a
code change, but a change to the map's .meta.json reaches its pages and the manifest only through
bun run tree. Without it the leaf page ships the old settings, and the landing scan's step 2b refuses
the stale tree. The recipe is now "BUNDLE=<map> bun x vite build && bun run tree && bun run fix:sri".
The tree step takes a few seconds and changes nothing when nothing changed.
2026-09-29 21:14:06 +00:00
Doxa Maps
ab74357844 Merge remote-tracking branch 'origin/development' into upg100/reread-fixes 2026-09-29 21:13:46 +00:00
Doxa Maps
63f74d51f3 Rebuild doxa-maps-spa for the info button's placement and the new popup text, and regenerate the tree 2026-09-29 21:12:54 +00:00
Doxa Maps
11554f40b6 The info button sits clear of each map's own controls
At the default 12px from the top and the end of the line, the button covered the zoom-in button on
Prayer Progress, Cities with Internet and Gospel Resources (a control nobody could click), Big
Picture's header buttons, and Simple Research's tab bar, in English and, mirrored, in Arabic
(rega's 1440 captures, exp's second read). Each tab now carries its placement in src/tabInfo.js,
passed as MapInfo's own --map-info-top/--map-info-side: 56px from the end beside a zoom column,
46px down below Big Picture's header bar, 56px down below Simple Research's tab bar. Regions and
UPG-100 keep the default. MapInfo itself now places by the logical end of the line (upg100), so the
gallery passes no direction.
2026-09-29 21:12:54 +00:00
Doxa Maps
0341c83475 Big Picture's and Simple Research's popup text reads as one sentence after its label
MapInfo prints the takeaway after a bold label ("What you take away:"), and the two tabs' takeaways
opened with an imperative, so every locale stuttered ("What you take away: Take away the rows...").
All 22 takeaways are now noun phrases written to follow that locale's own label, and the two
Portuguese leads move to Brazilian Portuguese to match the catalogue. The claims are unchanged:
Big Picture yields a spreadsheet only; Simple Research yields a poster and a prayer packet. Text by
simpleresearch; 24 strings, only these keys.
2026-09-29 21:12:53 +00:00
Doxa Maps
60a6b9de9e Rebuild the gallery for the logical-side info button, and regenerate the tree 2026-09-29 21:08:42 +00:00
Doxa Maps
8b8f1fda79 The info button sits at the END of the line, so Arabic mirrors it
The button and its pointer were placed with a physical right:12px, so on an
Arabic page, where a tab bar starts at the right, they covered the first
(active) tab. They now use inset-inline-end / inset-inline-start (LTR is
unchanged), and under dir=rtl the pointer's arrow glyph and its nudge are
flipped so it still points and moves toward the button. --map-info-top and
--map-info-side remain the per-tab overrides.
2026-09-29 21:08:13 +00:00
Doxa Maps
3bfaa24238 Rebuild the card consumers and the gallery for the re-read fixes, and regenerate the tree 2026-09-29 21:07:27 +00:00
Doxa Maps
4bcce8ff87 Merge origin/development into repo/reread-readme-fix at the landing turn 2026-09-29 21:04:28 +00:00
Doxa Maps
d38e066ce2 The info popup's stacked-pages hint is visible
The shadow card behind a packet's first page sits at z-index:-1; without a
stacking context of its own it was painted under the dialog's white
background and never seen. isolation:isolate on the stack keeps it just
behind the page.
2026-09-29 21:04:26 +00:00
Doxa Maps
614c3248d3 Card names hyphenate only where a word cannot fit
hyphens:auto on every name let the browser split ANY word at a line end, so
multi-word names could break mid-word ("Northern Conchu-/cos"), which is
worse on a people group's name than the unhyphenated break it replaced. The
previous commit is reverted; hyphenation now applies only to names holding a
14+ letter word (12 of 2,107), with hyphenate-limit-chars:10 4 4 so a short
word is never split: the only multi-word ones are "Deaf <X>", and Deaf
stays whole.
2026-09-29 21:04:26 +00:00
Doxa Maps
1000a7ab5c Revert "A card name that must break mid-word gets a hyphen"
This reverts commit 7cdf72bfd4.
2026-09-29 21:03:46 +00:00
Doxa Maps
6ff5a3a9b7 Rebuild regions-dashboard after merging development
The merge conflicted on 6 built artifacts and nothing else. Resolved by
regenerating rather than picking a side: a picked regions-dashboard.js would
silently drop either the countrySheet region fix or the card/packet-render
changes that reached this bundle from development.
2026-09-29 21:03:32 +00:00
Doxa Maps
fcbb7bbf8e sync-dropin: a build config that won't parse fails loudly, even under --if-present
From studio's review of 87f10ceda. configDest swallowed a JSON parse error, so with a malformed
vite.doxa-maps-build-config.json (one trailing comma from a hand edit), --if-present read it as "no
destination configured" and exited 0. The build went green and never refreshed the site. The parse
error is now recorded when the file EXISTS. Under --if-present or --from-config the command exits 1
with "build config unreadable: <file>: <error>", even with DOXA_DROPIN=off. A config file that is
absent, or one with no dropin.dest, still skips.
Tested 7 ways:
1. dest configured, host absent: skip, exit 0.
2. host present: 1,208 files copied, exit 0.
3. no dest key: skip, exit 0.
4. no dest key, plain --from-config: exit 1.
5. trailing comma: exit 1, "build config unreadable".
6. trailing comma with DOXA_DROPIN=off: exit 1.
7. no config file: skip, exit 0.
The config was restored byte for byte (cmp).
2026-09-29 21:03:15 +00:00
Doxa Maps
a73b672cc6 Merge remote-tracking branch 'origin/development' into regions/country-sheet-onedef
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/regions-dashboard/region-dashboards/index.html
#	public/dx-maps/regions-dashboard/regions-dashboard.js
#	public/dx-maps/regions-dashboard/regions-list/index.html
#	public/dx-maps/regions-dashboard/regions-mfe/index.html
2026-09-29 21:02:52 +00:00
Doxa Maps
225eadef11 README: a one-map build needs fix:sri; a snippet is pasted whole; the agent table names maps honestly
Found re-reading 10be43d2b:
- "BUNDLE=<map> bun x vite build" alone leaves the map's pages and the manifest pinned to the OLD hash,
  so the map's own page and any pasted snippet refuse the new file. It is now followed by bun run fix:sri.
  Measured two-sided: one byte added to a pinned map's built file made check:sri FAIL (4 of its pages
  disagreed); fix:sri rewrote them and the manifest, and check:sri PASSED. The probe files were restored.
  A one-map build rewrote only that map's .js, never the manifest or a page.
- "A snippet is two parts" was wrong. The snippet also preloads the map engine and sets
  window.MAP_APP_API_URL, so the README now says to paste it whole and names what it does.
- The agent table:
  - Cities with Internet works by country (internet use), so it moved from "Reach a city" to
    "Plan outreach". The production maps work by country and region; city-level planning (Prayer Walk
    Planner) is experimental, and the row says so.
  - Maps carry the names the app shows (Simple Research, UPG 100 List).
  - "Frozen" was a tonight-only rule; the line now reads "leave them as they are unless your task is one
    of them".
2026-09-29 21:00:07 +00:00
Doxa Maps
87f10ceda0 sync-dropin --if-present: no configured destination is a skip too, not a failed build
Found re-reading 2a4c3ddb3. With dropin.dest removed from the config (a site that doesn't use DX Life)
and no DOXA_DROPIN_DEST, the full build's last step printed the usage line and exited 1, after a build
that had passed. The host is optional, so --if-present now skips there as well. Without --if-present a
missing destination is still refused.
Tested: no dest configured with --if-present skips (exit 0); the plain command still exits 1; a configured
but absent host still skips (exit 0). The config was restored byte for byte after the test.
2026-09-29 21:00:07 +00:00