Skip to content

KB: frameworks/ner-drought/2026-06-03.md (Claude draft, Opus-reviewed) - #488

Merged
t-downing merged 1 commit into
mainfrom
kb-ingest/frameworks-ner-drought-2026-06-03.md
Aug 3, 2026
Merged

KB: frameworks/ner-drought/2026-06-03.md (Claude draft, Opus-reviewed)#488
t-downing merged 1 commit into
mainfrom
kb-ingest/frameworks-ner-drought-2026-06-03.md

Conversation

@chd-ds-kb-steward

Copy link
Copy Markdown
Contributor

Auto-drafted frameworks/ner-drought/2026-06-03.md via headless Claude on the Max plan, then reviewed in place by Opus against the template + public sources (the same QA gate as the interactive ingest). The Opus review summary is below — use it to spot-check and merge. Worth confirming yourself: frontmatter conforms to the template, deployment/jobs match reality, source_repo/branch/sha, depends_on.


🤖 Opus pre-review

Both gates pass (YAML OK, links: clean, validity check clean). Here's the review summary.


Verdict: Ready to merge — the draft was unusually accurate on the hard numbers, but three factual claims were wrong and are now fixed; the remaining open items are genuine team questions, not page defects.

Checked (repo is public, so I cloned ocha-dap/ds-aa-ner-drought at iri-trend and verified against code, not prose):

  • source_sha / dating1073c22 is the branch tip (2026-07-30); 1a5fa3a = 2026-06-03, matching the version label; main last commit e6323b4 2025-03-28 "init" with no docs/. All commit dates from git log.
  • Candidate B (index.qmd) reproduced exactly from the committed render docs_quarto/index.html: N_ABOVE=3/N_BELOW=5, 1998–2025 (28 yrs), forecast arm 5 yrs (2001, 2006, 2011, 2015, 2023), obs arm 5 yrs (2004, 2006, 2013, 2015, 2022), 8/28 → 1-in-3.6 (target 3.5), Aug (obs) ≤ -0.4830, and every 2026/2027 back-transformed threshold (Jan 28.5/27.8 … Jun 28.4/27.6). I also re-derived the −0.483 obs threshold independently from the bundled export. Caption "Trigger thresholds in fully detrended space" listing the raw Aug value: confirmed.
  • Candidate A (rolling_threshold_marimo.py) — sliders default forecast 35% / obs 15%; ref_window = 10 strictly prior years; k-th highest actual value (no interpolation); start_eval_year = 2001, rp_target = 3.5; scipy.stats.spearmanr (not corrcoef).
  • Deploymenthttps://ocha-dap.github.io/ds-aa-ner-drought/ is byte-identical (md5) to docs/index.html on iri-trend; quarto-publish.yml and its .disabled twin are identical files, _quarto.yml still output-dir: docs. Stray root PNGs confirmed byte-different from the exploration/ copies.
  • Endorsed-PDF comparisons against raw/frameworks/ner-drought/2024-10-24.txt: top/lowest 35% both arms; "chaque mois entre février et juin pour les prévisions, et en août pour le SPI" (quoted exactly in monitoring_period.note); CHIRP fallback at ≥20% missing stations by 7 Aug. Note the PDF frames its own target as ~1-in-3, while the repo's 3.5 is sourced to iri_trend.md ("3.5 ans (limite minimum CERF)").
  • 2022 activation — USD 9.5M confirmed twice: CERF AA Portfolio Update disbursements table (Niger / 2022 / drought / $9.5M, "Active since 2022") and allocation 22-RR-NER-54991 ($9,513,802, also hardcoded in the app). Corroborated by unocha.org and Anticipation Hub. activations: [] is correct for this dev version.
  • Conformance: all template fields + sub-fields present and correctly typed, all headings present (Per-country variants correctly deleted, NER-only), no placeholder text; apps/model_report URLs return 200.

Changed:

  • full_trigger.md "recommends no pair" was wrong. It selects sel_q = 0.55 (forecast top 55%) and sel_n_obsv = 4 (obs threshold −0.484) and renders a French per-year table on it. I reproduced that pair from the committed export: forecast 6 yrs, obs 4 yrs, 8/28 ≈ 1-in-3.6 — it hits its own n_target. Rewritten as a third distinct calibration in the discrepancy, Method §3, Key decisions and Sources summary. Also added: its committed outputs assume an 8-column export and the export now has 9 (JAS_SPI added), so it would not run as written.
  • The bad_year_rank/CERF cross-check was mis-dated as new. bad_year_rank + the trigger-status Spearman correlations already existed at afef129 (added 2026-05-29); the real afef129→1073c22 delta is only the indicator-margin correlation panel (547b36e) and the CERF RR column (1073c22). Corrected in the discrepancy, Method §1, and "Changes from previous version". Also noted the CERF series is a display column only, not fed into any correlation.
  • bad_year_rank "no reference anywhere in the repo" was too strong. There is a lead: a commented-out "Humanitarian Bad Years (rank)" / "Amount in US$" column rename in full_trigger.md, i.e. both series were once export columns and are now hardcoded — so the cross-check is a re-activation, not a new idea. Also pinned down the ranking's shape (31 yrs 1991–2021; only 16 carry ranks 1–17 with rank 6 absent; 15 filled with sentinel 32).
  • extra.version_label claimed 1a5fa3a is also the 2024-10-24 page's source_sha — it isn't (that page records afef129). Corrected.
  • prior_page_correction dates: detrending.md was last touched 2026-04-20 (not 2026-05-19); the app moved to 2026-07-30 (not 07-29).
  • Removed the "git history was not queryable" hedges (history now verified) and rewrote extra.resync_note to record what the QA pass actually verified.
  • Moved the dating correction out of discrepancies into extra (page fix, not a repo-vs-doc disagreement — matches this page's own precedent).
  • code_ref: dropped README.md (2 lines, no trigger content), added exploration/detrending_marimo.py (the grid-search the body cites).
  • Refreshed GH Pages verification date to 2026-08-01; enriched Historical activations with the CERF allocation code + linked sources; added an open question on full_trigger.md's 0.55/4 selection.

Still verify:

  • ReliefWeb blocks automated fetches from CI (403/202). I confirmed the "2026 Anticipatory Action Activation: Niger" URL and 20 Jan 2026 date exist, but could not re-confirm the WFP source / Flood disaster-type tags that justify excluding it. Recorded honestly in the page; a human should eyeball it once.
  • The Aug column's true provenance — ENACTS MON Jun–Jul SPI (marimo app) or CHIRPS-based August z-score (index.qmd)? Same column of the same export, contradictory labels; the endorsed PDF makes both plausible. Needs the team, not a code read. (data_sources deliberately left without CHIRP rather than asserting a contested source.)
  • bad_year_rank's actual methodology — the "Humanitarian Bad Years (rank)" spreadsheet lead narrows it, but it's still being used as external ground truth for candidate A without a citation.
  • The Azure blob export itself is not fetchable without credentials; all export claims were verified against the committed WASM copy (docs/public/iri_data.csv), which make_data.py dumps verbatim.
  • Judgement calls left alone: all_in: true carries only the schema default (should likely become false at endorsement, given W1 $5.25M / W2 $9.6M); the page slug is dated rather than the template's branch-name/draft-<label> form for unpublished versions.
  • Two sibling-page issues I could not touch (out of scope: edit-this-file-only): (1) 2024-10-24.md lists monitoring_period.months: [1,2,3,4,5,6,8] where the PDF puts decisions in Feb–Jun + Aug — this page's [2,3,4,5,6,8] is the better reading and the two should be aligned; (2) the CERF AA Update reports Niger co-financing of $6.1M against that page's cofinancing_usd: 4099659. Also, per INGESTION.md the GH Pages URL should gain a row in infrastructure/deployments.md.

Closes #455

@chd-ds-kb-steward chd-ds-kb-steward Bot added the kb-ingest Claude-drafted KB page awaiting review label Aug 1, 2026
@t-downing
t-downing merged commit ce376b6 into main Aug 3, 2026
1 check passed
@t-downing
t-downing deleted the kb-ingest/frameworks-ner-drought-2026-06-03.md branch August 3, 2026 19:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kb-ingest Claude-drafted KB page awaiting review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

KB drift: hub pages with moved spokes

1 participant