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. |
||
|---|---|---|
| .. | ||
| boundaries | ||
| brand | ||
| external-bundles | ||
| fonts | ||
| images | ||
| internet | ||
| legacy/upg-neighbor | ||
| people-groups | ||
| posters | ||
| pplr | ||
| tables | ||
| vendor | ||
| README.md | ||
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.