Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions frameworks/mdg-storms/2024-12-13.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,9 @@ model_report: null
raw_extract: ["raw/frameworks/mdg-storms/2024-12-13.txt"]
# --- live system ---
operated_by: null
apps: []
surfaces: [] # no published site for this repo (analysis notebooks only); the retired `apps:` key was empty (D102)
# --- source repo & reconciliation ---
depends_on: [mdg-monitoring] # ds-aa-mdg-monitoring's daily IMERG rainfall check — the live implementation of the rainfall leg of the Annex's observational indicator (300mm/3-day threshold). Currently 🔴 DOWN per infrastructure/pipeline-registry.md (snapshot 2026-08-30).
depends_on: [mdg-monitoring] # ds-aa-mdg-monitoring's daily IMERG rainfall check — the live implementation of the rainfall leg of the Annex's observational indicator (300mm/3-day threshold). Currently 🔴 DOWN per infrastructure/pipeline-registry.md (re-verified 2026-09-07, still no successful run since ~11 April 2026).
source_repo: ocha-dap/ds-aa-mdg-storms
source_branch: main
source_sha: a99828b
Expand All @@ -73,7 +73,7 @@ discrepancies:
- "[stale] Notebooks 01.4–01.6 and 01.6.1 include Scenario 2 (64 kt, ~118 km/h) and Scenario 2.5 (hybrid 64 kt on land / 90 kt within 100 km) analyses. These were candidate designs; only Scenario 3 (≥90 kt / ≥166 km/h, within 100 km) was endorsed in the final PDF."
- "[conflict] The combined return-period notebook (04.0) computes the readiness RP from La Réunion RSMC *forecast* distances (MG_distance_km <= 100, max_wind_kt >= 90, lt_hour.between(72, 120)) — consistent with the PDF's 90 kt / 166 km/h / 100 km / 120-72 h readiness window — and finds **7 distinct qualifying storms across the 14 seasons** 2010/11–2023/24 (BATSIRAI, BELNA, EMNATI, ENAWO, FREDDY, GAMANE, GIOVANNA), which it reports as `14/7` = **~1-in-2 yr**, not the ~1-in-3 yr the PDF cites for Scenario 3 generally. NOTE the counting basis: the notebook divides seasons by *storms*, not by seasons-containing-a-storm — Batsirai and Emnati both fall in 2021/22, so only 6 of 14 seasons contained a qualifying storm and the season-frequency (the figure relevant to an all-in envelope) is nearer **~1-in-2.3 yr**. The action RP in the same notebook is computed from IBTrACS best-track *observations* (REU_WIND >= 90, SEASON >= 2001) with NO lead-time filter and NO explicit 100 km distance filter (points are pre-restricted only by a 100 km buffer spatial join, `buffer = 100` in constants.py) — i.e. a frequency-of-occurrence estimate (8 distinct storms across the 24 seasons 2001–2024 → ~1-in-3 yr, same storms-not-seasons basis), not the operational forecast-based action trigger (≤72 h, within 100 km) the PDF defines. So the PDF's headline '~once every three years' framing (Aperçu/Considérations principales) matches the notebook's *action* figure but not its *readiness* figure. The thresholds themselves are NOT in conflict (166 km/h / 100 km / 72–120 h vs ≤72 h match the PDF) — the disagreement is confined to the cited return period. IMPORTANTLY, the repo DOES compute the action RP under the PDF's exact forecast definition, in notebook **01.6** (not 04.0): `MG_distance_km <= 100 & max_wind_kt >= 90 & lt_hour.between(0, 72)` yields **10 distinct storms** (BELNA, BATSIRAI, BINGIZA, EMNATI, ENAWO, FREDDY, GIOVANNA, HARUNA, GAMANE, HELLEN) and prints 'The action trigger is met every **1.5** years.' — i.e. the exact-definition action RP is ~1-in-1.5 yr, roughly TWICE as frequent as the PDF's '~once every three years'. (01.6 also divides by an inconsistent denominator: readiness uses `df_rsmc['season'].nunique()` = 14 seasons, action uses `2024 - 2010 + 1` = 15; on a common 14 seasons the action figure is ~1-in-1.4 yr.) So the PDF's ~1-in-3 framing matches ONLY 04.0's loose IBTrACS-observation proxy, and neither of the two exact forecast-definition figures (readiness ~1-in-2, action ~1-in-1.5). Notebook 01.6.1 applies the same ≤72 h filter but computes no return period — it only cross-references the qualifying storms against CERF/EM-DAT impact data."
- "[gap] The observational indicator (IDP count and rainfall) described in the Annex of the PDF is explicitly noted as still being finalized at time of publication ('les équipes d'OCHA travaillent actuellement à la définition précise des critères'). This repo (ds-aa-mdg-storms) contains only the analysis background for both legs — IDP classification/return-period work in notebook 02.2 (1,000–10,000 displaced → Scenario 1; 10,000–25,000 → Scenario 2; >25,000 → Scenario 3; Scenario 3 alone: 9 storms over an assumed 28 years ≈ 1-in-3.11 yr — note 04.0 divides the same 9 storms by 29 seasons instead, giving ~1-in-3.2 yr) and rainfall-threshold derivation in 03.2 (03.1 is exploratory review; the 300 mm figure is the 3-day region-mean IMERG sum over landfall ±1 day, and 03.2 states plainly that it was tuned to select the desired number of storms — `threshold = 300` with the comment `# we want to get 7 storms so fine tuning this` — i.e. the threshold is calibrated to a target frequency, not to an impact level; the resulting storm list transcribed into 04.0 has 8 names (ENAWO, MANOU, INDLALA, JADE, ELIAKIM, HUBERT, GAFILO, HEROLD) over 24 seasons ≈ 1-in-3 yr, one more than the 7 the comment was tuning for) — no finalized IDP-indicator code exists anywhere. The RAINFALL leg, however, has since been operationalized as a live pipeline in a SIBLING repo — see the next entry."
- "[gap] No monitoring pipeline or live trigger-checking system for the Scenario-3 wind/distance trigger itself is present in THIS repo (no `.github` workflows, no cron/schedule code anywhere in ds-aa-mdg-storms); that trigger is monitored manually by the Centre de Données Humanitaires (CHD) reading Météo-Madagascar bulletins, per the PDF's own process. The rainfall leg of the observational indicator DOES now have a live automated pipeline — [`pipelines/mdg-monitoring`](../../pipelines/mdg-monitoring.md) (sibling repo `ocha-dap/ds-aa-mdg-monitoring`, GHA daily 16:00 UTC): checks 3-day IMERG rainfall per ADM1 region against a 300 mm threshold and emails an informational (not activating) status to partners. Per `infrastructure/pipeline-registry.md` (snapshot 2026-08-30) it is still 🔴 DOWN/OVERDUE with no successful run since ~11 April 2026 — the registry is the one home for the live figure; re-check it there before relying on this pipeline."
- "[gap] No monitoring pipeline or live trigger-checking system for the Scenario-3 wind/distance trigger itself is present in THIS repo (no `.github` workflows, no cron/schedule code anywhere in ds-aa-mdg-storms); that trigger is monitored manually by the Centre de Données Humanitaires (CHD) reading Météo-Madagascar bulletins, per the PDF's own process. The rainfall leg of the observational indicator DOES now have a live automated pipeline — [`pipelines/mdg-monitoring`](../../pipelines/mdg-monitoring.md) (sibling repo `ocha-dap/ds-aa-mdg-monitoring`, GHA daily 16:00 UTC): checks 3-day IMERG rainfall per ADM1 region against a 300 mm threshold and emails an informational (not activating) status to partners. Per `infrastructure/pipeline-registry.md` (re-verified 2026-09-07) it is still 🔴 DOWN/OVERDUE with no successful run since ~11 April 2026 — the registry is the one home for the live figure; re-check it there before relying on this pipeline."
- "[stale] rsmc.py carries two copy-paste artefacts from a Mozambique predecessor repo: (a) RSMC_RAW_DIR hard-codes 'moz' in the raw path (DATA_DIR / 'private' / 'raw' / 'moz' / 'rsmc' / ...) while the processed path correctly uses 'mdg'; and (b) the calculate_rp docstring still describes the pcode parameter as an 'ISO 3166-2:MZ code for the AOI' (Mozambique), whereas the Madagascar distance columns the code actually builds/consumes are `MG_distance_km` (ADM0) and `any_distance_km` (min across ADM1) — the only call sites, in notebook 01.2, pass `pcode=\"any\"`. Neither affects the endorsed trigger logic."
- "[gap] The README is a bare stub (does not document the trigger thresholds, the readiness/action windows, or link the framework PDF) — typical of these repos. The endorsed trigger must be read from the PDF (framework_doc); the repo's notebooks derive but do not document it."
# --- activation history ---
Expand All @@ -97,7 +97,7 @@ extra:
schema_strain: "target_people not stated as a single total in the PDF; per-agency/per-sector beneficiary counts in the Activités prioritaires table (sec. 7) sum to ~246,000 (15,721 + 3,750 + 1,200 + 57,217 + 3,600 + 10,000 + 1,500 + 5,000 + 75,000 + 17,063 + 20,000 + 15,000 + 21,000; a few rows, e.g. early-warning messaging and UNHAS logistics, are 'n/a' and excluded) but with significant overlap across sectors targeting the same individuals — not a deduplicated headcount."
activation_verification: "The Cyclone Gezani (9 Feb 2026) activation is CONFIRMED against public sources (QA reviews 2026-07-13 and 2026-07-27): OCHA Tropical Cyclone Gezani Flash Updates No.1–4 (Feb 2026), the Anticipation Hub, WFP ('Madagascar: Anticipatory Actions Cyclone Gezani 2026') and UNICEF Madagascar Flash Updates #2–4. Verified: the activation threshold — 'a forecast of an intense tropical cyclone passing within 100 km of the coast with wind speeds exceeding 166 km/h' — was reached on 9 Feb on Météo-Madagascar forecasts (wording matches this page's Scenario-3 trigger exactly); US$3M of pre-arranged CERF finance was allocated to six UN agencies targeting >93,000 vulnerable people; Gezani made landfall near Toamasina/Tamatave on 10 Feb 2026 (~17:30 UTC) as an intense TC with 10-minute sustained winds ~180–195 km/h and gusts ~230–250 km/h (the QA review of 2026-08-03 corrected an earlier 'winds up to 250 km/h' phrasing, which was the high-end GUST figure from press reporting, not sustained wind — WMO gives ~180 km/h sustained / 230 km/h gusts at landfall, Météo-France La Réunion a 195 km/h 10-min peak); Madagascar's first cyclone AA pilot activation. TWO FIGURES, TWO MEANINGS — do not conflate: US$3M is the pre-arranged envelope allocated on activation, while '~US$900,000 in CERF Anticipatory Action funding released ahead of landfall' (OCHA flash updates, echoed by WFP and UNICEF) is what was actually disbursed ~1 day before landfall. The 2026-07-13 QA note wrongly called the ~US$900k figure unsupported and asserted the whole envelope was released; the 2026-07-27 review found it well sourced across OCHA/WFP/UNICEF and restored it as the pre-landfall disbursement. `prearranged_or_released_usd` is kept at 3000000 (the envelope, = prearranged_funding_usd). Both trigger windows fired (readiness then action) — per the CHD team (@t-downing) on PR #242; public sources document only the 9 Feb activation for Madagascar (the Anticipation Hub separately names an 8 Feb readiness trigger for MOZAMBIQUE, not Madagascar — do not transfer that date here). Mozambique received a separate US$4.5M CERF envelope (+ >US$1M from partners) for the same system. QA 2026-08-10 re-verified the headline figures verbatim against OCHA 'Madagascar: Humanitarian impact of Tropical Cyclone Gezani, Flash Update No. 1 (10 February 2026)': 'The UN Central Emergency Fund (CERF) allocated US$3 million to six UN agencies in Madagascar in pre-arranged finance for anticipatory action to help partners support more than 93,000 vulnerable people', Gezani 'intensified on 9 February', landfall 'in the evening of 10 February near the city of Toamasina' 'as an intense Tropical Cyclone', and the separate Fytia 'provision of $2 million for an urgent response' covering 'Soalala and Marovoay districts'. Flash Update No.1 does NOT itself carry the ~US$900k 'released ahead of landfall' figure (it appears in the later No.2–4 updates, verified in the 2026-07-27 pass); unocha.org report pages now 403 automated fetches, so that figure was not independently re-read in the 2026-08-10 pass."
visibility: internal
last_synced: "2026-08-31"
last_synced: "2026-09-07"
---

# Madagascar Tropical Cyclone — 2024-12-13
Expand Down Expand Up @@ -143,7 +143,7 @@ The analytical basis for the thresholds was developed in this repo using IBTrACS

During cyclone season (1 November – 30 April), the CHD reads every Météo-Madagascar bulletin (issued every 6 h, or 3 h near landfall) as soon as it is published (within ~1 hour of validity time). Each bulletin is assessed against the Scenario 3 thresholds. If thresholds are met, an activation message is sent immediately via email and WhatsApp to the BNGRC, HC/RC, OCHA, UN agency focal points, Start Network, and IFRC/Red Cross. No automated pipeline checks the Scenario 3 wind/distance trigger; the repo's monitoring notebooks (`analysis/05.x`) are retrospective post-event analyses for learning purposes, not a live system.

Separately, the **rainfall leg of the Annex's observational indicator** does have a live automated pipeline: [`pipelines/mdg-monitoring`](../../pipelines/mdg-monitoring.md) (sibling repo `ocha-dap/ds-aa-mdg-monitoring`, not this page's `source_repo`) runs daily via GitHub Actions (16:00 UTC), pulls IMERG 3-day rainfall totals per ADM1 region from the prod DB, checks them against a 300 mm threshold (strictly `>`, per `src/monitoring/emails.py`), and sends an informational French-language email (via a Listmonk campaign to partner list 109) — flagging "ACTIVÉ"/"PAS ACTIVÉ" for awareness, not as a fund-releasing AA trigger in its own right. Per [`infrastructure/pipeline-registry.md`](../../infrastructure/pipeline-registry.md) (snapshot 2026-08-30) this job is still 🔴 **DOWN/OVERDUE**, with no successful run since ~11 April 2026 (the registry carries the live last-success figure — don't copy it here). It was therefore still running during the Cyclone Gezani activation (Feb 2026) and stalled in mid-April 2026, in the closing weeks of the 2025/26 cyclone season (which runs to 30 April) — so it has been down for the whole inter-season period and would need reactivating before the 2026/27 season. Treat it as stalled until re-verified.
Separately, the **rainfall leg of the Annex's observational indicator** does have a live automated pipeline: [`pipelines/mdg-monitoring`](../../pipelines/mdg-monitoring.md) (sibling repo `ocha-dap/ds-aa-mdg-monitoring`, not this page's `source_repo`) runs daily via GitHub Actions (16:00 UTC), pulls IMERG 3-day rainfall totals per ADM1 region from the prod DB, checks them against a 300 mm threshold (strictly `>`, per `src/monitoring/emails.py`), and sends an informational French-language email (via a Listmonk campaign to partner list 109) — flagging "ACTIVÉ"/"PAS ACTIVÉ" for awareness, not as a fund-releasing AA trigger in its own right. Per [`infrastructure/pipeline-registry.md`](../../infrastructure/pipeline-registry.md) (re-verified 2026-09-07) this job is still 🔴 **DOWN/OVERDUE**, with no successful run since ~11 April 2026 (the registry carries the live last-success figure — don't copy it here). It was therefore still running during the Cyclone Gezani activation (Feb 2026) and stalled in mid-April 2026, in the closing weeks of the 2025/26 cyclone season (which runs to 30 April) — so it has been down for the whole inter-season period and would need reactivating before the 2026/27 season. Treat it as stalled until re-verified.

## Historical activations

Expand All @@ -153,7 +153,7 @@ The framework triggered once — its first activation:

**Near-misses that did NOT trigger the framework:**

- **Cyclone Fytia, 31 Jan 2026** — landfall near Soalala (Boeny, north-west coast) ten days before Gezani, in the same monitoring window. Météo-France La Réunion put its peak at **~155 km/h** 10-minute sustained and classified it a standard *tropical cyclone*, never an *intense* tropical cyclone (OCHA/BNGRC reporting gives ~150 km/h sustained with ~210 km/h gusts at impact), so it stayed below the 166 km/h Scenario-3 threshold and the framework correctly did not fire. Madagascar's Fytia response instead went through a **US$2M CERF rapid-response** allocation (Soalala and Marovoay districts) — a post-impact allocation, not an AA activation (cf. D53). This is the framework's clearest real-world illustration of the Scenario-3 threshold binding as designed: two damaging landfalls ten days apart, and only the one that reached *intense TC* intensity (Scenario 3) triggered pre-arranged AA funds, while the Scenario-2-class storm was handled through conventional rapid response.
- **Cyclone Fytia, 31 Jan 2026** — landfall near Soalala (Boeny, north-west coast) ten days before Gezani, in the same monitoring window. Météo-France La Réunion put its peak at **~155 km/h** 10-minute sustained and classified it a standard *tropical cyclone*, never an *intense* tropical cyclone (OCHA/BNGRC reporting gives ~150 km/h sustained with ~210 km/h gusts at impact), so it stayed below the 166 km/h Scenario-3 threshold and the framework correctly did not fire. **Mind the wind standard:** press and JTWC-derived reporting quote Fytia at **185 km/h**, which is a *1-minute* sustained figure (Category-3-equivalent on Saffir–Simpson); the framework's 166 km/h threshold is on the **10-minute** standard Météo-Madagascar/RSMC La Réunion use, on which Fytia peaked at 155 km/h. The higher number does not mean the threshold was met. Madagascar's Fytia response instead went through a **US$2M CERF rapid-response** allocation (Soalala and Marovoay districts) — a post-impact allocation, not an AA activation (cf. D53). This is the framework's clearest real-world illustration of the Scenario-3 threshold binding as designed: two damaging landfalls ten days apart, and only the one that reached *intense TC* intensity (Scenario 3) triggered pre-arranged AA funds, while the Scenario-2-class storm was handled through conventional rapid response.
- **The 2024/2025 season** (Cyclones Honde and Jude, Feb–Mar 2025 — repo notebooks 05.0/05.1) also did **not** trigger the framework.

Note: The Start Network ran a separate 2021/2022 pre-activation for Cyclones Batsirai and Emnati (~USD 470,000 / GBP 370,000, 250,000 people) under **its own** protocol — >166 km/h within 100 km, 3 days out, i.e. the *same* intensity threshold as this framework, not a lower one (the Red Cross is the one using a lower 118 km/h threshold). Not an activation of this OCHA/CERF framework. Doc also records ~USD 1.2M mobilised by the Start Network in 2023/2024.
Expand Down