Skip to content

Phase 12 — Second Country + Second Engine

Defined 2026-08-24 at the goal reset (plan.md). Serves Goal A (data end-to-end beyond Greece) and completes the scientist showcase moment.

Workstream 1 — Cyprus (owner-decided 2026-08-24)

Prove the ingest pipeline parameterizes by landing one comparable-size country. This is a small code change, not a config knob (verified 2026-08-24): GREECE_BBOX is independently redeclared in ~7 pack scripts (litpop_exposure.py:176, coastal_flood.py:158, earthquake_eshm20.py:192, ghsl_exposure.py, eurostat_census_grid.py, heatwave_packs.py, _wildfire_fwi_common.py) plus Greek naming/ISO defaults (river_flood_aqueduct.py, dataset_identity.py, country_iso3='GRC').

Scope: 1. Hoist bbox/country/naming into per-country parameters (one shared country-profile module; packs read it — no per-pack constants left). 2. Load Cyprus admin boundaries (load_admin_boundaries.py — mind the region-vocabulary coupling noted in #890). 3. Run the packs for Cyprus (river flood, coastal, earthquake + indicator perils where the source covers CY), seed per-org curves. 4. Walk the showcase script's citizen + insurer moments on a Cyprus pin and portfolio.

Explicitly not pan-EU — #447 stays parked (continent-scale ingest is gated on out-of-core aggregation work, #446).

Workstream 2 — CLIMADA sidecar deploy (owner-decided: after engine#33 check)

The /agreement surface renders a one-engine degenerate case today. The CLIMADA adapter already exists in-repo (worker/models/climada_adapter.py — an unreachable sidecar surfaces as divergence.failed_engines); the remaining work is deploying the sidecar and validating the comparison.

Gate (first task): check engine#33 (MDD/PAA clip divergence vs CLIMADA) and resolve or explain it — the showcase must not display a known bug as "engine divergence".

Scope: sidecar image in compose (+ prod), engine roster config, a side-by-side validation run on the reference dataset, divergence badges live on /agreement.

Exit criteria

  1. smoke_e2e.py (or a country-parameterized variant) passes for Cyprus.
  2. The citizen and insurer moments walk on Cyprus data.
  3. /agreement shows two live engines with explained divergence on the reference run.