Every Scripture row on this map said "Scripture". The catalogue knows the translation's actual name for 1,213 of the 1,237 languages that have one, and the difference it hides is the one a mobiliser most needs: "Ahirani Matthew and Mark" is two Gospels, "Bhadrawahi Bible" is a Bible. The table said "Scripture in this language" on all 1,237 rows and the sheet showed a bare chip. The sheet now names the translation and its scope — "German ELBBK Bible — Full Bible" — and the table carries the real name in its Resource column plus a new Scope column: 101 Full Bible, 461 New Testament, 122 Portions of both Testaments, 6 Old Testament. Scope is its own column rather than folded into Type, so Type stays a clean three-value filter. SCOPE DESCRIBES THE TRANSLATION WE ACTUALLY LINK TO. A curated scripture_url pointing at the same eBible page inherits it; one pointing elsewhere does NOT, because the catalogue's book counts would then be describing a different publication. That distinction recovered 96 entries and correctly leaves 547 blank rather than guessing. EBIBLE LINKS WERE THE TICK'S ACTUAL QUESTION and they came back clean: ebible.org/cmn2006/ renders the Mandarin Bible with its full book list in-script, png.bible/aai/ renders Minaifia NT from Matthew to Revelation. They land where a person can read, which is what the film links did not do. The scope work came out of reading those pages. ★ THE DEEP-LINK PROBE FAILED ON THIS COMMIT AND THE PRODUCT WAS FINE. It read the ISO code from cell index 4; inserting the Scope column moved it to 5, so it reported a filter failure while the filter was returning exactly the right 2 rows. It now finds the column by its HEADER. A column index is a position, a header is a contract — the same mistake the tooltip probe made two ticks ago by asserting wording instead of the rule. Verified: the scope line renders "German ELBBK Bible — Full Bible" on a real group and is ABSENT on a group with no scope, so it discriminates. Coverage gate passes, its self-test still fails 7/7 on demand, and pins, table, deep-link, tooltip and sign probes all pass. |
||
|---|---|---|
| .. | ||
| external-bundles | ||
| people-groups | ||
| posters | ||
| tables | ||
| vendor | ||
| README.md | ||
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.