{"sources":[{"source_id":"hvstat","tier":1.0,"name":"HarvestStat Asia v0.1 and v0.2","citation":"Foley et al., StableBound (ESSD, in review), doi:10.5281/zenodo.21653283 for India; FAO GAUL 2024/2025 boundaries (CC BY 4.0); Geolocet India boundaries (attribution required)","license":"see package READMEs","retrieved":"2026-09-21/23","location":"4_ag/v0.1, 4_ag/v0.2"},{"source_id":"gmfd","tier":2.0,"name":"Hultgren et al. (2025) released crop panels, plus NASS extension of US maize, soybean, sorghum","citation":"Hultgren, A. et al. (2025) Nature 642:644-652; replication package gitlab.com/ClimateImpactLab/cil-ag-replication-package; Zenodo 14511340","license":"replication package terms","retrieved":"2026-08","location":"Adaptation/Hultgren/3_data/raw/*_gmfd_v1_ready.dta; 3_data/derived/*_extended_panel.parquet"},{"source_id":"faostat","tier":3.0,"name":"FAOSTAT QCL crop production, bulk normalized file dated 2025-12-31","citation":"FAO (2025) FAOSTAT Production: Crops and livestock products","license":"CC BY 4.0","retrieved":"2026-09-26","location":"2_data/raw/faostat"},{"source_id":"nino34","tier":null,"name":"Nino 3.4 from ERSSTv5 (PSL sst.mnmean.nc), 1991-2020 base; relative index of van Oldenborgh et al. (2021)","citation":"Huang et al. (2017) J. Climate; van Oldenborgh et al. (2021) ERL","license":"public","retrieved":"2026-09-11","location":"2_data/derived/nino34.csv"},{"source_id":"cal:user_pairs","tier":null,"name":"Hultgren-repository calendars, validated pairs (calendar.csv)","citation":"this project (stages revision 2026-09-13)","license":"project","retrieved":"2026-09-26","location":"Adaptation/Hultgren/2_costly_adaptation/manuscript/stages/stages_revision_2026-09-13/results/calendar.csv"},{"source_id":"cal:user_windows","tier":null,"name":"Hultgren-repository grain-filling windows","citation":"this project (97_build_windows.py)","license":"project","retrieved":"2026-09-26","location":"Adaptation/Hultgren/3_data/derived/*_fill_windows.csv"},{"source_id":"cal:riceatlas","tier":null,"name":"RiceAtlas v1","citation":"Laborte, A.G. et al. (2017) Scientific Data 4:170074, doi:10.7910/DVN/JE6R2R","license":"CC0","retrieved":"2026-09-26","location":"Adaptation/Hultgren/3_data/raw/rice"},{"source_id":"cal:giews","tier":null,"name":"FAO GIEWS crop calendar","citation":"FAO GIEWS","license":"CC BY 4.0","retrieved":"2026-09-26","location":"2_data/raw/giews_crop_calendar"},{"source_id":"cal:fao_cc","tier":null,"name":"FAO Crop Calendar tool","citation":"FAO","license":"CC BY 4.0","retrieved":"2026-09-26","location":"2_data/raw/fao_crop_calendar"},{"source_id":"cal:geoglam","tier":null,"name":"GEOGLAM Crop Monitor for Early Warning sub-national calendars v1.4","citation":"GEOGLAM Crop Monitor, Zenodo 18763008 (2026-02-24)","license":"CC BY 4.0","retrieved":"2026-09-26","location":"2_data/raw/geoglam_calendar"},{"source_id":"cal:asap","tier":null,"name":"JRC ASAP GAUL1 crop calendar (2018)","citation":"European Commission JRC ASAP","license":"EC reuse (CC BY 4.0 equivalent)","retrieved":"2026-08-24","location":"Adaptation/Hultgren/3_data/derived/calendars_asap.csv"},{"source_id":"cal:hvstat","tier":null,"name":"HarvestStat season calendar v0.2","citation":"HarvestStat Asia package","license":"see package","retrieved":"2026-09-23","location":"4_ag/v0.2/season_calendar_asia_v0.2.csv"},{"source_id":"cal:hultgren_median","tier":null,"name":"Hultgren panel median planting and harvest dates","citation":"Hultgren et al. (2025) replication panels","license":"replication package terms","retrieved":"2026-08","location":"*_gmfd_v1_ready.dta"},{"source_id":"cal:ggcmi","tier":null,"name":"GGCMI phase 3 crop calendar v1.01","citation":"Jaegermeyr, J. et al. (2021) Nature Food; Zenodo 5062513","license":"CC BY 4.0","retrieved":"2026-09-26","location":"2_data/raw/ggcmi_calendar"},{"source_id":"geom:naturalearth","tier":null,"name":"Natural Earth 50m admin-0 countries","citation":"Natural Earth","license":"public domain","retrieved":"2026-09-26","location":"2_data/raw/naturalearth"}],"changes":[{"change_id":"H1","source":"hvstat","script":"06_hvstat_panel","change":"Nine country CSVs stacked into one schema","rule":"sha256 of each CSV checked against the package MANIFEST.json before use; every row kept","count":456858.0,"count_unit":"rows","status":"applied","rationale":"One table across the packages; the packages themselves are never edited","date":"2026-09-26"},{"change_id":"H2","source":"hvstat","script":"06_hvstat_panel","change":"Unit key","rule":"unit_key = ISO3 + ':' + stable_id","count":708.0,"count_unit":"units","status":"applied","rationale":"Distinct keys across sources while keeping the package identifier (also the atlas region id)","date":"2026-09-26"},{"change_id":"H3","source":"hvstat","script":"06_hvstat_panel","change":"Crop codes","rule":"Rice, paddy -> rice_paddy; Rice, milled -> rice_milled; Rice, brown -> rice_brown; Maize, Wheat, Soybean, Sorghum, Cassava -> lowercase codes; every other product -> slug of its name; product name retained","count":8.0,"count_unit":"staple names mapped","status":"applied","rationale":"Milled and paddy rice stay apart; other products keep their published name","date":"2026-09-26"},{"change_id":"H4","source":"hvstat","script":"06_hvstat_panel","change":"Vietnam season label joined","rule":"season_std replaces 'Summer Rice' with 'Autumn Rice' (Northern and Southern); season_name keeps the label as published","count":753.0,"count_unit":"rows","status":"applied","rationale":"The calendar gives both labels identical months and they never share a unit-year; the 24 September analysis made the same join","date":"2026-09-26"},{"change_id":"H5","source":"hvstat","script":"06_hvstat_panel","change":"Area and area basis","rule":"area_ha = area_planted_ha where yield_basis is planted (356536 rows) or area_harvested_ha where harvested (100221); where yield_basis is missing whichever area exists (101 rows) with area_basis recorded","count":456858.0,"count_unit":"rows","status":"applied","rationale":"One area column with its basis stated; yields on different bases are not comparable and the column says which","date":"2026-09-26"},{"change_id":"H6","source":"hvstat","script":"06_hvstat_panel","change":"Completeness flag","rule":"complete = area complete for the basis AND production complete; unknown where either is blank","count":456858.0,"count_unit":"rows","status":"applied","rationale":"One flag for 'every constituent unit reported'; incomplete sums are lower bounds","date":"2026-09-26"},{"change_id":"H7","source":"hvstat","script":"06_hvstat_panel","change":"Harvest year","rule":"harvest_year = year + harvest_year_offset from the season calendar: +1 for India 'Whole Year' (56286 rows) and the Japanese (1973) and Korean (42) winter seasons; 0 elsewhere","count":58301.0,"count_unit":"rows shifted","status":"applied","rationale":"The published year is a sowing-year label for those seasons; the ENSO windows need the harvest year","date":"2026-09-26"},{"change_id":"H8","source":"hvstat","script":"06_hvstat_panel","change":"Yield kept as published","rule":"yield_mt_ha used as is (t/ha); asserted equal to production/area to 1e-6 where positive","count":456858.0,"count_unit":"rows","status":"applied","rationale":"The package already recomputed yield from summed numerators and denominators","date":"2026-09-26"},{"change_id":"H9","source":"hvstat","script":"06_hvstat_panel","change":"Record correction","rule":"see source_corrections: East Java 2017 paddy area 13060464 -> 2285232 ha, yield 1.0 -> 5.715 t/ha; observation marked corrected=1","count":1.0,"count_unit":"rows","status":"applied","rationale":"A verified source error (BPS Table 2.17); the 24 September analysis and the atlas apply the same correction","date":"2026-09-26"},{"change_id":"H10","source":"hvstat","script":"packagers","change":"Corrections made by the packagers before delivery","rule":"Indonesia: zero-filled template rows for provinces before they existed dropped (14740), zero production with positive area set to missing (513), 2024 zero placeholders dropped, 2023 maize duplicate definition resolved, rice wetland/dryland components kept beside the total; Korea: polished wheat and rye duplicates left out, radish label change joined, field and greenhouse vegetables kept separate, 204 zero-production rows set to missing; all countries: late_reporting rows removed","count":null,"count_unit":"see package READMEs","status":"inherited","rationale":"Documented in 4_ag/v0.1/README.md and 4_ag/v0.2/README.md; not redone here","date":"2026-09-23"},{"change_id":"F1","source":"faostat","script":"07_faostat_panel","change":"Items and elements kept","rule":"item codes 56 maize, 27 rice (paddy), 15 wheat, 236 soya beans, 83 sorghum, 125 cassava fresh; elements 5312 area harvested, 5510 production, 5412 yield","count":42066.0,"count_unit":"rows","status":"applied","rationale":"The six staples of the project from a 545 MB file","date":"2026-09-26"},{"change_id":"F2","source":"faostat","script":"07_faostat_panel","change":"Yield unit","rule":"yield converted from kg/ha (the unit stated in the file) to t/ha","count":42066.0,"count_unit":"rows","status":"applied","rationale":"One yield unit across sources","date":"2026-09-26"},{"change_id":"F3","source":"faostat","script":"07_faostat_panel","change":"Areas mapped and dropped","rule":"M49 code -> ISO3 through pycountry; 42 of 235 areas dropped: regional aggregates, the China aggregate (351; China mainland 41 kept), dissolved states (USSR, Czechoslovakia, Yugoslav SFR, Ethiopia PDR, Sudan former, Belgium-Luxembourg, Serbia and Montenegro)","count":42.0,"count_unit":"areas dropped","status":"applied","rationale":"Only current states with an ISO3 code enter; aggregates would double count","date":"2026-09-26"},{"change_id":"F4","source":"faostat","script":"07_faostat_panel","change":"Missing values dropped","rule":"rows with a blank Value not kept; FAOSTAT flags (A official E estimated I imputed X international M missing) retained per element","count":null,"count_unit":"rows","status":"applied","rationale":"Missing is missing; the flag says how the kept values were obtained","date":"2026-09-26"},{"change_id":"F5","source":"faostat","script":"07_faostat_panel","change":"Year and season","rule":"harvest_year = FAOSTAT year (the calendar year of the bulk of the harvest); season 'annual'; no months","count":42066.0,"count_unit":"rows","status":"applied","rationale":"FAOSTAT's own convention; months come from the calendar sources","date":"2026-09-26"},{"change_id":"F6","source":"faostat","script":"07_faostat_panel","change":"Yield not equal to production/area","rule":"309 rows (0.8 percent) where the published yield differs from production/area by more than 1 percent kept as published and flagged error in QC","count":309.0,"count_unit":"rows","status":"applied","rationale":"FAOSTAT computes yield from unrounded inputs or different vintages; the fits exclude them","date":"2026-09-26"},{"change_id":"G1","source":"gmfd","script":"08_gmfd_panel","change":"Panels read and wheat split","rule":"six released .dta panels read in place; the wheat panel split by its crop column into wheat_spring and wheat_winter before deduplicating units (3510 of 3540 spring units also appear as winter units)","count":1327789.0,"count_unit":"rows","status":"applied","rationale":"The replication package's own structure; the panels are never written","date":"2026-09-26"},{"change_id":"G2","source":"gmfd","script":"08_gmfd_panel","change":"Unit key","rule":"unit_key = iso:adm1_id:adm2_id after hultgren_repro.gridagg.normalize_keys (India and Zambia keyed by admin names); uid kept","count":14064.0,"count_unit":"units","status":"applied","rationale":"The portable key that joins the package shapefile; uid has no meaning outside the panel","date":"2026-09-26"},{"change_id":"G3","source":"gmfd","script":"08_gmfd_panel","change":"Multi-season polygons","rule":"a polygon with two or three uids (17 maize polygons in Nicaragua; 77 rice in Sri Lanka and Vietnam) is one unit with that many seasons; seasons labelled planted_m<month> (188 series, 3725 rows), undated where the panel has no dates (38 series)","count":188.0,"count_unit":"series","status":"applied","rationale":"Keeps (unit, season) distinct without inventing season names the source does not have","date":"2026-09-26"},{"change_id":"G4","source":"gmfd","script":"08_gmfd_panel","change":"Yield unit","rule":"kg/ha -> t/ha","count":1327789.0,"count_unit":"rows","status":"applied","rationale":"One yield unit across sources","date":"2026-09-26"},{"change_id":"G5","source":"gmfd","script":"08_gmfd_panel","change":"India harvest year","rule":"harvest_year = label + 1 when the season's harvest month is June or earlier (the panel labels India by the July-June agricultural year); 12366 rows shifted; all Indian rows later excluded (see M1)","count":12366.0,"count_unit":"rows","status":"applied","rationale":"The authors' collapse_clim.do convention; documented by hultgren_repro.gridagg","date":"2026-09-26"},{"change_id":"G6","source":"gmfd","script":"08_gmfd_panel","change":"Season months","rule":"planting and harvest months from median_plant_date and median_harvest_date by the authors' day-of-year cutoffs; a season starting and ending in the same month becomes a twelve-month season (the authors' rule)","count":1327789.0,"count_unit":"rows","status":"applied","rationale":"The panel's own seasons; the calendar sources may later replace them (C1)","date":"2026-09-26"},{"change_id":"G7","source":"gmfd","script":"08_gmfd_panel","change":"Area","rule":"cropped_ha carried as area_weight_ha (a per-unit constant) and not as annual area; area_ha and production_t left empty","count":1327789.0,"count_unit":"rows","status":"applied","rationale":"The released panels have no annual area or production","date":"2026-09-26"},{"change_id":"G8","source":"gmfd","script":"08_gmfd_panel","change":"NASS extension appended","rule":"United States maize (57787 rows), soybean (32140) and sorghum (4756) county yields 2009-2025 from Hultgren/3_data/derived/*_extended_panel.parquet, yield_src = 'nass'; 94683 rows","count":94683.0,"count_unit":"rows","status":"applied","rationale":"Brings the US series to the present on the same units","date":"2026-09-26"},{"change_id":"G9","source":"gmfd","script":"08_gmfd_panel","change":"Rice basis unstated","rule":"crop code 'rice' with no paddy/milled basis; the merge's ratio against FAOSTAT documents milled rice in India (0.64) and brown rice in Japan (0.80)","count":178157.0,"count_unit":"rows","status":"applied","rationale":"The package does not say; the ratio is the evidence","date":"2026-09-26"},{"change_id":"G10","source":"gmfd","script":"08_gmfd_panel","change":"Rows without a yield dropped","rule":"panel rows with a missing yield not kept","count":null,"count_unit":"rows","status":"applied","rationale":"Only observed yields enter","date":"2026-09-26"},{"change_id":"C1","source":"calendars","script":"10_calendars / 09_merge_panel","change":"Season months replaced by ranked calendar sources","rule":"for 13877 of 56748 keys with source-native months the assigned planting or harvest month differs (531727 observation rows); 5260 keys (150030 rows) with no months are newly dated; 1060 keys moved by more than a month, all but 14 by RiceAtlas; plant_month_native and harvest_month_native keep the source months; harvest_year_offset is never changed","count":531727.0,"count_unit":"rows changed","status":"applied","rationale":"The user's ranking of 26 September 2026 (Hultgren-repository calendars first; RiceAtlas; FAO/GIEWS); see notes/merged_panel.md","date":"2026-09-26"},{"change_id":"C2","source":"calendars","script":"10_calendars","change":"RiceAtlas season matching","rule":"proper season names (aman boro aus kharif rabi maha yala) match by name whatever the months; generic labels (wet dry main off summer winter spring autumn) by nearest planting month within three months; RiceAtlas labels Thailand's May-planted main season 'Dry'","count":7764.0,"count_unit":"series","status":"applied","rationale":"Bangladesh's HarvestStat months start aman in March; RiceAtlas's Thai labels are swapped against the months","date":"2026-09-26"},{"change_id":"C3","source":"calendars","script":"10_calendars","change":"GEOGLAM season numbers","rule":"Rice 1/2/3 and Maize 1/2 translated with the archive README (Bangladesh Rice 1 boro 2 aman 3 aus; Sri Lanka 1 maha 2 yala; Thailand 1 wet 2 dry)","count":79.0,"count_unit":"series","status":"applied","rationale":"GEOGLAM numbers seasons by production rank","date":"2026-09-26"},{"change_id":"M1","source":"gmfd","script":"09_merge_panel","change":"Hultgren India excluded from the stacked panel","rule":"all tier-2 rows with iso3 IND left out of yield_panel (they stay in tier2_gmfd.parquet and in the tier-2 versus FAOSTAT comparison)","count":34940.0,"count_unit":"rows","status":"applied","rationale":"User decision of 26 September 2026: India is HarvestStat only because its stable groups merge the districts that split","date":"2026-09-26"},{"change_id":"M2","source":"all","script":"09_merge_panel","change":"Primary flag","rule":"for each country, crop family and harvest year the rows of the lowest-numbered tier with a yield are primary (HarvestStat 1, Hultgren 2, FAOSTAT 3); rice codes and wheat codes pooled into families for this rule only","count":1743527.0,"count_unit":"rows primary","status":"applied","rationale":"Follow a series across tiers without counting a year twice","date":"2026-09-26"},{"change_id":"M3","source":"gmfd","script":"09_merge_panel","change":"Suspect units flag","rule":"tier-2 rows of a country-crop whose area-weighted national yield is above 3 or below 1/3 of FAOSTAT's: Zambia, all five crops (ratios 2400 to 12000)","count":1864.0,"count_unit":"rows","status":"applied","rationale":"A units error in the released Zambian panel; rows kept and flagged","date":"2026-09-26"},{"change_id":"D1","source":"all","script":"11_database","change":"Database types","rule":"area_basis missing -> 'unknown'; complete -> 0/1/NULL; corrected -> 0/1; integer series_id assigned in a fixed sort; representative point per unit from the source geometry","count":1791773.0,"count_unit":"rows","status":"applied","rationale":"SQLite types and stable identifiers","date":"2026-09-26"},{"change_id":"Q1","source":"all","script":"12_qc","change":"Quality-control flags","rule":"fourteen checks written to qc_flags; no value altered; 19365 observations carry an error (15707 primary staple)","count":157857.0,"count_unit":"flags","status":"applied","rationale":"Exclusion is a fit-time decision; see notes/qc.md","date":"2026-09-26"}],"corrections":[{"correction_id":1,"source":"hvstat","iso3":"IDN","stable_id":"ID.ADM1.00013","product":"Rice, paddy","season_name":"Annual","year":2017,"field":"area_harvested_ha","supplied":13060464,"verified":2285232,"derived_fields":"yield_mt_ha recomputed as production_mt / area (5.715 t/ha); production_mt 13060464 unchanged","citation":"BPS, Environment Statistics of Indonesia 2020, Table 2.17, printed page 250 (https://unstats.un.org/unsd/envstats/Compendia/Indonesia_Statistik_Lingkungan_Hidup_2020.pdf, pdf page 287)","verified_by":"analysis_20260924/unit_analysis/verified_correction.json (24 September 2026)","applied_date":"2026-09-26","note":"The supplied area equals the production figure; the package's own README notes a source error in the East Java cell"}]}