doxa-maps/data/people-groups
Doxa Maps bc422bb678 Each packet's % evangelical page states its own list's share
The page says each box is a share of the people in this list. It
printed one DOXA-wide figure - 0.6133% of 209,079,159 people - in
every packet, true of no single list.

That figure had no builder in the repo. build-evangelical-share.mjs
makes its method reproducible, per group: the IMB CSV joined to the
DOXA snapshot by ROP3 + country, each group's EvangelicalLevel band at
its midpoint (0 for No Known Evangelicals, the midpoint read from the
band's own wording), weighted by IMB population. It writes
evangelical-by-slug.json and refuses to write unless the table, summed
over every DOXA group, reproduces christian-share.json exactly: 2,091
matched, 209,079,159 people, 1,282,178 evangelical, 0.6133%. Change a
single band's midpoint rule and it refuses.

Not the API's imb_gsec: GSEC puts 225 groups at "no evangelicals" where
EvangelicalLevel puts 1,444, because its "less than 2%" band also
carries church-planting status. A share from it sits on a different
scale from the method the page's own footnote states.

evangelicalShare.js sums a packet's own groups - pure, zero imports, so
the browser print and the offline generator run the same sum. Across
the 28 zones the page now carries 28 different figures, from 0.182%
(Deaf) to 0.922%. A host that supplies its own figure still wins.

A list with no published levels prints a dash and no number. The old
guard, Number.isFinite(Number(x)), passes null as 0 and would have
printed "0% evangelical" for no data. Where some of a list's groups
lack a level, the footnote says what the figure is computed over; it
says nothing when coverage is whole. That clause is in all eleven
languages.

check-evangelical-share (gates:pre): the table reproduces the committed
figure; different lists differ; no data is a dash; coverage appears
only when partial. Mutation-tested four ways, each caught - the fourth
only once it corrupted an existing group rather than adding one no sum
reads.
2026-09-29 02:16:31 +00:00
..
lists The people-group list is a universal prop: the same maps can show any project's list 2026-09-26 05:16:02 +00:00
christian-share.json The prayer packet the Driver asked for: life calendar, the same grid as a percentage, a triangle 2026-09-27 07:37:25 +00:00
doxa-groups-snapshot.json All People Groups loads fast on a light map; the Vision Card becomes a true funnel from data 2026-09-25 07:18:30 +00:00
evangelical-by-slug.json Each packet's % evangelical page states its own list's share 2026-09-29 02:16:31 +00:00
people-groups-points.json All People Groups loads fast on a light map; the Vision Card becomes a true funnel from data 2026-09-25 07:18:30 +00:00
people-groups-slim.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_groups.csv Data out of public/: sources live in data/, the web-root is generated 2026-09-16 01:24:41 +00:00
scripture-sources.json Mark 5 in five more languages, each a cited public-domain translation 2026-09-27 09:07:17 +00:00
vision-funnel.json All People Groups loads fast on a light map; the Vision Card becomes a true funnel from data 2026-09-25 07:18:30 +00:00
zoning-records.json Unblock studio's landing 13: drop the dead fallback, make the zoning gate measure on a clean tree 2026-09-27 06:57:00 +00:00