doxa-maps/data/tables
doxa-maps-88655c70 101653e3fd Verify all 3,603 links: 2 were dead, and the map showed "unchecked" on the rest
The brief's rule is to verify a URL resolves before shipping it. The table that did
that was written in August against a corpus of 426 links, while the map now ships
3,603 - and the UI matched exactly TWO of them. Two silent causes: its eBible keys
were http:// while every shipped URL now passes through httpsify, and its 306 film
keys were the old ?languageId= URLs that were later replaced wholesale by Arclight
shareUrl deep links. Links that HAD been verified displayed as "unchecked", which a
reader cannot tell apart from "nobody looked".

The old note said the film page was unverifiable by fetch, and for the URL shape it
was written against that was right: ?languageId=13562 and ?languageId=99999999 return
byte-identical HTML, so a status check there is a false green. The shareUrl migration
changed that. A path discriminates:
  /watch/jesus/german-standard      -> 200, 944,516 bytes
  /watch/jesus/pashto-yusufzai      -> 200, 810,741 bytes (distinct body)
  /watch/jesus/definitely-not-xyzzy -> 404
So 2,049 film links became checkable for the first time. The 5 remaining ?languageId=
URLs stay "unknown" with that reason - never verified, never broken.

Every host was probed with a known-good and a known-bad before being trusted, and all
answer HEAD and discriminate: ebible.org, png.bible, alkitab.pw, jesusfilm.org,
arc.gt, git.door43.org, zume.training. HEAD is deliberate - a GET over 2,049 film
pages is ~1.6GB of someone else's bandwidth to learn a status code. Five negative and
five positive controls run in band and the script aborts rather than write a table if
either arm misbehaves.

Result over 3,603 unique URLs in 365s: 3,596 verified, 5 unknown, and 2 genuinely
dead - arc.gt/092vn (Yakpa, 2 pins) and /watch/jesus/4101 (Zhuang Liujiang, 1 pin),
both re-confirmed 404 with a browser UA and a GET. The builder now drops any link
verification proved dead BEFORE tiers are computed, so a code whose only film is a 404
has no film and its tier says so. The gap filter moves 3,457 -> 3,460, which is
exactly those three pins.

Also fixed: the verification fetch hung off openPin's country branch, so a tap landing
before the country index had loaded left the whole session reading "unchecked". It is
now fetched unconditionally.

Lookup coverage goes from 2/3,605 to 3,603/3,603. New gate clause K fails below a 95%
coverage floor or if any shipped URL is recorded broken; poison self-test now 11/11.
Verified in a browser on the exact case that failed - one immediate pin tap - which
now fetches the table and renders "Scripture - link checked" and "Film - link checked";
screenshot read to confirm both chips are green where they were grey.
2026-09-24 09:58:47 +00:00
..
arclight-index.json Harvest the whole Arclight catalogue: film coverage 306 -> 2,087 languages 2026-09-24 04:08:30 +00:00
arclight-share-urls.json Give the film links a destination: 2,049 real per-language deep links 2026-09-24 06:09:11 +00:00
city-bridge-opportunities.json Data out of public/ (phase 2): posters + tables live in data/ 2026-09-16 01:37:52 +00:00
country-connectivity.json Data out of public/ (phase 2): posters + tables live in data/ 2026-09-16 01:37:52 +00:00
deaf-gap.json Data out of public/ (phase 2): posters + tables live in data/ 2026-09-16 01:37:52 +00:00
door43-index.json Scope the Door43 Scripture, and stop 70 story sets being typed as Scripture 2026-09-24 06:58:12 +00:00
ebible-index.json Name and scope every Scripture link, including the 24 on an older edition 2026-09-24 06:47:23 +00:00
gaps-and-opportunities.json Public data ships without working notes; unused data files stay out of the drop-in 2026-09-16 20:16:08 -05:00
gospel-access-vs-growth.json Data out of public/ (phase 2): posters + tables live in data/ 2026-09-16 01:37:52 +00:00
gospel-by-country.json Data out of public/ (phase 2): posters + tables live in data/ 2026-09-16 01:37:52 +00:00
gospel-gaps.json Say we looked, when we looked: 2,608 rows understated their own evidence 2026-09-24 08:16:54 +00:00
gospel-link-verification.json Verify all 3,603 links: 2 were dead, and the map showed "unchecked" on the rest 2026-09-24 09:58:47 +00:00
gospel-resource-links.json Verify all 3,603 links: 2 were dead, and the map showed "unchecked" on the rest 2026-09-24 09:58:47 +00:00
index.json List what is missing, in a form you can take away 2026-09-24 08:08:59 +00:00
internet-by-country.json Data out of public/ (phase 2): posters + tables live in data/ 2026-09-16 01:37:52 +00:00
key-cities-admin-n.json Public data ships without working notes; unused data files stay out of the drop-in 2026-09-16 20:16:08 -05:00
key-cities.json Data out of public/ (phase 2): posters + tables live in data/ 2026-09-16 01:37:52 +00:00
languages-by-country.json Public data ships without working notes; unused data files stay out of the drop-in 2026-09-16 20:16:08 -05:00
languages-per-city.json Data out of public/ (phase 2): posters + tables live in data/ 2026-09-16 01:37:52 +00:00
messaging-channels.json Data out of public/ (phase 2): posters + tables live in data/ 2026-09-16 01:37:52 +00:00
network-operators.json Data out of public/ (phase 2): posters + tables live in data/ 2026-09-16 01:37:52 +00:00
open-doors.json Public data ships without working notes; unused data files stay out of the drop-in 2026-09-16 20:16:08 -05:00
people-group-pins.json Verify all 3,603 links: 2 were dead, and the map showed "unchecked" on the rest 2026-09-24 09:58:47 +00:00
people-group-resources.json Public data ships without working notes; unused data files stay out of the drop-in 2026-09-16 20:16:08 -05:00
platform-reachability.json Data out of public/ (phase 2): posters + tables live in data/ 2026-09-16 01:37:52 +00:00
social-platforms.json Data out of public/ (phase 2): posters + tables live in data/ 2026-09-16 01:37:52 +00:00
zume-index.json Pashto: 47.6M speakers were told Zume had nothing, while its Pashto site was live 2026-09-24 09:37:56 +00:00