ABCDEFGHIJKLMNOPQRSTUVWXYZ
1
servicesubgroupmodulewhat the code doesin the libraryruncan we run it ourselveshow it is computedwhat we did to the codetotal (2019 USD)which grid, and what the cell area rests onwhat the reference shares with ushave we reproduced their numberwhat we decided and changed
what the number is, and what it is checked against
what we need
signed off
2
Terrestrial Carbonterrestrialterrestrial_carbonraster arithmeticyesyesyesCarbon density by climate zone and land-cover class, times hectares per cell, summed to countries, times the rental social cost of carbon. Rental is not the full social cost: the full cost is what a tonne is worth as an asset, and the rental is one year's service from holding it. The account is an annual flow, so it takes the yearly service. The rental is P(1 - e^-r), which at 2 percent turns an asset worth $665.87 a tonne of carbon into $13.19 a year. The quantity is a carbon density raster built here from a zone-by-class density table and the land-cover map.Refactored onto the library template and hazelbean conventions. Corrected division by the wrong baseline for the shock, and corrected a double-count that had entered split countries once per sub-region.$5.365TWGS84 geographic on the shared 10 arc-second pyramid. Cell area is the per-latitude `ha_per_cell` raster, multiplied into the density in terrestrial_carbon_tasks.py:146. Correct: a geographic grid needs a per-cell area and this carries one.The manuscript total. NOT independent of us in the part that matters, since we reproduce a figure computed from the same density table and land-cover map. The double-count we fixed was ours to find, which is what an agreement of this kind cannot surface. ⚠⚠ **The reference MOVED (Yanxu, email 2026-09-04), and the per-country table is now compared (his `gep_by_country_base_year` sheet, modified 2026-09-01):** his terrestrial total is **$5,330,140,459,760** at 2 percent (announced $5.33T; the sheet verifies it, along with $8.12T at 1 percent and $3.43T at 3, plus new 1.5 and 2.5 percent columns). The 1 percent SCC is replicated following Rennert et al., which answers where that column comes from. ⚠⚠ **The $34.8bn gap to ours is NOT the missing countries.** The 15 countries he marks missing (BMU, CPV, MUS, REU and other small islands) carry only $181M of our total. The mover is a broad per-country recalculation: **no country matches to the dollar any more** (the old table matched every row), all 232 comparable rows differ, and the differences concentrate where coastline is long relative to area -- Russia +$6.6bn, Canada +$5.9bn, US +$5.1bn, Norway 5.9 percent, Chile 4.8 percent, ours higher almost everywhere. That is the signature of a border-cell or zonal-statistics change, not of prices, missing countries or currency. ⭐ **The conservation check settles which side to suspect:** the unmasked global sum of our per-cell carbon raster is 406,978,516,772 tC, worth $5,366,047,964,722 at the 2 percent rental -- our country table captures it to 0.02 percent (the $1.1bn residue is cells with no country id), while his revised total sits $35.9bn BELOW the raster's own global content. ⭐ **Mechanism CONFIRMED (Yanxu, reply 2026-09-05):** `valid_mask = (lulc_block > 0) & (cz_block > 0)` -- the revision excludes every cell whose carbon-zone raster reads 0, where the old version valued them as their own group. So the density raster changed, not the country assignment; his pink-dot map of excluded cells is exactly where our comparison found the differences. ⚠⚠ What that discards is measured, not guessed: the zone-0 densities in the shared lookup are Spawn's observed means on those very cells, stratified by land-cover class (forest 55.3 tC/ha fitted from 3.07M cells, grassland 8.97 from 3.5M). Exclusion also leaves partial-coverage countries looking complete -- Russia's figure silently omits part of Russia. ⚠ Data hygiene in his sheet: an unlabeled world-total row sits inside the country rows (a naive column sum doubles), six country names are mojibake (Cura√ßao for Curaçao), and Serbia and Kosovo collide on name.Was: yes, the superseded vintage to the dollar. Now: no row matches his 2026-09-01 revision, for the zonal reason in `reference`, and which border treatment is right is the open question. ⚠ Same lineage on the density table and land-cover map either way, so agreement tests the port, not the science.-
Values the carbon stored in land ecosystems, priced at the rental social cost of carbon. Reproduces the superseded manuscript total of $5.365T to the dollar, after fixing a double-count that entered split countries once per sub-region (China six times, 23.5 percent overstatement). Priced at the rental social cost of carbon at 2 percent. The 3 percent sensitivity is a run of its own and gives $3.4627T against the update's $3.43T. ⚠ The update's terrestrial figures are $5.33T / $8.12T / $3.43T at 2 / 1 / 3 percent, verified against his per-country sheet; the $34.8bn gap to ours decomposes as $34.3bn of per-country recalculation (every row moved, coastline-heavy countries most), $181M of newly-missing small islands, and $0.3bn of countries dropped from the comparison by mojibake names.
⭐ One of the two discount-rate questions is ANSWERED by the 2026-09-04 email: the 1 percent price is replicated following Rennert et al., who do not publish it directly. Still open: whether carbon prices are taken to grow. The r in the rental formula is the net rate, the discount rate minus the growth rate of carbon prices, so the 2 percent column assumes prices do not grow; the table carries a 0.8 percent net alternative giving $2.29 a tonne against $13.19. And now the substantive ask: **what changed in his zonal statistics** -- every country moved and ours is higher almost everywhere, largest where coastline is long relative to area, so the two pipelines now disagree on border-cell treatment and one of them is right. ⚠ His email quotes the old combined climate-regulation total as $5.365T, which is also the old terrestrial-only figure we match to the dollar -- the old combined column looks like it did not include coastal (the new sheet's `both` tab, terrestrial plus coastal, verifies the new combined $5.3367T), worth one clarifying line when replying.
amber: examined, and at least one of the sixteen conditions is not yet verified. ⚠ **10 is OPEN for this module**: no cold start from an empty project directory has been run -- the density-raster build on the 10 arc-second grid is a cluster-scale job. Six services have closed it (erosion, ntfp, renewable_energy_provision, water_supply, extractive_energy, extractive_materials_provision); this is not one of them. ⚠ **11 is unverified**: the base year is 2019 across every service, but the country list, the true-zero-against-missing rule and the shared parameters have not been checked service by service. ⚠ The two discount-rate decisions in `need` are open with the group.
3
Coastal Carbon---no-------Not in the library yet, so there is nothing to match.-
No marine module found.
Is marine carbon in the account's scope?
amber: examined, and at least one of the sixteen conditions is not yet verified. ⚠ **10 is OPEN for this module**: no cold start from an empty project directory has been run. Six services have closed it (erosion, ntfp, renewable_energy_provision, water_supply, extractive_energy, extractive_materials_provision); this is not one of them. ⚠ **11 is unverified**: the base year is 2019 across every service, but the country list, the true-zero-against-missing rule and the shared parameters have not been checked service by service. ⚠ The seagrass overlap double-count in `decided` is measured but not fixed, held for Yanxu.
4
Marine Carbon---no------The all-services table (2026_08_31) carries a `Global Climate Regulation (Marine Carbon)` column totalling **$540,752,480,711,212**. Examined 2026-09-05: a **High Seas row holds $318.2T of it (58.8 percent)**, assigned to no country; 187 countries share the rest (Antarctica $14.5T, US $12.8T, Australia $12.1T). Dividing the total by the terrestrial rental price of $13.185089/tC implies **41,012 GtC** -- the ocean's entire carbon inventory (~38,000 GtC of dissolved inorganic carbon plus organic pools; ~41,000 is the standard figure). ⚠ That reading -- the whole ocean carbon stock priced at the same rental social cost as the terrestrial stock -- is OUR inference from the column total; no write-up confirms it, which is why it stays out of the issues table. ⚠⚠ It sits INSIDE the table's headline totals and dominates them: "Total GEP without abiotic services" is $550.2T, of which this one column is 98 percent.Not in the library, so there is nothing to run. The figure's construction is now identified from the table itself (see `reference`), which is different from having code.-
No marine module found. The table's $540.75T is arithmetically the ocean's ~41,000 GtC at the terrestrial rental price; the annual ocean carbon UPTAKE (~2.5 GtC per year) at the same price would instead be ~$33bn, four orders of magnitude smaller, so which quantity the service means decides everything.
Three questions before this is a row at all. Whether the service is the stock rental of the entire ocean inventory (including ~37,000 GtC of deep water that no policy touches) or the annual uptake flux. Whether $318.2T of High Seas value belongs in a by-country account. And whether one row should be allowed to be 98 percent of the account's headline total.
n/a: no module, and none found on the drive either. The reported figure is now decoded (the whole ocean carbon inventory at the terrestrial rental price, 58.8 percent of it on the High Seas) but whether marine carbon is in scope is itself open
5
Pollination-pollinationraster arithmeticyesyesyes for the value raster, which the account's number comes from. We built production times the world producer price we build ourselves times each crop's dependence on animal pollination, over 153 crops. The sufficiency side weights that value by how much habitat sits near each field, and it belongs to the other caller rather than to this one: `configure_sufficiency` runs inside `pollination_shock`, which is a registered task with its own runner. A base-year account has no scenario for the weighting to vary against, so the GEP number is the value raster and the habitat weighting enters the scenario shock.Each crop's production raster times its world producer price times its pollination dependence ratio, summed over crops and priced at the GEP base year, then summed to countries. Coffee is blended by country from what it grows, because FAO files arabica and robusta under one item code with different dependence. The quantity is the CropGrids v1.08 production grid for 2020, a published gridded dataset.Folded in from the author's repo, then refactored onto the library template and hazelbean conventions. The value raster is now built by a task in the tree: `pollination_value_raster` reads the 158 CropGrids production rasters from base data and writes USD in the cell. Two fixes: The raster carried USD per square kilometre while the code that summed it assumed USD per cell. The price and dependence lookups were built by collapsing a table on a duplicated key, so the value kept was whichever row came last.{{< meta poll_raster >}} without habitat sufficiency, {{< meta poll_with_sufficiency >}} with it, both at 2019 prices from our own raster. Currency harmonized 2026-10-03: the price deflators now read the account's shared CPI series through `utilities.usd_deflation_factor` instead of a private copy of the same FRED file — the price window is 2019-centred, so the factor is exactly 1.0 and the rerun returns the gep table identical to the cent. The same rerun carries the zonal measured-zeros fix: the published table is 250 rows with 193 positive, 4 measured zeros (Cayman Islands, Western Sahara, Iceland, Qatar — zones holding valid pixels whose value is exactly zero) and 53 NA, where all 57 non-positive rows were NA before.WGS84 geographic on the shared pyramid. Cell areas come from hazelbean on the WGS84 ellipsoid, adopted 2026-08-26 in place of a 6371 km sphere that differed by -0.22 to +0.56 percent with latitude. Correct now. ⚠ The earlier $18.28bn was this same raster summed with no cell area at all, so the grid is exactly where this service went wrong before.No reference for the value, and two for the inputs, both pinned by tests as of 2026-09-01. Our `pollination_1993_2024.parquet` reproduces the author's published csv over all 287,285 rows, every one of its 22 numeric columns agreeing to 1.4e-14, the only difference being a missing label reading as None out of parquet and nan out of csv. And our rebuilt value raster sits 0.93 percent above his staged one, correlation 0.995 over 2,941,471 shared cells. ⚠ The entry previously said the source raster was reproduced to 1.8e-08. That number was measured once by hand and the comparison behind it stopped running when the library began building its own raster, so it is replaced here by the two figures a test recomputes. ⚠ We build the raster ourselves, so the second is two pipelines meeting rather than one reproducing the other; the first checks our port and not the science.The dependence panel exactly, to 1.4e-14 over 287,285 rows, and the raster to within 0.93 percent, both checked by a test on every run rather than measured once.Cell areas moved to the WGS84 ellipsoid from hazelbean, the convention the rest of the account uses, costing 0.1086 percent. Country aggregation moved to the centre rule, costing 0.1211 percent of the world total and moving 92 of 204 countries by more than 5 percent.
Values the crop output pollinators are responsible for. **$387.67bn at 2019 prices over 193 countries**, from the raster our own chain builds — FAO panel, yield-change ratios, Monfreda yields carried to the base year, CropGrids harvested area, our median price, the author's dependence table with coffee blended per country. ⚠⚠ **Changed on 2026-08-30 from $384.09bn**, which was the author's staged raster: the yield and production steps had no port until that day, so no run here could produce the value raster from source. Of the $3.40bn difference against his raster, **$2.98bn is the coffee blend** (FAO item 656 covers arabica at 0.25 and robusta at 0.65; his `load_poll_dep` keeps the first row, valuing every coffee country as pure arabica) and the rest is the per-cell versus density convention. Set `pollination_blend_coffee_dependence` to false and our pipeline returns his published pair exactly: **$384.97bn unweighted and $161.45bn weighted, both to the cent**, with the sufficiency raster identical to his in all 331,871,070 defined cells once the tile height is his 8192. Cell areas are WGS84 from hazelbean, the same convention the rest of the account uses through the ha_per_cell pyramid, which pollination alone did not: it was on a 6371 km sphere, differing by -0.223 to +0.557 percent with latitude, so the GEP total was summing services that measured a cell differently. Adopting it cost 0.1086 percent. Aggregated on the centre rule so a border cell goes to the country covering its centre rather than to whichever was rasterised last. That change cost 0.1211 percent of the world total and moved 92 of 204 countries by more than 5 percent, Iraq by 65.63. Vatican City, Gibraltar, Monaco and Macao drop out entirely, being smaller than a cell: $0.35M between them. From a raster we build (the original one was 2024). The previous $18.28bn was the same raster summed without cell area; area-weighted it gives $476.29bn. That figure is not an independent check: it comes from our own run of the source pipeline on 2026-07-25, which wrote both the raster and the summary beside it. What it does establish is that the source code treats the raster as a density, since its own summary area-weights what it wrote. The units are stated in that repo's methods_overview.md, 'global value raster (USD/km2)'. Fixing coffee's dependence adds $3.76bn at 2024 prices. Our code reproduces the author's raster to 1.8e-08. ⚠⚠ **Computed both ways on 2026-08-28**, one grid and one price year: production x price x dependence gives $388.47bn over the raster, and multiplying by 300 m habitat sufficiency built from `lulc_esa_2019` gives $163.46bn, a ratio of 0.421. The $388.47 against the published figure is the raster sum against the country zonal sum, which drops cells outside any country. William Sidemo Holm's 2019 equivalents are **$385bn and $190bn, ratio 0.494** (revised 2026-08-28 when he switched price and yield windows from mean to median; his 2026-08-27 figures were $387bn and $191bn, the same ratio). So we agree closely unweighted and discount harder weighted. He confirms `target_year` and `deflation_base_year` are both 2019 in his config, which we verified at lines 118 and 128. The gap is **not yet explained, and eight candidates are eliminated by measurement** (2026-08-28). Not the value raster's geography: his precomputed value raster under our sufficiency gives 0.4155, essentially ours. Not `fill_non_ag` — his runner calls `run_pollination_sufficiency_300m` without it, so both sides take the `None` default; this had been the prime suspect and is refuted. Not the constants: `_RADIUS_METERS` 2000.0, `_THRESHOLD` 0.30 and the `_AG_CLASSES`/`_NAT_CLASSES` sets are unchanged since his initial commit. Not the land-cover file: his `config/default.yaml` resolves `lulc_esa_{target_year}.tif` at `target_year: 2019`, the same map we read. Not the grids, all 0.05 degree 3600x7200 and 0.002778 degree 64800x129600. Not the aggregation: pixel-wise gives 0.4208 and an unweighted mean 0.7004, and his 0.4935 lies between them. Not the nodata convention: his valuation writes NaN as -9999, dropping cells we keep as zero, which moves ours only 0.4208 to 0.4291. Since his value raster under our sufficiency still gives 0.4155, **his sufficiency raster must differ from ours**. The target-year lead is also closed: commit `7f201c4` notes that before it "everything was set up for creating rasters with the target year 2020", but he states his current figures come from the new code with both years at 2019, and independently ESA 2019 and 2020 differ by only 0.0405 percent of pixels (agricultural cover +0.044 percent), far too little to move a ratio 7 points. **Twelve candidates eliminated, none remaining that we can test from outside.** Also refuted: the differences do NOT compound — every combination of value-raster choice, per-cell versus density units, and nodata denominator lands between 0.4155 and 0.4291, a spread of 0.014 against a gap of 0.064. Per-cell versus density weighting alone moves 0.4208 to 0.4169, and sufficiency barely correlates with latitude (-0.005), mean 0.577 in every band. `fill_non_ag` can only push the wrong way: filling non-arable with 0.0 and scaling by agricultural area fraction lowers sufficiency, and ours is already below his. Our 300 m raster was checked directly and is correct — 96.04 percent NaN for non-arable, 1.02 percent genuine zeros (arable with no habitat in range), 2.93 percent positive, so arable totals 3.95 percent, matching the ESA agricultural share exactly, and the 5 km average really is arable-only. Aggregation level does not explain it either: country value times unweighted country-mean sufficiency gives 0.6495, overshooting, while value-weighted gives 0.4203. His 0.4935 is bracketed by our numbers but reproduced by none of them. ⚠⚠ **Settled on 2026-08-28 by running HIS repository directly** (`scripts/pipelines/run_pollination_sufficiency.py --step sufficiency_300m` on `lulc_esa_2019.tif`, his config, our machine): his own code gives **$163.43bn, ratio 0.4207**, against our port's $163.46bn and 0.4208. The arable mask is identical cell for cell (1,657,059 defined cells in both on a 1-in-200-row sample) and mean sufficiency is 0.4511 his against 0.4494 ours; 78.4 percent of cells match exactly and the rest is tile-boundary noise that washes out in aggregate, since he tiles in 128 blocks and we use many more. His own `sufficiency_5km` step, on his own `country_m49_cropgrids_grid.tif` template, likewise gives 0.4207, matching a hand resample exactly, and all four pairings of the two value rasters with the two sufficiency rasters fall between 0.4155 and 0.4208. **So our copy is faithful and the sufficiency chain is not the cause.** ⚠ Scope: this covers his steps 1 and 2 only. His `valuation_5km`, `mask_pa` and `attribution` steps have never run here — `valuation_5km` wants `poll_value_global_2019usd.tif` and base_data holds only 2023 and 2024, so our own value raster is substituted at that point. The value raster of his we hold is the 2020 / 2024-USD one, not the 2019 raster behind his $385bn. ⚠⚠ **RESOLVED on 2026-08-28 by running his full 2019 chain end to end** — FAO yield change, Monfreda yield rasters, production, `poll_value`, then `valuation_5km`, all his code at his `target_year: 2019`. It returns **$383.68bn unweighted and $189.732bn sufficiency-weighted, a ratio of 0.4945**, against the $385bn and $190bn he reports. ⚠⚠ **CORRECTED same day: the gap is neither the sufficiency code nor the value raster — it is his summing function.** `_sum_raster_tiled` in `run_pollination_sufficiency.py` computes cell area once per 4096-row tile from the tile's midpoint latitude; `value_pollination_sufficiency_2019_5km.tif` is 3600 rows, so it is ONE tile centred at -0.025 degrees and every cell on Earth is given 30.980 km2. Replicating that reproduces his figure to the digit: raw sum times 30.980 equals **$190.12bn** on the run with his own downloaded prices. Weighting each row by its own latitude gives **$161.24bn**, so the reported total runs **17.9 percent high**. The corrected ratio is 161.24/384.56 = **0.4193**, against our own 0.4208 — **our number was right throughout**. ✅ **Confirmed by the author on 2026-08-30**: he added `window_area_km2` to `src/crop_benefits/raster/spatial.py` and calls it from `run_pollination_sufficiency.py` and `src/crop_benefits/pollination/sufficiency_value.py`, and reports **$384.97bn unweighted, unchanged, and $161.45bn weighted** — 0.13 percent from the $161.24bn we predicted. Two call sites where we had named only the runner. Verified in his code, not merely inferred: `raster/spatial.py::build_area_km2_raster` takes the latitude of every row and `raster/pollination_value.py` calls it, which is why his unweighted $385bn is correct; `_sum_raster_tiled` in the sufficiency runner does not call it and recomputes area per tile instead. The right helper already exists in his library and one summary script bypasses it. Running the tiled version over his unweighted raster would report $457bn against the $385bn he publishes. This is the same equator-constant error as flood (288,615 m2, about -28 percent) and stormwater (185.87 to 122.30 bn m3, -34.2 percent); it sits in his summary, not his model, and his rasters are sound. An earlier note here said the cause was the value raster; that was wrong, and it was wrong because his 2020 raster was being compared against his 2019 sufficiency. His sufficiency against his 2019 value gives 0.494, against his 2020 value 0.4155, and against our rebuilt value 0.4208 — the 2019 and 2020 rasters differ spatially far more than their totals suggest, which is why twelve eliminations inside the sufficiency chain found nothing. Two local substitutions were needed to run it: the 2017-2021 median price file was built by calling his own `_compute_median_prices` on the already-downloaded `fao_prices_1993_2024.parquet` rather than re-downloading from FAO, and `config/local.yaml` got an `lulc_esa` path override for our nested `lulc/esa/` layout. Neither touches the science. His `poll_value_global_2019usd.tif` is now staged in `base_data/crop_benefits/`, so the GEP path reads the exact base year with no deflation. So the gap is excluded from the sufficiency chain but NOT excluded from steps we have never executed. **The dependence table is also confirmed identical**: our `pollination_1993_2024.parquet` is his own `pollination_1993_2024.csv`, 287,285 rows, 163 items and 77 pollinated on both sides, values equal to 5.6e-17 — so an earlier note that we use Klein while he adds Siopa et al. 2024 was wrong, we read his table. His FAO summary carries $429.40bn for 2019, his reported tabular figure, and a 2019-to-2024 deflator of 1.2315 matching ours. ⚠⚠ **Corrected 2026-08-30: our rebuild is not a second method.** It reads `base_data/crops/cropgrids/production_2020/`, which is **byte-identical** to the output of his own pipeline on 2026-07-25 (sha256 on abaca, almond, apple, maize, wheat), so both sides run his production and the roughly one percent is vintage and prices: production dated 2020 against his 2019, and a 2018-2022 median price window against his 2017-2021. The earlier claim here that we take CropGrids production directly while he goes harvested area times Monfreda times FAO calibration was wrong. What that means for the port: the FAO price chain, the poll_value arithmetic and the sufficiency chain are ours; **`yields` and `production` are the one part of his pipeline never ported**, so "our code run end to end" does not yet exist for the value raster. His raster is a density where ours is per cell. `valuation_5km` cannot run here because `poll_value_global_2019usd.tif` needs his FAO price chain at the 2017-2021 window. Asked in `reply_pollination_william.md`, unsent. His sufficiency raster is not on this machine, not in `base_data`, and not on the MSI share, so we have asked him to send the 5 km raster for a direct difference against ours. Script: `projects/gep_pollination/compute_sufficiency_weighted_total.py`.
Which definition the account wants: the crop output at stake if pollinators vanished, or the service habitat currently delivers. ⚠⚠ **Our $387.67bn is the first of those.** The value raster is production times price times dependence, with no habitat sufficiency term; `configure_sufficiency` is called only inside `pollination_shock`, never in the GEP chain. William Sidemo Holm ran three variants for 2019 on 2026-08-27 and ours lands on his second: FAO tabular without sufficiency $429bn, raster without sufficiency **$385bn**, raster with sufficiency **$190bn** (revised from $387bn and $191bn on 2026-08-28). Ours is $387.67bn from our own chain since 2026-08-30, and at his coffee convention it reproduces his $384.97bn exactly; applying sufficiency would roughly halve it. ⚠ We already build a sufficiency-weighted value raster, `value_pollination_sufficiency_<scenario>_5km.tif`, but only inside the shock path where it becomes a ratio — the second number is a zonal sum away, not a new model. And whether the GEP total adds pollination on top of crop production: at $387.67bn against crop provision's $678bn pollination is 57 percent of it, which is the ground of Ryan McWay's objection that half of production value is not pollinator dependent; with sufficiency it would be 28 percent.
amber under the CURRENT sixteen-condition checklist; green under the fourteen that existed when it was signed on 2026-09-01, the first service to reach that. The two conditions added since are open here and named: **15** (data organised) -- 1,047 unreferenced files sit in its base_data folder, mostly CropGrids NetCDFs and per-crop rasters; **16** (published rasters are POGs) -- the value raster this service builds is not registered as a result, so it never reaches output/ and is never converted. Everything below is the fourteen-condition record, unchanged. **12 is met as of 2026-09-01**: both reproduction claims are staged in base_data and pinned by tests that run against every pollination project on the machine rather than one named directory. Writing them corrected the entry twice over. The dependence panel agrees to 1.4e-14 over 287,285 rows and 22 numeric columns, not the 5.6e-17 recorded here; and the raster comparison the entry reported at 1.8e-08 had stopped running altogether once the library began building its own raster, so what is pinned now is the live one, our rebuild sitting 0.93 percent above his staged file with correlation 0.995 over 2,941,471 cells. Both numbers were previously measured by hand, once, and neither would have survived a change unnoticed. **14 is met**: H23 finds nothing in this service defined and never used. It found fifteen names across seven services when it was written on 2026-09-01, including pollination's `pixel_area_km2_spherical`, the 6371 km sphere the account had already decided against. **13 is met**: nothing in the pipeline or its verification reaches into anyone's checkout. Every input and every reference output is staged in base_data, no path in `es_parameters` leaves it, and H22 checks that mechanically. The author's repository could be deleted tomorrow and this would still run, still produce the figure and still verify itself. **1 is met as of 2026-08-30** — our code produces the number, where until that day the account read the author's staged raster because the yield and production steps had no port. **2 is met, for both figures we publish as of 2026-08-31.** Every step behind $387.67bn is a task in this library, the FAOSTAT bulks download from the urls in es_parameters, and the author's raster is optional — absent, the run loses the independence check and nothing else, where it used to raise and send the reader to a six-command procedure in his repository. **3 is met**: the figure above is from the current code, rerun after the last change that moved it. **4, 6 and 8 are met**: the grid and cell area are stated, the three gates pass, the file set is the agreed four plus tests. **5 is met**, and the check is not fidelity-only. Three of the four inputs are public primary data both pipelines read independently: the FAOSTAT bulks download from FAO's own urls in es_parameters, and CropGrids v1.08 and Monfreda are published datasets. The fourth is the dependence table, whose ratios are Klein et al.'s published categories and which is staged in base_data like any other author artifact — on the shared tree since 2026-08-31, so a second person has it. ⚠ What the reproduction cannot test, stated as the condition requires: our `pollination_1993_2024.parquet` is byte-equal to his csv, 287,285 rows agreeing to 5.6e-17, so his FAO-item crosswalk over 163 items and his five blend weights for the n.e.c. aggregates — 0.11 other vegetables, 0.1679 other oil seeds, 0.2594 other stimulants, 0.3438 other nuts, 0.38 other fruits — are adopted rather than derived, and an error in any of them is invisible to us. Rebuilding that crosswalk from Klein would turn adoption into confirmation. ✅ **Decided 2026-08-31**: put to Justin, who approved staging a constructed table in base_data rather than shipping only public sources with a task that reconstructs them, and deferred the reconstruction as too much work for now. So this is a recorded choice rather than an oversight, and the entry says the number is adopted rather than independent instead of implying otherwise. **7 is met**: the open question — whether the account reports value at stake or the service habitat delivers — is for the account to decide and does not change what the code computes. We also publish $163.45bn, and until 2026-08-31 no task produced it: `configure_sufficiency` was reachable only from the shock task, so the multiply and zonal sum happened in a script in the project directory that the repository does not carry, and a reader following this repo could reproduce one of the two figures we quote. `pollination_sufficiency_weighted` now does it in the tree, weighting the rebuilt raster at the author's own tile height of 8192, and returns $388.1426bn unweighted and $163.4501bn weighted. **9 is met**: the reply was sent on 2026-08-31, reporting that the fallback was our defect and that both totals now match his. No thread with him is open, drafted or otherwise. He fixed the tiled summing on 2026-08-30 by calling `window_area_km2` from the two sites we named, and on 2026-08-31 he split coffee into Arabica and Robusta with per-country production shares, which is the question that had stood unanswered. He now reports $388.14bn unweighted and $163.45bn weighted, and ours match his on both after the coffee fallback fix of the same day. ⚠ **9 reopened the same day.** The old draft asking about the tiled summing was overtaken by his fix, but `reply_pollination_william.md` was rewritten that evening to report our numbers against his and hand back a row-order bug of ours, and it ends by offering to chase the remaining 0.07 percent. That offer is a question he has not answered, and the condition counts an unsent draft as open whether or not we have got round to asking. Sending it closes 9; nothing else needs doing. **10 is met**: `projects/gep_pollination_coldstart`, rerun on the fixed code 2026-08-31, a fresh directory reusing nothing, built all 158 yield rasters and returned **$387.9576bn unweighted, $163.3293bn weighted, and gep_by_country $387,487,273,050 over 193 countries** **$388.1426bn unweighted, $163.4501bn weighted and gep_by_country $387,669,681,411 over 193 rows** — identical to the warm run, to the digit. ⚠ What it proves is the repository plus a complete base_data, not the repository from raw sources: `fao_median_prices` and `fao_yield_change` finish in under a second because their outputs are base-data-generating and already live there, which condition 2 allows. **11 is met as of 2026-09-01**: the published table is 250 rows on the account's list, the 57 countries with no pollinated crop recorded as NA rather than absent, and the total unchanged at $387,669,681,411. The base year is 2019, the grid is WGS84 with cell areas from hazelbean, and the dependence ratios are Klein's. ⚠ The one convention it does not yet meet is the PPP one, which was withdrawn as a condition on 2026-08-31 and moved to the structural pass, because a project-wide currency change should not be cleared service by service. ⚠ What it proves is the repository plus a complete base_data, not the repository from raw sources: `fao_median_prices` and `fao_yield_change` finished in 0.009 and 0.42 seconds because their outputs are base-data-generating and already live there, which condition 2 allows and condition 10 asks for. The 3.19 GB of inputs are now on the shared base_data, all 1197 files verified identical by sha256, so a second person on MSI has them; running it there has not been done and would test the environment rather than the code.
6
Erosion Control-erosionprocess model run hereyesYes, and the sediment step twice over. `intermediate/sdr_6p45km/` holds 1.1 GB of genuine InVEST SDR output from 2026-08-16 with a TaskGraph cache and the full set (usle, rkls, sed_export, sed_deposition, stream), all suffixed `2019_revised_dec_14`. The account does not read it: `erosion_sdr_results_suffix` is `2019_revised_feb_13`, which resolves to the author's rasters pulled from his drive in February. So the sediment model behind $18.24bn is his, with our own run sitting unused beside it. **Which vintage is current is settled and needs nobody asked:** his `feb_13` rasters are dated 19 February 2026 and his drive holds no other vintage, so February supersedes December and the account already reads the newest. Our own run carries the `dec_14` label only because `erosion_functions.py:405` hardcodes `"results_suffix": "2019_revised_dec_14"` as a default left over from the port; the name says nothing about the data's age, and it should be retired so a run cannot label itself with a vintage that no longer means anything. The `invest_sdr` task directory being 0 bytes is not evidence either way, because the outputs are configured into `sdr_6p45km` rather than into the task directory.The valuation yes; the biophysics no. ⚠⚠ **Found by the first cold start, 2026-09-01: the `invest_sdr` task cannot run.** `run_invest_sdr(paths)` references `p` at line 113 and `p` is neither a parameter nor a module global, so it raises `NameError` on the first call. Thirteen other functions in `erosion_tasks.py` have the same shape. It has never been noticed because the task carries `skip if dir exists: 1` and the directory always existed, so a warm run skips it and a cold start is the only thing that executes it. There is no `intermediate/invest_sdr/` output in the warm project either, which is the corroboration. So the USLE and avoided-erosion rasters the account values are the author's staged files, `usle_2019_revised_feb_13.tif` and `avoided_erosion_2019_revised_feb_13.tif`, and our SDR step is decorative. What is ours is everything downstream of them: the prevention shares, the severity threshold, the elasticity join, the valuation and the country collapse.How it works, in six steps. **1.** InVEST SDR gives, for every pixel, how much soil erodes and how much stays. Which SDR rasters the account actually reads is a question about this run rather than about the method, and it is under **run**. **2.** A threshold picks out what counts as severe erosion, 11 tonnes per hectare per year or 2 for small and low-lying countries. That is SES-11, the author's baseline, and it is what our run is configured for: THRESH_HIGH 11.0 and THRESH_LOW 2.0, with nothing overriding them. The manuscript's EPS-5 relaxes the threshold to 5 as a sensitivity analysis rather than an alternative baseline, letting more land in and taking the reported figure from $14.59bn to $29.1bn. **3.** For each severe pixel, what share of the soil loss was stopped by the field's own vegetation (on-farm), and what share by vegetation upslope catching water before it arrives (upstream). **4.** The two are combined without counting twice: a field can be protected by both at once, so rather than adding them it asks, per pixel, the chance at least one of them saved it. On-farm protects 10.0 percent of production on average and upstream 10.8, and the combined share is 12.5 rather than 20.8, so the 8.4 point gap is production both mechanisms protect. **5.** Losing soil dents a harvest rather than destroying it, so a per-crop yield elasticity turns soil saved into output saved. It is small: median 0.153, range 0.080 to 0.259, so of the 12.5 percent of production on protected land only about 15 percent of that is output genuinely at stake. **6.** That output is priced at the FAOSTAT gross production value in constant 2019 USD, what the country's crops are worth. GEP = shock share times gross production value, an identity holding to 8e-13 across 177 countries, which is a largest absolute disagreement of 4.5 hundred-thousandths of a dollar. ⚠ Two things look like errors and are not. The union in step 4 is per pixel while a country's share is an average over pixels, so at country level combined is not 1-(1-onfarm)(1-upstream); averaging breaks the formula, which is arithmetic rather than a bug. Money is summed rather than averaged, so the dollars do reconcile exactly: on-farm $10.298bn plus the incremental upstream $3.661bn gives the combined $13.958bn. The formula in one line: soil loss prevented on cropland, on-farm and upslope combined as a union rather than a sum, turned into a crop production shock weighted by each crop's production and its yield elasticity to erosion, times the country's crop gross production value.Folded in from the author's repo, then refactored onto the library template and hazelbean conventions. The prevention shares, the severity threshold and the valuation are in the science module, tested. Added the step that builds the upstream prevention share by routing the erosion rasters down the DEM, because the author's code expects `upstream_prevention_share.tif` to already exist from a workflow outside his repo, so the pipeline could not run off his cluster. The formula is his, followed from `author_drive/code_v2/upstream_PS_20260302.ipynb` — accumulated avoided erosion over accumulated RKLS, a ratio, so the pixel area cancels — but the D8 routing comes from pygeoprocessing rather than the notebook's own implementation. Checked against his own output as of 2026-08-27: his `upstream_prevention_share.tif` was fetched from MSI and sits at `author_drive/msi_upstream_attribution_v3/`, on the same grid, and ours reproduces it — mean 0.77983 against his 0.77945, a ratio of 1.0005, median difference zero, and 87.5 percent of the 7,030,834 valid cells within 0.01. The four upslope attribution layers came with it, so the diagnostics his code reads are no longer missing and the parameters now point at his files. The build step stays, because it is what lets the account run on a machine that cannot reach his cluster. Three fixes. The severity threshold is lower for small countries, and because r264 splits six countries into territories, a single territory’s area could make a country look small; areas are now summed per country. Measured on that file, the countries whose small/large status can turn on it are CHN, FRA, GBR, IND and TUR. The 40 paths that pointed at two specific machines now come from es_parameters, and a missing row raises an error naming it rather than falling back to a directory that does not exist. And the SPAM reprojection uses hazelbean rather than rioxarray, byte-identical and about 11 times faster per band. Added the `gep_calculation` the service had never had: it wrote its country totals into integrated_country_gep.csv, which is wide and carries the on-farm, upstream and combined components side by side, so nothing downstream could read it. It now writes the same per-country table as every other service, on the combined component.$18.24bnEqual Earth (EPSG:8857), an equal-area projection, so `pixel_area_hectares` computes one constant from the resolution and that is exact. It raises on an unprojected CRS rather than assuming, which is the pattern worth copying. Correct. ⭐ **The SDR solve itself moved to Equal Earth on 2026-09-06** (the NGFS session, Chiara-approved): the dynamic pipeline's `erosion_sdr()` builds one 8857 grid from the watersheds extent (5281x2309, 13.9M cells against Mercator's 58M, halving the solve time) and warps every input onto it once -- which also closes a silent-clip trap, since the watersheds file is natively 8857 and a 3857 solve let InVEST reproject and clip it to a wrong bounding box (47 columns lost west, unlogged). ⚠ Comparability with the author's staged rasters is DELIBERATELY broken on that path; the legacy `invest_sdr()` stays on his 6217x3968 EPSG:3857 grid as the comparison path, and es_parameters says which pin governs which. The GEP account chain (staged feb_13 rasters, prevention_shares, gep_calculation) is untouched, so $18.24bn and its cold start stand. The SHOCK numbers move: erosion_exposure now aggregates on the WGS84 300-arcsecond pyramid weighted by ha_per_cell and its rasters leave as POGs; the NGFS rerun is in flight with the old outputs displaced for diffing.The author's methodology and July manuscript, both staged at `base_data/global_invest/erosion/author_drive/results/`. They report **$14.59bn across 164 countries** under the baseline severe-erosion scenario SES-11, against our $18.24bn, positive in 161 countries, so ours sits 25 percent above his. ⚠⚠ The country split does not agree: against the six largest reported, ours puts China 30 percent higher ($3.87B against $2.97B), India 28 percent lower ($0.79B against $1.10B) and the Philippines 41 percent higher ($0.72B against $0.51B), and the ranking reorders. Offsetting country errors are exactly what a matching total hides. ⚠ Those figures come from a run that predates the country-area fix under **decided**, so they are not what the current code produces; the rerun that will restate them is still going.Yes, against his corrected run, to 0.8%. His `outputs_corrected_20260829` gives $18.0940bn over 162 positive countries and 193 mapped; ours gives $18.2409bn, 161 and 192. ⚠ The entry said 25% against his March table until 2026-09-01; that comparison was superseded by his corrected run and by the elasticity crop-name fix he found, and quoting it now would be wrong. The residual is the border rule and nothing else: his notebook sets `RASTERIZE_ALL_TOUCHED = True`, ours assigns a cell to the country whose polygon covers its centre, which puts 1.005% more cells inside a country on the real analysis grid. Everything upstream is identical -- crop GPV to the cent across 201 countries, threshold policy for all 250, and the USLE, avoided-erosion, price and elasticity files byte-identical by sha256. ⚠ The 0.8% is not spread evenly: 71 of 162 countries agree within 1% and 25 differ by more than 5%, the archipelagos, deltas and mountain borders where the two rules disagree most. The global total is robust to the choice; some country figures are not. ⚠⚠ **A cold start from an empty project directory does NOT reproduce this, and the reason is a raster vintage, not a defect in the code.** Run 2026-09-02: $12,099,377,565 against $18,240,930,373, with a clean exit and no error in the log. Traced to the USLE. Our own InVEST SDR run reproduces `usle_2019_revised_dec_14.tif` **exactly on every cell he computed**: 7,172,318 cells, 100.0000% identical, maximum difference 0. ⚠ It is not the same file — ours additionally values 525,416 cells he leaves as nodata, a superset with no cell going the other way, so the values reproduce and the valid mask is 7.3% wider. the pipeline reads `usle_2019_revised_feb_13.tif`, a later revision that differs from December by about a factor of two and correlates 0.55 with it. Because `PS_onfarm = AE/(AE+USLE)` runs behind a severe filter at 11 t/ha/yr, a halved USLE drops cropland out of the mask rather than scaling it, so the gap is a redistribution: Brazil keeps a sixth of its protected share while Indonesia gains an eighth. Our avoided-erosion output reproduces his at ratio 1.057 and correlation 0.987, so the SDR wiring is right and aimed at the older configuration. ⚠⚠ **Resolved: it is task precedence, not a defect.** `invest_sdr` reassigns `erosion_usle_path` to its own output whenever it runs, and the code says so in its own comment; the stable project skipped that task so the staged `feb_13` from es_parameters survived, and the cold start ran it so the fresh output shadowed the staged raster. The SDR stage is a preprocess by the house convention and its output is already promoted to base_data, so a cold start that skips `invest_sdr` reads the staged rasters and should reproduce the published total -- to be confirmed by a run, which belongs on a cluster because `prevention_shares` takes 14 hours. ⚠ The 525,416 extra cells are a zero-against-nodata convention difference and not a value one: 60.2% are exactly 0.0, they are spread from 83.6 N to 54.5 S with only 447 in the taller grid's extra rows, and together they add 2.3% to the USLE total. ⚠ This also puts the 0.8% in its place: it compares his rasters run through our valuation against his own run, which is fidelity. ⭐⭐ **CONDITION 10 IS CLOSED (2026-09-03), the library's first**: a cold start from an empty project directory on MSI -- invest_sdr skipped, so the staged February rasters are read, which is the treatment the task-precedence finding prescribed -- ran prevention_shares fresh for 9.5 hours and reproduced **$18,240,930,384 against the published $18,240,930,373**, a difference of $11 (6e-10, floating-point summation order). The aggregation step needed one resume after a country-file vintage was fixed mid-run; the expensive stages were untouched. The cold start is the first independent check, and it establishes something narrower and more useful -- the pipeline regenerates his December result exactly and cannot yet regenerate his February one.Three changes made rather than asked about, and one observation to pass on. **Country attribution:** a border cell goes to the country covering its centre. Under all-touched, which his code sets and ours did too, every country whose outline touches a cell claims it and the one rasterised last keeps it, so a country's value moved with its row order in the boundary file. **Boundary file:** `ee_r250` rather than `ee_r264_correspondence`. It changes no number here, measured: r264's 264 features carry the same 250 countries, total area is identical to six decimals, and `rasterize_iso3` already assigned one id per ISO3, so the six China rows always shared one and were never summed twice. What it removes is a class of error rather than an instance. The severity threshold reads a *country's area*, and on r264 a country arrives as several rows, which is exactly how a single territory's area could make a large country look small and draw the low soil-loss tolerance. On r250 that cannot arise, because nothing is split. It also puts erosion on the same file every other aggregation uses, which is the standing rule (r250 for sums, r264 for maps). **Country area:** a country's area is the sum of the territories the boundary file splits it into. That matters on r264, where China and India each arrive as six rows and a single territory's area let them qualify as *small* and draw the low soil-loss tolerance, enlarging the domain the threshold defines; the countries whose status can turn on it are CHN, FRA, GBR, IND and TUR. On r250 it cannot arise, because nothing is split there. **South Sudan:** it was dropping out of the FAO join and taking a zero, against the author's $3.71M, and the cause was ours. `ee_r264_correspondence` carries the country as `SSD` under `iso3_r250_label` and as `SDS` under the Natural Earth columns `adm0_a3`, `sov_a3` and `su_a3`; the boundary loader preferred `adm0_a3`, so the run keyed on a code the FAO tables do not use and its crop GPV came back empty while the physical side computed normally. Fixed twice over: `ee_r250` carries no `adm0_a3` at all, so the boundary move settles it on its own — the live rerun already shows `SSD` on the default high threshold — and the loader now prefers `iso3_r250_label`, which is the canonical label, so no other file carrying Natural Earth columns can shadow it. flood had already met this and remapped SDS to SSD; erosion had not.
Values the crop production that soil retention protects: the share of soil loss prevented by a field's own cover and by everything upslope of it, turned into a production shock and priced against the country's crop output. ⚠ The issues table's separate SOIL RETENTION row is this service under the CAS framework's name. **Revised 2026-10-02:** the CAS submission delivers a soil-retention package of its own (staged at `base_data/global_invest/cas_submission_2026_09/`): $5.39T PPP-2019 over 243 countries across FOUR replacement-cost channels -- non-point pollution avoidance $3.45T, sedimentation dredging $1.25T, crop and grass fertility $0.69T -- plus global avoided-erosion and avoided-export rasters and a disciplined numbered pipeline. Only the fertility and sedimentation channels overlap this service; the pollution channel collides with the water-quality row instead. So the question is no longer delete-the-row but which channels the account admits without double counting -- and the currency (PPP) and replacement-cost-vs-market-value questions ride along. $18.24bn across the 192 countries that carry a value, of which 31 compute an exact zero, leaving 161 positive. The author reports $14.59bn across 164 countries for the same SES-11 baseline, so ours sits 25 percent above his, and the country split diverges further still. South Sudan is dropped because the source table spells it SDS where the country table uses the ISO SSD; its value is zero, so no dollars are lost by it today.
-
amber for exactly one condition and one blessing, everything this service controls closed (2026-09-06). ⭐ **10 CLOSED** (2026-09-03, the library's first): a cold start reproduced the published total to $11 in $18.24bn. ⭐ **16 CLOSED**: the combined prevention share is registered in gep_calculation, warped off the InVEST projection onto the 30 arc-second pyramid (nearest neighbour -- a proportion is not interpolated), and leaves output/ as a POG, verified with is_path_pog and an overview read; the rerun reproduced $18,240,930,372.66 on the way. ⭐ **15 CLOSED as a recorded decision**: author_drive stays a FAITHFUL COPY by design -- its seven top-level duplicates are the author's own copies and es_parameters points live into its msi_upstream_attribution_v3 subfolder, so deleting from it would make it stop being what it is. ⭐ The SDR extent is PINNED: es_parameters records the author's 6217x3968 grid and run_invest_sdr now refuses a run whose grid differs (an unpinned run wrote 62 extra Arctic rows). ⭐ **11 verified for this service 2026-10-07**: the published table is 250 rows on the account's list at base year 2019, with 161 valued, 31 measured zeros distinct from 58 missing rows, and nothing priced off a parameter that is not a shared row; the C17, C19 and C20 gates encode the same checks and are clean. **Open: the border-rule blessing with the author, alone** (his notebook rasterizes all_touched, ours assigns a cell to the country covering its centre; 0.4 percent of the total, the micro-states move entirely), via the issues row.
7
Landslides-landslide_mitigationprocess model run hereyesyesyesSlope stability computed with and without forest root cohesion, into landslide hazard and expected deaths, times a GDP-adjusted value of a statistical life. The quantity comes from a slope-stability model run here, twice per pixel.Folded in from the v0.2.0 release, then refactored onto the library template and hazelbean conventions. Added the `gep_calculation` the service had never had: it wrote country totals into a zonal-statistics file that nothing downstream read, so the service had a run and no report. It now writes the same per-country table as every other service, summing the sub-region rows per country because the zonal table is on r264. Two small fixes: the option meant to force a step to rerun actually disabled it, and the figure step ignored the setting that says whether to run at all.$657.8M at the shared EPA life-years-lost panel on our deaths (570.66); $770.7M at the OECD schedule, recoverable by blanking the panel rowEASE-Grid (EPSG:6933) at 1 km, an equal-area projection, so `pixel_area_m2 = pixel_size_m ** 2` read off the reference raster is exact. It needs a projected grid rather than merely tolerating one: flow accumulation counts upslope pixels and that count only becomes an area if every pixel covers the same ground. Correct, on the same grounds as erosion.⭐⭐ **His own v0.2.1 per-country output, and it matches us (found 2026-10-06).** The workbook `vsl_2026_09/landslide_mitigation_gep.xlsx` -- 250 rows, avoided deaths and values, **$707,155,816 over 632.02 deaths** -- has been staged since September and was verified byte-identical to the drive's copy on 2026-10-06; his v0.2.1 appendix (refreshed the same day) states the same two totals. Compared per country: log-correlation 0.978 over the 218 countries both value, the same top five in the same order (Nepal, Colombia, Japan, India, Zimbabwe), median his/ours 1.12. ⚠⚠ That isolates the all-services sheet's `Landslide Mitigation` column ($865,194,615, USA-led): it now matches neither his current run nor ours, so it prices some other quantity from some other run, and the analysis below stands as the record of why it cannot be a deaths quantity under any price. ⚠⚠ **Compared 2026-09-06: the totals sit 12 percent apart and the country splits differ by orders of magnitude.** The two share a hazard backbone -- log-correlation 0.72 over 177 comparable countries -- but his weights wealth far more heavily than ours (his tracks log GDP at 0.67, ours at 0.39). The median country differs 13.6 times; theirs is led by the USA ($195M), China ($104M) and Japan, ours by Nepal ($299M, 39 percent of our total), Colombia and Mozambique. Nepal leading a landslide-mortality service is what the hazard looks like on the ground; the USA leading one suggests the sheet's column prices a different quantity or a very different hazard layer. Theirs also carries seven-figure values for Cocos, Christmas Island and the French overseas departments where ours computes zero, and misses Taiwan where ours is large. A pair of totals agreeing to 12 percent over distributions this different is coincidence, not agreement -- the erosion lesson at full strength. ⭐ And the difference is NOT the value of life: repricing our deaths on the shared VSL table moves ours to $705.1M, AWAY from his $865M, so no price table turns one into the other -- the quantity itself differs. The implied price per death settles it: if his column were our deaths under any price, the USA row implies $345M per death (thirty times any VSL), Canada $66M, Nepal $3,500 -- five orders of magnitude of spread that no value-of-life schedule can produce. His run counts a different quantity: either a deaths model that finds a hundred times more mortality in rich flat countries and a hundred times less in Nepal, or not deaths at all (asset damages fit the pattern, including the seven-figure French overseas departments).Yes at the distribution level against his v0.2.1 output, measured 2026-10-06 and pinned by a test that runs against every landslide project on the machine: 0.978 log-correlation, identical top five, totals $707.2M against our $657.8M. Not to the cent and not expected to be: his death layer is newer (632.02 against our 570.66) and he prices on his VSL panel where we price on the shared EPA life-years panel, so the per-country ratio spread (p10 0.45, p90 1.24) is the product of those two differences. His workbook carries per-country deaths and our published table only value, so separating the death gap from the price gap needs our run to publish its deaths column, a small addition not yet made. Against the SHEET column the old finding stands: every comparable country differs, most by an order of magnitude.**2026-09-06, Chiara: the grid exception extends from 'InVEST requires it' to 'hydrological routing requires it'.** Landslide's in-house flow accumulation needs equal ground area per cell -- the same physics behind InVEST's requirement -- and EASE-Grid is equal-area, so the computation grid is blessed. The account still never sees EPSG:6933: the published map must leave as a WGS84 pyramid POG, which is the open condition-16 work.
Values the deaths that forest root cohesion prevents. Computed end to end, the full run gives 570.66 avoided deaths, $770.7M. No reference output exists to check it against.
Nothing from the author. ✅ Decided 2026-10-07, Chiara: the account's reference is his v0.2.1 per-country output, which we match at 0.978 and which his repo and appendix carry -- the all-services sheet's $865M column is superseded by his own run and its provenance is not this service's question to chase. The ask dies deliberately asked-and-dropped, and the entry says why, which is what condition 9 requires. This is also the one service that builds its own value of a statistical life, from the OECD country table deflated from 2022 to 2019 USD with an income-group fallback, so it is the row that has to move onto the air quality group's shared table for the account to price a death the same way everywhere. That move will change the number, because the two sources differ. ⭐ Measured 2026-09-06 by repricing the run's avoided deaths on the shared table (222 of 250 countries matched directly, the group's own mean-fill for the rest): **$705.1M against the OECD $770.7M, an 8.5 percent decrease with the country ranking preserved** (Nepal $242M, Colombia $118M). The number is ready; what remains is the wiring -- the shared table as an es_parameters row both mortality services read, which is the C18 gate item. The same three questions apply to that table as on the air filtration row: its currency year, an ISO3 column rather than a country name, and the countries it does not cover, which is what the income-group fallback is for.
amber for condition 16 alone, one rsync and one rerun away. ⭐ The reference question closed 2026-10-07: his v0.2.1 per-country output matches ours (0.978, same five leaders, pinned by a test), and Chiara decided the account's reference is his output -- the sheet's $865M column is superseded by his own run and not this service's question, so 9 holds nothing. ⭐ The shared VSL is decided and wired the same day (the C18 row under Air Filtration): this service already read the panel, so its number does not move, and condition 11 is now met in full. The grid is settled: EASE-Grid is equal-area and the flow accumulation NEEDS it, the same recorded justification as erosion, and the cell area is exact there. The code is complete on the template with tests. ⭐ **10 CLOSED 2026-10-07**: `projects/gep_landslide_mitigation_coldstart_20261007`, a fresh directory reusing nothing, reproduces $657,753,718.76 with zero per-country difference against the published table. Like erosion's, the cold start proves the repository plus a staged base_data: the slope-stability chain that generates the staged zonal statistics is cluster-scale upstream work, documented as such. ⚠ **Open: 16 alone.** The service's map is the cluster run's avoided-deaths raster, price-free, the biophysical surface behind the table; it lives on MSI, whose login nodes are down for maintenance on 2026-10-07, so what remains is one rsync into `landslide_mitigation/cluster_run_2019/` and one gep rerun that warps it from EASE-Grid onto the 30-arcsecond rung sum-preservingly and publishes it as a POG through the shared seam. The value map is deliberately NOT published: the cluster run's value raster carries the superseded OECD pricing, while the account's dollars are priced at the shared panel in gep_calculation, so a published value raster would contradict the published table. The deaths map is the service's raster; the value is tabular. ⭐ **11 met in full 2026-10-07**: 250 rows on the account's list at 2019, 227 valued and 23 exact zeros with no missing rows, the zeros being atolls, flat deserts and unpopulated territories where zero exposed population IS the measurement (Monaco and the Vatican are smaller than a 1 km cell, so theirs mean the grid cannot resolve them), and the shared-parameter clause closed by the shared-VSL wiring (both mortality services read this service's panel file)
8
Fisheriescommercialfisheriestable arithmeticyesyesyesThe economic rent of the capture-fisheries catch, landed value less variable and fixed cost less subsidy, deflated to 2019 dollars and projected to the base year by trend. The quantity comes from a CSV, the CWoN reproducibility package.Translated from R to Python, then refactored onto the library template and hazelbean conventions. The rent is now computed from its parts rather than read from CWoN's finished `FAOEconRent` column: landed value minus variable and fixed cost minus subsidy, which is what that column is. It reproduces theirs: across the 4,648 rows where both are present the largest difference is $67.29, which is float32 storage precision rather than a disagreement, and the largest per-country difference is $9.23 over 169 countries in 2018, the table's last year. The 2019 country totals are unchanged to six figures. A blank subsidy is treated as none; a blank catch or cost leaves the rent undefined rather than zero.$29.00bn provisionalNo raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.⭐ **The author's cleaned per-country capture CSV (2026-07-20), delivered 2026-10-03** and staged at `base_data/global_invest/fisheries/author_drive_2026_10/` with his write-up beside it -- the first machine-readable reference this component has had, replacing the claim withdrawn 2026-09-02 (the drive's older `fish_provision_gep.csv` gave the Philippines $18.2 trillion and could not be the anchor). Our published table matches it in all 250 rows at his whole-dollar rounding: largest row difference $0.50, totals $3.31 apart on $29.0bn, 107 valued, 58 floored zeros and 85 blanks identical on both sides. Pinned by a test that recomputes the full chain from the staged CWoN inputs (tolerance set at the measured float drift, worst $3.96 on Vanuatu). His write-up documents the construction as run here: CWoN rents to 2018, each year to constant 2019 USD by the country's own CWoN CPI, a 2009-2018 OLS trend projected to 2019, negatives floored. ⚠ Same CWoN data on both sides, so the agreement tests the two implementations against each other, not the science. The arithmetic stays independently checked by the unit tests: the CPI imputation, the source exclusions, the deflation, the OLS trend, the negative floor and the country join.Yes, as of 2026-10-03: the author's per-country CSV, matched at his rounding in all 250 rows and pinned by a test. ⚠ Same CWoN data on both sides, so it tests the two implementations against each other rather than the science.-
Values the economic rent of the capture-fisheries catch, from CWoN's catch, cost and subsidy columns, predicted to 2019 by trend since their series stops at 2018. $29.00bn, provisional because the source is undecided: FishStatJ, FAO's capture-production database, would give a different number. Separately, there is no reference output to check it against.
⚠⚠ **Two findings from 2026-09-02, both of which change what the number means rather than what it is.**
amber: examined, and at least one of the sixteen conditions is not yet verified. ⚠ **10 is unmet here** (no longer everywhere: erosion closed it on 2026-09-03, reproducing its published total to $11 in $18.24bn from an empty project directory). ⚠ **11 is unverified**: the base year is 2019 across every service, but the country list, the true-zero-against-missing rule and the shared parameters have not been checked service by service
9
Fisheriessubsistencefisheriestable arithmeticyesyesyesHarvested subsistence quantity times price per kg, summed over species. The quantity comes from a CSV, the CWoN reproducibility package.Refactored onto the library template and hazelbean conventions.$7.92bnNo raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.The release's committed output, staged in base_data and reproduced for every country whose quantities and prices it carries. ⚠ **Corrected 2026-09-02: this is NOT the same code lineage, and the entry used to say it was.** We do not run their code and we do not read their finished `TCUV` column: `subsistence_value_by_admin` recomputes the value as quantity times price summed over species, and carries their published column beside ours as the anchor. Across the 58 admins where both exist the two agree to **$0** on $9,952,528,094. What the check therefore establishes is that our arithmetic matches theirs on the same data -- it is independent of their CODE and not of their DATA. **An independent check would need a different source of subsistence catch estimates**, since a systematic error in Lynch et al.'s quantities or prices would pass this unchanged. Twenty countries publish a value of exactly zero with nothing behind it.Yes, for every country the release carries. ⚠ Same lineage, so it tests our port rather than the science.-
Values the home catch households consume, as harvested quantity times price per kg, $7.92bn across 65 countries. Every country whose quantities and prices the release carries reproduces the committed output. Twenty countries publish a value of exactly zero with no quantity or price behind it; those are left empty.
What is the account's fisheries value? The commercial rent alone, the sum of both components, or something else. The commercial side values the rent of the reported catch, the subsistence side the use value of the home catch. The commercial series is built from FAO catch statistics, so where a country's reported catch already includes subsistence fishing, a sum counts that catch twice.
amber as of 2026-09-02, and **9 is the only condition open**. **10 is met**: `projects/gep_fisheries_coldstart_20260902_144720`, a fresh timestamped directory seeded from `input_template/`, which produced this figure along with commercial and aquaculture. **12 is met**: the reference is staged, and `test_every_subsistence_run_reproduces_the_staged_reference_total` compares what the pipeline WROTE against it for every fisheries run on the machine rather than checking the maths alone. **11 is met**: 250 rows on the account's list, 2019, and the zero-against-NA rule is stated above rather than left to be inferred. **5 is met**: the check is independent of their code, and the entry says plainly that it is not independent of their data and what would be needed to make it so. **15 is met**: the subsistence lineage sits in its own `subsistence/` folder with its input and both anchors, and C21 finds no duplicate. ⚠ **9 is open**: the account's fisheries scope question below has not been put to anyone, and the issues document records that this component has no methods writeup -- "Subsistence fisheries: Don't have writeup. Check with Ryan". OLD TEXT FOLLOWS, retained only where still true: ⚠ **11 is unverified**: the base year is 2019 across every service, but the country list, the true-zero-against-missing rule and the shared parameters have not been checked service by service
10
Aquacultureaquaculturefisheriestable arithmeticyesyesyes, and by a shorter route than the source's. The value is FAO's, the share is GTAP's, and the arithmetic between them is one multiply.FAO FishStatJ aquaculture production value by country in the base year, times the natural-resource share of fishing value added for that country's GTAP region. The source computes capture and aquaculture as one figure -- `GEP_fish := (total_aqua_value_usd1000 + total_cap_value_usd1000) * NatRes_Share` in `gep_fisheries_02_calc_gep_fish.R` -- so aquaculture is the first term of that sum times the same share, and no new method is invented. ⚠ Aquaculture is farmed, so what the share values is the natural resource input to farmed production rather than a wild stock; whether that belongs in the account beside capture is a scope question for the paper, not a computation.`fisheries_aquaculture_gep`, one task in the fisheries module beside `fisheries_subsistence_gep` -- not a new service, because fisheries already carried two subgroups and this is the third. The share comes off the GTAP header by set element NAME rather than by position, so an aggregation with different regions or a renamed sector fails loudly instead of silently indexing the wrong row, and a region with no fishing factor payments raises rather than publishing a zero share.$63.13bnNo raster. Country tables only, so no cell area and no zonal statistics; condition 11's clause 3 does not arise.The GEP table's $110.68bn. Ours is $110,496,827,614 from 206 countries once aquatic plants are excluded for the reason in `decided`. The difference is **-$183,172,386, or -0.17 percent** of the table's figure, against +5.4 percent with plants in. ⚠⚠ **We make no split, and that is the point.** FAO publishes aquaculture as its own dataset -- `Aquaculture_Value.csv`, a separate release from `Global_production_quantity.csv`, whose rows are aquaculture by construction -- so this figure is read directly rather than derived by subtracting capture from a combined total. Nothing here depends on a split being right. The source's pipeline is the one that combines them, `GEP_fish := (aqua + capture) * NatRes_Share`, so a figure for aquaculture alone did not come from it. ⭐ **2026-10-03: the author's cleaned CSV and write-up delivered**, staged at `author_drive_2026_10/`: **$100.68bn over 197 countries**, a THIRD vintage agreeing with neither the GEP table's $110.68bn nor our $110.50bn reproduction -- median country ratio to ours 1.09, IQR 0.99 to 1.23, Viet Nam at 0.61 and Indonesia at 1.13, so the differences are structural, not a rescale. His write-up names the construction (GTAP 10 EVOS NatRes share of primary-factor payments for `fsh`, applied to FishStatJ production value over 'all aquaculture species', accessed 2024-03) and two upward biases of its own: EVOS cannot carry negative rents, and `fsh` mixes capture with aquaculture. His sensitivity multiplying lambda by 0.5 gives $50bn, which he notes falls within the upper end of the CWON range -- the same direction as the 2026-09-02 revenue-share correction behind the account's $63.13bn.Approximately, and the gap is explained rather than tuned. See `decided`.**Aquatic plants are excluded**, and there are now two independent reasons, neither of them the reference. The account's own service definition, in `GEP Project: ES Status`, is **"Biomass provisioning services: Cultivated Aquatic ANIMAL Nutritional"** -- seaweed is not an animal, so the exclusion is what the service says it is. And the multiplier is GTAP's natural-resource share of the FISHING sector, which does not contain seaweed farming. The multiplier is GTAP's natural-resource share of the FISHING sector, and GTAP does not put seaweed farming in fishing; applying a fishing-sector share to seaweed value prices one sector's output with another's factor structure. Seaweed is 5.4 percent of world aquaculture value ($15.9bn of $292.4bn), so the switch moves the account from $116.69bn to **$110.50bn**. Both figures are logged on every run and the choice is `fisheries_aquaculture_exclude_aquatic_plants`, so nothing here is hidden in a default.
$110.50bn across 206 countries, aquatic plants excluded ($116.69bn including them). World aquaculture value in 2019 is $292.4bn and the natural-resource share of fishing value added runs 29 to 59 percent by region, mean 41. China $68.02bn, Vietnam $7.12bn, Chile $5.81bn, India $5.66bn.
⭐ Updated 2026-10-03, three asks from the delivery: which GTAP aggregation and FishStatJ vintage produced the cleaned CSV, and whether aquatic plants are in ('all aquaculture species' suggests yes, yet his China sits at 0.88 of our plants-excluded reading, so something else also moved); whether he adopts the revenue-share correction -- his own x0.5 sensitivity points the same way; and the cleaned aquaculture script, which his email says is not yet on GitHub. The earlier state stands otherwise: Nothing external. All four inputs the source names were resolved on 2026-09-02 without asking anyone: `aqua_prod_quant.csv` and `aqua_prod_value.csv` are `Aquaculture_Quantity.csv` and `Aquaculture_Value.csv` inside FAO's public `Aquaculture_2025.1.0.zip` (2.1 MB, and its `MEASURE` codes `Q_tlw` and `V_USD_1000` are literally the source's column names); `fsh_endowment_gtap.xlsx` is computed here from `basedata.har` as `EVFP[NatRes, fsh, r] / EVFP[:, fsh, r]`; and `iso3_gtap141_mapping.xlsx` is the account's own `ee_r264_correspondence.csv`, which maps all 250 countries onto the 50 GTAP regions with none left over. None of the four existed anywhere in base_data beforehand -- searched the whole tree, not just the fisheries folder.
amber as of 2026-09-02. The task exists and has run: `gep_fisheries/intermediate/fisheries_aquaculture_gep/aquaculture_gep_by_country.csv`, 250 rows on the account's list, 206 valued, $110,497,000,000 -- and the throwaway script's $116.69bn is still logged beside it as the including-plants variant, which is the point of moving it into the module rather than the check on it.
11
Crop Productioncommercialcrop_provisiontable arithmeticyesyesyes, on the same footing as energy production rather than mining. FAOSTAT publishes the market value of the crop, not the part of it that belongs to nature, so no published figure is being relabelled. What is adopted is the CWoN land rental rate, and it is the entire attribution.FAOSTAT gross production value (element 57, current USD) times the CWoN land rental rate, the share of crop value that accrues to land rather than to labour, capital or inputs. The rate is a per-country decade constant between 0.008 and 0.661, median 0.306 over 179 countries, applied by a backward as-of merge so each year takes the most recent decade that has started. The quantity comes from a CSV, FAOSTAT gross production value. Pairs carrying production and no current-USD value at the base year -- FAOSTAT's USD value stops wherever its own USD producer-price series stops -- are filled from the values table the pollination chain stages (its production times that year's USD producer price, the price falling back country to subregion to region to world), the rental rate applying to filled and read rows alike.Refactored onto the library template and hazelbean conventions. Two fixes: FAOSTAT still lists countries that no longer exist, the USSR and Yugoslavia among them, so production was being stranded on codes matching no present-day country; those now map to their successor states. The reporting year was also written into the code as a fixed number and now comes from the shared configuration.$814.3bnNo raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.The reference pipeline, cloned, run and reproduced. Its per-country 2019 output is staged in base_data and a test compares against it, where before this the agreement was asserted and nothing looked at it. $623,117,396,403 against $623,117,396,403 across 179 countries, largest per-country relative difference 3.4e-16. ⚠ Same lineage, so it tests the port and cannot see an error the reference's code also makes. Two rows differ by construction and the test collapses them first: FAOSTAT carries "Ethiopia PDR" and "Serbia and Montenegro" beside their successors under one M49 code each, the reference strands them at zero, and this library maps them to the successor.The reference arithmetic yes, pinned by a test and published unfilled beside ours as `crop_provision_gep_reference`. ⚠ Same lineage, so it tests our port rather than the science. The published figure departs from it deliberately: the price-gap fill adds value the reference's source cannot carry.**2026-10-03, Chiara: fill FAOSTAT's USD price gaps the way the pollination repo prices crops.** One price chain for the account: crop_provision reads `fao_values_1993_2024.csv`, the values table pollination's `fao_median_prices` task stages into base_data (William Sidemo Holm's chain, which rebuilds USD prices from SLC and World Bank fx where FAOSTAT's own USD series is discontinued, then values production at that year's price with the country-to-subregion-to-region-to-world fallback), and adds no price arithmetic of its own. Each filled row says which level priced it in `value_source`; the fill is base-year only, the published year.
**$814,321,561,732 across 174 countries**, from our own run: $511,522,475,916 read from FAOSTAT and the rest through the price-gap fill, which values 5,233 pairs ($1.128T gross before the rental rate; 1,895 at the country's own price, 2,708 subregion, 494 region, 136 world). India moves $12.9bn to $103.3bn -- its rice, like most of its crops, carries 2019 production and no 2019 USD value -- and 22 countries enter from nothing, the Democratic Republic of the Congo ($9.6bn) and Myanmar ($7.5bn) the largest. The 24 countries at exactly zero are small island and city states whose crops carry value but no CWoN rental rate, so nothing can be attributed; whether they should read as NA instead is the deck's Q3. The fallback statistic is measured, not assumed: holding out each country-item pair with its own 2019 price and predicting it from the subregion's other members, the median beats the mean value-weighted (|log error| 0.56 against 0.64, upward bias +0.25 against +0.41 in logs -- both overprice large producers, the mean more), and 68 percent of the filled dollars ride on the country's own price with no fallback involved ($206.6bn of $302.8bn post-rate). ⚠ The unfilled figure has been wrong twice and both times the cause was the FAO item list rather than the code. It was $678,413,996,115 until 2026-09-01, which is the reference at its earlier commit: 17 livestock items sat in the crop list, 16 of which our livestock service values too, so $43.6bn was counted twice across the account. Following the reference's later commit gave $623,117,396,403, which is also what the reference itself produces today and is published beside ours as `crop_provision_gep_reference`. That figure is still too high, because the list carries three FAOSTAT group totals -- Oilcrops Primary, Roots and Tubers Total, Sugar Crops Primary -- as well as the individual crops those totals add up. Malaysia came out at 179% of its own crop production; 87 of 156 countries exceeded 100%. Keeping a group total only where no individual item is published leaves 1 of 155 above, median 0.877, and gives the figure above. ⚠ The GEP table registers $692.3bn, which no version of the reference produces.
Does the GEP total add crop production and pollination? Crop multiplies production value by the CWoN land rental rate, and pollination values the crop production attributable to wild pollinators, so both attribute part of the same output to nature. And how the CWoN land rental rate was derived. It is the whole of the attribution and moves the total proportionally.
amber: twelve of the fourteen conditions hold as of 2026-09-01, and 7 and 9 do not. **1, 2 and 3 are met**: our code produces the figure, every step is a task in this library, and the figure is from the current code. **4 is met**: no raster, so no cell area. **5 and 12 are met as of 2026-09-01, and the reproduction is now a check rather than a claim**: the reference was cloned, run, its per-country output staged in base_data, pinned by a test, and the agreement claimed of the cold start rather than a warm directory. Before that the entry asserted agreement while also recording that the reference was not in the repo and nothing pinned it. ⚠ Same lineage still, so it tests the port and cannot see an error the reference makes too. **6 and 8 are met**: the three gates pass, and the file set is the agreed four plus tests as of 2026-09-01, when a `_quarto.yml` that nothing had ever read was removed. ⚠ **7 is open**: the GEP table registers $692.3bn, which no version of the reference produces at any commit, either item list, either FAOSTAT vintage, any year from 2015 to 2022, or either candidate base year; and the registry lists this service at base year 2020 against the account's 2019, worth about $26bn. Both would change the figure. ⚠ **9 is open**: neither has been put to the authors. **10 is met**: `projects/gep_crop_provision_coldstart_20260901_122846`, run 2026-09-01, a fresh timestamped directory reusing nothing and seeded from `input_template/`, every input resolving inside the shared base_data. Reproducing the reference is claimed **of that run**, not of a warm one: the cold start returns $623,117,396,403 against the staged reference's $623,117,396,403 over 176 countries to 3.4e-16, its subsistence reference column returns $1,832,260,428.28 against their published panel's $1,832,260,428.28 over 66 countries to 2.3e-14, and the account's own subsistence figure is $23,780,485,591. The two tests that check this scan every crop_provision run on the machine rather than one named directory, so a stale warm run cannot stand in for a fresh one -- which is how they caught two superseded cold starts from earlier the same day, both since removed. **11 is met**: the published table is 250 rows on the account's list, with the countries the service has no value for recorded as NA rather than absent. **14 is met**: H23 finds nothing in this service defined and never used. It found fifteen names across seven services when it was written on 2026-09-01, including pollination's `pixel_area_km2_spherical`, the 6371 km sphere the account had already decided against. **13 is met**: nothing in the pipeline or its verification reaches into anyone's checkout. Every input and every reference output is staged in base_data, no path in `es_parameters` leaves it, and H22 checks that mechanically. The author's repository could be deleted tomorrow and this would still run, still produce the figure and still verify itself.
12
Crop Productionsubsistencecrop_provisiontable arithmeticyesyesyesCropland area times the regional share of agricultural area in farms under two hectares (Lowder et al. 2021) times FAOSTAT's value of agricultural production per hectare times the share of crop production value a household consumes rather than sells (FAO RuLIS national surveys), attributed by the CWoN land rental rate and deflated to the base year by each country's own CPI. A surveyed country's missing years are filled from a per-country regression on year, GDP per capita and commercial production; an unsurveyed country is filled from a global regression on cropland area.The reference pipeline ported stage for stage, so the library computes the figure rather than quoting it, and then departs from it in three places, each deliberate and each reported separately. FAOSTAT reports cropland in thousands of hectares against an intensity per single hectare and the Lowder share is a percentage, so each is read as its source labels it. Countries no survey reached take an imputed own-consumption **share** rather than an own-consumption **level** predicted from cropland area, so three of the four factors behind such a country are still its own. And the delivered table is put on the account's country list by the house collapse. The reference's own arithmetic runs through the identical stages in the same task and is published beside ours, which is what lets a reader check the port instead of taking it on trust.$23.78bnNo raster. The component works on country tables (it reads only CSV), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-09-01 by checking every read in the task.The reference panel, reproduced. Running its arithmetic through our port gives $1,832,260,428.28 against its published $1,832,260,428.28 across 66 countries, largest per-country relative difference 2.3e-14. Each stage was checked separately on the way: 73 own-consumption rows to 1.3e-16, 63 interpolated rows to 1.9e-16, and the extrapolation choosing the same covariate and the same 49 observed / 1,339 predicted / 222 missing split. ⚠ Same lineage, so it tests the port and cannot see an error the reference's code also makes; where we found one, we publish our own arithmetic rather than theirs.Yes, exactly, and the reproduction is published as its own column rather than asserted. ⚠ Same lineage, so it tests our port rather than the science.The account's figure is ours, not the reproduction, and on three counts. The units: FAOSTAT's cropland is in thousands of hectares against an intensity per single hectare and the Lowder share is a percentage, so reading each as labelled is the method done correctly rather than a variant of it. And the imputation: what the survey measures is a share, a ratio of two quantities that move together and travel between countries, where the reference predicts the level from cropland area -- which is the largest term in the formula that produced the level it is fitted to, so the fit is close to circular and the fitted rows outnumber the observed ones twenty-seven to one. Publishing either as the account's number once we knew would have been repeating a mistake with our name on it. And the currency: the account reports 2019 US dollars and reads FAOSTAT current-year values as already being that, which holds for the Value of Production table but not for the production intensity, which FAOSTAT publishes only in international dollars. There is no current-US$ version of that element to read instead, so the estimate is converted -- by the factor FAOSTAT's own two publications of the same agricultural output imply, not an external table. It moves the figure 4.6%, from $24,930,567,445 to $23,780,485,591, and 48 of the 66 countries carry their own factor with the rest on a regional median.
**$23,780,485,591 across 66 countries, in 2019 US dollars**, and 72.3% of it rests on a country's own observed survey rather than an imputed share. Two further figures are published beside it so each departure from the reference is separable: $18,322,604,283 is the reference's own extrapolation with only the units corrected, and $1,832,260,428 is its arithmetic entirely, which reproduces its published panel. ⚠ The share imputation is not what drives the total: requiring anything from one to five surveys before a regional median is used, or forcing every unsurveyed country onto the global median, moves it only about 2%.
Three findings to put to the authors, none of which our figure now depends on: the factor of ten above; the delivered file, which joins the panel against the correspondence on a Natural Earth name column and carries 16 of its own 66 valued countries at $398,356,097; and eleven countries whose observed survey values leave the panel at the interpolation step, Ethiopia among them, because a row missing GDP per capita or commercial production is dropped and its observation goes with it. Separately, and for the account rather than the authors: whether subsistence is added to commercial at all, given RuLIS reports own consumption as a share of crop production value that FAOSTAT's production figures already include. ⚠⚠ **And the scope, which is the largest thing understating this figure.** The reference restricts its panel to the World Bank low and lower-middle income classes, so 56 upper-middle-income countries are excluded by construction -- China, Indonesia, Brazil, Thailand, Egypt, Mexico, South Africa. China matters most: Lowder gives East Asia and Pacific a 64.3% smallholder area share, the highest of any region. Our own method needs no survey to reach them, because three of its four factors are structural, so the cost of the restriction is measurable: adding upper-middle income takes 2019 from **$24.93bn over 66 countries to $55.96bn over 109**, and every income class gives $58.97bn over 154. We keep the restriction for now because changing the scope and the method at once would leave neither legible, but it is the reason the figure reads low and it is a question for the account rather than a defect.
amber: thirteen of the fourteen conditions hold as of 2026-09-01, and 9 does not. **1, 2 and 3 are met**: our code produces the figure, every step from the eleven staged inputs to the published number is a task in this library and it reads nothing from the reference repository, and the figure is from the current code. **4 is met**: no raster, so no cell area. **5 and 12 are met, and the check is real rather than nominal**: the port was verified stage by stage against the reference's own committed intermediates rather than only on the final total, their panel is staged in base_data, a test compares against it on every run present, and the agreement is claimed of the cold start. **6 and 8 are met**: the three gates pass and it adds no file to the service. **7 is met as of 2026-09-01**: it was open while the account's figure was the reference's arithmetic, because whether we published $1.83bn or $18.32bn changed the number; the account now publishes ours and the reference's beside it, so nothing outstanding moves the figure. Whether subsistence is added to commercial remains open but is for the account to decide and does not change what the code computes. ⚠ **9 is open**: the three findings have not been put to the authors, and the condition counts an unasked question as open. **10 is met**: `projects/gep_crop_provision_coldstart_20260901_122846`, run 2026-09-01, a fresh timestamped directory reusing nothing and seeded from `input_template/`, every input resolving inside the shared base_data. Reproducing the reference is claimed **of that run**, not of a warm one: the cold start returns $623,117,396,403 against the staged reference's $623,117,396,403 over 176 countries to 3.4e-16, its subsistence reference column returns $1,832,260,428.28 against their published panel's $1,832,260,428.28 over 66 countries to 2.3e-14, and the account's own subsistence figure is $23,780,485,591. The two tests that check this scan every crop_provision run on the machine rather than one named directory, so a stale warm run cannot stand in for a fresh one -- which is how they caught two superseded cold starts from earlier the same day, both since removed. **11 is met**: 250 rows on the account's list, the 184 countries no estimate reached recorded as NA rather than absent. **14 is met**: H23 finds nothing in this service defined and never used. It found fifteen names across seven services when it was written on 2026-09-01, including pollination's `pixel_area_km2_spherical`, the 6371 km sphere the account had already decided against. **13 is met**: nothing in the pipeline or its verification reaches into anyone's checkout. Every input and every reference output is staged in base_data, no path in `es_parameters` leaves it, and H22 checks that mechanically. The author's repository could be deleted tomorrow and this would still run, still produce the figure and still verify itself. ⚠ The second half of 13 is why the published figure is not the reproduction: our code departs from theirs on the units and on the imputation, and the entry says why in **decided**.
13
Livestock Productioncommerciallivestock_provisiontable arithmeticyesyesyes, and more so on one of the two value columns than the other. The service writes two, because two attributions of the same FAOSTAT gross production are on the table and the account has not chosen between them. `livestock_provision_gep` applies the CWoN land rental rate and gives $519bn; `livestock_provision_gep_feed_share` applies the share of animal intake that ecosystems grew and gives $1.37T. Neither FAOSTAT figure is a published ecosystem value, so nothing is relabelled. The rental-rate column adopts CWoN's attribution whole, while the feed-share column derives its own, computing each country's intake share from the GLEAM 3 dashboard rather than taking a published share.FAOSTAT gross production value (element 57, current USD) over 65 livestock products, times an attribution factor: either the CWoN land rental rate or the GLEAM share of feed intake that ecosystems provided. The quantity comes from a CSV, FAOSTAT gross production value over 65 products.Refactored onto the library template and hazelbean conventions. Plus a units fix. The feed share is now wired through the task layer, so a run writes the feed-share value beside the rental-rate one. Its method page was a copy of the crop provision text, describing crop items throughout; it has been rewritten for this service.$246bn on the rental rate. $653bn on the feed share. ⚠ It was $519bn until 2026-09-01, when the same group-total double count found in crop production was found here: the FAO item list carried "Livestock", the total FAOSTAT computes by adding every animal product, alongside those products themselves. It put 106 of 152 countries above 100% of their own livestock output, median 1.397. Keeping the group total only where no individual product is published leaves a median of 0.985 and 15 countries above, none by more than 45%, and those carry items FAOSTAT files outside "Livestock" -- beeswax, honey, silk cocoons. The feed-share attribution is written too and moves with it, by the same proportion.No raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.No reference output exists to obtain: `Urgendalai/gep_livestock_provision` commits two scripts with hardcoded `D:/Netcapteems/` paths and no data. What it does commit is the feed-share formula, and that reproduces exactly -- our `feed_share` against `lambda.py` recomputed from the same staged GLEAM table, 171 countries, largest difference 1.1e-16, pinned by a test. ⚠ Nothing checks the valuation half. ⚠ And the reference script reads FAOSTAT element **152**, gross production value in constant 2014-2016 international dollars, where this service reads element **57**, current US dollars. That is a different measure in a different currency, so the two would not agree even if an output existed.The feed-share factor, exactly, and pinned. The valuation has nothing to match, because the reference commits no output.-
Values livestock output and attributes the part of it nature provided. The 65-product FAO list gives $2.29T of gross production; the two attribution factors give very different answers from it: the CWoN land rental rate gives $519bn over 178 countries, the GLEAM feed share gives $1.37T over 171, a factor of 2.6. Provisional until that choice is made. The feed share comes from GLEAM 3 intake harvested from FAO's public dashboard for 231 countries, 205 matching a country in the account, giving a real share rather than a bound (median 0.73; Mongolia 0.998, India 0.911, Brazil 0.847, France 0.651, United States 0.567, China 0.513).
Which factor the account attributes livestock value with. The code computes both, and they differ by 2.6 times, $519bn on the CWoN land rental rate against $1.37T on the GLEAM feed share. The rental rate is the crop method's factor. Also the compiled GLEAM extract (gleam3_dmi.xlsx) to validate our harvest against, the confirmation of which FAO products count as livestock, and one per-country output. And how the CWoN land rental rate was derived. It is the whole of the attribution and moves the total proportionally. ⚠ **Which attribution is the GEP table using?** It registers $1.488T, and no configuration we can run produces it: not either item list, either FAOSTAT vintage, with or without the group total, on either attribution. The nearest we have ever produced is $1,374,349,438,511, our own feed-share figure before 2026-09-01, which is 7.7% below it and rested on the double-counted gross, so reproducing it would not have been good news. But $1.488T is a feed-share-scale number rather than a rental-rate one, which suggests the table and this entry are reporting different attributions. That has to be settled before either figure is quoted.
amber: twelve of the fourteen conditions hold as of 2026-09-01, and 7 and 9 do not. **1, 2, 3, 4, 6, 8 and 11 are met**: our code produces both figures, every step is a task here, they are from the current code, there is no raster so no cell area, the three gates pass, the file set is the agreed one, and the published table is 250 rows with NA where no value exists. **5 and 12 are met**: the feed-share factor reproduces `lambda.py` to 1.1e-16 across 171 countries and a test recomputes it; what the reproduction cannot test is stated, namely the valuation, for which no reference output exists. **10 is met**: `projects/gep_livestock_provision_coldstart_20260901_113704`, run 2026-09-01, a fresh timestamped directory reusing nothing, returning $245,894,965,799 and $653,351,673,530 -- identical to the warm run -- with all six input references resolving inside the shared base_data. **13 is met**: no path leaves base_data and nothing reads the reference repository, so it could be deleted tomorrow. ⚠ **7 is open and it is the one that matters**: the account has not chosen between the rental rate and the feed share, and they differ by 2.7 times. **14 is met**: H23 finds nothing in this service defined and never used. ⚠ **9 is open**: three questions are unasked -- which attribution the account wants, where the GEP table's $1.488T comes from, and whether the group-total rule applied here matches what the authors intended.
14
Coastal Protection-coastal_protectiontable arithmeticyesyesthe mangrove half yes, the coral half no. That file holds a value per country and nothing underneath it.Mangroves: protected hectares times value per hectare. Corals: a published annual benefit per country, carried to the base year by the shared US CPI factor. The quantity comes from CSVs, the CWoN mangrove workbook and the coral benefit table.Refactored onto the library template and hazelbean conventions. The mangrove value is run: we multiply protected area by value per hectare.$36.28bn. Currency harmonized 2026-10-03: the coral half now rides the account's one CPI series (utilities.usd_deflation_factor, 2011→2019 = 1.136623) instead of each country's compounded World Bank GDP deflator — the coral values are USD, not local currency, so per-country local inflation was the wrong instrument.No raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.The published table for mangroves ($30.4bn), recomputed from hectares times value per hectare. Corals are carried through with no quantity or price behind them, so nothing there can be recomputed or checked.Mangroves yes, recomputed from the published table. Corals are carried across rather than recomputed, so they are not a check on anything.-
$36.28bn ($36,282,030,656.66), and the total is the sum of them, of which 84 percent is ours and 16 percent is read through. Mangroves are ours, $30.4bn: hectares times value per hectare, matching the published table, unchanged to the cent by the currency harmonization. Corals are not, and the reason is what the file holds rather than whether we found any code. The mangrove table carries hectares and value per hectare beside its total, so the total can be recomputed from them and checked. The coral file has three columns: country, value, year. There is no quantity and no price, so there is nothing to recompute from. All we do is carry its $5.17bn at 2011 forward to 2019 with the shared US CPI factor, making it $5.88bn. The nine countries the World Bank deflator table lacked — which came out unvalued — now carry their value like everyone else, $85.7M in all, Taiwan the largest at $78.8M: the scalar needs no per-country coverage. Valued countries 97 → 106.
Whether code exists behind the coral-reef benefit table that we should be running.
amber: examined, and at least one of the sixteen conditions is not yet verified. ⚠ **10 is unmet here** (no longer everywhere: erosion closed it on 2026-09-03, reproducing its published total to $11 in $18.24bn from an empty project directory). ⚠ **11 is unverified**: the base year is 2019 across every service, but the country list, the true-zero-against-missing rule and the shared parameters have not been checked service by service **11 is met as of 2026-09-01**: the published table is 250 rows on the account's list, with the countries the service has no value for recorded as NA rather than absent. It carried 225 rows before, and the total is unchanged.
15
Mining Production-extractive_materials_provisionrescales a published rateyesyesno. The World Bank computes the mineral rent and publishes it as a share of GDP, so multiplying by GDP recovers their figure in dollars. What the module adds to that is one multiplication and the 0.49. The script does only the reshaping, the join and the country handling.WB mineral rents as a share of GDP, times GDP, times a 0.49 factor whose source is unknown. The multiplication converts the World Bank's published rent into dollars rather than deriving it. The quantity comes from a CSV, the World Bank mineral rents and GDP series.Refactored onto the library template and hazelbean conventions. A test checks our rewrite of the WB table. Also guarded against the invisible character Excel writes at the start of a file, which had broken a column name.$99.54bnNo raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.The reference table, reproduced. ⚠ The 0.49 factor's source is unknown, so the agreement carries an unexplained constant with it.Yes, the reference table. ⚠ The 0.49 factor behind it is unexplained, so the agreement carries an unexplained constant with it.-
Values the mineral rent the World Bank publishes, scaled by the 0.49 factor, $99.54bn. Reproduces the reference table. The factor's source is unknown; without it the total would be $203bn.
The source of the 0.49 factor, which is the only judgement in the number and currently has no provenance in the code, the drive submission or its raw-data notes. And whether there is a model we should be running instead, the same question extractive energy carries: the World Bank's rent is a price-minus-cost calculation over extracted quantity, and if the account wants a mining figure it derives rather than adopts, that calculation is what it would have to redo.
amber: examined, and at least one of the sixteen conditions is not yet verified. ⚠ **10 is unmet here** (no longer everywhere: erosion closed it on 2026-09-03, reproducing its published total to $11 in $18.24bn from an empty project directory). ⚠ **11 is unverified**: the base year is 2019 across every service, but the country list, the true-zero-against-missing rule and the shared parameters have not been checked service by service **11 is met as of 2026-09-01**: the published table is 250 rows on the account's list, with the countries the service has no value for recorded as NA rather than absent. It carried 216 rows before, and the total is unchanged.
16
Energy Production-renewable_energy_provisiontable arithmeticyesyesyes: the value is built from a physical quantity and a market price rather than converted out of a published rent (mining). What is adopted is the CWoN share of the rent attributable to nature, a per-country-year parameter we take as given.For each of wind, solar and geothermal, the electricity a country generated from it in gigawatt hours, from IRENA's statistics, times the electricity price from the World Bank series, times the CWoN rent share, which is the part ofthat revenue attributable to the resource. The quantity comes from a CSV, IRENA generation statistics.Refactored onto the library template and hazelbean conventions. The calculation had been written out as one block in the task file.$173.49bnNo raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.A fresh run reproduces $173.49bn and each resource. ⚠ The drive's reference CSVs disagree by $36bn and which is blessed is an open owner question.Yes, a fresh run reproduces the total and each resource. ⚠ The drive's own reference CSVs disagree with each other by $36bn.-
A fresh run reproduces $173.49bn and each resource: wind $112.52bn, solar $54.41bn, geothermal $6.56bn. The drive's reference CSVs hold $134.6bn, and which is current is open.
The decision which source is current. And whether the account accepts an attribution it adopts rather than computes: the CWoN rent share is the whole of the ecosystem attribution here and moves the total proportionally. The same question applies to crop and livestock's rental rate.
amber, and the distance to green is one decision plus two named small items. ⭐ **Condition 10 is CLOSED (2026-09-04)**: a cold start from an empty project directory reproduces wind, solar and geothermal to the cent -- $112,524,374,333.31 / $54,410,978,171.74 / $6,558,292,384.42, the library's third closure, re-closed after the regional fill. The code is refactored, tested, and replicates its own run. What keeps it amber: ⚠⚠ **the lambda ask** -- the hydro rent share is applied as a decided working convention, and the group must bless crediting sunlight and wind at all, since three frameworks put their rent near zero; ⭐ the no-lambda countries are FILLED with their sub-region's mean share (2026-09-04: solar +$0.46bn and 95 to 142 countries, wind +$2.21bn; `attribution_source` says which share each row used; a measured negative share is kept, not filled); ⭐ the price file is IDENTIFIED (2026-09-04): World Bank Doing Business, 'Getting Electricity: price of electricity' (IC.ELC.PRI.KH.DB1619), a warehouse's commercial tariff in the largest business city, US cents per kWh, 2014-2019 -- Afghanistan 23.3 and Albania 9.5 in 2014 match the file digit for digit, and the vintage wall is the project's own discontinuation. A commercial RETAIL tariff, grid and taxes included, which is now a citable fact under every rent argument above.
17
Recreation-recreationprocess model run hereyesyesyesThe author's zonal travel-cost rewrite, ported 2026-10-04 (his repo through 540f7af), at his documented calibration: one worldwide demand group (a = 102.50 annual visits per capita, decay b = 0.167 per km, the unweighted mean of the England PaNS, Tel Aviv and Beijing surveys). Sites: 1 km cells scored and dissolved into 86,145 discrete destinations. Trips: per-capita budgets split over distance bands within a 50 km cutoff, each band's fixed budget divided evenly over the sites its ring reaches, the rest unmet; realized trips priced at the round trip to the band midpoint, at the per-litre gasoline price times the GFEI economy of 7.1 litres per hundred kilometres. Residents carry the full annual rate; a tourist person-night carries its daily share (a/365, the author's correction of 2026-10-05). The headline sums the two ground channels; overnights at the hotel-price surface and arrivals by origin region at the staged regional airfare matrix (his own scrape output; no network request here) are published beside the total, as his own country table reports them.The rewrite ported onto the library template: functions open nothing, tasks own the IO, fourteen tests pin the matrices, the band maths and its conservation, the parameter validation, the UNWTO machinery and the airfare valuation. The flow engine windows by country where the source windows by parameter group -- with five worldwide archetype groups his window is the whole globe (roughly 47 GB of arrays and 240 global convolutions); country windows fit one machine, and a test computes both formulations on one toy grid and requires the same visits, value and unmet rasters. The source's global distance-to-site transform is computed and never read by his engine, so it is not ported.$82.3bnEPSG:4326 at 0.01 degrees on the road-length reference grid. The engine converts the pixel size to kilometres at the window's centre latitude (the source's own conversion), so the ring geometry and the per-km fuel cost share one unit; the old degree-against-kilometre flag is closed by the rewrite pricing kilometres natively.None exists for the rewrite: the author's repo commits no per-country value table (its one committed country CSV is a tourism-area intermediate), so our run is the FIRST end-to-end number this model has produced. The UNWTO reader still returns the same 3,610 rows as his; the port's structural change is pinned by the equivalence test rather than by an output comparison.Nothing to replicate yet; the ask for a per-country output from his own run stands, now against the rewrite.**2026-10-04, five decisions on the way in, each from a measured defect or his own documentation.** (1) The UNWTO overnights are read at their stated thousands: the Units column says Thousands, his arrivals cleaner multiplies by 1000, his overnights cleaner does not; Spain's 299,092 against its known 299M inbound hotel nights pins it. (2) The hotel allocation divides by the NATIONAL hotel stock: the source computes the denominator inside a blockwise closure and handed Spain its national total exactly 22 times, one repeat per raster block holding a Spanish hotel. (3) The demand parameters are his documented calibration (one worldwide group, a 102.50, b 0.167), built onto the 250-country list because the drive's five-archetype CSV (2026-09-05) predates his methods page (2026-09-09/11), which calls the earlier values placeholders. (4) The fuel cost prices from the clean per-litre column times 0.071 litres per km: the staged cost-per-km column applies the IEA GFEI economy of 7.1 litres per HUNDRED kilometres per single kilometre, exactly 100x high -- his own $142 per visit is $1.42 corrected, and his 67x-JRC value gap becomes 0.67x, consistent with his own conservative-floor framing. (5) RESOLVED 2026-10-05 by the author: the person-night did carry the full annual rate (102.5 site trips per hotel night), and his fix prices each night at the rate's daily share, a/365. The ported engine applies the same conversion in one pure function, pinned by test, and the tourist column now sums into the total; his repo is still at 540f7af without the fix, so ours reconciles against his implementation when he pushes. (6) 2026-10-05, channel scope: the total follows his pipeline's own combined total -- resident plus tourist ground travel by plain addition, with accommodation and air travel as separate additive columns beside it. His results_by_country commits no total column, and his methods page computes total_value = home + lodging with the comment that the other two are reported separately, not folded in. Plain addition is his table arithmetic, so a country missing either ground channel carries a missing total rather than a partial one. The engine windows by country, pinned equal to his group formulation by test; his unread global distance transform is not ported; the old model's kilometre question is closed by the rewrite pricing kilometres natively.
**$82,305,148,173 at 2019 over 133 countries**: resident ground travel $95.3bn (89.5bn visits at $1.06 per visit, the fuel floor, 162 countries) plus tourist ground travel $1.43bn (1.28bn visits at a/365 per person-night, 133 countries; times 365 it reproduces the superseded held-out column to one part in 2.7 billion, the engine being linear in the trip budget). Beside the total, not in it: accommodation $981.7bn (161 countries) and air travel $526.8bn (191), with both coverage shares. Supersedes the $1.60T three-channel figure, which followed our interim scope, and the $192.36bn one-channel figure before it. ⚠ The 133-country total is the author's own table arithmetic: plain addition over the two ground channels, so 29 countries with resident value but no UNWTO overnights in any year carry a missing total rather than a partial one -- Germany the largest at $7.0bn of resident value excluded -- and 81 countries lack fuel prices and carry missing ground values. ⚠ What the beside-columns carry: accommodation prices ALL overnights -- domestic, business and leisure alike -- at the hotel surface (Spain $80.6bn against its roughly $70bn lodging market); the air channel prices every UNWTO arrival at a regional round-trip air fare, land borders included. The daily visit counts run about 600 times the JRC account's by the author's own scope comparison (50 km by car against JRC's 4 km on foot, any-green-space participation against one narrow survey); 81 percent of the resident trip budget goes unmet where no band holds a reachable site (393bn of 485bn trips), which the unmet raster carries explicitly.
The email to the author, send-ready and NOT yet sent: the three defect reports (the overnights thousands, the blockwise allocation denominator, the GFEI fuel economy applied per kilometre), the request for one per-country output of his fixed run, and our per-country table attached (`recreation_gep_by_country_2019.csv`, written to the project's output) with the note that any gap between his rerun and ours should trace to those three factors. His repo is still at 540f7af without the a/365 fix; ours reconciles against his implementation when he pushes. The rate question was asked and answered 2026-10-05 (a/365, residents unchanged). The one-worldwide-pair and all-arrivals-at-air-fare questions are settled for this account by adopting his pipeline's choices, and reopen only if he changes them.
amber, and the distance to green is named condition by condition. **Closed today (2026-10-05): 7** -- both open decisions resolved, the author answered the rate question (a/365) and the channel scope follows his pipeline's own combined total -- **and 3**, outputs regenerated from the current code. ⭐ **10 re-closed the same day**: `projects/gep_recreation_coldstart_20261005`, a fresh directory reusing nothing, rebuilt the full chain and reproduces $82,305,148,173.38 and the $1,428,465,523.58 tourist channel to the cent. ⭐ **15 CLOSED 2026-10-06.** 27 files verified present on the consortium drive and deleted locally (his 2017 LULC vintage, the 2015 and 2020 WorldPop years, the superseded PA and road variants, the duplicate correspondence layers, the unused expenditure workbook, which his repo also carries), and the construction evidence moved to `provenance/` and held deliberately (not `author_drive/`, which the gates read as an author's reported answer, and these are inputs to his constructions): the airfare chain behind the staged matrix (`airfare_hub_pairs_raw.csv`, `airfare_2019.csv`, the jet-fuel PPI `WPU05720301.csv`, `crude_oil_historic_monthly_regional.xls`, `us_crude_oil_price_historic_quarters.xls`), the fuel script that pins the 100x defect (`clean_cost_per_distance_01_feul_price.R`), and the superseded archetype demand tables (`recreation_demand_params.csv`, `recreation_demand_params_global.csv`). The six LULC share rasters are read through the template row, the gate's generated-name allowance. ⭐ **16 CLOSED 2026-10-06.** The service now publishes six rasters as POGs through the shared seam (`recreation_{daily,tourist}_{site_visits,site_value,unmet_demand}_150sec.tif`): each flow raster is warped from its native 0.01 degrees onto the 150-arcsecond rung with sum-preserving resampling (`utilities.warp_raster_to_pyramid_sum`, pinned by a conservation test), registered beside the task that writes it, and distributed by the new `gep_results_distribution` task; all six validate with `hb.is_path_pog`, and the warp conserves the native sums to 4e-6. ⚠ The map totals sit above the country table by design: the site table's no-country row ($2.10bn daily, $61M tourist, sites on pixels outside any country id) is in the maps and not in the country account. **Open: 9 alone**: the three defect reports and the output request have not gone to him yet (the send-ready email is drafted, and an unsent draft counts as open). 9 closes when the email is sent and he replies, and his per-country output would also upgrade the entry from verified-by-construction to verified-by-replication.
18
Wildfires-fire_protectiontable arithmeticyesyesthe valuation yes, the coefficients no. The district-year panel is staged, 494 MB over 2010 to 2023, and the run reads it rather than any committed output: avoided burned area, damage per acre and the three GEP variants are all computed here. What is not ours is the regressions those coefficients come from, which are read from the source repo's committed results. The panel carries burned area split by human and natural cause and the human-modification index the third regression splits on, so refitting is work nobody has done rather than data we lack.Burned acres avoided because fires persist less where nature dominates, from a per-country regression of burned area on last year's, times a per-acre damage value. The quantity comes from a CSV, the district-year burned-area panel, with the coefficients from their fitted regression.Translated from R to Python, then refactored onto the library template and hazelbean conventions. Fixed: Kosovo (GADM XKO vs the account's XKX) and India's Z01 and Z07 fell out of the country join, leaving $34.09M attached to no country while still inside the total.three variants: -$22.4bn / -$1.3bn / +$16.7bnNo raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.The source repo's output for all 161 units, from their committed regression coefficients. ⚠ Same coefficients, so it tests the port.Yes, all 161 units, from their committed regression coefficients. ⚠ Same coefficients, so it tests the port.-
Values the burned acres that nature prevents. Computes avoided acres and their valuation from their committed regression coefficients, and reproduces the source repo's output for all 161 units. Three regressions give three totals because they ask three different questions. Baseline persistence regresses a country's burned area on last year's, which says nothing about nature at all: -$22.4bn. The cause difference compares how strongly nature-caused fires persist against human-caused ones: -$1.3bn. The area difference compares persistence where nature dominates against where people do: +$16.7bn. Two of the three come out negative, meaning nature makes fire damage worse rather than better.
⚠⚠ **DROPPED for this round** (Nfamara confirming Ken, group thread 2026-10-06, "as well as fire protection if I fully remember"): out of the October 31 submission, so the three-coefficient choice stops blocking the account; the state is kept for the round that picks it back up. Which of the three is the account's. Baseline persistence should not be: it does not isolate nature's role, so it cannot answer what nature protects. Between the other two, the area difference matches how the service is described, fires persisting less where nature dominates, and is the only one that comes out positive. That is an argument, not a decision, and it is not ours to make. Also: 89 of the account's 250 countries carry no value, and whether they are unvalued or dropped somewhere in the join has not been checked.
amber: examined, and at least one of the sixteen conditions is not yet verified. ⚠ **10 is unmet here** (no longer everywhere: erosion closed it on 2026-09-03, reproducing its published total to $11 in $18.24bn from an empty project directory). ⚠ **11 is unverified**: the base year is 2019 across every service, but the country list, the true-zero-against-missing rule and the shared parameters have not been checked service by service **11 is met as of 2026-09-01**: the published table is 250 rows on the account's list, with the countries the service has no value for recorded as NA rather than absent. It carried 159 rows before, and the total is unchanged.
19
Urban Cooling-local_climate_regulationreads a published valueyesyesno for the reported figure. The city-month valuations are ours, but the number the sheet shows is parsed out of a dollar column in a committed file.A city runs hotter than the countryside around it, because buildings and roads absorb heat that vegetation would have released as moisture. That gap is the urban heat island, and city trees and parks narrow it. The service is the air conditioning a city therefore does not run: the cooling energy avoided, per city and month, times the national electricity price, summed to countries. The quantity comes from a CSV of city-month valuations.Refactored onto the library template and hazelbean conventions. The valuation was ported from the author's v04 script, and the country value is summed from our own city-month files.$175.56bnNo raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.The committed FINAL, $14.19bn over 174 countries -- what the all-services sheet carries to the dollar, and the value the account takes. The lineage behind it is verified exactly: our $175.56bn matches the author's December 2025 table per country (168 of 174 to one part in a million, the rest within 49 cents of its rounded dollars), and that table IS the plain city sum before the v04 correction. What turns $175.56bn into $14.19bn is the correction itself -- the old global marginal-consumption slope divided out, each country's consumption per cooling-degree-day applied -- encoded verbatim in the module, but its two inputs (the IEA-CMCC 2019 CDD file, the v2_nkd energy workbook) are in nothing we hold, so the final cannot be recomputed; the staged energy CSV is a different vintage and does not validate them. The 2.5-to-766 country-varying factor is that correction's per-country consumption term, not a mystery.The lineage, exactly: the city kwh-times-price identity is exact, and the December 2025 table is our plain city sum per country. The committed final is NOT reproducible without the correction's two inputs, and until they land it is the carried value.-
Ours is $175.56bn across 177 countries -- the pre-correction city sum, which the author's own December 2025 lineage table equals. The account's figure is the corrected final, $14.19bn. Both are the same author's pipeline at different stages, not two measures of different things.
The v04 correction's two input files -- the IEA-CMCC 2019 cooling-degree-day file and the v2_nkd energy workbook -- AS USED IN THE FINAL RUN, so the committed $14.19bn can be recomputed. ⚠ The submission's Archive was re-searched 2026-09-05 and does hold a PROTOTYPE of the correction (`local_climate_regulation_gep_newMC.csv`, October 2025, now staged): per-country cdd and consumption-per-cdd whose own rows confirm the ported formula to the dollar (55 of 55 on both stages, value/1.71737 x cpcdd). But those factors are an earlier vintage -- applied to the December city sums they give $3.84T, not $14.19bn -- so the final run's factors are still not in anything we hold. `local_climate_regulation_gep_12_19_25_sanity_checking.xlsx` (also staged) is the December table beside an external CAS benchmark column, not the correction.
amber: examined, and at least one of the sixteen conditions is not yet verified. ⚠ **10 is unmet here** (no longer everywhere: erosion closed it on 2026-09-03, reproducing its published total to $11 in $18.24bn from an empty project directory). ⚠ **11 is unverified**: the base year is 2019 across every service, but the country list, the true-zero-against-missing rule and the shared parameters have not been checked service by service
20
Water Quality-water_qualitytable arithmeticyesyesthe dollar figure yes, the reported one no. We recompute nitrogen and phosphorus retention priced at treatment cost from the retention estimates, which gives `water_quality_gep_usd` at $638.34bn. The column the account reports, `water_quality_gep` at $655.91bn, is the committed international-dollar value merged in from their file, and the conversion between the two is the step we could not identify. The retention estimates underneath are an NDR-style model output we take as given, though InVEST NDR is installed.Nitrogen and phosphorus the landscape retains, restricted to the share of water reaching domestic use, times the per-kg cost of removing them at a treatment plant. The quantity comes from a CSV of NDR-style retention estimates, which is another model's output we do not rerun.Refactored onto the library template and hazelbean conventions. We could not find the original pipeline's code, but its committed intermediates carry the retained nitrogen and phosphorus in kilograms, the treatment price per kg and the domestic-water-use fraction beside the values, so the calculation could be rebuilt in Python from the inputs rather than reverse-engineered from the answer.$638bn USD. $655.91bn international dollars.No raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.The committed intermediates for 178 countries. ⚠ Same lineage. The retained N and P quantities are modelled elsewhere and taken as given, so this checks the valuation and not the science.Yes, the committed intermediates for 178 countries. ⚠ Same lineage, so it tests our port rather than the science.-
Values the nitrogen and phosphorus that land keeps out of the water, priced at what removing them at a treatment plant would cost, $638bn. Reproduces the committed intermediates for 178 countries. How much N and P the land retains is modelled elsewhere; we take those quantities as given and value them. The $655.91bn international-dollar headline is not ours, and we now know why no factor recovers it.
⭐ **The method is now FOUND in full (2026-09-06)**: `water_quality_international_dollars_2019_method.docx` on the drive (Heman Lohano and Haku Bo, dated 2026-08-09, now staged beside the service data) specifies every step -- observed treatment costs harmonized to 2019 local prices, divided by the WDI GDP-PPP factor (PA.NUS.PPP), a benefit-transfer regression ln(cost) = alpha + beta ln(GDP per capita in international dollars) per nutrient with Duan's smearing correction, predicted per country, times retained quantities. Every named input is public EXCEPT the observations: the folder's Scopus and WoS files are the literature SEARCH (130 papers with DOIs), not the extracted per-study costs, so the extraction table is the one missing piece and the ask now has names on it. ⚠ A vintage question comes with it: the committed international-dollar column is dated 2025-11, nine months BEFORE this method was written, so the account's headline likely predates the documented procedure -- worth asking whether the column will be restated on it. Also the account's currency decision between market dollars and international dollars, the purchasing-power unit in which one dollar buys in each country what it buys in the United States. And the four nitrogen coefficients for an InVEST NDR biophysical table: load_n, eff_n, crit_len_n and proportion_subsurface_n.
amber: examined, and at least one of the sixteen conditions is not yet verified. ⚠ **10 is unmet here** (no longer everywhere: erosion closed it on 2026-09-03, reproducing its published total to $11 in $18.24bn from an empty project directory). ⚠ **11 is unverified**: the base year is 2019 across every service, but the country list, the true-zero-against-missing rule and the shared parameters have not been checked service by service
21
Air Filtration-air_filtrationtable arithmeticyesyesnot yet. The workbook gives us the deaths and the answer, and we multiply the deaths by a value of a statistical life read from its own source, then check we recover the workbook's answer. That value is ours in full now: the valuation prices every one of the 250 countries from the account's shared EPA life-years-lost panel, the file landslide_mitigation also reads. The deaths we could not until now: they come from process-based emissions, then InMAP, then health impact functions. InMAP is open source and on PyPI at 1.2.7, failing to install here only because its source distribution has no README, which is a packaging bug rather than a wall. So the workbook can be reduced to a deaths table, and eventually replaced.Deaths avoided because vegetation removes air pollution, times a GDP-adjusted value of a statistical life. The quantity comes from a CSV, the workbook's avoided-death counts, which are the output of an emissions, InMAP and health-impact chain we do not run.Refactored onto the library template and hazelbean conventions. The valuation multiplies the workbook's deaths by the value of life read from the account's shared VSL panel. Tests cover this channel and the dust one the sandstorm row reports, the panel join that prices each country by its own account label (so the workbook labelling both Serbia and Kosovo "Serbia" cannot misprice either), the error raised when the panel misses a country (full coverage is the panel's contract, so there is no fill rule left to test), and the check that refuses the join when the workbook stops lining up with the country list. The workbook carries no country code, only row order, so it can be joined only by position, and a silent reordering would give every country its neighbour's deaths.$17.48bnNo raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.The committed totals. ⚠ Same lineage. The avoided-death counts come from three models run in sequence elsewhere and are taken as given. ⭐ The all-services sheet (2026_08_31) carries this channel to within $0.8M of our run, and that gap IS the Serbia/Kosovo value-of-life swap read the workbook's way instead of correctly -- the sheet inherits the workbook's error, ours does not.Yes, the committed totals at the workbook's own prices, which the valuation now reports against rather than uses. ⚠ Same lineage, so it tests our port rather than the science.✅ **2026-10-07, Chiara: the shared value of a statistical life is the rebuilt EPA life-years-lost panel**, the same file landslide_mitigation reads, adopted for both mortality services. Both services' vsl rows in es_parameters now point at one file; the workbook's own VSL column prices nothing, and the run reports the size of the repricing instead -- all 250 rows move, the largest by 609 percent, the fallback countries most, because the panel's per-country transfer replaces the workbook's global-average fill. Deposition moves $17.81bn to $17.48bn, dust $595.36bn to $567.71bn (Yemen $5.0bn to $22.3bn). This closes the C18 gate finding and condition 11's shared-parameter clause for both mortality services, and it settles the Serbia-and-Kosovo pricing in `need` as a side effect, because the panel joins on the account's own labels rather than the workbook's names.
Values the deaths vegetation prevents by taking pollution out of the air, $17.48bn at the shared panel ($17.81bn at the workbook's own prices, which the committed totals carry). The avoided-death counts are the deposition channel of the drive's workbook: deaths avoided because vegetation captures dry pollutant out of the air. They come from three models run in sequence: process-based emissions, then InMAP, then health impact functions. None is set up here, though InMAP itself is open source. We do not rebuild it and take its counts as given.
Four things. **Serbia and Kosovo are swapped in the workbook**, which labels both rows Serbia: the row that is Serbia carries Kosovo's value of life, 2,288,310, and the row that is Kosovo carries Serbia's, 2,184,433. We read them the right way round from the table, so the account is correct and the workbook is not. Macao and Palestine are priced per country in the workbook, at 10,396,302 and 1,662,995, but appear nowhere in the table, so those two values have no source we hold. Which currency year the table is in, since our accounts are 2019 constant USD and a different base would rescale every mortality total. And an ISO3 column, because the table keys on a slugged country name and thirteen countries need a hand-written alias to match. Separately, what emissions inventory and meteorology a global InMAP run needs, which is what would let us produce the deaths rather than read them.
amber: examined, and at least one of the sixteen conditions is not yet verified. ⚠ **10 is unmet here** (no longer everywhere: erosion closed it on 2026-09-03, reproducing its published total to $11 in $18.24bn from an empty project directory). ⚠ **11 is unverified**: the base year is 2019 across every service, but the country list, the true-zero-against-missing rule and the shared parameters have not been checked service by service
22
Sandstorm / Dust Storm Prevention-air_filtration (dust channel)table arithmeticyesyesnot yet, the same three models as air filtration produce the dust deaths, and the same answer applies.Deaths avoided from dust storms, times the value of a statistical life. The quantity comes from the same workbook's dust-death counts, the output of a chain we do not run.There is no separate module. One workbook carries two death columns, and the air filtration module values both: deposition becomes air filtration, dust becomes this. Same code, same tests, same value of a statistical life; only the column differs.$567.71bnNo raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.The committed totals. ⚠ Same lineage. The avoided-death counts come from three models run in sequence elsewhere and are taken as given. ⭐ The all-services sheet (2026_08_31) carries this channel under the column name `Storm Mitigation` (beside River Flood Mitigation and Coastal Protection, so easily misread as coastal surge), at $595,358,516,620 against our $595,356,350,701 -- and the $2.17M gap IS the Serbia/Kosovo value-of-life swap read the workbook's way instead of correctly ($2.16M predicted from the death counts, the rest rounding).Yes, the committed totals at the workbook's own prices, which the valuation now reports against rather than uses. ⚠ Same lineage, so it tests our port rather than the science.✅ Priced at the account's shared VSL panel as of 2026-10-07, the decision recorded under Air Filtration (one module, one workbook, one panel): $595.36bn moves to $567.71bn, the fallback countries moving most (Yemen $5.0bn to $22.3bn).
Values the deaths vegetation prevents by holding windblown dust down, at the account's shared VSL panel, $567.71bn ($595.36bn at the workbook's own prices, which the committed totals carry), reproducing the committed totals. Those death counts come from the same three models as air filtration's and are taken as given: nothing we hold rebuilds them.
The same as air filtration. And whether this magnitude is expected. The dust value is 33 times the air-filtration value.
amber: examined, and at least one of the sixteen conditions is not yet verified. ⚠ **10 is unmet here** (no longer everywhere: erosion closed it on 2026-09-03, reproducing its published total to $11 in $18.24bn from an empty project directory). ⚠ **11 is unverified**: the base year is 2019 across every service, but the country list, the true-zero-against-missing rule and the shared parameters have not been checked service by service
23
Hydropowerhydropowerwater_supplytable arithmeticyesyesyesCWoN reports hydropower as an asset: the whole future stream of rents, valued today as one number. The account wants the year's service instead, so that asset is divided by the annuity factor at 4 percent over 100 years, which is 24.5. A country with $1bn of capitalized hydropower wealth therefore contributes $40.8M a year. Same stock-to-flow step as carbon's rental. The quantity comes from a CSV, the CWoN hydropower wealth table.Refactored onto the library template and hazelbean conventions. The method behind the committed output was not documented, so we worked it out and implemented it. Two fixes: the reported figure had been blanking 17 countries, and two spellings of the same country in the AQUASTAT file were both matching, so those countries were counted twice.$146.08bnNo raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.The committed anchor, $144.68bn over 95 countries, reproduced by the reference-matching variant. ⚠ Same lineage.Yes, the committed anchor of $144.68bn over 95 countries, by the reference-matching variant. ⚠ Same lineage, so it tests our port rather than the science. ⭐ **The group sheet's figure TRACES (2026-09-04), the first of the energy rows to do so**: its $144.60bn sits 0.06% from the reference-matching variant ($144,680,445,648 over 95 countries -- the CWoN rent with the reference's 17 unexplained country-blanks applied), a rounding-or-vintage gap, not a structural one. The account's $146.08bn differs from the sheet only by valuing those 17 countries rather than blanking them.-
Values one year's service from a country's hydropower wealth, as CWoN capitalized wealth over a 4 percent 100-year annuity: $146.57bn across 97 countries. The CWoN wealth table carries a figure for 112, and the rent calculation produces a value for 97 of them. The reference-matching variant reproduces the committed anchor, $144.68bn over 95 countries. The manuscript records $287.7bn from a direct-use method.
The decision which hydropower total is the account's ($287.7bn direct use or $144.68bn rent), and the reason 17 countries are empty in the reference
amber: examined, and at least one of the sixteen conditions is not yet verified. ⚠ **10 is unmet here** (no longer everywhere: erosion closed it on 2026-09-03, reproducing its published total to $11 in $18.24bn from an empty project directory). ⚠ **11 is unverified**: the base year is 2019 across every service, but the country list, the true-zero-against-missing rule and the shared parameters have not been checked service by service ⚠⚠ **11 exposed a double count, fixed 2026-09-01.** The table carried 253 rows because the water-use components were merged on `iso3_r250_id` and AQUASTAT names some countries twice -- 'Russia' and 'Russian Federation', 'Republic of Korea' and 'South Korea', 'Brunei' and 'Brunei Darussalam' -- so a left join fanned out and **Korea and Russia's hydropower was summed twice, $1,886,621,210 counted double**. The collapse guard for this existed and the components file on disk predated it. Separately, 19 countries the chain values -- the United States, Turkiye, Viet Nam, the United Kingdom, Iran, Tanzania, Cote d'Ivoire among them -- resolved to no r250 id and dropped out entirely, Cote d'Ivoire alone carrying $77.5M of agricultural water value. Both are fixed: 250 rows, no duplicates, nothing unmatched. ⚠ The hydropower figure moves $146,567,066,857 to $146,075,770,382 and all-sector water use $36.58T to $36.61T; the earlier pair was computed from a `hydropower_rent.csv` that predated the current code.
24
Water Usewater usewater_supplytable arithmeticyesyesyes. The valuation is ported and runs here: `water_use_gep_by_country_year` multiplies AQUASTAT water-use efficiency in dollars per cubic metre by the withdrawal volume, for agriculture, industry and municipal alike, and the module cleans the AQUASTAT export itself on the way in. Their script (gep_wateruse_02_calc_gep_wateruse.R) sits in base data beside the inputs as the reference the port was written against. What is not settled is the attribution: the result is the gross economic value of water used, with no step turning it into nature's share.The **irrigation premium**, as of 2026-09-03. What an irrigated hectare earns above the same land rainfed, times irrigated area, times the natural-resource share of crop value added. The premium is the point: rainfed land earns rent too -- soil, climate, terrain -- and that rent would exist with or without irrigation, so only the difference is attributable to water. Quantities come from AQUASTAT (4555, the share of agricultural value added produced by irrigated agriculture, which is the `1 - Cr` term inside FAO's own CWUE formula; 4313, area equipped for irrigation; 4548, agricultural value added) and FAOSTAT (Land Use 6620, cropland area), joined on M49 codes rather than country names. The share is GTAP's land-and-water share of crop value added, 0.332. ⚠ SUPERSEDES the previous method, which multiplied SDG 6.4.1 back by withdrawal -- an indicator defined AS value added per cubic metre, so the product returned the value added it was built from rather than a value of water.Done and rebuilt twice over. The chain computes the denominators (named `..._value_added`), the irrigation premium, the domestic volumes net of desalination, and the two GEP columns: `irrigation_gep_from_premium` applies the rent share to the PREMIUM with negatives clipped, and `implied_raw_water_price` prices domestic cubic metres at what a cubic metre earns in agriculture. The rent share is `water_use_water_share_of_value_added = 0.332` in es_parameters; an explicit raw-water price overrides the implied one. A share outside [0, 1] and a negative price are refused. Tests pin the clipping, the implied price, the desalination floor and the account-year discipline.**$248.0bn** irrigation + **$95.6bn** domestic (hydropower separate at $146.08bn). The composite sums and the value-added denominators are in the body fields below.No raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.The committed anchor, $144.68bn over 95 countries, reproduced by the reference-matching variant. ⚠ Same lineage.Yes, the committed anchor of $144.68bn over 95 countries, by the reference-matching variant. ⚠ Same lineage, so it tests our port rather than the science.-
The median country premium at 2019 is $672 a hectare; across the world's irrigated area that is $701,436,392,250 of output that exists because of irrigation, and 0.332 of it -- $232,876,882,227 -- is the natural-resource share. Counting only countries with a positive premium gives $940.8bn gross and $312.4bn net of the share, a 6% spread, so the answer does not turn on that choice. ⚠ **45 of the 173 come out negative**, every one a country whose irrigated share of AREA exceeds its irrigated share of GVA, which forces it arithmetically; their median irrigated GVA share is 3.8% against a 7.7% area share. ⚠ The 0.332 is land AND water jointly, because no dataset endows water separately -- the premium fixes the denominator, not the share.
⚠⚠ **The ask, in one sentence: is a land-AND-water rent acceptable for this row, or must water be separated?** The premium isolates what irrigation adds -- only what an irrigated hectare earns ABOVE the same land rainfed is credited, a median $672 a hectare at 2019 -- but the share applied to it, GTAP's 0.332, is the share of crop value added going to land and water TOGETHER, because no dataset endows water separately from land. So $232.9bn is the natural-capital rent of what irrigation adds, not water's rent alone, and it is an upper bound on the latter.
amber, and the two halves of that are worth separating. **The CODE is in good shape**: ported, tested, both of the R chain's own outputs replicate, and since the 2026-09-02 rebuild the denominator and the answer are different columns with the share an explicit parameter. ⚠⚠ **The SERVICE has no number.** With no water share set the account publishes the value added of the water-using sectors and no GEP at all, which is the accurate state: the valuation is missing, not uncertain. A row that reported $1.06T would be reporting the gross value added of irrigated agriculture. ⚠ **10 is unmet here** (no longer everywhere: erosion closed it on 2026-09-03). ⚠ **11 is unverified.** ⚠ The hydropower component is a separate row and is unaffected: it is a genuine rent, $146.08bn, and `water_supply_gep` carries it alone
25
Extractive Energy-extractive_energyrescales a published rateyesyesno in the sense that matters. The World Bank publishes each fuel's resource rent per country and the module sums three of those columns. What we add is catching eight rows that carry another country's value, not a valuation.CWoN 2024's per-fuel resource rents -- `gas_rent_cd`, `coal_rent_cd` and `oil_rent_cd` from the public reproducibility archive -- read at the base year in current USD and summed per country. **Nothing is multiplied on our side**: the tables publish the finished rent, built upstream by CWoN's user-cost method as (price minus country extraction cost) times production. No lambda either, for the same reason it is absent from timber and hydropower: the figure IS a rent, so the share step already happened inside CWoN's construction.Refactored onto the library template and hazelbean conventions. The drive had the outputs but no script, so we wrote the read. Tests cover the three fuels and their sum, a country that appears in the coal table but not the other two (its total is its coal, not missing), and a country in none of the three (missing, not zero).$1.05TNo raster. The service works on country tables (it reads only CSV and Excel), so nothing multiplies a density by a cell area and the cell-area question does not arise. Verified 2026-08-26 by checking every read in the module.Theirs, $1,140.4bn committed against our $1.05T -- **and the group sheet's three per-fuel figures ARE the committed tables' totals** (oil $749.23bn, gas $237.83bn, coal $153.03bn; they sum to $1,140.09bn). The whole gap is eight rows in which a dependent territory carries its parent country's FULL rent: Christmas Island and Cocos each carry all of Australia's (the coal gap, +$39.9bn), Bouvet and Svalbard each carry all of Norway's (the gas gap, +$45.4bn), Tokelau carries New Zealand's, Western Sahara Morocco's, and Kosovo's duplicate overrides its own real coal value. Per fuel: oil +0.8%, gas +23.6%, coal +35.2%. Removing the eight leaves the committed tables at $1,045.71bn against our $1,048.91bn, a 0.3% residual.Yes for the read: a fresh run reproduces the committed per-fuel columns. ⚠ But the totals differ, $1.05T ours against $1,140.4bn committed, because ours is recomputed from the parts rather than read from the finished column.-
Values the gas, coal and petroleum rents the World Bank publishes, at 2019, one country one row, $1.05T. The committed tables total $1.14T because eight rows carry another country's full value.
Confirmation that the eight duplicated rows are a join error, and which total the account keeps. Is there a model that we should use instead?
amber: examined, and at least one of the sixteen conditions is not yet verified. ⚠ 9 is open: the eight duplicated rows and the $1.05T-against-$1.14T choice are asked and unanswered. ⚠ 10 is unmet here: no cold start has been run. The staged value raster is a declared input by the 2026-09-02 decision, so condition 2 is met on that reading.
26
Forestry (Timber)-timber_provisionraster arithmeticyesyesthe country figure, from a staged value raster that is an input. ⚠ **Decided 2026-09-02 (Chiara): the value raster is the input, and this service is not required to rebuild it.** Condition 2 allows that in as many words -- an author's raster staged in base_data is an input like any other.Roundwood production times price times the GTAP land factor share, minus per-pixel transport cost, summed to countries. The quantity is a staged value raster we sum by country, not one we build.Refactored onto the library template and hazelbean conventions. The country totals are now computed from the drive's value raster rather than read from its summary table, and tested against the committed output.$132.13bnEPSG:4326 geographic at 10 arc-second, summed flat with no cell-area weighting, and the file carries no units metadata. Measured 2026-08-26: the flat sum is $88.74bn over 265,210,379 cells and matches the committed output exactly, while area-weighting it would give $708.47bn, a ratio of 7.98 which is the value-weighted mean cell hectares. ⚠ The appendix documents the INPUTS as per hectare (yield in m3/ha, price per m3, a dimensionless GTAP land share), which makes a flat sum look wrong. The economics says otherwise: flat is about $42 per hectare per year of managed forest, which is an ordinary forest land rent, and the density reading is $337 and a global total larger than the whole forest-products industry's value added. So the raster is almost certainly already per cell and the code is right. What is undocumented is where the per-hectare chain became per-cell, and the appendix does not say.The committed output for all 166 countries, reproduced exactly. ⚠ It cannot settle the units question on its own, because it was produced by summing the same raster the same way. What settles it is FAOSTAT, from outside the pipeline -- see `decided`.Yes, exactly, for all 166 countries. ⚠ It cannot settle the units question, because we reproduce it by inheriting the same constant cell area.⚠⚠ **The units question is settled as of 2026-09-02, and summing flat is correct.** It could not be settled from inside the pipeline -- the raster carries no unit metadata and the committed output was produced by summing the same raster the same way -- so it was settled against the market, from FAOSTAT's own bulk release, now staged and pinned by a test.
$88.74bn. Sums the value raster to countries and matches the committed output for all 166 countries, $88.74bn. What we cannot rebuild is the raster itself: making it needs a forest-management mask saying which forest is available for harvest, and that mask is not derivable from the layers we hold.
The forest-management mask behind the value raster, or the code that builds it. And a decision on the factor share. Timber is the one service whose ecosystem share does not come from CWoN. Following Damania et al. (2023) it multiplies gross returns by the GTAP 10 land factor share for each of the 18 agro-ecological zones, so it does vary by zone rather than being one economy-wide number, but it is a different source and a different construction from the CWoN rental rate every other service uses. That matters because the account adds the services together, so the share attributable to nature should mean the same thing across them. ⚠ Switching is not a configuration change: no CWoN timber rent is staged anywhere in base_data. The CWoN files we hold cover crop, livestock, fisheries, renewable energy, extractive energy and non-wood forest products, and `ntfp/cwon_nwfp_value_per_ha.csv` is non-wood, a different quantity. CWoN 2024 does carry timber, as a land asset category beside agricultural land, forest recreation, non-wood forest products and forest water services, so the rent exists and the gap is that we do not hold the file. The two approaches are also closer than the source difference suggests: SNA and SEEA-CF count forest timber as an asset only where it can be logged commercially at a profit, which is the same restriction as the missing forest-management mask.
amber as of 2026-09-02, and **two conditions are open: 9, the ask, and 11.**
27
Floods-floodprocess model run hereyesFour of its six tasks, across three project directories. ⚠ An earlier version of this entry said two, which was wrong: it read one project directory and generalised, when `gep_flood_flow`, `gep_flood_valuation` and `gep_flood_gep` each hold a different task. `task_compute_service_flow`, `task_compute_flood_damages`, `task_compute_flood_gep` and `task_generate_maps_and_figures` have all run here. The two that have not are `task_prepare_flood_inputs` and `task_build_sda` -- which are exactly the two the author's RUN.md tells a reader to skip by copying in the staged Sections B and C, because rebuilding them turns a 3-hour run into an 11-hour one. So the unrun pair is the pair his own instructions say not to run, not a gap nobody noticed. ⚠ Neither has ever executed from a fresh project seeded from the template: two cold starts on 2026-09-01 both died in `task_prepare_flood_inputs` on a blank parameter.the damage yes; the ecosystem share not fully. ⚠⚠ The counterfactual amplification rasters are staged rather than recomputed: `_open_amp` reads them and, when they are absent, names `counterfactual/build_amplification_rasters.py` — a script that is not in this repository. The builder exists only in the author's copy on MSI, as `code/global_invest/flood/counterfactual/build_amplification_routed.py`. Until it is folded in, our GEP rests on 37 staged layers (about 100 GB) that our code can read and not rebuild, which is the same standing as erosion reading his USLE rasters. ⚠⚠ **The whole tree ran here on 2026-08-30 and 2026-08-31** (MSI jobs 17529966 and 17589055), so flood is no longer among the services we hold and have not run, where stormwater and air filtration still sit. The MSI setup that needed doing is done: the run writes to /projects/standard/jajohns/shared/gep_flood with its machine-specific inputs in that project's input/. ⚠ `gep_calculation` still reads his per-country export as an interim, so the account carries his $11.40bn rather than one we derived; 17589055 is the first run that could replace it.Flood depth by return period, through JRC depth-damage curves, times asset value per pixel, integrated into an expected annual damage. Five lettered sections, one task each.Refactored onto the library template and hazelbean conventions. Every step of the flood calculation was rewritten as a function.$112.78bnWeb Mercator (EPSG:3857) at 537.23 m, which is neither the shared pyramid nor equal-area. The damage pass used to give every cell one constant 288,615 m2, the equator value, while true ground area falls as cos squared of latitude to 14.43 ha at 45 degrees and 1.93 ha at 75; weighting by country latitude moves the total about -28 percent. **Fixed in code on 2026-08-26 (`6dadedf`)**: each row's latitude is transformed to WGS84 and the cell area computed from it, so a cell now carries its own ground area. ⚠⚠ **Corrected 2026-09-02, and the correction runs the other way: the published numbers do NOT carry the equator constant, and this entry said they did.** The author's own `flood_tasks.py` carries `VAL_LATITUDE_CORRECT_AREA = True` at line 1124, reads it from `p.flood_latitude_correct_area`, and applies `mercator_area_scale` in the same damage-pass block ours does -- ours is his code with that module constant made a parameter. So both sides scale by cos squared of latitude and the outputs on both sides are corrected. This was found by asking why our run agrees with his committed table **to the cent at high latitude**, where the correction is 2x at 45 degrees, 4x at 60 and 8.55x at 70: Sweden, Norway, Finland, Russia and Canada all match to $0.00, which is impossible if one side corrects and the other does not. The agreement is the evidence the correction is on, not evidence it is missing. What `6dadedf` did on 2026-08-26 was restore parity with him after the fold-in, not diverge from him. The SDA layer is built from ESA-CCI, natively EPSG:4326 at 0.002777778, which IS the pyramid. ⚠ Corrected 2026-08-31: Section A does not reproject it out. `flood_lulc_path` reads `lulc_esa_2019_int_reproj.tif`, EPSG:3857 at 537.23 m, a copy reprojected before it was staged, and Section A warps the JRC depth rasters ONTO that grid. So the pyramid is left upstream of this repository, in one input, and everything downstream inherits it because the LULC file defines the reference grid.The author's own committed table, `flood_gep_for_merge_v2_2024hazard.csv`, the one he names as the file to join against the other services. Staged in base_data with his full 21-column account and both of our run's variants, and pinned by a test as of 2026-09-01. It agrees **to the cent, country by country**: 250 of 250 join, largest absolute per-country difference $0.000000, totals $11,403,596,548.37 against his $11,403,596,548.35. ⚠ One country differs and the test names it rather than hiding it in a tolerance: Iceland is NaN in his table and 2.1 cents in ours, which is the whole of the 162-against-163 positive-country count. ⚠⚠ Same lineage: the module is his pipeline with our path handling and ProjectFlow wiring, so this agreement was close to guaranteed. It is a build test -- it catches our refactor breaking his arithmetic and says nothing about whether the arithmetic is right.Yes, and now on the number that matters rather than only its input. Our run gives $11,403,596,548 against his published $11.40bn, 0.032%. ⚠ Same lineage: the module is his pipeline with our path handling and ProjectFlow wiring, so reproducing him was close to guaranteed and this is a build test rather than an independent replication. Both his delivered variant and the waterkept variant are staged in base_data so the comparison is re-runnable.The country boundary is the account's own layer as of 2026-09-01, `cartographic/ee/ee_r250.gpkg`, not the author's staged `country_boundary_r250_with_iso3.gpkg`. What had blocked the switch was step4D taking `region_wb` off the geometry: the account's layer carries iso3 id, label and name and no region, so the export failed on it. Step4D takes the region from the shared country table now, and the layer resolves 250 rows with `pick_iso3_column` returning `iso3_r250_label`. ⚠ Against the r264 correspondence that detector returns `adm0_a3`, Natural Earth's code rather than the account's, and 264 rows for 250 countries -- so the r250 layer is the one to point at and a test pins all three facts. The parameter now carries that path in the template rather than being left blank for each machine to answer differently, which is how it came to be the author's file.
**$11,403,596,548 across 250 rows, positive in 163**, from our own end-to-end run on MSI including the counterfactuals (job 17648214, 6h50m, completed 2026-08-31). Against the author's published $11.40bn that is 0.032%, which is his rounding to one decimal. `gep = ead_bare - ead_current` holds to 1.2e-07 across all 250 rows. The damage side reproduces too: ead $887,827,659,820, ead_nc $194,256,309,530, ead_ncplus $551,051,565,602. ⚠ The nc and ncplus columns are populated for 37 countries only; they are a separate diagnostic and the GEP identity does not use them. ⚠⚠ **The water treatment moves the headline more than anything else found in this account.** The run writes four variants and `gep_flood_bare` is $6.29bn on 4rp, $7.34bn on v1_2016, $11.40bn on v2_2024_waterremoved -- the delivered one -- and **$24.54bn on v2_2024_waterkept**. Keeping permanent water more than doubles the figure, and which variant the account intends is not written down anywhere we have found.
⚠ **Largely closed on 2026-08-28.** The repository is public, cloned, and folded into the library: the module is now his full pipeline rather than a reader, vendored so nothing imports the source repo, paths resolved from `flood_root_dir` in es_parameters, and the harmonization gate clean. `gep_calculation` reads his own per-country export, **$11.40bn over 162 countries**, into the shared table — so the account's number does not depend on us running anything. ⚠⚠ **If that ever changes, read the rerun warning in the method page first.** Seven MERIT flow-direction packages went missing at various points in his own work and every absence was silent: accumulation over a missing network writes nodata, amplification clips to 1.0, and the valuation reads 1.0 as *no change here* rather than *no data here*. Japan, Korea, Portugal and Kazakhstan returned zero service against $49bn of exposure, Nigeria, Chad, Cameroon, Niger and the CAR another $4bn, and nothing appeared in any log. Recovering them raised GEP 18.5 percent and then a further 16. His check catches regressions but not a package never downloaded, which was the original failure. The MSI setup is done: the run writes to /projects/standard/jajohns/shared/gep_flood with its machine-specific inputs in that project's input/. Still open on the science: the real upstream service-provision ratio raster, since the drive copy is byte-identical to the binary mask beside it. ⚠⚠ **What a cold start actually costs, measured 2026-09-01.** Sixteen flood parameters ship blank in the template. A genuine cold start has to run the two tasks that never have -- `task_prepare_flood_inputs` and `task_build_sda` -- which need those rows filled and their files reachable. His input tree is **129 GB**, and 117 GB of that is the counterfactual and counterfactual_mosaic amplification rasters that `_open_amp` reads and silently falls back from. Two cold starts on 2026-09-01 died on the first of the four missing tasks, one parameter at a time: `flood_lulc_path`, then `flood_depth_aligned_path`. Staging the LULC fixed the first and the second is the same shape, so the remaining thirteen will behave the same way. This is a staging decision rather than a bug, and it is why condition 10 is open here in a way it was not for crop or livestock. ⚠ The 17 other `p.flood_*` attributes that are absent from the template are set by tasks, not read from configuration, so they are not a gap.
amber as of 2026-09-01, and 10 is a recorded limitation rather than an unfinished task. **2, 12, 13 and 14 are met**: it reads the account's own country layer, the author's committed table is staged and pinned to the cent, nothing points into his repository -- the single mention is a `_source_url` row, so it could be deleted tomorrow and nothing here would break -- and no name in the service is defined and never used. **4, 6 and 8 are met**: the grid is stated (EPSG:3857 at 537.23 m, neither the shared pyramid nor equal-area, and that is stated too), the three gates pass, and the file set is the agreed one. **5 is met and is a warning**: the module is his pipeline with our path handling and ProjectFlow wiring, so reproducing him was close to guaranteed and the entry says so. ⚠ **10 is a stated limitation.** A cold start needs the four tasks that have never run, which need fifteen blank parameters filled and 129 GB staged, 117 GB of it the counterfactual amplification rasters. Decided 2026-09-01 to record it rather than stage it. ⚠ **1 is partial for the same reason**: the amplification rasters are an input we have chosen not to recompute rather than one we cannot produce -- a distinction the entry got wrong until 2026-09-01. `counterfactual_mosaic/` is 37 derived global amplification rasters and `counterfactual/` is MERIT Hydro tiles and flow direction, which are public; his RUN.md says they are built from rainfall and flow direction rather than from the hazard maps. So reproducing them is the two-week routing run his RUN.md describes, not a missing input. What our code demonstrably produces today is the valuation and GEP chain on his staged Sections B and C. **9 is met as of 2026-09-02**: a reply went to the author reporting that our run reproduces his committed table exactly, and nothing of ours is now waiting on him. The three threads that had been open are each closed by a different route, which the condition allows and which is recorded here rather than left to be inferred. The `global_invest.utilities` question he asked on 2026-08-28 stopped existing when his repository was slated for deletion, so it was deliberately not asked. The water variant was deliberately not asked either, for the reason condition 7 gives: he has reported about $11.4bn consistently, so the delivered variant is settled by his own reporting rather than by our question. And the two changes of ours that were untold — step 4D taking `region_wb` from the country table rather than the boundary, and the two ISO3 detectors sharing one column set — are told. **7 is met as of 2026-09-01**: the water variant looked open until it was noticed he has reported about $11.4bn consistently, in the 2026-08-27 email and in his committed table, so the delivered variant is settled by his own reporting. The $24.54bn waterkept figure is pinned by a test so it cannot drift, but it is not a question for him.
28
NTFP (non-timber forest products)-ntfpraster arithmeticyesyesthe reachable area yes, the rate no. The accessible forest is computed here, on the source module's own grid: ESA land cover at its native 300 m in Mollweide, screened by a five-year mean NDVI and by a 10 km dissolved buffer of the road and river geometries. The rate applied to it is CWoN's published value per hectare, which is the half we do not produce.CWoN's non-wood forest product value per hectare, applied to the forest within 10 km of a road or a river that also carries a five-year mean NDVI of at least 0.2. The country total therefore sits below CWoN's own, because the value notionally earned on forest nobody can reach is dropped rather than redistributed. The quantity is reachable forest area computed here from the land cover, the road and river geometries and the NDVI; the rate comes from a CSV. **The screen, plainly, is two filters on which forest hectares get valued.** (1) ACCESSIBILITY: only forest within 10 km of a road or river counts, because non-timber products -- mushrooms, rattan, nuts, medicinal plants -- have to be walked out; the reach is grown in metres on the account grid from the road and river lines. (2) VEGETATION: the cell's five-year mean NDVI must reach 0.2, so land the map classes as forest but which carries no live green canopy -- burned, degraded, sparse -- yields nothing. Both filters and both thresholds are the source module's own, pinned by tests.Refactored onto the library template and hazelbean conventions. The valuation is tested. The accessibility stage decides which forest people can reach: a 10 km buffer around every road and river, on an equal-area grid. Every step follows the source module's own choices, and a test pins the country stage to the aggregation that module performs.**$13.85bn** over 196 countries, computed on the account's own grid on MSI, 2026-09-03. The capped variant, the superseded Mollweide figure and the per-country cap amounts are in `decided` and `number`.The account's own: WGS84 at 10 arcsec, the grid `ha_per_cell_10sec.tif` defines, with cell area READ per cell rather than assumed. The 10 km reach is grown in metres per latitude band, so the metric distance the old Mollweide grid existed to provide is exact here too, and a test pins it (15 columns at 60N against 7 at the equator). The rasters are POG-able by construction; they are accessibility intermediates rather than results, which is the recorded C22 answer -- no per-cell value map is produced, the value is a table. ⚠ The stale Mollweide-era rasters this field used to flag are deleted (2026-09-03).CWoN publishes `forest_nontimber_annual_nwfp.dta`, which is the same service and is now compared against directly. In 2019 it is **$28,877,638,160 over 149 valued countries**, against our $13.85bn over 196. On the 149 both value, ours is $13,179,901,744 and theirs $28,877,638,160, a ratio of **0.456**; we add $672,652,004 across 55 countries their gap-fill drops. ⚠ The gap is the area, not the rate: they multiply by total forest area and we multiply by the forest people can reach, and dividing their value by our rate returns 3.79 billion hectares against our 1.44 billion on the same countries, a ratio of 0.377. The source author has no committed outputs, so this is a comparison against the rate's publisher rather than a replication of anyone's run.No, and there is nothing here to replicate: the source author has no committed outputs. What is compared against is the RATE's publisher rather than the source module — CWoN's own $28.88bn for the same service — and ours is 0.464 of it because we price the reachable forest and they price all of it. $13.85bn rests on our run alone.⭐ **Two of the row's three questions are OURS to decide, and the house precedents decide them -- neither goes to the group.**
The service has carried three totals, and each difference has one cause. **$22.40bn (the group's earlier figure) -> $14.07bn: the BUFFER, not the value.** The source workflow's own file (`ntfp2.py`) burns roads and rivers onto a **0.18-degree grid** -- cells about 20 km wide -- then thresholds distance at 0.09 degrees, with its own NOTE admitting 'approximate degrees for buffering'. Any 20 km block a road touches becomes reachable in full, so the reach is built from 20 km blocks instead of 10 km ribbons, and accessible forest inflates by roughly 60%. Replacing that with a true 10 km buffer around the actual line geometries -- the method as the script's own description states it -- gives $14.07bn. **$14.07bn -> $13.85bn (-1.6%): the grid**, Mollweide 300 m to the account's WGS84 10 arcsec, with cell area read from ha_per_cell rather than held constant. **Ours vs CWoN's $28.88bn: the SCREEN** -- same rate, they multiply by all forest, we by the 1.44bn reachable hectares. Their two code defects explain none of that gap; both push their total down.
⚠⚠ **Both of the questions this row used to carry are now answered from CWoN's own reproducibility package**, which ships `Do/forest_nontimber.do` alongside the outputs. Neither needs an author.
amber, and the distance to green is now entirely LIBRARY-wide rather than anything about this service. Service-specific conditions are met: the number is the account grid's own ($13.85bn, MSI 2026-09-03, every raster proving it holds data as built), 11 and 16 are met (the grid is the pyramid, area is read from ha_per_cell, the rasters are recorded intermediates), the headline is decided, the cap is deliberately refused with the variant published, the lambda question is answered, and no blocking asks remain -- the net-of-costs footnote is a confirmation, not a condition. What keeps it amber: ⚠ **10, unmet here** -- though no longer everywhere: erosion closed it on 2026-09-03, and this service's own cold start is queued (erosion closed it on 2026-09-03; this service's own cold start is queued as MSI job 17939275) -- and a sliver of 15, one unreferenced sidecar in the input folder.
29
Stormwater-stormwaterraster arithmeticyesyesnot yet. InVEST stormwater is installed and its run sits outside the task tree.Runoff the land cover holds back instead of sending to drainage, in cubic metres, priced at the cost of replacing the same capacity (currently a placeholder of 1). The quantity comes from an InVEST retention raster produced by a run outside this tree.Refactored onto the library template and hazelbean conventions. The step that totals retained water inside each country is in the repo.185.85bn m3 retained, superseded. ⚠ That figure is the staged per-country CSV, built before the ground-area fix of 2026-08-27; the corrected volume measured on the full raster is 122.30bn m3, and the run has not been repeated. No dollar total either way: the price is a placeholder of 1, so a dollar figure would be the volume relabelled.EPSG:3857 at 537.23 m, which is NOT equal-area, and it matters. The volumes come from InVEST, which builds them as precipitation times ONE pixel area taken off the transform (`pixel_area = abs(pixel_size[0] * pixel_size[1])` in `natcap.invest.stormwater`). On this grid that constant is 288,615 m2, the area a cell covers at the equator, so every cell further out is credited with more water than its ground can hold: 1.7 times at 40 degrees. **Fixed here on 2026-08-27**: the zonal sum weights each row by the cosine squared of its latitude, which is what `ha_per_cell` does for the geographic grids the rest of the library uses. Measured on the full raster, the retained volume falls from 185.87 to 122.30 billion cubic metres, **-34.2 percent**. ⚠ The staged per-country CSV still carries the old figure, so the run has to be repeated before any published number changes. The grid is projected only because InVEST requires one; nothing else here needs it.None. No author run exists to compare against. There is also no dollar total: the price is a placeholder of 1, so a valuation would be the 185.85bn m3 relabelled.Nothing to match: no author run exists, and there is no dollar total yet because the price is a placeholder.**Ground area.** The zonal sum now weights each row by the cosine squared of its latitude, so a cell carries its own ground area rather than the equator's. InVEST builds the volumes on one constant pixel area and has to, because it needs a projected grid; this run is EPSG:3857, where that constant holds only at the equator. Measured on the full raster the retained volume falls 185.87 to 122.30 billion cubic metres, -34.2 percent. ⚠ Not yet rerun, so the staged per-country CSV still carries the old figure.
185.85 billion cubic metres retained across 104 countries, ⚠ superseded by the ground-area fix under **decided**, which takes it to 122.30 billion pending a rerun. No author run exists to compare against, and no dollar total: at the placeholder price of 1 the value would just be the volume again.
⚠⚠ **DROPPED for this round** (Nfamara confirming Ken, group thread 2026-10-06): peak flow mitigation is out of the October 31 submission, so nothing below blocks the account; the state is kept for the round that picks it back up. A source for the price per cubic metre. ⚠ The method is no longer the open part: the authors' appendix, staged at `stormwater/input/peak_flow_mitigation_appendix.docx`, specifies the avoided cost of treating and pumping the water that would otherwise reach the works, framed around combined sewer overflows, and works an example at $2.75/m3. Our runs use a placeholder of 1.0, so what is missing is a defensible per-country rate rather than a decision about approach. ⚠ Also an urban mask, or the InVEST run restricted to urban extents. The service is defined on urban areas, the retention run we were given covers all land, and we hold no mask to restrict it, so the volume is larger than the service. ⚠ The same appendix confirms the quantity formula is `V_R = lambda x (1 - RC) x P x A` with **A the pixel area**, which is the term the 2026-08-27 ground-area fix corrects.
amber: examined, and at least one of the sixteen conditions is not yet verified. ⚠ **10 is unmet here** (no longer everywhere: erosion closed it on 2026-09-03, reproducing its published total to $11 in $18.24bn from an empty project directory). ⚠ **11 is unverified**: the base year is 2019 across every service, but the country list, the true-zero-against-missing rule and the shared parameters have not been checked service by service
30
Groundwater Rechargeregulatinggroundwater_rechargetable arithmeticyesyesthe valuation yes, the recharge no. The avoided-pumping arithmetic is computed here; the country mean recharge depths are the owner's InVEST Seasonal Water Yield output, read from the staged table and taken as given.Recharge valued as the pumping energy it saves: recharge keeps the water table higher, so every cubic metre withdrawn is lifted a shorter distance. Value = gamma x tariff / (eta x 3.6e6) x mean recharge depth x groundwater withdrawal -- the lift cost at the country's electricity price, times the year's head increment, times the year's AQUASTAT withdrawal.Built 2026-09-06 on the library template: functions open nothing, tasks own the IO, four unit tests pin the physics constant, the missing-input rule and the anchor, name aliases spell out every AQUASTAT and price-table join so no country drops silently.$6.80M in 2019 USD; $7.21M at the owner's 2021 tariffs, which is the sheet's figureNo raster read here. The recharge depths come from a raster model run elsewhere; what this module reads are country tables.⭐ The all-services sheet's column, REPRODUCED IN FULL: all 108 valued countries match to the cent, total $7,211,275.96 against the sheet's $7,211,275.95. The staged committed `ground_water_gep.csv` (2025-10) is an older input vintage and agrees for 21 of 109 countries; the sheet is the current construction and ours is it, end to end. ⚠ Same lineage on the recharge depths, so the agreement tests the valuation, not the hydrology.Yes, the sheet's column, to the cent, every country.Built despite the exclusion note (Chiara, 2026-09-06), so the group decides scope with the number and the method on the table rather than in the abstract. ⚠ The tiny magnitude is the METHOD'S OWN, not an error: valuing one year's recharge as a one-year marginal head increment prices the lift at a fraction of a cent per cubic metre. And the construction WEAKENS the double-count argument the exclusion rests on -- avoided pumping energy is an energy saving, not the water's end-product value, so it does not obviously overlap purification or the irrigation premium.
Values the pumping energy recharge saves: $7,211,275.96 across 109 countries (India $2.6M, USA $0.6M, Indonesia $1.2M). Five orders below neighbouring services by construction. The Jasechko groundwater-depth data staged by the owner suggests the natural extension: valuing the STOCK of avoided depth rather than one year's increment would scale the row by the ratio of water-table depth to annual recharge, typically two to three orders of magnitude.
The scope decision, now sharper than include-or-exclude: (a) out on the double-count reasoning -- then the sheet's column should go; (b) in as marginal pumping savings -- then $7.21M stands and the account owns its smallness; (c) in as the stock of avoided depth -- a different, larger construction the owner's staged data could support. Condition 10 is minutes once blessed.
amber: built and run 2026-09-06, the sheet's column reproduced to the cent in every country, but the scope decision is the group's. ⭐ Condition 10 CLOSED 2026-10-02: a cold start from an empty project directory reproduces $7,211,275.96 to the cent at the owner construction. **Currency harmonized 2026-10-03**: the published table now deflates the 2021 tariffs to 2019 USD through the account's one CPI series ($6,803,550.52); the sheet remains the owner construction, reproducible by setting the deflation year to 2021
31
Fuelwood---no-------Not in the library yet, so there is nothing to match.-
The drive folder is empty.
Should we include it? ⭐ Partly unblocked by the CAS submission (2026-09-12, staged at `base_data/global_invest/cas_submission_2026_09/fuelwood/`): methodology, code and input/output definitions as four documents (Yunong Yao, 2026-09-06) -- GFPM-harmonized FAOSTAT fuelwood volumes, 180 countries at 2019, valued at market price or substitution cost. ⚠ The output appendix states NO numeric result table is attached, so the method now exists and the number still does not; the ask is the per-country table (or the runnable inputs behind the code document).
n/a: no module, and the drive folder is empty, so there is nothing to port
32
Health-health_hypertension (physical) and health_depression (mental)raster arithmeticyesyes, both strands (2026-09-09)yes for the constructions (built 2026-09-09 from the appendices' named sources); the dose-response effect sizes, cost tables and the InVEST mental-health formulation are the owners' parameters, taken as given with sources beside them.PHYSICAL (hypertension, Tajibaeva-Bo-Kula appendix 2026-08): per urban pixel, WHO prevalence times the NDVI-driven risk reduction (Bu 2024 / Zhao 2022 odds ratio per 0.1 NDVI, converted at the country's prevalence) times the urban population aged 30-79, priced at the country's published treatment cost -- 20 countries carry a cost study, by construction. MENTAL (depression, Yingjie Li appendix 2025-11, the InVEST urban mental health model): per urban pixel, observed depression cases times the prevented-cases factor exp(-10 ln RR x NDVI) - 1 (Liu 2023 odds ratio 0.931 per 0.1 NDVI, converted the same way), priced at the societal cost per case (Christensen 2020, ⚠ USD PPP, mostly 2018) -- 32 countries carry a cost study. Both strands share the same three rasters: WorldPop 2019 1 km, the GHS-SMOD urban mask, and a MODIS 2019 annual-mean NDVI built via Google Earth Engine (the appendices use 300 m Copernicus and 30 m Landsat; the 1 km grid is the named deviation).Both modules built 2026-09-09 on the library template: functions open nothing, tasks own the IO, the raster work is one blockwise pass per strand, eight unit tests pin the odds-to-risk conversion, the dose-response conventions and the missing-input rule. The id rasterization was promoted to utilities and recreation now shares it. Nothing existed to port: the drive holds no pipeline for either strand.physical $148.71bn over 20 countries ($247.44bn over 187 with costs transferred where no study exists); mental $96.15bn in market 2019 USD over 32 countries at the method's stated scope -- the owner's PPP-2018 costs converted by country price levels and the account's one CPI series ($97.96bn before conversion).WGS84 throughout on WorldPop's own 1 km grid; the urban mask warped nearest onto it, the NDVI bilinear. No metric operation, so no conversion question arises.PHYSICAL: the appendix's Table 6, $104,664,962,067 over 19 countries. ⚠⚠ The drive's committed `health_hypertension_gep.csv` is that table MISALIGNED -- values sorted by country name pasted against labels sorted alphabetically, so 7 of 19 countries carry a neighbour's value (Nigeria shows Poland's $6.86bn); verified exactly, total unchanged. The all-services sheet's column ($106.65bn over 13) is a third, earlier vintage matching neither. MENTAL: the author's `high resolution` file, $159,602,811 over 32 countries, which IS the sheet's column to the cent; a `low resolution` variant carries $167.3M; the committed per-country CSV is an unfilled template stub.PHYSICAL: the level and rank, not the file -- our run lands 42 percent above the appendix with log-correlation 0.989 over the 19 shared countries (Nigeria and Zimbabwe within 6 percent; the gap concentrates where NDVI resolution and the wider SMOD urban mask bite: China 1.61, Greece 1.72, Kenya 3.7). Ghana, which they priced but never valued, comes out at $36.6M. MENTAL: deliberately not an anchor -- our full-scope run is 370 times the author's file at the median country (USA 835, Germany 405), ⭐ which MEASURES the scope question: their run covers roughly a quarter of a percent of the urban population its own cost countries hold, i.e. a city sample, undocumented which.Built both strands at the methods' stated scopes with every parameter in es_parameters (Chiara, 2026-09-09), so the group decides with numbers on the table: the physical strand's coverage question (20 countries is the price data, not the method), and the mental strand's scope question (city sample or national urban populations -- the answer moves the row from $0.16bn to $98bn).
Values what urban greenspace saves in illness: **$148,706,081,307** of avoided hypertension treatment (China $69.7bn, USA $66.3bn -- the per-case costs of $3,394 and $9,529 dominate) and **$97,960,172,780** of prevented depression at societal cost over the 32 cost countries (USA $51.1bn, UK $10.3bn, Australia $9.8bn; 64.5M prevented cases). ⚠ The two strands overlap conceptually (same greenness, comorbid outcomes) and the mental costs are USD PPP -- neither should be added to the other or to the account without those two decisions.
For the physical authors: the committed CSV's sort misalignment (re-export Table 6); which vintage the sheet's $106.65bn is; and whether our cost transfer matches their planned extrapolation -- the extended column prices every country by the ln-ln fit of cost on GDP per capita over their 20 studies (R2 0.32, Duan smearing, observed costs kept), giving $247.44bn over 187 countries. For Yingjie Li: the run's spatial extent (our measured 370x gap says a city sample); which of the two variants is blessed; PPP against the account's 2019 USD. For the group: whether the zero-vegetation counterfactual (physical) and the all-built counterfactual (mental) are the accounting the GEP wants, and how the two strands avoid double counting each other.
amber, both strands: built, run and tested 2026-09-09, the physical strand rank-anchored on the appendix (0.989) but 42 percent above its level on named deviations, the mental strand deliberately unanchored until the author's scope is known. ⭐ Condition 10 CLOSED for both strands 2026-10-02: cold starts reproduce $148,706,081,306.76 (and the extended $247bn column's fit statistics) and $97,960,172,780.38 with 64,530,894 prevented cases, all to the cent
33
Pests-pest_controltable arithmeticyesyesyes for the construction (built 2026-09-08 from the appendix's named sources); the effect sizes, yield ratios and price premium are the owner's parameters, taken as given with their sources beside them.Organic agriculture only, by design: a proportional yield benefit from biological control (Boldorini et al. 2024, the one meta-analysis their systematic search surfaced; effect sizes for cereals, for vegetables-with-oilseeds-and-pulses and for fruit-and-stimulants, every other FAO group zero), times organic production (FiBL organic area times FAOSTAT conventional yield times an organic-to-conventional yield ratio re-estimated from the Ponisio et al. 2015 pairs), times an organic producer price (FAOSTAT conventional price times an organic-to-conventional price ratio from USDA GATS trade unit values). ⚠ Lambda is 1 by design -- the full value is attributed to nature, unlike most other rows. Conventional agriculture is excluded on the stated ground that a marginal biocontrol benefit under synthetic pesticides is not quantifiable (Dainese et al. 2019). The owner's estimate is a Monte Carlo mean; the appendix (2026-08-21 vintage, Sidemo-Holm, Miller, Sylla) says 1,000 iterations in one paragraph and 10,000 in the next.Built 2026-09-08 on the library template: functions open nothing, tasks own the IO, five unit tests pin the benefit convention, the missing-input rule and the crop map's integrity, the published table carries all 250 countries. The drive's own `GEP_biocontrol.R` (January 2025) is the author's work-in-progress prototype with his own desktop paths, nine months older than the committed output and predating the appendix's method; the pipeline that produced the committed file is not on the drive.$10.34bn with the appendix's 38 percent organic price premium; $7.49bn without it (the value is linear in the premium).No raster anywhere in the construction; country-by-crop tables throughout.The committed `pest_control_gep.csv` (2025-10-20): $6,250,523,049 over 132 valued countries on the 250-row account list. ⭐ The all-services sheet's `Pest control` column IS this file to the dollar. It is a Monte Carlo mean from the missing pipeline, so the module anchors on coverage and rank (log-correlation 0.934, every committed country valued), not to the cent.The level and shape, not the file: our run at premium 1.0 gives $7.49bn against the committed $6.25bn with log-correlation 0.934 and no committed country missed -- so the committed file sits at the no-premium level of the same construction. Deviations named in the run log: FiBL aggregate rows with no FAOSTAT analogue excluded (11.3 percent of area, where the owner's matching claims under 0.1 percent removed), and 223 yields and 671 prices filled with global item medians where the owner imputes with mixed models.The construction (2026-09-08): the appendix's method deterministically (the Monte Carlo mean of a product of independent draws is the product of the means), parameters in es_parameters with sources beside them, the premium defaulting to the appendix's 1.38.
Values the extra yield natural enemies provide on organic cropland at the organic producer price: **$10,338,294,391** published at 2019 over 138 countries with the appendix's premium, $7,491,517,675 without it. Largest: China $3.9bn, France $1.1bn, USA $0.9bn, Italy $0.7bn -- organic vineyards, orchards and vegetables, since only organic area carries value. ⚠ Viet Nam is the one real anomaly against the committed file: their $291M is roughly nine times anything the staged FiBL 2019 areas support under any reading of the method.
Three asks. Whether the committed $6.25bn includes the organic price premium (the level says no; the appendix says the method has one). What produced Viet Nam's $291M. And the final pipeline with its inputs from William Sidemo-Holm (the Ponisio meta-regression, the imputation models, the run script), so the anchor can tighten past rank agreement. Plus the group's view on lambda equal 1 while the neighbouring crop rows carry a human-input adjustment.
amber: built and run, five tests green, but the two level questions (premium, Viet Nam) are the owner's to answer and the committed reference cannot be reproduced past rank agreement without the missing pipeline. ⭐ Condition 10 CLOSED 2026-10-02: a cold start from an empty project directory reproduces $10,338,294,391.30 to the cent, the premium-1.0 reading identical
34
Moisture Recycling (Regional Hydrology)regulatingmoisture_recyclingtable arithmeticyesyesyesThe WAM2layers country-to-country sink-fraction matrix (Bakels and Wang-Erlandsson, drive submission MREcosystemService) says what fraction of each country's 2019 precipitation evaporated from each other country's land. Each destination's irrigation and domestic water GEP is scaled by its terrestrial-origin share and distributed over source countries with the matrix, so the service credits the countries whose land sent the rain. ⚠⚠ A RE-ATTRIBUTION of the water-supply row, never an addition: source-side and sink-side totals agree by construction and the task raises if they differ.Built 2026-09-05 on the library template: functions open nothing, tasks own the IO, seven unit tests pin the orientation convention and the conservation, the published table carries all 250 countries.$127.7bnNo raster. The matrix is a 225-country table and the water values are country tables; nothing multiplies a density by a cell area.For the VALUE, nothing: the all-services table's `Rainfall pattern Regulation` column is empty (zero countries), and the drive submission's appendix (Bakels and Wang-Erlandsson) is a methodology plan whose monetary section is exploratory -- our construction implements its "combine with the water provision value" direction, the rare row where the library figure exists before any reference figure. For the QUANTITY, the owner's `countries_overview` workbook (staged 2026-10-03) is the independent check: our terrestrial-origin shares match its recycled-moisture fractions at correlation 0.992 over 213 countries; see replicated.No reference VALUE exists anywhere. ⭐ The QUANTITY side gained independent corroboration 2026-10-03: the owner's `countries_overview` workbook (added to the drive 2026-09-10, after our build) carries per-country recycled-moisture fractions, and our matrix's terrestrial-origin shares match them at correlation 0.992 over 213 countries, mean absolute difference 0.04 (max 0.12). The TRANSPOSED reading correlates at only 0.41, so the comparison also confirms the matrix orientation our build chose. The residual is NOT the lake split (tested: adding their lake fraction changes nothing) -- most plausibly an aggregation-vintage difference between their overview and the November 2025 matrices we stage; one line to the owner settles it.The construction (2026-09-05): re-attribute the water row's irrigation plus domestic GEP (the account's own $248.0bn plus $95.6bn) with the sink-fraction matrix; ecosystem share held at 1.0 in es_parameters pending the transpiration decision; the water table read as a staged snapshot of the 2026-09 water_supply run. Coverage: 12 destinations below the 0.5 degree tracking grid ($42.6M unattributed) and 28 account countries absent from the matrix ($1.1M) -- both named in the run log. The submission's companion fields are staged beside the matrix and deliberately unread by the valuation: `countries_source.csv` and `countries_sink.csv` (mm volumes) and `countries_source_fraction.csv` (where each country's own evaporation rains out), kept for the scenario and variability work the appendix plans.
Values the rain a country's land sends to its own and other countries' water use: **$127,682,011,050** published at 2019 (the attribution computes $127.96bn; $279M of it sits in the matrix's three small-island aggregates, CSID, IOSID and PSID, which no account country can carry -- logged by the run), of which $52.3bn serves the source country itself and **$75.3bn crosses a border as exported rain**. The withdrawal-weighted terrestrial share works out to 37 percent of the water value, consistent with the literature's 40-50 percent of land rain having a terrestrial source. Largest sources: India $25.5bn, China $20.6bn, Russia $6.5bn (mostly exported).
Three group decisions. The transpiration share (1.0 counts all terrestrial evaporation as ecosystem-mediated; the literature's transpiration fraction would roughly halve the row). The accounting rule: publish as a decomposition of water supply or as a row carrying only the $75.3bn transboundary part, but never added whole to water supply. And whether hydropower's water value should also be re-attributed (rain feeds the rivers too); the current construction re-attributes irrigation and domestic only.
amber: built and run, conservation asserted in the task, but the three decisions in `need` are the group's and no reference exists to compare against. ⭐ Condition 10 CLOSED 2026-10-02: a cold start reproduces the published $127,682,011,050.38 with every one of the 250 rows identical -- and caught a dormant defect doing it: the map-writing merge lacked the region id after the 250-row refactor, invisible warm because skip-existing never re-ran it; fixed the house way (the collapse frame merged in before the write)
35
Nature View Amenity-nature_view_amenitytable arithmeticyes (ported 2026-10-02)yesthe construction yes, reimplemented on the library template from the CAS method; the sample, the comparable groups, the UN Tourism inventory and every convention (the 3IQR rule, the uniform occupancy, the price vintage) are the owner's, taken as given with sources beside them.The hotel landscape premium, now attributed: it is the CAS team's (Baolong Han, Ouyang group; submission 2026-09-12 via Steve). Per country: hotel rooms 2019 times mean occupancy times 365 times the scenic-room share times the unit price difference, with the premium identified WITHIN mixed hotels -- scenic rooms against comparable non-scenic rooms in the same hotel and date, so brand, location and star rating difference out. 7,270 comparable groups, 5,213 retained after a two-sided 3IQR rule on the log price ratio; occupancy a uniform 0.539 from the 106-country UN Tourism 2019 table. The previously unsigned drive PDF is this construction.Ported 2026-10-02 onto the library template: functions open nothing, tasks own the IO, five unit tests pin the premium conventions, the Excel-inclusive 3IQR rule and the missing-input rule. The owner's own delivery (2026-09-12) was also run here as delivered: three Python scripts over an openpyxl-only package (comparable groups, premium rates, values), staged at `base_data/global_invest/cas_submission_2026_09/hotel_scenic/`. Our run reproduces their shipped results workbook to the cent ($59,728,312,716.92 both; largest per-country difference $0.000002). The raw 244MB room-price sample and the analysis-ready workbook ship with it. The Scenic Quality drive folder's US home-parcel proposal (Hockert, Braaksma, McWay) remains a different, uncomputed method.$46.09bn published in 2019 USD (the 2026 scrape premium deflated through the account's one CPI series); $59.73bn at the owner's scrape vintage, which is what the anchor holds atNo raster; country tables throughout, if it were built.The CAS results workbook: **$59.73bn over 124 valued countries**, a NEWER vintage than the sheet's $65.80bn, which is superseded. Both earlier flags moved in the new vintage: Aruba is properly in the table ($268.9M -- the old totals row dropped exactly its $254,981,476), and Saudi Arabia falls from $3.54bn to $1.79bn and out of the top ranks, consistent with a tightened room classification.Yes, TWICE and to the cent: their code run here reproduces their workbook exactly, and our independent reimplementation reproduces it again -- $59,728,312,716.92, all 124 valued countries to the cent, 5,213 kept groups matching their pipeline's own expected count. ⚠ The anchor also caught a port defect on the way: Namibia's alpha-2 code is the literal string NA, which pandas reads as missing -- the first run silently dropped its $43.1M and the per-country anchor flagged it. What remains unexamined is upstream of the staged workbooks: the comparable-group construction from the 244MB raw sample and the scrape itself.-
Values the room-price premium natural views earn: **$59,728,312,716.92** published at 2019 over 124 countries (USA $8.55bn, Italy $6.60bn, Japan $2.64bn; Saudi Arabia $1.79bn). Quantity is 2019 room-nights; the premium is scraped at the submission's booking dates, the owner's convention, named in the method.
The old asks are ANSWERED by the 2026-09-12 CAS submission (owner, sample, code, Aruba, Saudi). Remaining: confirm the sheet's column is replaced by the $59.73bn vintage; the sample's provenance one level deeper (which booking platform, which scrape dates, hotel coverage per country); and whether the group wants it folded as a library module -- the construction is country-table arithmetic on staged workbooks, a normal port.
amber: ported, run and anchored to the cent in every valued country. ⭐ Condition 10 CLOSED 2026-10-02: a cold start from an empty project directory reproduces $59,728,312,716.92, 124 of 124 to the cent. The deeper layers (group construction from the raw sample, the scrape's provenance) remain the owner's to document
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100