A full-bleed extent scoreboard for one response. Pan or zoom and every numeral recomputes for the districts you can see. And the headline is not a delivery total — it is an absence, priced in people.
That decision is taken by an inter-cluster coordination group looking at the next allocation, and by a cluster lead deciding whether to call on partners to cover a cell or to cover it themselves. It is an operational read, taken this week — not a retrospective told to a funder at the end of a cycle.
Which is why the app is organised around the cell nobody reports covering, never around the delivery total. A 3W that celebrates what was delivered puts the busiest district at the top of every reading ever taken. The cluster lead already knows where their partners are. They are paid to find where nobody is.
2,414 cells are covered. The map is mostly green — and the map being mostly green is exactly the problem. The product is the 267.
The largest single one: Yakawlang, Bamyan — 77,634 people counted in need for Health, and no organisation reporting a health activity there.
WHO's own 3/4W tool, read in full: "Without the use of case management systems, it remains challenging to identify the actual number of unique people reached with Health services." One person is counted zero times or four times, and the error does not even carry a sign.
People in need, estimated per sector at the lowest agreed admin area under JIAF 2.0 — a published, standardised figure with a named release. Coverage is measured against it, never against what was handed out.
An app headlined "people reached" would have to print a double-counting disclaimer beside its own headline. An app headlined an absence does not — the absence of a report is a fact about the report, and it is exactly checkable.
The published brief reads "aid distribution, needs and coverage in a crisis." Correcting the first term did not shrink the solution — it gave it something true to lead with.
| State | Cells | What it actually says | Is it the finding? |
|---|---|---|---|
| uncovered | 267 | counted need, and no organisation reports covering it | Yes — the whole product |
| covered | 2,414 | one or more organisations report presence for that sector in that district | No — and never called "served" |
| not reported | 2,005 | the sector publishes no presence lane at all — a finding about the response's reporting | No — and never "uncovered" |
| no estimate | 126 | no published people-in-need figure for that sector × district | No — and never rendered as 0 |
Collapse four states into two and the app manufactures its own finding. The two honesty states carry a hatch in the map fill and a spelled-out word in the popup, the table and every exported row — and a no_estimate row exports an empty people figure, never 0 — so the reading survives greyscale, a colour-blind reader, and a spreadsheet.
Pick Gender-Based Violence and every district hatches, the headline reads 0, and the empty list explains itself: "an uncovered cell is one with counted people in need and no organisation reporting presence. Cells reading not reported or no estimate are not uncovered and are never counted here."
Not "12 organisations active", and not "340,000 people assisted", but the number of people counted in need who sit in a cell no organisation reports covering — per sector, recomputed for whatever extent is on screen.
Nobody currently produces this number. The publisher ships both lanes as standardised indicators over the same p-codes and does not join them. The best-resourced 3W in the world answers who is there, not who is there against how many need it. The cluster platforms that do compute a gap compute it inside one deployment, behind one login, for one administrator. What is new here is small and defensible: the published commons, joined at the p-code, with the absence named.
JIAF 2.0's intersectoral rule: people in need are estimated per sector, and the intersectoral figure is the highest sector's figure — never a sum. A person who needs both water and shelter is one person.
So 5,703,633 is arithmetic, and arithmetic is not a reading. With more than one sector in view the headline is the highest sector's figure, and it names that sector. Under All sectors, whole response, the board reads 2,708,223 · WSH — and there is no arrangement of the interface that offers a total.
The rule is enforced in one function — the single place a headline is produced — rather than in each widget that shows one. Cells may be counted across sectors; people may not. A regression test asserts that no grand total appears anywhere on screen, under any chip.
the sum of the five sectors' unattended need — it double-counts every person who needs more than one thing
UNATTENDED NEED · people in view · highest sector: WSH — the reading names its own basis, so it can be checked against the publisher's rule rather than trusted.
This is the shape of the whole application. Every honest number on this board is smaller than the number a less careful build would have printed.
The reading is taken over the visible region — the map container minus its own opaque overlays, measured from the DOM on every recompute. Not the canvas. A full-bleed map with a stat strip over it is a map you can only partly see.
An extent query with no geometry answers for the whole canvas. Fitted, the board read 401 cells in view when 290 were visible — 28 % of the headline drawn from behind a panel. It is now measured over the visible region, seams and slivers subtracted.
At 420 × 820 the strip covered the map to within 30 px and every numeral correctly read 0. Every non-visual assertion passed. Below the breakpoint the strip now leaves the overlay and the map keeps 52 vh.
Re-running it moved the printed retrieval date to a day on which nothing was retrieved — the exact defect the basis line exists to prevent, inside the script that writes it. The date now comes from the newest file the build actually read.
Reading the figures: every number is published OCHA data — operational presence (3W) and people in need (JIAF / HNO 2025), joined at the COD p-code over 401 admin-2 districts. Nothing is generated. A lane that is not published renders empty with its citation, and a withheld cell reads "withheld", never zero.
Every one of these is written into the delivered application's own README. Both lanes go blind in the same places — an uncovered cell and an unreachable one can look identical — and the app states that rather than smoothing it.
Your operational-presence lane and your people-in-need figures, at the administrative level your response already publishes at, joined on the common operational dataset. Two weeks, and this board reads your response instead of the reference one.
Swappable by configuration, not by code: the response, the admin level, the sector vocabulary. Of the 20 responses with a Humanitarian Response Plan, 12 carry both lanes at admin 2 — for the other eight the app says the cell is not computable and names which lane is missing, rather than aggregating one upward to force a join.