Finish the GRN sweep: every reachable pool has now been checked
Batch fourteen closed it — 2,347 language codes decided, 1,022 carrying Words of Life. Forty groups leave the gap: 1,653 with nothing becomes 1,613, and the gap breakdown drops from four situations to three, because "GRN not yet swept" no longer describes anybody. What is left is 1,429 groups where every pool this build can reach has been searched, 183 sign languages behind key-gated sources, and one group with no language code at all. Two things the sweep exposed. 5fish answers 200 for any path, so its 982 links were being verified by a status that means nothing there; they are now judged by where the redirect LANDS — a real code goes to its numbered language page, one they do not carry is swept to /regions — with both arms proved in band before any link is classified. And country-gap reads a file that another script refreshes from the pins, so running them out of order publishes the previous build's numbers: it said 1,653 while the map said 1,613. It now refuses to write a table that disagrees with the index the map draws.
This commit is contained in:
parent
4e20a98d12
commit
2253d893b7
14 changed files with 1335 additions and 218 deletions
|
|
@ -70,8 +70,8 @@
|
|||
"title": "The gap by country",
|
||||
"grain": "one row per country that has at least one people group on this map",
|
||||
"generated": "2026-09-25",
|
||||
"measured": "242 countries · 1,653 groups with nothing found · 207,878,930 people",
|
||||
"by_region": "Oceania 31.2% (414 of 1325) · Africa 14.3% (440 of 3074) · Asia 11.6% (587 of 5073) · Europe 8.9% (70 of 790) · Americas 6.7% (142 of 2117)",
|
||||
"measured": "242 countries · 1,613 groups with nothing found · 207,867,995 people",
|
||||
"by_region": "Oceania 30.1% (399 of 1325) · Africa 14.2% (438 of 3074) · Asia 11.3% (575 of 5073) · Europe 8.9% (70 of 790) · Americas 6.2% (131 of 2117)",
|
||||
"three_questions": "Groups with nothing, people with nothing, and the share of the country each represents. They rank differently on purpose — Papua New Guinea has the most groups and few people, China the reverse, and Oceania has the worst share of any region while being the smallest by population.",
|
||||
"source": "data/tables/gospel-by-country.json, which is itself refreshed from data/tables/people-group-pins.json — the same index the map draws, so this table and the map cannot disagree.",
|
||||
"curated_columns": "growing_unreached and deaths_day come from the curated country analysis and are null where it does not cover the country. Null, never zero: zero is a claim this build cannot make."
|
||||
|
|
@ -82,9 +82,9 @@
|
|||
"iso3": "PNG",
|
||||
"region": "Oceania",
|
||||
"people_groups": 831,
|
||||
"groups_with_nothing": 286,
|
||||
"pct_with_nothing": 34.4,
|
||||
"people_with_nothing": 863400,
|
||||
"groups_with_nothing": 279,
|
||||
"pct_with_nothing": 33.6,
|
||||
"people_with_nothing": 861175,
|
||||
"groups_with_scripture": 332,
|
||||
"groups_with_film": 143,
|
||||
"band": "high",
|
||||
|
|
@ -97,9 +97,9 @@
|
|||
"iso3": "IDN",
|
||||
"region": "Asia",
|
||||
"people_groups": 669,
|
||||
"groups_with_nothing": 219,
|
||||
"pct_with_nothing": 32.7,
|
||||
"people_with_nothing": 4173130,
|
||||
"groups_with_nothing": 207,
|
||||
"pct_with_nothing": 30.9,
|
||||
"people_with_nothing": 4169480,
|
||||
"groups_with_scripture": 222,
|
||||
"groups_with_film": 265,
|
||||
"band": "high",
|
||||
|
|
@ -137,21 +137,6 @@
|
|||
"deaths_day": 3.4,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Nigeria",
|
||||
"iso3": "NGA",
|
||||
"region": "Africa",
|
||||
"people_groups": 433,
|
||||
"groups_with_nothing": 56,
|
||||
"pct_with_nothing": 12.9,
|
||||
"people_with_nothing": 3005950,
|
||||
"groups_with_scripture": 105,
|
||||
"groups_with_film": 188,
|
||||
"band": "partial",
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 44,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Malaysia",
|
||||
"iso3": "MYS",
|
||||
|
|
@ -183,18 +168,18 @@
|
|||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Vanuatu",
|
||||
"iso3": "VUT",
|
||||
"region": "Oceania",
|
||||
"people_groups": 114,
|
||||
"groups_with_nothing": 49,
|
||||
"pct_with_nothing": 43,
|
||||
"people_with_nothing": 47550,
|
||||
"groups_with_scripture": 28,
|
||||
"groups_with_film": 26,
|
||||
"band": "high",
|
||||
"growing_unreached": 1,
|
||||
"deaths_day": 0,
|
||||
"country": "Nigeria",
|
||||
"iso3": "NGA",
|
||||
"region": "Africa",
|
||||
"people_groups": 433,
|
||||
"groups_with_nothing": 54,
|
||||
"pct_with_nothing": 12.5,
|
||||
"people_with_nothing": 3005425,
|
||||
"groups_with_scripture": 105,
|
||||
"groups_with_film": 188,
|
||||
"band": "partial",
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 44,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
|
|
@ -212,6 +197,21 @@
|
|||
"deaths_day": 15.5,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Vanuatu",
|
||||
"iso3": "VUT",
|
||||
"region": "Oceania",
|
||||
"people_groups": 114,
|
||||
"groups_with_nothing": 44,
|
||||
"pct_with_nothing": 38.6,
|
||||
"people_with_nothing": 46050,
|
||||
"groups_with_scripture": 28,
|
||||
"groups_with_film": 26,
|
||||
"band": "high",
|
||||
"growing_unreached": 1,
|
||||
"deaths_day": 0,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Sudan",
|
||||
"iso3": "SDN",
|
||||
|
|
@ -247,9 +247,9 @@
|
|||
"iso3": "BRA",
|
||||
"region": "Americas",
|
||||
"people_groups": 270,
|
||||
"groups_with_nothing": 39,
|
||||
"pct_with_nothing": 14.4,
|
||||
"people_with_nothing": 14505,
|
||||
"groups_with_nothing": 33,
|
||||
"pct_with_nothing": 12.2,
|
||||
"people_with_nothing": 12905,
|
||||
"groups_with_scripture": 186,
|
||||
"groups_with_film": 163,
|
||||
"band": "partial",
|
||||
|
|
@ -292,9 +292,9 @@
|
|||
"iso3": "USA",
|
||||
"region": "Americas",
|
||||
"people_groups": 623,
|
||||
"groups_with_nothing": 19,
|
||||
"pct_with_nothing": 3,
|
||||
"people_with_nothing": 323125,
|
||||
"groups_with_nothing": 18,
|
||||
"pct_with_nothing": 2.9,
|
||||
"people_with_nothing": 322725,
|
||||
"groups_with_scripture": 517,
|
||||
"groups_with_film": 549,
|
||||
"band": "partial",
|
||||
|
|
@ -392,21 +392,6 @@
|
|||
"deaths_day": 126.9,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Solomon Islands",
|
||||
"iso3": "SLB",
|
||||
"region": "Oceania",
|
||||
"people_groups": 79,
|
||||
"groups_with_nothing": 14,
|
||||
"pct_with_nothing": 17.7,
|
||||
"people_with_nothing": 49995,
|
||||
"groups_with_scripture": 34,
|
||||
"groups_with_film": 33,
|
||||
"band": "partial",
|
||||
"growing_unreached": 1,
|
||||
"deaths_day": 0.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Republic of the Congo",
|
||||
"iso3": "COG",
|
||||
|
|
@ -422,6 +407,21 @@
|
|||
"deaths_day": 1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Solomon Islands",
|
||||
"iso3": "SLB",
|
||||
"region": "Oceania",
|
||||
"people_groups": 79,
|
||||
"groups_with_nothing": 13,
|
||||
"pct_with_nothing": 16.5,
|
||||
"people_with_nothing": 49925,
|
||||
"groups_with_scripture": 34,
|
||||
"groups_with_film": 33,
|
||||
"band": "partial",
|
||||
"growing_unreached": 1,
|
||||
"deaths_day": 0.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Canada",
|
||||
"iso3": "CAN",
|
||||
|
|
@ -467,21 +467,6 @@
|
|||
"deaths_day": 2.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Peru",
|
||||
"iso3": "PER",
|
||||
"region": "Americas",
|
||||
"people_groups": 90,
|
||||
"groups_with_nothing": 10,
|
||||
"pct_with_nothing": 11.1,
|
||||
"people_with_nothing": 658875,
|
||||
"groups_with_scripture": 73,
|
||||
"groups_with_film": 57,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 5.4,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "South Sudan",
|
||||
"iso3": "SSD",
|
||||
|
|
@ -527,6 +512,21 @@
|
|||
"deaths_day": 25.8,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Peru",
|
||||
"iso3": "PER",
|
||||
"region": "Americas",
|
||||
"people_groups": 90,
|
||||
"groups_with_nothing": 8,
|
||||
"pct_with_nothing": 8.9,
|
||||
"people_with_nothing": 658650,
|
||||
"groups_with_scripture": 73,
|
||||
"groups_with_film": 57,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 5.4,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Japan",
|
||||
"iso3": "JPN",
|
||||
|
|
@ -752,21 +752,6 @@
|
|||
"deaths_day": 1.6,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Australia",
|
||||
"iso3": "AUS",
|
||||
"region": "Oceania",
|
||||
"people_groups": 97,
|
||||
"groups_with_nothing": 5,
|
||||
"pct_with_nothing": 5.2,
|
||||
"people_with_nothing": 100625,
|
||||
"groups_with_scripture": 86,
|
||||
"groups_with_film": 47,
|
||||
"band": "partial",
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Gabon",
|
||||
"iso3": "GAB",
|
||||
|
|
@ -1052,21 +1037,6 @@
|
|||
"deaths_day": 5.3,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Venezuela",
|
||||
"iso3": "VEN",
|
||||
"region": "Americas",
|
||||
"people_groups": 51,
|
||||
"groups_with_nothing": 3,
|
||||
"pct_with_nothing": 5.9,
|
||||
"people_with_nothing": 297600,
|
||||
"groups_with_scripture": 42,
|
||||
"groups_with_film": 39,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.2,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Sri Lanka",
|
||||
"iso3": "LKA",
|
||||
|
|
@ -1127,6 +1097,21 @@
|
|||
"deaths_day": 31.1,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Australia",
|
||||
"iso3": "AUS",
|
||||
"region": "Oceania",
|
||||
"people_groups": 97,
|
||||
"groups_with_nothing": 3,
|
||||
"pct_with_nothing": 3.1,
|
||||
"people_with_nothing": 100335,
|
||||
"groups_with_scripture": 86,
|
||||
"groups_with_film": 47,
|
||||
"band": "partial",
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Sierra Leone",
|
||||
"iso3": "SLE",
|
||||
|
|
@ -1307,6 +1292,21 @@
|
|||
"deaths_day": null,
|
||||
"basis": "pins only — no curated country analysis for this country"
|
||||
},
|
||||
{
|
||||
"country": "Venezuela",
|
||||
"iso3": "VEN",
|
||||
"region": "Americas",
|
||||
"people_groups": 51,
|
||||
"groups_with_nothing": 2,
|
||||
"pct_with_nothing": 3.9,
|
||||
"people_with_nothing": 297400,
|
||||
"groups_with_scripture": 42,
|
||||
"groups_with_film": 39,
|
||||
"band": "partial",
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.2,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Kenya",
|
||||
"iso3": "KEN",
|
||||
|
|
@ -1412,21 +1412,6 @@
|
|||
"deaths_day": 0,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Bolivia",
|
||||
"iso3": "BOL",
|
||||
"region": "Americas",
|
||||
"people_groups": 39,
|
||||
"groups_with_nothing": 2,
|
||||
"pct_with_nothing": 5.1,
|
||||
"people_with_nothing": 120250,
|
||||
"groups_with_scripture": 34,
|
||||
"groups_with_film": 28,
|
||||
"band": "partial",
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 0,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Saint Vincent and the Grenadines",
|
||||
"iso3": "VCT",
|
||||
|
|
@ -1907,6 +1892,21 @@
|
|||
"deaths_day": 0,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Bolivia",
|
||||
"iso3": "BOL",
|
||||
"region": "Americas",
|
||||
"people_groups": 39,
|
||||
"groups_with_nothing": 1,
|
||||
"pct_with_nothing": 2.6,
|
||||
"people_with_nothing": 120000,
|
||||
"groups_with_scripture": 34,
|
||||
"groups_with_film": 28,
|
||||
"band": "partial",
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 0,
|
||||
"basis": "pins, with curated country analysis"
|
||||
},
|
||||
{
|
||||
"country": "Belgium",
|
||||
"iso3": "BEL",
|
||||
|
|
|
|||
|
|
@ -52259,8 +52259,8 @@
|
|||
"population": 250,
|
||||
"heart_has_scripture": false,
|
||||
"heart_has_film": false,
|
||||
"heart_has_any": false,
|
||||
"opportunity": true,
|
||||
"heart_has_any": true,
|
||||
"opportunity": false,
|
||||
"bridge_language": "Portuguese",
|
||||
"bridge_iso639_3": "por",
|
||||
"bridge_groups_in_country": 41,
|
||||
|
|
@ -52272,8 +52272,8 @@
|
|||
"internet_pct": 84.5,
|
||||
"top_channel": "Telegram Messenger",
|
||||
"channel_source": "app-store ranking",
|
||||
"aligned": true,
|
||||
"status": "opportunity — bridge language has a resource",
|
||||
"aligned": false,
|
||||
"status": "reached in heart language",
|
||||
"caveat": "Bridge = a language of the same country spoken by >1 DX group. NOT proof this group speaks it. Resource status = pools checked (eBible + JESUS Film); audio pools are key-blocked."
|
||||
},
|
||||
{
|
||||
|
|
@ -52363,8 +52363,8 @@
|
|||
"population": 225,
|
||||
"heart_has_scripture": false,
|
||||
"heart_has_film": false,
|
||||
"heart_has_any": false,
|
||||
"opportunity": true,
|
||||
"heart_has_any": true,
|
||||
"opportunity": false,
|
||||
"bridge_language": "Portuguese",
|
||||
"bridge_iso639_3": "por",
|
||||
"bridge_groups_in_country": 41,
|
||||
|
|
@ -52376,8 +52376,8 @@
|
|||
"internet_pct": 84.5,
|
||||
"top_channel": "Telegram Messenger",
|
||||
"channel_source": "app-store ranking",
|
||||
"aligned": true,
|
||||
"status": "opportunity — bridge language has a resource",
|
||||
"aligned": false,
|
||||
"status": "reached in heart language",
|
||||
"caveat": "Bridge = a language of the same country spoken by >1 DX group. NOT proof this group speaks it. Resource status = pools checked (eBible + JESUS Film); audio pools are key-blocked."
|
||||
},
|
||||
{
|
||||
|
|
@ -52857,8 +52857,8 @@
|
|||
"population": 150,
|
||||
"heart_has_scripture": false,
|
||||
"heart_has_film": false,
|
||||
"heart_has_any": false,
|
||||
"opportunity": true,
|
||||
"heart_has_any": true,
|
||||
"opportunity": false,
|
||||
"bridge_language": "Hausa",
|
||||
"bridge_iso639_3": "hau",
|
||||
"bridge_groups_in_country": 4,
|
||||
|
|
@ -52870,8 +52870,8 @@
|
|||
"internet_pct": 41.2,
|
||||
"top_channel": "Telegram Messenger",
|
||||
"channel_source": "app-store ranking",
|
||||
"aligned": true,
|
||||
"status": "opportunity — bridge language has a resource",
|
||||
"aligned": false,
|
||||
"status": "reached in heart language",
|
||||
"caveat": "Bridge = a language of the same country spoken by >1 DX group. NOT proof this group speaks it. Resource status = pools checked (eBible + JESUS Film); audio pools are key-blocked."
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -59,14 +59,14 @@
|
|||
"country": "Brazil",
|
||||
"region": "Americas",
|
||||
"groups": 270,
|
||||
"no_resource": 39,
|
||||
"pop_no_resource": 14505,
|
||||
"no_resource": 33,
|
||||
"pop_no_resource": 12905,
|
||||
"scripture": 186,
|
||||
"film": 163,
|
||||
"growing_unreached": 38,
|
||||
"deaths_day": 1.2,
|
||||
"growth": 0.41,
|
||||
"pct_no_resource": 14.4,
|
||||
"pct_no_resource": 12.2,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -104,14 +104,14 @@
|
|||
"country": "Nigeria",
|
||||
"region": "Africa",
|
||||
"groups": 433,
|
||||
"no_resource": 56,
|
||||
"pop_no_resource": 3005950,
|
||||
"no_resource": 54,
|
||||
"pop_no_resource": 3005425,
|
||||
"scripture": 105,
|
||||
"film": 188,
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 44,
|
||||
"growth": null,
|
||||
"pct_no_resource": 12.9,
|
||||
"pct_no_resource": 12.5,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -119,14 +119,14 @@
|
|||
"country": "Indonesia",
|
||||
"region": "Asia",
|
||||
"groups": 669,
|
||||
"no_resource": 219,
|
||||
"pop_no_resource": 4173130,
|
||||
"no_resource": 207,
|
||||
"pop_no_resource": 4169480,
|
||||
"scripture": 222,
|
||||
"film": 265,
|
||||
"growing_unreached": 23,
|
||||
"deaths_day": 47.2,
|
||||
"growth": 0.81,
|
||||
"pct_no_resource": 32.7,
|
||||
"pct_no_resource": 30.9,
|
||||
"band": "high"
|
||||
},
|
||||
{
|
||||
|
|
@ -674,14 +674,14 @@
|
|||
"country": "Peru",
|
||||
"region": "Americas",
|
||||
"groups": 90,
|
||||
"no_resource": 10,
|
||||
"pop_no_resource": 658875,
|
||||
"no_resource": 8,
|
||||
"pop_no_resource": 658650,
|
||||
"scripture": 73,
|
||||
"film": 57,
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 5.4,
|
||||
"growth": 1.09,
|
||||
"pct_no_resource": 11.1,
|
||||
"pct_no_resource": 8.9,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -824,14 +824,14 @@
|
|||
"country": "Venezuela",
|
||||
"region": "Americas",
|
||||
"groups": 51,
|
||||
"no_resource": 3,
|
||||
"pop_no_resource": 297600,
|
||||
"no_resource": 2,
|
||||
"pop_no_resource": 297400,
|
||||
"scripture": 42,
|
||||
"film": 39,
|
||||
"growing_unreached": 2,
|
||||
"deaths_day": 0.2,
|
||||
"growth": 0.37,
|
||||
"pct_no_resource": 5.9,
|
||||
"pct_no_resource": 3.9,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -1049,14 +1049,14 @@
|
|||
"country": "Papua New Guinea",
|
||||
"region": "Oceania",
|
||||
"groups": 831,
|
||||
"no_resource": 286,
|
||||
"pop_no_resource": 863400,
|
||||
"no_resource": 279,
|
||||
"pop_no_resource": 861175,
|
||||
"scripture": 332,
|
||||
"film": 143,
|
||||
"growing_unreached": 1,
|
||||
"deaths_day": 0.9,
|
||||
"growth": 1.78,
|
||||
"pct_no_resource": 34.4,
|
||||
"pct_no_resource": 33.6,
|
||||
"band": "high"
|
||||
},
|
||||
{
|
||||
|
|
@ -1214,14 +1214,14 @@
|
|||
"country": "Solomon Islands",
|
||||
"region": "Oceania",
|
||||
"groups": 79,
|
||||
"no_resource": 14,
|
||||
"pop_no_resource": 49995,
|
||||
"no_resource": 13,
|
||||
"pop_no_resource": 49925,
|
||||
"scripture": 34,
|
||||
"film": 33,
|
||||
"growing_unreached": 1,
|
||||
"deaths_day": 0.1,
|
||||
"growth": 2.37,
|
||||
"pct_no_resource": 17.7,
|
||||
"pct_no_resource": 16.5,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -1439,14 +1439,14 @@
|
|||
"country": "Vanuatu",
|
||||
"region": "Oceania",
|
||||
"groups": 114,
|
||||
"no_resource": 49,
|
||||
"pop_no_resource": 47550,
|
||||
"no_resource": 44,
|
||||
"pop_no_resource": 46050,
|
||||
"scripture": 28,
|
||||
"film": 26,
|
||||
"growing_unreached": 1,
|
||||
"deaths_day": 0,
|
||||
"growth": 2.27,
|
||||
"pct_no_resource": 43,
|
||||
"pct_no_resource": 38.6,
|
||||
"band": "high"
|
||||
},
|
||||
{
|
||||
|
|
@ -2264,14 +2264,14 @@
|
|||
"country": "United States of America",
|
||||
"region": "Americas",
|
||||
"groups": 623,
|
||||
"no_resource": 19,
|
||||
"pop_no_resource": 323125,
|
||||
"no_resource": 18,
|
||||
"pop_no_resource": 322725,
|
||||
"scripture": 517,
|
||||
"film": 549,
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 0.1,
|
||||
"growth": 0.96,
|
||||
"pct_no_resource": 3,
|
||||
"pct_no_resource": 2.9,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -2384,14 +2384,14 @@
|
|||
"country": "Bolivia",
|
||||
"region": "Americas",
|
||||
"groups": 39,
|
||||
"no_resource": 2,
|
||||
"pop_no_resource": 120250,
|
||||
"no_resource": 1,
|
||||
"pop_no_resource": 120000,
|
||||
"scripture": 34,
|
||||
"film": 28,
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 0,
|
||||
"growth": 1.37,
|
||||
"pct_no_resource": 5.1,
|
||||
"pct_no_resource": 2.6,
|
||||
"band": "partial"
|
||||
},
|
||||
{
|
||||
|
|
@ -2628,14 +2628,14 @@
|
|||
"country": "Australia",
|
||||
"region": "Oceania",
|
||||
"groups": 97,
|
||||
"no_resource": 5,
|
||||
"pop_no_resource": 100625,
|
||||
"no_resource": 3,
|
||||
"pop_no_resource": 100335,
|
||||
"scripture": 86,
|
||||
"film": 47,
|
||||
"growing_unreached": null,
|
||||
"deaths_day": null,
|
||||
"growth": null,
|
||||
"pct_no_resource": 5.2,
|
||||
"pct_no_resource": 3.1,
|
||||
"band": "partial",
|
||||
"from_pins_only": true
|
||||
},
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"meta": {
|
||||
"title": "Gospel resource link verification",
|
||||
"generated": "2026-09-25T01:54:01.707Z",
|
||||
"generated": "2026-09-25T02:30:53.812Z",
|
||||
"method": "HEAD, redirects followed. verified = HTTP 200. broken = 404/410. unknown = unreachable, an ambiguous status, or a URL shape that cannot be checked by fetch.",
|
||||
"scope": "Every URL in data/tables/people-group-pins.json, deduplicated.",
|
||||
"states": {
|
||||
|
|
@ -45,6 +45,11 @@
|
|||
"url": "https://knowgod.com/zz/nosuchtool-xyzzy",
|
||||
"what": "bogus knowgod language/tool pair",
|
||||
"state": "broken"
|
||||
},
|
||||
{
|
||||
"url": "https://fivefish.org/zzq",
|
||||
"what": "bogus 5fish language code",
|
||||
"state": "broken"
|
||||
}
|
||||
],
|
||||
"positive": [
|
||||
|
|
@ -82,16 +87,21 @@
|
|||
"url": "https://knowgod.com/en/kgp",
|
||||
"what": "real knowgod language/tool pair",
|
||||
"state": "verified"
|
||||
},
|
||||
{
|
||||
"url": "https://fivefish.org/cpx",
|
||||
"what": "real 5fish language code",
|
||||
"state": "verified"
|
||||
}
|
||||
]
|
||||
},
|
||||
"summary": {
|
||||
"records": 8473,
|
||||
"checkedThisPass": 57,
|
||||
"records": 8513,
|
||||
"checkedThisPass": 40,
|
||||
"carriedForward": 74,
|
||||
"pruned": 0,
|
||||
"broken": 74,
|
||||
"verified": 8394,
|
||||
"verified": 8434,
|
||||
"unknown": 5
|
||||
},
|
||||
"byHost": {
|
||||
|
|
@ -132,7 +142,7 @@
|
|||
"verified": 921
|
||||
},
|
||||
"fivefish.org": {
|
||||
"verified": 982
|
||||
"verified": 1022
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -42501,6 +42511,206 @@
|
|||
"state": "verified",
|
||||
"detail": "HTTP 200 (via https://fivefish.org/6270?language=Ossato)",
|
||||
"at": "2026-09-25T01:54:01.409Z"
|
||||
},
|
||||
"https://fivefish.org/oca": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/1662?language=Ocaina (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:24:23.478Z"
|
||||
},
|
||||
"https://fivefish.org/mrp": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/14301?language=Moresi (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:24:33.576Z"
|
||||
},
|
||||
"https://fivefish.org/ora": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/3655?language=Oroha (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:24:43.557Z"
|
||||
},
|
||||
"https://fivefish.org/tls": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/4577?language=Tambotalo (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:24:53.503Z"
|
||||
},
|
||||
"https://fivefish.org/mmp": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/3435?language=Musian (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:25:03.510Z"
|
||||
},
|
||||
"https://fivefish.org/afz": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/4662?language=Obokuitai (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:25:13.418Z"
|
||||
},
|
||||
"https://fivefish.org/bzu": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/8542?language=Burmeso (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:25:23.489Z"
|
||||
},
|
||||
"https://fivefish.org/mwa": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/2179?language=Mwatebu%20%26%20Dalubia-Sawetaetae (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:25:33.556Z"
|
||||
},
|
||||
"https://fivefish.org/lcc": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/1340?language=Lagenyan (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:25:43.481Z"
|
||||
},
|
||||
"https://fivefish.org/bpw": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/3429?language=Bo (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:25:53.538Z"
|
||||
},
|
||||
"https://fivefish.org/mrf": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/1146?language=Alsengg (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:26:03.585Z"
|
||||
},
|
||||
"https://fivefish.org/gvj": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/10362?language=Aw%C3%A1%20Guaj%C3%A1 (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:26:13.459Z"
|
||||
},
|
||||
"https://fivefish.org/mpn": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/4055?language=Mindri (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:26:23.617Z"
|
||||
},
|
||||
"https://fivefish.org/yki": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/1191?language=Bitovondo (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:26:33.405Z"
|
||||
},
|
||||
"https://fivefish.org/dax": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/9188?language=Dayi%3A%20Dhalwangu (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:26:43.551Z"
|
||||
},
|
||||
"https://fivefish.org/kwa": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/4366?language=Daw (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:26:53.589Z"
|
||||
},
|
||||
"https://fivefish.org/ktn": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/6368?language=Karitiana (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:27:03.556Z"
|
||||
},
|
||||
"https://fivefish.org/kwk": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/3789?language=Kwak%27wala (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:27:13.442Z"
|
||||
},
|
||||
"https://fivefish.org/mmm": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/13301?language=Maii (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:27:23.544Z"
|
||||
},
|
||||
"https://fivefish.org/jru": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/11098?language=Japreria (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:27:33.551Z"
|
||||
},
|
||||
"https://fivefish.org/yuq": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/18654?language=Yuqui (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:27:43.480Z"
|
||||
},
|
||||
"https://fivefish.org/mgf": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/1907?language=Makaleo (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:27:53.527Z"
|
||||
},
|
||||
"https://fivefish.org/ung": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/3717?language=Ngarinyin (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:28:03.394Z"
|
||||
},
|
||||
"https://fivefish.org/auq": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/1161?language=Koroernoes (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:28:13.451Z"
|
||||
},
|
||||
"https://fivefish.org/agf": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/1734?language=Iroroutu%20Group (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:28:23.474Z"
|
||||
},
|
||||
"https://fivefish.org/msl": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/1134?language=Powla (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:28:33.456Z"
|
||||
},
|
||||
"https://fivefish.org/mnu": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/1260?language=Miere (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:28:43.475Z"
|
||||
},
|
||||
"https://fivefish.org/gop": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/1252?language=Umar (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:28:53.548Z"
|
||||
},
|
||||
"https://fivefish.org/onj": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/2417?language=Onjob (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:29:03.495Z"
|
||||
},
|
||||
"https://fivefish.org/klo": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/11569?language=Kapya (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:29:13.571Z"
|
||||
},
|
||||
"https://fivefish.org/asu": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/2281?language=Asurini%20Do%20Tocantins (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:29:23.443Z"
|
||||
},
|
||||
"https://fivefish.org/krf": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/12280?language=Koro (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:29:33.516Z"
|
||||
},
|
||||
"https://fivefish.org/wwo": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/18289?language=Wetamut (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:29:43.524Z"
|
||||
},
|
||||
"https://fivefish.org/hux": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/1663?language=Huitoto%2C%20Muinane (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:29:53.521Z"
|
||||
},
|
||||
"https://fivefish.org/nud": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/3235?language=Ngala (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:30:03.419Z"
|
||||
},
|
||||
"https://fivefish.org/tbp": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/17264?language=Taworta (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:30:13.507Z"
|
||||
},
|
||||
"https://fivefish.org/aac": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/534?language=Mogiala (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:30:23.675Z"
|
||||
},
|
||||
"https://fivefish.org/nmi": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/15151?language=Nyam (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:30:33.688Z"
|
||||
},
|
||||
"https://fivefish.org/awe": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/7398?language=Aweti (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:30:43.466Z"
|
||||
},
|
||||
"https://fivefish.org/mmh": {
|
||||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/2235?language=Mehinaku (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:30:53.528Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -2,8 +2,8 @@
|
|||
"source": "https://fivefish.org/<iso639-3> (5fish, Global Recordings Network)",
|
||||
"fetched": "2026-09-25",
|
||||
"_note": "GRN gospel AUDIO, typed as Gospel audio and never as Scripture — \"Words of Life\" is gospel messages and Bible stories, not a translation of the canon. The host never 404s: a nonsense path returns a geo-located page with HTTP 200, so existence is read from the page title, with a negative and a positive control run in band every time. Their robots.txt asks for Crawl-delay: 10 and this fetcher obeys it, sequentially.",
|
||||
"codes": 982,
|
||||
"decidedNone": 1233,
|
||||
"codes": 1022,
|
||||
"decidedNone": 1325,
|
||||
"byIso": {
|
||||
"mnp": {
|
||||
"u": "https://fivefish.org/mnp",
|
||||
|
|
@ -3932,6 +3932,166 @@
|
|||
"tml": {
|
||||
"u": "https://fivefish.org/tml",
|
||||
"n": "Citak, Tamnim"
|
||||
},
|
||||
"gop": {
|
||||
"u": "https://fivefish.org/gop",
|
||||
"n": "Umar"
|
||||
},
|
||||
"agf": {
|
||||
"u": "https://fivefish.org/agf",
|
||||
"n": "Iroroutu Group"
|
||||
},
|
||||
"kwk": {
|
||||
"u": "https://fivefish.org/kwk",
|
||||
"n": "Kwak'wala"
|
||||
},
|
||||
"ktn": {
|
||||
"u": "https://fivefish.org/ktn",
|
||||
"n": "Karitiana"
|
||||
},
|
||||
"mmp": {
|
||||
"u": "https://fivefish.org/mmp",
|
||||
"n": "Musian"
|
||||
},
|
||||
"mrp": {
|
||||
"u": "https://fivefish.org/mrp",
|
||||
"n": "Moresi"
|
||||
},
|
||||
"nud": {
|
||||
"u": "https://fivefish.org/nud",
|
||||
"n": "Ngala"
|
||||
},
|
||||
"asu": {
|
||||
"u": "https://fivefish.org/asu",
|
||||
"n": "Asurini Do Tocantins"
|
||||
},
|
||||
"auq": {
|
||||
"u": "https://fivefish.org/auq",
|
||||
"n": "Koroernoes"
|
||||
},
|
||||
"mpn": {
|
||||
"u": "https://fivefish.org/mpn",
|
||||
"n": "Mindri"
|
||||
},
|
||||
"tbp": {
|
||||
"u": "https://fivefish.org/tbp",
|
||||
"n": "Taworta"
|
||||
},
|
||||
"wwo": {
|
||||
"u": "https://fivefish.org/wwo",
|
||||
"n": "Wetamut"
|
||||
},
|
||||
"klo": {
|
||||
"u": "https://fivefish.org/klo",
|
||||
"n": "Kapya"
|
||||
},
|
||||
"onj": {
|
||||
"u": "https://fivefish.org/onj",
|
||||
"n": "Onjob"
|
||||
},
|
||||
"lcc": {
|
||||
"u": "https://fivefish.org/lcc",
|
||||
"n": "Lagenyan"
|
||||
},
|
||||
"bzu": {
|
||||
"u": "https://fivefish.org/bzu",
|
||||
"n": "Burmeso"
|
||||
},
|
||||
"mmm": {
|
||||
"u": "https://fivefish.org/mmm",
|
||||
"n": "Maii"
|
||||
},
|
||||
"mrf": {
|
||||
"u": "https://fivefish.org/mrf",
|
||||
"n": "Alsengg"
|
||||
},
|
||||
"mnu": {
|
||||
"u": "https://fivefish.org/mnu",
|
||||
"n": "Miere"
|
||||
},
|
||||
"krf": {
|
||||
"u": "https://fivefish.org/krf",
|
||||
"n": "Koro"
|
||||
},
|
||||
"mwa": {
|
||||
"u": "https://fivefish.org/mwa",
|
||||
"n": "Mwatebu & Dalubia-Sawetaetae"
|
||||
},
|
||||
"msl": {
|
||||
"u": "https://fivefish.org/msl",
|
||||
"n": "Powla"
|
||||
},
|
||||
"yuq": {
|
||||
"u": "https://fivefish.org/yuq",
|
||||
"n": "Yuqui"
|
||||
},
|
||||
"mmh": {
|
||||
"u": "https://fivefish.org/mmh",
|
||||
"n": "Mehinaku"
|
||||
},
|
||||
"aac": {
|
||||
"u": "https://fivefish.org/aac",
|
||||
"n": "Mogiala"
|
||||
},
|
||||
"awe": {
|
||||
"u": "https://fivefish.org/awe",
|
||||
"n": "Aweti"
|
||||
},
|
||||
"gvj": {
|
||||
"u": "https://fivefish.org/gvj",
|
||||
"n": "Awá Guajá"
|
||||
},
|
||||
"bpw": {
|
||||
"u": "https://fivefish.org/bpw",
|
||||
"n": "Bo"
|
||||
},
|
||||
"mgf": {
|
||||
"u": "https://fivefish.org/mgf",
|
||||
"n": "Makaleo"
|
||||
},
|
||||
"jru": {
|
||||
"u": "https://fivefish.org/jru",
|
||||
"n": "Japreria"
|
||||
},
|
||||
"dax": {
|
||||
"u": "https://fivefish.org/dax",
|
||||
"n": "Dayi: Dhalwangu"
|
||||
},
|
||||
"yki": {
|
||||
"u": "https://fivefish.org/yki",
|
||||
"n": "Bitovondo"
|
||||
},
|
||||
"nmi": {
|
||||
"u": "https://fivefish.org/nmi",
|
||||
"n": "Nyam"
|
||||
},
|
||||
"afz": {
|
||||
"u": "https://fivefish.org/afz",
|
||||
"n": "Obokuitai"
|
||||
},
|
||||
"tls": {
|
||||
"u": "https://fivefish.org/tls",
|
||||
"n": "Tambotalo"
|
||||
},
|
||||
"hux": {
|
||||
"u": "https://fivefish.org/hux",
|
||||
"n": "Huitoto, Muinane"
|
||||
},
|
||||
"kwa": {
|
||||
"u": "https://fivefish.org/kwa",
|
||||
"n": "Daw"
|
||||
},
|
||||
"oca": {
|
||||
"u": "https://fivefish.org/oca",
|
||||
"n": "Ocaina"
|
||||
},
|
||||
"ung": {
|
||||
"u": "https://fivefish.org/ung",
|
||||
"n": "Ngarinyin"
|
||||
},
|
||||
"ora": {
|
||||
"u": "https://fivefish.org/ora",
|
||||
"n": "Oroha"
|
||||
}
|
||||
},
|
||||
"none": [
|
||||
|
|
@ -5167,6 +5327,98 @@
|
|||
"wet",
|
||||
"xwr",
|
||||
"alm",
|
||||
"ngr"
|
||||
"ngr",
|
||||
"tij",
|
||||
"pby",
|
||||
"ybx",
|
||||
"tmt",
|
||||
"pup",
|
||||
"urr",
|
||||
"kiq",
|
||||
"daz",
|
||||
"anq",
|
||||
"mvx",
|
||||
"sij",
|
||||
"lnb",
|
||||
"xsp",
|
||||
"gwf",
|
||||
"mnq",
|
||||
"val",
|
||||
"wfg",
|
||||
"ukg",
|
||||
"ail",
|
||||
"hvk",
|
||||
"bsa",
|
||||
"pnh",
|
||||
"sbi",
|
||||
"knq",
|
||||
"lnh",
|
||||
"rac",
|
||||
"dnr",
|
||||
"lio",
|
||||
"cbb",
|
||||
"pin",
|
||||
"pme",
|
||||
"mdz",
|
||||
"ktx",
|
||||
"seo",
|
||||
"umi",
|
||||
"tlg",
|
||||
"gbb",
|
||||
"erw",
|
||||
"wlr",
|
||||
"wai",
|
||||
"cuj",
|
||||
"rpn",
|
||||
"bed",
|
||||
"puf",
|
||||
"mrk",
|
||||
"urz",
|
||||
"ncn",
|
||||
"khp",
|
||||
"kww",
|
||||
"bpi",
|
||||
"itx",
|
||||
"gin",
|
||||
"cby",
|
||||
"hiw",
|
||||
"zah",
|
||||
"pix",
|
||||
"bdk",
|
||||
"asn",
|
||||
"wbe",
|
||||
"tnz",
|
||||
"lnn",
|
||||
"urp",
|
||||
"swm",
|
||||
"lib",
|
||||
"srt",
|
||||
"spg",
|
||||
"bie",
|
||||
"bmp",
|
||||
"mlb",
|
||||
"tfo",
|
||||
"ppe",
|
||||
"swx",
|
||||
"gob",
|
||||
"oon",
|
||||
"dix",
|
||||
"kpi",
|
||||
"rga",
|
||||
"mkt",
|
||||
"adw",
|
||||
"bti",
|
||||
"pnm",
|
||||
"awm",
|
||||
"xmo",
|
||||
"nbt",
|
||||
"mqv",
|
||||
"mvq",
|
||||
"dui",
|
||||
"ire",
|
||||
"avv",
|
||||
"nam",
|
||||
"std",
|
||||
"mra"
|
||||
]
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -15179,8 +15179,8 @@
|
|||
"has_audio": "unknown",
|
||||
"has_open_bible_stories": false,
|
||||
"obs_note": "",
|
||||
"no_resource_found": true,
|
||||
"any_resource_found": false,
|
||||
"no_resource_found": false,
|
||||
"any_resource_found": true,
|
||||
"scripture_url": "",
|
||||
"film_url": "",
|
||||
"code_unmatchable": false,
|
||||
|
|
@ -15203,8 +15203,8 @@
|
|||
"has_audio": "unknown",
|
||||
"has_open_bible_stories": false,
|
||||
"obs_note": "",
|
||||
"no_resource_found": true,
|
||||
"any_resource_found": false,
|
||||
"no_resource_found": false,
|
||||
"any_resource_found": true,
|
||||
"scripture_url": "",
|
||||
"film_url": "",
|
||||
"code_unmatchable": false,
|
||||
|
|
@ -15323,8 +15323,8 @@
|
|||
"has_audio": "unknown",
|
||||
"has_open_bible_stories": false,
|
||||
"obs_note": "",
|
||||
"no_resource_found": true,
|
||||
"any_resource_found": false,
|
||||
"no_resource_found": false,
|
||||
"any_resource_found": true,
|
||||
"scripture_url": "",
|
||||
"film_url": "",
|
||||
"code_unmatchable": false,
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@
|
|||
"source": "data/tables/translation-priority.json, itself built from the pin index — so this table, that one and the map cannot disagree.",
|
||||
"generated": "2026-09-25",
|
||||
"countries": 159,
|
||||
"groups": 3075,
|
||||
"people": 1330894159,
|
||||
"groups": 3115,
|
||||
"people": 1330905094,
|
||||
"definition": "People groups with recorded audio, the JESUS Film, a Bible video or Words of Life in their language and NO text Scripture found in the pools checked, aggregated to the country a team would be sent to. \"Not found\" is a statement about those pools, never a claim that no text exists; the per-group table carries the checked and unchecked pools on every row.",
|
||||
"two_columns_note": "groups and languages answer different questions from people. Nigeria and the DRC lead on languages, which is the translation workload; China and Pakistan lead on population across far fewer languages. Neither is ranked for you."
|
||||
},
|
||||
|
|
@ -105,9 +105,9 @@
|
|||
{
|
||||
"country": "Nigeria",
|
||||
"iso3": "NGA",
|
||||
"groups": 265,
|
||||
"languages": 260,
|
||||
"people": 54949800,
|
||||
"groups": 267,
|
||||
"languages": 262,
|
||||
"people": 54950325,
|
||||
"largest_group": "Tiv",
|
||||
"largest_group_population": 5220000,
|
||||
"basis": "no text Scripture found in the pools checked"
|
||||
|
|
@ -185,9 +185,9 @@
|
|||
{
|
||||
"country": "Indonesia",
|
||||
"iso3": "IDN",
|
||||
"groups": 205,
|
||||
"languages": 184,
|
||||
"people": 23228020,
|
||||
"groups": 217,
|
||||
"languages": 196,
|
||||
"people": 23231670,
|
||||
"largest_group": "Betawi",
|
||||
"largest_group_population": 5620000,
|
||||
"basis": "no text Scripture found in the pools checked"
|
||||
|
|
@ -425,9 +425,9 @@
|
|||
{
|
||||
"country": "United States of America",
|
||||
"iso3": "USA",
|
||||
"groups": 78,
|
||||
"languages": 75,
|
||||
"people": 3529775,
|
||||
"groups": 79,
|
||||
"languages": 76,
|
||||
"people": 3530175,
|
||||
"largest_group": "Armenian",
|
||||
"largest_group_population": 1180000,
|
||||
"basis": "no text Scripture found in the pools checked"
|
||||
|
|
@ -475,9 +475,9 @@
|
|||
{
|
||||
"country": "Brazil",
|
||||
"iso3": "BRA",
|
||||
"groups": 29,
|
||||
"languages": 21,
|
||||
"people": 3056240,
|
||||
"groups": 35,
|
||||
"languages": 27,
|
||||
"people": 3057840,
|
||||
"largest_group": "Hunsrik",
|
||||
"largest_group_population": 2000000,
|
||||
"basis": "no text Scripture found in the pools checked"
|
||||
|
|
@ -675,9 +675,9 @@
|
|||
{
|
||||
"country": "Papua New Guinea",
|
||||
"iso3": "PNG",
|
||||
"groups": 208,
|
||||
"languages": 187,
|
||||
"people": 1736025,
|
||||
"groups": 215,
|
||||
"languages": 194,
|
||||
"people": 1738250,
|
||||
"largest_group": "Sinasina",
|
||||
"largest_group_population": 176000,
|
||||
"basis": "no text Scripture found in the pools checked"
|
||||
|
|
@ -925,9 +925,9 @@
|
|||
{
|
||||
"country": "Peru",
|
||||
"iso3": "PER",
|
||||
"groups": 2,
|
||||
"languages": 2,
|
||||
"people": 502000,
|
||||
"groups": 4,
|
||||
"languages": 4,
|
||||
"people": 502225,
|
||||
"largest_group": "Quechua, Puno",
|
||||
"largest_group_population": 500000,
|
||||
"basis": "no text Scripture found in the pools checked"
|
||||
|
|
@ -1035,9 +1035,9 @@
|
|||
{
|
||||
"country": "Australia",
|
||||
"iso3": "AUS",
|
||||
"groups": 6,
|
||||
"languages": 6,
|
||||
"people": 303950,
|
||||
"groups": 8,
|
||||
"languages": 8,
|
||||
"people": 304240,
|
||||
"largest_group": "Arab, Syro-Lebanese",
|
||||
"largest_group_population": 194000,
|
||||
"basis": "no text Scripture found in the pools checked"
|
||||
|
|
@ -1055,9 +1055,9 @@
|
|||
{
|
||||
"country": "Solomon Islands",
|
||||
"iso3": "SLB",
|
||||
"groups": 31,
|
||||
"languages": 30,
|
||||
"people": 273400,
|
||||
"groups": 32,
|
||||
"languages": 31,
|
||||
"people": 273470,
|
||||
"largest_group": "Areare",
|
||||
"largest_group_population": 34500,
|
||||
"basis": "no text Scripture found in the pools checked"
|
||||
|
|
@ -1155,9 +1155,9 @@
|
|||
{
|
||||
"country": "Vanuatu",
|
||||
"iso3": "VUT",
|
||||
"groups": 37,
|
||||
"languages": 35,
|
||||
"people": 154185,
|
||||
"groups": 42,
|
||||
"languages": 40,
|
||||
"people": 155685,
|
||||
"largest_group": "Lenakel Tannese",
|
||||
"largest_group_population": 21500,
|
||||
"basis": "no text Scripture found in the pools checked"
|
||||
|
|
@ -1425,9 +1425,9 @@
|
|||
{
|
||||
"country": "Venezuela",
|
||||
"iso3": "VEN",
|
||||
"groups": 3,
|
||||
"languages": 3,
|
||||
"people": 13300,
|
||||
"groups": 4,
|
||||
"languages": 4,
|
||||
"people": 13500,
|
||||
"largest_group": "Yaruro",
|
||||
"largest_group_population": 8100,
|
||||
"basis": "no text Scripture found in the pools checked"
|
||||
|
|
@ -1545,9 +1545,9 @@
|
|||
{
|
||||
"country": "Bolivia",
|
||||
"iso3": "BOL",
|
||||
"groups": 1,
|
||||
"languages": 1,
|
||||
"people": 2600,
|
||||
"groups": 2,
|
||||
"languages": 2,
|
||||
"people": 2850,
|
||||
"largest_group": "Ryukyuan",
|
||||
"largest_group_population": 2600,
|
||||
"basis": "no text Scripture found in the pools checked"
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@
|
|||
"title": "Translation priority — can hear it, no text found",
|
||||
"source": "data/tables/people-group-pins.json — the same index the map draws, so this table and the map cannot disagree.",
|
||||
"generated": "2026-09-25",
|
||||
"groups": 3075,
|
||||
"languages": 1860,
|
||||
"people": 1330894159,
|
||||
"groups": 3115,
|
||||
"languages": 1900,
|
||||
"people": 1330905094,
|
||||
"definition": "A people group with recorded audio, the JESUS Film, a Bible video or Words of Life in their language, and NO text Scripture found in the pools checked. \"Not found\" is a statement about those pools, never a claim that no text exists — several of the largest rows are varieties where a recording plainly exists and a text in that same variety is contested. The checked and unchecked pools are on every row for that reason."
|
||||
},
|
||||
"columns": [
|
||||
|
|
@ -42014,6 +42014,34 @@
|
|||
"lat": 23.67,
|
||||
"lng": 69.9
|
||||
},
|
||||
{
|
||||
"people_group": "Yeretuar",
|
||||
"country": "Indonesia",
|
||||
"iso3": "IDN",
|
||||
"language": "Yeretuar",
|
||||
"iso639_3": "gop",
|
||||
"population": 400,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/gop",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -3.02,
|
||||
"lng": 134.66
|
||||
},
|
||||
{
|
||||
"people_group": "Arguni",
|
||||
"country": "Indonesia",
|
||||
"iso3": "IDN",
|
||||
"language": "Arguni",
|
||||
"iso639_3": "agf",
|
||||
"population": 400,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/agf",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -2.65,
|
||||
"lng": 132.55
|
||||
},
|
||||
{
|
||||
"people_group": "Mon",
|
||||
"country": "Lao People's Democratic Republic",
|
||||
|
|
@ -42028,6 +42056,34 @@
|
|||
"lat": 19.15,
|
||||
"lng": 103.7
|
||||
},
|
||||
{
|
||||
"people_group": "Kwakwakaʼwakw",
|
||||
"country": "United States of America",
|
||||
"iso3": "USA",
|
||||
"language": "Kwakwala",
|
||||
"iso639_3": "kwk",
|
||||
"population": 400,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/kwk",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": 48.12,
|
||||
"lng": -123.13
|
||||
},
|
||||
{
|
||||
"people_group": "Karitiana",
|
||||
"country": "Brazil",
|
||||
"iso3": "BRA",
|
||||
"language": "Karitiâna",
|
||||
"iso639_3": "ktn",
|
||||
"population": 400,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/ktn",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -9.29,
|
||||
"lng": -64.01
|
||||
},
|
||||
{
|
||||
"people_group": "Bhatu (Andamani)",
|
||||
"country": "India",
|
||||
|
|
@ -42070,6 +42126,20 @@
|
|||
"lat": -11.49,
|
||||
"lng": -53.2
|
||||
},
|
||||
{
|
||||
"people_group": "Musan",
|
||||
"country": "Papua New Guinea",
|
||||
"iso3": "PNG",
|
||||
"language": "Siawi",
|
||||
"iso639_3": "mmp",
|
||||
"population": 400,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/mmp",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -4.05,
|
||||
"lng": 141.42
|
||||
},
|
||||
{
|
||||
"people_group": "Drung",
|
||||
"country": "Myanmar",
|
||||
|
|
@ -42084,6 +42154,20 @@
|
|||
"lat": 28.12,
|
||||
"lng": 97.69
|
||||
},
|
||||
{
|
||||
"people_group": "Moruas",
|
||||
"country": "Vanuatu",
|
||||
"iso3": "VUT",
|
||||
"language": "Morouas",
|
||||
"iso639_3": "mrp",
|
||||
"population": 400,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/mrp",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -15.35,
|
||||
"lng": 166.89
|
||||
},
|
||||
{
|
||||
"people_group": "French Guiana",
|
||||
"country": "United States of America",
|
||||
|
|
@ -42112,6 +42196,20 @@
|
|||
"lat": 14.27,
|
||||
"lng": 76.02
|
||||
},
|
||||
{
|
||||
"people_group": "Ngala",
|
||||
"country": "Papua New Guinea",
|
||||
"iso3": "PNG",
|
||||
"language": "Gala",
|
||||
"iso639_3": "nud",
|
||||
"population": 375,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/nud",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -4.27,
|
||||
"lng": 142.5
|
||||
},
|
||||
{
|
||||
"people_group": "Bayil Kammara",
|
||||
"country": "India",
|
||||
|
|
@ -42126,6 +42224,34 @@
|
|||
"lat": 16.34,
|
||||
"lng": 76.08
|
||||
},
|
||||
{
|
||||
"people_group": "Asurini, Tocantins",
|
||||
"country": "Brazil",
|
||||
"iso3": "BRA",
|
||||
"language": "Asurini, Tocantins",
|
||||
"iso639_3": "asu",
|
||||
"population": 375,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/asu",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -3.58,
|
||||
"lng": -49.67
|
||||
},
|
||||
{
|
||||
"people_group": "Anus",
|
||||
"country": "Indonesia",
|
||||
"iso3": "IDN",
|
||||
"language": "Anus",
|
||||
"iso639_3": "auq",
|
||||
"population": 375,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/auq",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -2.2,
|
||||
"lng": 139.45
|
||||
},
|
||||
{
|
||||
"people_group": "Pouhoy",
|
||||
"country": "Lao People's Democratic Republic",
|
||||
|
|
@ -42140,6 +42266,20 @@
|
|||
"lat": 21.05,
|
||||
"lng": 101.73
|
||||
},
|
||||
{
|
||||
"people_group": "Mindiri",
|
||||
"country": "Papua New Guinea",
|
||||
"iso3": "PNG",
|
||||
"language": "Mindiri",
|
||||
"iso639_3": "mpn",
|
||||
"population": 375,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/mpn",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -5.55,
|
||||
"lng": 146.14
|
||||
},
|
||||
{
|
||||
"people_group": "Pengzi",
|
||||
"country": "People's Republic of China",
|
||||
|
|
@ -42154,6 +42294,20 @@
|
|||
"lat": 23.94,
|
||||
"lng": 99.22
|
||||
},
|
||||
{
|
||||
"people_group": "Taworta",
|
||||
"country": "Indonesia",
|
||||
"iso3": "IDN",
|
||||
"language": "Taburta",
|
||||
"iso639_3": "tbp",
|
||||
"population": 350,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/tbp",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -3.27,
|
||||
"lng": 138.81
|
||||
},
|
||||
{
|
||||
"people_group": "Guriaso",
|
||||
"country": "Papua New Guinea",
|
||||
|
|
@ -42168,6 +42322,20 @@
|
|||
"lat": -3.57,
|
||||
"lng": 141.6
|
||||
},
|
||||
{
|
||||
"people_group": "Wetamut",
|
||||
"country": "Vanuatu",
|
||||
"iso3": "VUT",
|
||||
"language": "Dorig",
|
||||
"iso639_3": "wwo",
|
||||
"population": 350,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/wwo",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -14.32,
|
||||
"lng": 167.57
|
||||
},
|
||||
{
|
||||
"people_group": "Suan",
|
||||
"country": "People's Republic of China",
|
||||
|
|
@ -42182,6 +42350,34 @@
|
|||
"lat": 24.2,
|
||||
"lng": 99.29
|
||||
},
|
||||
{
|
||||
"people_group": "Kapya",
|
||||
"country": "Nigeria",
|
||||
"iso3": "NGA",
|
||||
"language": "Kapya",
|
||||
"iso639_3": "klo",
|
||||
"population": 350,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/klo",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": 7.05,
|
||||
"lng": 9.87
|
||||
},
|
||||
{
|
||||
"people_group": "Onjob",
|
||||
"country": "Papua New Guinea",
|
||||
"iso3": "PNG",
|
||||
"language": "Onjob",
|
||||
"iso639_3": "onj",
|
||||
"population": 350,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/onj",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -9.34,
|
||||
"lng": 149.15
|
||||
},
|
||||
{
|
||||
"people_group": "Norfolker",
|
||||
"country": "Norfolk Island",
|
||||
|
|
@ -42210,6 +42406,34 @@
|
|||
"lat": -10.46,
|
||||
"lng": -61.66
|
||||
},
|
||||
{
|
||||
"people_group": "Legenyem",
|
||||
"country": "Indonesia",
|
||||
"iso3": "IDN",
|
||||
"language": "Legenyem",
|
||||
"iso639_3": "lcc",
|
||||
"population": 350,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/lcc",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -0.22,
|
||||
"lng": 130.65
|
||||
},
|
||||
{
|
||||
"people_group": "Taurap",
|
||||
"country": "Indonesia",
|
||||
"iso3": "IDN",
|
||||
"language": "Burmeso",
|
||||
"iso639_3": "bzu",
|
||||
"population": 350,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/bzu",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -2.48,
|
||||
"lng": 138.2
|
||||
},
|
||||
{
|
||||
"people_group": "Xegwi",
|
||||
"country": "Zambia",
|
||||
|
|
@ -42238,6 +42462,34 @@
|
|||
"lat": 37.33,
|
||||
"lng": -121.95
|
||||
},
|
||||
{
|
||||
"people_group": "Maii",
|
||||
"country": "Vanuatu",
|
||||
"iso3": "VUT",
|
||||
"language": "Maii",
|
||||
"iso639_3": "mmm",
|
||||
"population": 325,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/mmm",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -16.74,
|
||||
"lng": 168.21
|
||||
},
|
||||
{
|
||||
"people_group": "Elseng",
|
||||
"country": "Indonesia",
|
||||
"iso3": "IDN",
|
||||
"language": "Elseng",
|
||||
"iso639_3": "mrf",
|
||||
"population": 325,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/mrf",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -3,
|
||||
"lng": 140.42
|
||||
},
|
||||
{
|
||||
"people_group": "Aikana",
|
||||
"country": "Brazil",
|
||||
|
|
@ -42294,6 +42546,20 @@
|
|||
"lat": 31.51,
|
||||
"lng": 74.33
|
||||
},
|
||||
{
|
||||
"people_group": "Mer",
|
||||
"country": "Indonesia",
|
||||
"iso3": "IDN",
|
||||
"language": "Mer",
|
||||
"iso639_3": "mnu",
|
||||
"population": 300,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/mnu",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -3.15,
|
||||
"lng": 134.49
|
||||
},
|
||||
{
|
||||
"people_group": "Pilaga",
|
||||
"country": "Paraguay",
|
||||
|
|
@ -42378,6 +42644,20 @@
|
|||
"lat": 21.05,
|
||||
"lng": 70.53
|
||||
},
|
||||
{
|
||||
"people_group": "Koro",
|
||||
"country": "Vanuatu",
|
||||
"iso3": "VUT",
|
||||
"language": "Koro (Vanuatu)",
|
||||
"iso639_3": "krf",
|
||||
"population": 275,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/krf",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -14.29,
|
||||
"lng": 167.47
|
||||
},
|
||||
{
|
||||
"people_group": "Nama",
|
||||
"country": "Botswana",
|
||||
|
|
@ -42434,6 +42714,20 @@
|
|||
"lat": -17.54,
|
||||
"lng": -149.56
|
||||
},
|
||||
{
|
||||
"people_group": "Mwatebu",
|
||||
"country": "Papua New Guinea",
|
||||
"iso3": "PNG",
|
||||
"language": "Mwatebu",
|
||||
"iso639_3": "mwa",
|
||||
"population": 275,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/mwa",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -10.03,
|
||||
"lng": 151.07
|
||||
},
|
||||
{
|
||||
"people_group": "Ak",
|
||||
"country": "Papua New Guinea",
|
||||
|
|
@ -42476,6 +42770,34 @@
|
|||
"lat": 37.97,
|
||||
"lng": -91.83
|
||||
},
|
||||
{
|
||||
"people_group": "Molof",
|
||||
"country": "Indonesia",
|
||||
"iso3": "IDN",
|
||||
"language": "Molof",
|
||||
"iso639_3": "msl",
|
||||
"population": 250,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/msl",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -3.45,
|
||||
"lng": 140.51
|
||||
},
|
||||
{
|
||||
"people_group": "Yuqui",
|
||||
"country": "Bolivia",
|
||||
"iso3": "BOL",
|
||||
"language": "Yuqui",
|
||||
"iso639_3": "yuq",
|
||||
"population": 250,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/yuq",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -16.79,
|
||||
"lng": -64.94
|
||||
},
|
||||
{
|
||||
"people_group": "Tanjong",
|
||||
"country": "Malaysia",
|
||||
|
|
@ -42490,6 +42812,20 @@
|
|||
"lat": 2.05,
|
||||
"lng": 112.31
|
||||
},
|
||||
{
|
||||
"people_group": "Mehinaku",
|
||||
"country": "Brazil",
|
||||
"iso3": "BRA",
|
||||
"language": "Mehináku",
|
||||
"iso639_3": "mmh",
|
||||
"population": 250,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/mmh",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -12.5,
|
||||
"lng": -53.5
|
||||
},
|
||||
{
|
||||
"people_group": "Bothar",
|
||||
"country": "Papua New Guinea",
|
||||
|
|
@ -42504,6 +42840,20 @@
|
|||
"lat": -8.42,
|
||||
"lng": 141.03
|
||||
},
|
||||
{
|
||||
"people_group": "Ari",
|
||||
"country": "Papua New Guinea",
|
||||
"iso3": "PNG",
|
||||
"language": "Ari",
|
||||
"iso639_3": "aac",
|
||||
"population": 225,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/aac",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -7.96,
|
||||
"lng": 142.4
|
||||
},
|
||||
{
|
||||
"people_group": "Chin, Zomi",
|
||||
"country": "United States of America",
|
||||
|
|
@ -42532,6 +42882,20 @@
|
|||
"lat": 12.43,
|
||||
"lng": 75.74
|
||||
},
|
||||
{
|
||||
"people_group": "Aweti",
|
||||
"country": "Brazil",
|
||||
"iso3": "BRA",
|
||||
"language": "Awetí",
|
||||
"iso639_3": "awe",
|
||||
"population": 225,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/awe",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -12.71,
|
||||
"lng": -53.38
|
||||
},
|
||||
{
|
||||
"people_group": "Mangas",
|
||||
"country": "Nigeria",
|
||||
|
|
@ -42546,6 +42910,34 @@
|
|||
"lat": 10.16,
|
||||
"lng": 9.82
|
||||
},
|
||||
{
|
||||
"people_group": "Guaja",
|
||||
"country": "Brazil",
|
||||
"iso3": "BRA",
|
||||
"language": "Guajá",
|
||||
"iso639_3": "gvj",
|
||||
"population": 225,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/gvj",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -3.55,
|
||||
"lng": -46.53
|
||||
},
|
||||
{
|
||||
"people_group": "Bo",
|
||||
"country": "Papua New Guinea",
|
||||
"iso3": "PNG",
|
||||
"language": "Bo (Papua New Guinea)",
|
||||
"iso639_3": "bpw",
|
||||
"population": 225,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/bpw",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -4.33,
|
||||
"lng": 141.38
|
||||
},
|
||||
{
|
||||
"people_group": "Ara",
|
||||
"country": "New Caledonia",
|
||||
|
|
@ -42574,6 +42966,62 @@
|
|||
"lat": -12.06,
|
||||
"lng": -53.35
|
||||
},
|
||||
{
|
||||
"people_group": "Maklew",
|
||||
"country": "Indonesia",
|
||||
"iso3": "IDN",
|
||||
"language": "Maklew",
|
||||
"iso639_3": "mgf",
|
||||
"population": 200,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/mgf",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -7.74,
|
||||
"lng": 139.27
|
||||
},
|
||||
{
|
||||
"people_group": "Japredia",
|
||||
"country": "Venezuela",
|
||||
"iso3": "VEN",
|
||||
"language": "Japreria",
|
||||
"iso639_3": "jru",
|
||||
"population": 200,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/jru",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": 10.55,
|
||||
"lng": -72.71
|
||||
},
|
||||
{
|
||||
"people_group": "Dayi",
|
||||
"country": "Australia",
|
||||
"iso3": "AUS",
|
||||
"language": "Dayi",
|
||||
"iso639_3": "dax",
|
||||
"population": 200,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/dax",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -12.03,
|
||||
"lng": 135.57
|
||||
},
|
||||
{
|
||||
"people_group": "Pauwi",
|
||||
"country": "Indonesia",
|
||||
"iso3": "IDN",
|
||||
"language": "Yoke",
|
||||
"iso639_3": "yki",
|
||||
"population": 200,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/yki",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -1.69,
|
||||
"lng": 138.03
|
||||
},
|
||||
{
|
||||
"people_group": "Cape Verdean",
|
||||
"country": "Canada",
|
||||
|
|
@ -42616,6 +43064,20 @@
|
|||
"lat": 34.23,
|
||||
"lng": -77.94
|
||||
},
|
||||
{
|
||||
"people_group": "Nyam",
|
||||
"country": "Nigeria",
|
||||
"iso3": "NGA",
|
||||
"language": "Nyam",
|
||||
"iso639_3": "nmi",
|
||||
"population": 175,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/nmi",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": 9.23,
|
||||
"lng": 10.81
|
||||
},
|
||||
{
|
||||
"people_group": "Bankhariya",
|
||||
"country": "Nepal",
|
||||
|
|
@ -42742,6 +43204,34 @@
|
|||
"lat": 21.38,
|
||||
"lng": -157.93
|
||||
},
|
||||
{
|
||||
"people_group": "Ati",
|
||||
"country": "Indonesia",
|
||||
"iso3": "IDN",
|
||||
"language": "Obokuitai",
|
||||
"iso639_3": "afz",
|
||||
"population": 150,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/afz",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -2.88,
|
||||
"lng": 137.98
|
||||
},
|
||||
{
|
||||
"people_group": "Tambotalo",
|
||||
"country": "Vanuatu",
|
||||
"iso3": "VUT",
|
||||
"language": "Tambotalo",
|
||||
"iso639_3": "tls",
|
||||
"population": 150,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/tls",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -15.5,
|
||||
"lng": 167.14
|
||||
},
|
||||
{
|
||||
"people_group": "Chari",
|
||||
"country": "India",
|
||||
|
|
@ -42756,6 +43246,34 @@
|
|||
"lat": 20.75,
|
||||
"lng": 78.61
|
||||
},
|
||||
{
|
||||
"people_group": "Huitoto, Nipode",
|
||||
"country": "Peru",
|
||||
"iso3": "PER",
|
||||
"language": "Witoto, Nipode",
|
||||
"iso639_3": "hux",
|
||||
"population": 125,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/hux",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -2.48,
|
||||
"lng": -72.69
|
||||
},
|
||||
{
|
||||
"people_group": "Daw",
|
||||
"country": "Brazil",
|
||||
"iso3": "BRA",
|
||||
"language": "Dâw",
|
||||
"iso639_3": "kwa",
|
||||
"population": 125,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/kwa",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -0.15,
|
||||
"lng": -67.09
|
||||
},
|
||||
{
|
||||
"people_group": "Kawacha",
|
||||
"country": "Papua New Guinea",
|
||||
|
|
@ -42868,6 +43386,20 @@
|
|||
"lat": 21.4,
|
||||
"lng": -157.95
|
||||
},
|
||||
{
|
||||
"people_group": "Ocaina",
|
||||
"country": "Peru",
|
||||
"iso3": "PER",
|
||||
"language": "Ocaina",
|
||||
"iso639_3": "oca",
|
||||
"population": 100,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/oca",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -2.33,
|
||||
"lng": -71.88
|
||||
},
|
||||
{
|
||||
"people_group": "Embu-Mbeere",
|
||||
"country": "United States of America",
|
||||
|
|
@ -42910,6 +43442,20 @@
|
|||
"lat": -12.92,
|
||||
"lng": -52.81
|
||||
},
|
||||
{
|
||||
"people_group": "Ngarinyin",
|
||||
"country": "Australia",
|
||||
"iso3": "AUS",
|
||||
"language": "Ngarinyin",
|
||||
"iso639_3": "ung",
|
||||
"population": 90,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/ung",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -16.64,
|
||||
"lng": 124.7
|
||||
},
|
||||
{
|
||||
"people_group": "Liechtensteiner",
|
||||
"country": "United States of America",
|
||||
|
|
@ -42966,6 +43512,20 @@
|
|||
"lat": 22.45,
|
||||
"lng": 70.06
|
||||
},
|
||||
{
|
||||
"people_group": "Oroha",
|
||||
"country": "Solomon Islands",
|
||||
"iso3": "SLB",
|
||||
"language": "Oroha",
|
||||
"iso639_3": "ora",
|
||||
"population": 70,
|
||||
"can_hear": "gospel audio (Words of Life)",
|
||||
"first_link": "https://fivefish.org/ora",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, grn, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible",
|
||||
"lat": -9.7,
|
||||
"lng": 161.56
|
||||
},
|
||||
{
|
||||
"people_group": "Great Andamanese",
|
||||
"country": "India",
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -26,6 +26,7 @@ import { writeSnapshot } from './_snapshot-guard.mjs'
|
|||
const HERE = dirname(fileURLToPath(import.meta.url))
|
||||
const REPO = resolve(HERE, '../../..')
|
||||
const SRC = resolve(REPO, 'data/tables/gospel-by-country.json')
|
||||
const PINS = resolve(REPO, 'data/tables/people-group-pins.json')
|
||||
const OUT = resolve(REPO, 'data/tables/country-gap.json')
|
||||
|
||||
const src = JSON.parse(readFileSync(SRC, 'utf8'))
|
||||
|
|
@ -66,6 +67,37 @@ const columns = [
|
|||
|
||||
const tot = rows.reduce((a, r) => a + r.groups_with_nothing, 0)
|
||||
const pop = rows.reduce((a, r) => a + r.people_with_nothing, 0)
|
||||
|
||||
/**
|
||||
* THIS TABLE IS ONE REFRESH BEHIND UNLESS SOMEBODY RUNS TWO SCRIPTS IN THE RIGHT ORDER.
|
||||
*
|
||||
* The counts above come from gospel-by-country.json, which does not compute them: it is
|
||||
* REFRESHED from the pin index by refresh-country-bands.mjs. So the chain is
|
||||
* build-people-group-pins -> refresh-country-bands -> this script
|
||||
* and running this one before the refresh silently publishes the previous build's numbers.
|
||||
* Measured the day the GRN sweep finished: the pin index said 1,613 groups with nothing and
|
||||
* this table said 1,653 — the exact 40 groups the last batch had just lifted out of the gap,
|
||||
* still being counted as having nothing, on a table whose whole purpose is deciding where to
|
||||
* send people. Nothing failed. The snapshot guard was happy, because the ROW COUNT was right.
|
||||
*
|
||||
* An ordering rule that lives in someone's head is not a rule. The totals are derived from
|
||||
* the same pins either way, so they must match exactly, and a mismatch is always the stale
|
||||
* read rather than a real disagreement — which is why this aborts instead of warning.
|
||||
*/
|
||||
{
|
||||
const { pins } = JSON.parse(readFileSync(PINS, 'utf8'))
|
||||
const none = pins.filter((p) => p[6] === 0)
|
||||
const pinGroups = none.length
|
||||
const pinPeople = none.reduce((n, p) => n + (p[5] || 0), 0)
|
||||
if (pinGroups !== tot || pinPeople !== pop) {
|
||||
console.error('COUNTRY-GAP: ABORT — this table disagrees with the index the map draws.')
|
||||
console.error(` pin index: ${pinGroups.toLocaleString()} groups · ${pinPeople.toLocaleString()} people with nothing`)
|
||||
console.error(` this table: ${tot.toLocaleString()} groups · ${pop.toLocaleString()} people`)
|
||||
console.error(' gospel-by-country.json is stale. Run refresh-country-bands.mjs first —')
|
||||
console.error(' it is what carries the pin index into the source this reads.')
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
const byRegion = {}
|
||||
for (const r of rows) {
|
||||
const e = (byRegion[r.region || '—'] ||= { groups: 0, none: 0 })
|
||||
|
|
|
|||
|
|
@ -164,6 +164,22 @@ const knowgodCheck = async (u) => {
|
|||
return { status: pairs.has(`${m[1]}/${m[2]}`) ? 200 : 404, cru: true }
|
||||
}
|
||||
|
||||
// fivefish.org answers 200 for EVERY path, valid or not — the same client-rendered trap as
|
||||
// live.bible.is and the old jesusfilm ?languageId=. Until now these 982 links fell through to
|
||||
// the generic `status === 200 -> verified` branch, which on this host is a false green: a
|
||||
// language 5fish retired would stay marked "checked" forever, and nothing would notice.
|
||||
//
|
||||
// Their REDIRECT discriminates, and it does so on a HEAD with no body at all (measured
|
||||
// 2026-09-25, 10s apart as their robots.txt asks):
|
||||
// /cpx -> 200, final https://fivefish.org/421?language=Chinese,%20Puxian
|
||||
// /mnp -> 200, final https://fivefish.org/507?language=Hockchia
|
||||
// /zzq /qqz /xqx (bogus) -> 200, final https://fivefish.org/regions
|
||||
// A real code lands on its numeric language page; anything they do not publish is swept to
|
||||
// the region index. So the verdict is read from where the request ENDED, never from 200.
|
||||
const IS_FIVEFISH = (u) => /(^|\.)fivefish\.org$/i.test((/^https?:\/\/([^/]+)/i.exec(u) || [, ''])[1] || '')
|
||||
const fivefishLanded = (final) => /\/\d+\?language=/.test(String(final || ''))
|
||||
const fivefishSwept = (final) => /\/regions(\?|#|$)/.test(String(final || ''))
|
||||
|
||||
const IS_BIBLE_IS = (u) => /(^|\.)live\.bible\.is$/i.test((/^https?:\/\/([^/]+)/i.exec(u) || [, ''])[1] || '')
|
||||
const filesetOf = (u) => (/\/bible\/([A-Za-z0-9]+)/.exec(u) || [, ''])[1]
|
||||
const bibleIsApi = async (u) => {
|
||||
|
|
@ -192,7 +208,10 @@ const hostOfUrl = (u) => (/^https?:\/\/([^/]+)/i.exec(u) || [, ''])[1].toLowerCa
|
|||
// "unknown" would have been a lie either way, but leaving 466 links unproven is not the
|
||||
// job. So each host is held to a minimum gap between requests, and a 403 is retried with
|
||||
// backoff rather than believed.
|
||||
const MIN_GAP_MS = { 'live.bible.is': 120 }
|
||||
// fivefish.org's robots.txt asks Crawl-delay: 10 and scripts/fetch-grn-index.mjs obeys it
|
||||
// sequentially; a verifier re-reading the same catalogue is the same kind of traffic and gets
|
||||
// the same manners. The cost is real — see SLOW_HOSTS below for what that means for a pass.
|
||||
const MIN_GAP_MS = { 'live.bible.is': 120, 'fivefish.org': 10000 }
|
||||
const nextFree = new Map()
|
||||
const pace = async (host) => {
|
||||
const gap = MIN_GAP_MS[host] || 0
|
||||
|
|
@ -235,6 +254,16 @@ const classify = (u, r) => {
|
|||
if (r.status === 0) return { state: 'unknown', detail: `could not be reached: ${r.error}` }
|
||||
return { state: 'unknown', detail: `live.bible.is /api/bibles answered HTTP ${r.status} — neither a clear yes nor a clear no` }
|
||||
}
|
||||
if (IS_FIVEFISH(u)) {
|
||||
if (r.status === 200 && fivefishLanded(r.final)) {
|
||||
return { state: 'verified', detail: `5fish redirected to its language page ${r.final} (the site answers 200 for any path)` }
|
||||
}
|
||||
if (r.status === 200 && fivefishSwept(r.final)) {
|
||||
return { state: 'broken', detail: '5fish swept this code to /regions — no recording published under it' }
|
||||
}
|
||||
if (r.status === 0) return { state: 'unknown', detail: `could not be reached: ${r.error}` }
|
||||
return { state: 'unknown', detail: `5fish answered HTTP ${r.status} landing on ${r.final || '(nowhere)'} — neither a clear yes nor a clear no` }
|
||||
}
|
||||
if (r.status === 200) return { state: 'verified', detail: `HTTP 200${r.final && r.final !== u ? ` (via ${r.final})` : ''}` }
|
||||
if (r.status === 0) return { state: 'unknown', detail: `could not be reached: ${r.error}` }
|
||||
if (r.status === 404 || r.status === 410) return { state: 'broken', detail: `HTTP ${r.status}` }
|
||||
|
|
@ -250,6 +279,7 @@ const NEGATIVE = [
|
|||
['https://arc.gt/zzzzz9', 'bogus arc.gt short link'],
|
||||
['https://live.bible.is/bible/ZZZZZZ', 'bogus bible.is fileset'],
|
||||
['https://knowgod.com/zz/nosuchtool-xyzzy', 'bogus knowgod language/tool pair'],
|
||||
['https://fivefish.org/zzq', 'bogus 5fish language code'],
|
||||
]
|
||||
const POSITIVE = [
|
||||
['https://ebible.org/tel2010/', 'real eBible translation'],
|
||||
|
|
@ -259,6 +289,7 @@ const POSITIVE = [
|
|||
['https://arc.gt/w4k1c', 'real arc.gt short link'],
|
||||
['https://live.bible.is/bible/OKEBSN', 'real bible.is fileset'],
|
||||
['https://knowgod.com/en/kgp', 'real knowgod language/tool pair'],
|
||||
['https://fivefish.org/cpx', 'real 5fish language code'],
|
||||
]
|
||||
|
||||
// Prove IN BAND that the bible.is API still separates a real fileset from a bogus one,
|
||||
|
|
@ -274,6 +305,19 @@ const POSITIVE = [
|
|||
}
|
||||
}
|
||||
|
||||
// The same proof for 5fish, before a single one of its links is classified by where it
|
||||
// landed: the redirect must still separate a published code from one they do not carry.
|
||||
{
|
||||
const bogus = await head('https://fivefish.org/zzq')
|
||||
const real = await head('https://fivefish.org/cpx')
|
||||
if (fivefishLanded(real.final) && fivefishSwept(bogus.final)) {
|
||||
console.log('VERIFY-LINKS: fivefish.org redirect discriminates — real code lands on its language page, bogus swept to /regions.')
|
||||
} else {
|
||||
console.error(`VERIFY-LINKS: ABORT — fivefish.org sent a real code to ${real.final} and a bogus one to ${bogus.final}. The redirect no longer separates them, so every 5fish link would be decided by a 200 that means nothing.`)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
const controls = { negative: [], positive: [] }
|
||||
let abort = null
|
||||
for (const [u, what] of NEGATIVE) {
|
||||
|
|
@ -357,6 +401,25 @@ if (ONLY_MISSING) {
|
|||
console.log(`VERIFY-LINKS: VERIFY_MISSING=1 — ${list.length} of ${before} shipped URL(s) have no record yet; the rest are kept as they are.`)
|
||||
if (!list.length) { console.log('VERIFY-LINKS: nothing missing. Table untouched.'); process.exit(0) }
|
||||
}
|
||||
// A FULL pass over fivefish is 982 links at a ten-second gap — nearly three hours, against a
|
||||
// quarter of an hour for everything else put together. Re-reading a catalogue that changes
|
||||
// slowly, that often, is not politeness and it is not information either. So in a full pass
|
||||
// its ALREADY-RECORDED links are left alone; anything unrecorded is always checked, because
|
||||
// an unproven shipped link is the thing this script exists to prevent. VERIFY_SLOW_HOSTS=1
|
||||
// forces the whole host through, and internal/check-link-rot-sample.mjs samples it between
|
||||
// times, which is the right shape for a host this expensive to ask.
|
||||
const SLOW_HOSTS = new Set(['fivefish.org'])
|
||||
if (!ONLY_MISSING && process.env.VERIFY_SLOW_HOSTS !== '1') {
|
||||
let prevLinks = {}
|
||||
try { prevLinks = JSON.parse(readFileSync(OUT, 'utf8')).links || {} } catch { prevLinks = {} }
|
||||
const before = list.length
|
||||
list = list.filter((u) => !(SLOW_HOSTS.has(hostOfUrl(u)) && prevLinks[u]))
|
||||
const held = before - list.length
|
||||
if (held) {
|
||||
console.log(`VERIFY-LINKS: holding back ${held} already-recorded link(s) on ${[...SLOW_HOSTS].join(', ')} (Crawl-delay: 10 makes a re-read of them ~${Math.round((held * 10) / 60)} minutes). VERIFY_SLOW_HOSTS=1 to include them.`)
|
||||
}
|
||||
}
|
||||
|
||||
// A LIMIT run is a smoke test. It must NOT overwrite the real record: doing so silently
|
||||
// threw away 3,700 results and the broken-link history along with them.
|
||||
if (LIMIT) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue