doxa-maps/data
doxa-maps-88655c70 e04509a94d Pashto: 47.6M speakers were told Zume had nothing, while its Pashto site was live
Last change joined Zume by exact ISO 639-3 and left pus unjoined, which turned into a
false statement on the map: 13 people groups covering 47.6M speakers read
"Discipleship training - not in Zume's 54" while https://zume.training/pus was live
and in Pashto the whole time. Absence of a variety label is not absence of a resource.

Research for something that selects a variety found nothing that does. The publisher's
launch article scopes Pashto as Afghanistan's other official language and a major
language of northwestern Pakistan, especially Khyber Pakhtunkhwa and parts of
Balochistan - territory spanning all three of pbu, pbt and pst rather than selecting
one. The locale pages declare no language metadata at all: no hreflang alternates, no
BCP-47 tag, and og:locale is the site-wide en_US on every locale including this one.

So it ships as an APPROXIMATE match rather than an exact join or a silence: its own
field, its own dashed chip that reads "Zume, in Pashto (variety not stated)", its own
scope text in the table, never counted as an exact join and unable to move a tier. The
gap filter still cuts 12,379 features to 3,457. It is a curated three-code list, not a
runtime name match - an approximate join a reader cannot see and a gate cannot check is
the one that eventually ships a wrong link.

Why this is defensible here and would not be for film: Zume in Pashto is a written
course in one literary standard, where the pbu/pbt/pst split is largely spoken variety.
The JESUS Film is already in this index under separate per-variety dubs
(pashto-yusufzai, pashto-southern) because a dub differs by pronunciation. The medium
decides.

New gate clause J fails if any code carries both a confirmed and an approximate
training link, or if an approximate entry lacks a url, language or note - that is the
corruption that would make the qualified claim render as the confirmed one. Poison
self-test now 10/10. Both gates also harvest the new field, so its URLs are screened
rather than invisible; the browser gate screens 3,605.

Verified in a browser with three controls: deu renders gm-chip ok with a real href, kri
renders gm-chip meh with no href, pbu renders gm-chip approx linking
https://zume.training/pus and carrying "variety not stated". Screenshot read: the
dashed chip is visibly distinct from both.
2026-09-24 09:37: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
people-groups Public data ships without working notes; unused data files stay out of the drop-in 2026-09-16 20:16:08 -05:00
posters Data out of public/ (phase 2): posters + tables live in data/ 2026-09-16 01:37:52 +00:00
tables Pashto: 47.6M speakers were told Zume had nothing, while its Pashto site was live 2026-09-24 09:37:56 +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 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

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

The law: data lives here; public/ is generated. Every folder in data/ is copied into the served web-root by the build (internal/generate-tree.mjs), exactly like 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/ /assets/people-groups/ People-group datasets (CSV/JSON) the maps read at runtime
vendor/ /assets/vendor/ Third-party runtime assets (e.g. table libraries)
posters/ /assets/posters/ Rendered poster webp set (heavy pipeline output; poster walls fetch these)
tables/ /assets/tables/ The MERGED served table set (its index.json is the merge; per-profile plugin-designs/*/data/tables are build-time sources)
external-bundles/ not served Prebuilt map IIFEs vendored from sibling projects (not built here); only the optional layouts/ shell mounted them, so the build no longer copies them into public/

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