doxa-maps/data
Doxa Maps c790b39840 Every shipped link has evidence, and 1,412 of them did not
Three findings, one thread: rule 4 says verify a URL before shipping it, and the
check I wrote for it yesterday was measuring one file.

1. THE TABLES PAGE WAS SHIPPING DEAD FORM. people-group-resources.json — the
"Resources by People Group" tab, which a reader clicks — carried 2,294 URL cells, of
which 1,412 were jesusfilm.org/watch/?languageId=<id>. That form is IGNORED by the
site: a real id and a bogus one render the same generic library page, which is why
the map migrated onto Arclight shareUrls. The migration never reached this table, so
the booleans beside those links were being refreshed while the links themselves went
stale for a year of builds. 1,417 film and 882 scripture URLs re-derived from the
index, which is authoritative for both and whose URLs are the verified ones.

2. TWO ARCLIGHT LANGUAGES, ONE ISO CODE — resolved, with evidence rather than a
ruling. jos was SKIPPED here, and the note said resolving it meant deciding whether
the code or the publisher's name was authoritative, "a data question for someone who
can check it". Checked: media-languages?iso3=jos returns 7138 "Jordanian Sign
Language" and 139080 "Lebanese Sign Language", and 7138's shareUrl redirects to
.../jordanian-sign-language.html while a bogus arc.gt code 404s. So the code stays
authoritative for the join and the NAME breaks the tie the code cannot. The old note
also had a fact wrong — it called Lebanese "a different language (lbs)", but lbs is
LIBYAN Sign Language and Lebanese has no code of its own, so this is two Levantine
varieties sharing one code, not a mis-filing. Three Deaf groups now reach the JESUS
Film in their own sign language through a link that resolves; 0 retired-form links
remain in the index.

3. THE GATE'S SCOPE WAS THE BUG. It walked the pin index alone, which is how item 1
hid from it. It now reads every table the SURFACES read, taken from the surfaces, and
resolves each URL against four records: the verification table, the org contacts, the
SUN pages (proved by content against a catch-all control) and doxa.life's own listing
for prayer pages, which cannot be proved by fetch because pray.doxa.life answers 200
for any slug. Provenance fields are excluded by path — a citation is not an offer.
8,445 links measured yesterday; 12,292 shipped links today, 0 unrecorded, 0 broken,
0 that no status code can prove.

Reading every STAGED file instead reported 6,115 unrecorded and 53 broken, all of
them correct behaviour: API endpoints in source fields, and build caches that still
hold the 53 share URLs the verifier proved dead — which is exactly why the pin
builder drops them. A gate that goes red on correct behaviour gets switched off.
2026-09-27 01:26:50 +00:00
..
boundaries A complete India ADM1 (36 states) is staged beside UPG-100's 34-unit partition 2026-09-26 08:13:33 +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
internet India by state: all 36 states, Mizoram and Nagaland included 2026-09-26 08:13:34 +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 The people-group list is a universal prop: the same maps can show any project's list 2026-09-26 05:16:02 +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 Every shipped link has evidence, and 1,412 of them did not 2026-09-27 01:26:50 +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.