doxa-maps/data
doxa-maps-88655c70 56dffd1af8 Gospel map: ask what the country speaks, not what the unreached speak
The bridge candidate — the "possibly a way in" offered to a group with nothing —
was chosen from Doxa's own pins: the biggest language among the UNREACHED groups
in that country that has Scripture and the film. That is not the language a
community shares with its neighbours. For Syenara Senufo in Mali it proposed
Minianka, one people group. Mali's vehicular language is Bambara.

The number beside it was worse than the pick. "8.8% of this country's mapped
population" is a share of Doxa's unreached pins, and a reader takes a percentage
for a share of the country. A percentage measured against a denominator nobody
can see is not a caveat, it is a wrong number.

CLDR publishes what each territory speaks and by what share, joined to ISO 639-3
through SIL's own Part1 column, and pinned rather than tracked from a moving
branch. 1,161 of 1,175 candidates now come from it; the remaining 14 keep the old
proxy and say on the row that their count is of this map's groups and not of the
country. Mali now reads French at 46% and official.

Where two languages are within five points the map names BOTH and says it will
not choose. Mali is exactly that: French 46% and official, Bambara 46% and not —
one is the administrative language and the other is what people share in a
market, and which bridges better depends on whether you are handing over a
booklet or starting a conversation. A tie-break would have quietly answered a
question nobody asked it. Both carry their own links, for the same reason the
first one does.

Two field lists were a field short, the same shape twice. The candidate filter
and the link resolver both read c.s for "has a readable Scripture" and forgot
that Faith Comes By Hearing carries text on the audio record — which excluded
Bambara from Mali's candidates entirely, and then, once it was named, offered it
the film while a full 66-book text sat one field away. There is now one
predicate.

The RTL gate read a hardcoded tree path. It reads the build config instead, and
was re-run against its baseline before the result was trusted.
2026-09-25 21:34:38 +00:00
..
brand public/ is one folder: the output tree plus a README, with the Plugin Studio as its front page 2026-09-25 17:41:56 +00:00
external-bundles Data out of public/: sources live in data/, the web-root is generated 2026-09-16 01:24:41 +00:00
fonts public/ is one folder: the output tree plus a README, with the Plugin Studio as its front page 2026-09-25 17:41:56 +00:00
images public/ is one folder: the output tree plus a README, with the Plugin Studio as its front page 2026-09-25 17:41:56 +00:00
legacy/upg-neighbor public/ is one folder: the output tree plus a README, with the Plugin Studio as its front page 2026-09-25 17:41:56 +00:00
people-groups All People Groups loads fast on a light map; the Vision Card becomes a true funnel from data 2026-09-25 07:18:30 +00:00
posters The poster print preview rasterises too, and a deployment can ship sources without rasters 2026-09-24 08:07:22 +00:00
pplr PPLR data maps (WIP): move the ten PPLR research views into plugin-designs 2026-09-25 06:33:49 +00:00
tables Gospel map: ask what the country speaks, not what the unreached speak 2026-09-25 21:34:38 +00:00
vendor Vendor Vue for the gallery shell, so the self-hosted rung finally exists 2026-09-22 04:59:30 +00:00
README.md public/ is one folder: the output tree plus a README, with the Plugin Studio as its front page 2026-09-25 17:41:56 +00:00

data/ — the bundler's source-of-truth data

The law: data lives here; public/ is generated. public/ holds only the output folder (public/<tree>/, named by name in vite.doxa-maps-build-config.json) and a generated README. The build (internal/generate-tree.mjs) copies what the plugins FETCH at runtime from here into <tree>/assets/, alongside the per-profile data in plugin-designs/*/data/. You should be able to rm -rf public/ and get it all back with bun run build.

Folder Served at What it is
people-groups/ <tree>/assets/people-groups/ (the fetched cuts only) People-group datasets (CSV/JSON) the maps read at runtime
vendor/ <tree>/assets/vendor/ Third-party runtime assets (e.g. table libraries)
posters/ <tree>/assets/posters/ (opt-in: bundlePosters / posterSources) Rendered poster set (heavy pipeline output; the export button fetches these)
tables/ <tree>/assets/tables/ The MERGED served table set (its index.json is the merge; per-profile plugin-designs/*/data/tables are build-time sources)
pplr/ <tree>/assets/pplr/ (the fetched files only) The PPLR data maps' derived datasets
fonts/ <tree>/assets/fonts/ Vendored typefaces (SIL OFL), e.g. Bebas Neue for the regions clone
images/ <tree>/assets/images/ Images the plugins fetch (e.g. the regions list's world-map watermark; see its PROVENANCE)
brand/ not served Logos and brand imagery (sources; the optional library/layouts/app-wrapper-material shell references them)
legacy/ not served Archived standalone builds kept for reference (e.g. the original upg-neighbor page)
external-bundles/ not served Prebuilt map IIFEs vendored from sibling projects (not built here); only the optional layouts/ shell mounted them

fonts/, images/, brand/ and legacy/ moved here from public/assets/ on 2026-09-25 (card BUILD-OUTPUT-IS-ONE-FOLDER): they were sources that existed only in the generated folder.

Don't edit anything under public/ by hand — change it here (or in plugin-designs/*/data/, layouts/*/assets/) and rebuild.