Showcase Script — the North Star¶
Four demo moments, all four walked on prod, written as step-by-step scripts. This is the artifact every phase must visibly advance (per plan.md → Development-Phase Goals): a step either works today (live) or names the phase that delivers it (target: P11, …). When a phase closes, walk the affected moment(s) and flip the markers — the walk, not the issue count, is the progress measure.
The machine-checkable twin of this script is scripts/smoke_e2e.py
(Phase 10, #890);
this file is the human walk on top of it.
Personas here are showcase lenses, not validated markets — the same logged-in
platform demonstrates all of them (four moments live; Moment 4 was added
2026-09-08 and walked at the Phase 15 exit on 2026-09-17 — its one remaining
target marker is step 8, a 24-hour evidence read rather than a walk).
Routes since Phase 17. Phase 17 replaced Assess, the portfolio analysis
and the Live map with one Explore workspace, and renamed Runs, Datasets and
Measures to Analyses, Data and Adapt
(phase-17-revamp.md D1). The moments below name the
Phase 17 routes: /explore (with ?scope=portfolio&id= for a book today, the
Phase 17b target being ?exposure=portfolio:<id> with the old address rewritten
to it, EX-16; ?mode=events&event= for an event or a live watch, ?mode=compare
for compare), /analyses, /data and /adapt. The live markers record walks
on the surfaces of their day and stay valid as evidence. The phase-end owner
walk (#1501,
exit criterion 2) re-walks Moments 1–4 on the new routes, and nothing is
removed without that walk (Phase 14 guardrail 2).
Redirected from — each old address opens its new surface in one hop (UI
src/App.tsx, ui#515 and ui#527), so every evidence link in this file and the mid-review docs still resolves:/assess,/dashboardand/matrix?batchId=→/explore(scenario, horizon and batch carried) ·/live,/live/:eventIdand/portfolios/:id/events/:eventId→/explore?mode=events&event=·/runsand/scenarios→/analyses·/runs/compareand/compare→/explore?mode=compare·/datasets→/data·/measures→/adapt.
Moment 1 — Citizen: "How risky is my home?"¶
Surface: /lookup (RiskLookupPage). Known-good river-flood pins: Greece
40.60, 22.80 (Thessaloniki / Axios delta); Cyprus 34.89, 33.61 (Larnaca
district). Both are recorded with their provenance on
scripts/packs/country_profile.py (CountryProfile.demo_pin) — read them from
there rather than re-typing them. The Cyprus pin is measured, not picked off
a map (issue #1084): the Aqueduct baseline clip is only 0.652 % valid cells and
barely a quarter of those are on land, so an eyeballed Cyprus coordinate almost
certainly lands in nodata and demonstrates nothing.
Cyprus evidence (D13, owner walk 2026-09-02 on prod UI v0.12.0): pin
34.89, 33.61 → Earthquake 6/10 Elevated (ESHM20 earthquake hazard –
Cyprus, screening-grade EAI) and River flood 4/10 Moderate-low (Aqueduct
river flood Cyprus – historical baseline 1980 (WATCH), RP10 0.11 m / RP50
0.21 m / RP100 0.25 m); wildfire/storm/coastal/heatwave values-only, tropical
cyclone/drought not covered. Greek pin 40.60, 22.80 → River flood 7/10
High (JRC river flood Greece), earthquake 6/10, coastal values-only +
screening-grade — the cross-country property holds in the UI.
- Open
/lookupand search an address — the box lists matches and picking one drops the pin (dropping a pin manually still works too). live (walked on prod 2026-09-17 by the owner: searching an address on/lookupreturned matches and picking one dropped the pin — #1377 reverses #1322's pin-drop-only decision now thatGEOCODER_ADVERTISED=trueand Nominatim are live on prod. Cyprus addresses do not resolve — the Nominatim import is a Greece-only PBF (Limassol→ 200, 0 candidates), so the Cyprus leg of this moment still uses the measured pin34.89, 33.61above, per #1377's closing note) - See the multi-hazard score card: plain-language RAG bands, documented misses, screening-grade badge, provenance drawer with citation. live · Phase 17b (LK-8, LK-13): provenance moves into one collapsed "Why this score?" with a "How this score is made" block (hazard, dataset, design return period, scheme; no exposure, per K15).
- See the hazard raster rendered behind the pin — the map shows why the
band is what it is. live (walked 2026-08-26 on UI
v0.8.0: the JRC national COG renders behind the pin with the measured legend0.121 – 7.98 m, the H3 answer cell outlined — ui#186/ui#205 + backbone #964/#965; evidence on #971) - Toggle scenario and time horizon — "what about 2050 under SSP5-8.5?" —
and watch the card update. live (walked 2026-08-27 on trunk
73413cf:lookup-axis.spec.ts:19sets the axis, the URL carries it and a reload restores it — ui#218 + ui#219; smoke run 33064354961) - See a risk-over-time mini-chart across horizons. live (walked
2026-08-27 on trunk
73413cf:lookup-axis.spec.ts:57charts a pinned lookup across the horizon axis — ui#220; smoke run 33064354961) - Copy a shareable permalink of this exact pin + settings and open it on a
phone (responsive layout). live (walked 2026-08-26:
Copy link→/lookup?lat=40.6&lon=22.8restores pin + card — ui#179; the phone layout collapse was ui#208, fixed inv0.8.0)
Moment 2 — Insurer: "What's my book's risk?"¶
Surfaces: /portfolios (the books and their upload), the book's analysis in
/explore?scope=portfolio&id=<id> (Phase 17b target EX-16: /explore?exposure=portfolio:<id>), its events in /explore?mode=events&event=,
and exposure datasets in /data. Steps 1–9 were walked on the portfolio page
and the Live event page before Phase 17.
Cyprus evidence (D13) — re-walked 2026-09-03 on prod UI v0.12.0: the
first Moment 2 walk on the Cyprus book scored 0 of 1 members ("No risk
surface in scope" on every hazard). Two causes, both remediated the same day:
Cyprus had no baseline/0 surface at all, and the rollup scores a member
only through the res-8 H3 cell its own coordinates fall in — with no
parent-cell fallback — so a LitPop member could never be scored by a surface
built over GHSL points. The two baseline surfaces were built through the matrix
endpoint (river + coastal, 3902 cells each) and the book acd702b1…
re-membered with three GHSL Cyprus rows. It now answers 3 / 3 scored:
headline 4 Moderate-low river flood at baseline (aggregate 0.2542 m), 3
at ssp2-4.5/2030, 4 at ssp5-8.5/2050, exposed value 16,769,833 USD,
worst members 7,043,304 / 5,050,948 / 4,675,581 USD; coastal flood reports
metric_absent_from_cells rather than a zero. The owner reopened
/portfolios/acd702b1… in the browser the same day and confirmed the page
renders exactly that — 3 of 3 scored, headline 4, band 3 on the
ssp2-4.5/2030 toggle, coastal flood as metric absent; steps 1–7 below are
unaffected and stay live. (#1048, closed 2026-09-03; the
res-8/per-member-reason finding is
#1154.)
- Create a portfolio; bulk-upload an asset CSV. live
- See the portfolio's assets on a map. live (walked 2026-08-27 on trunk
73413cf:portfolio-map.spec.ts:34takes an empty book to a mapped one — ui#225; smoke run 33064354961) - Read the book rollup: headline band, per-hazard chips, band distribution of
value with the share in high or severe, value-weighted average band
(screening), worst-N concentration table. live · Phase 17b (PF-9,
#1580): the band distribution of value (
value_weighted.band_distribution) and the share in high or severe (share_high_or_severe) joined the rollup, and the average was labelled in the route's description. - Toggle scenario/horizon on the rollup. live (walked 2026-08-27 on
trunk
2612a25:portfolio.spec.tsstep 5 moves the axis, the URL carries?horizon=2080and a reload restores it — ui#221; smoke run 33043634432) - Run a monetary loss computation on the portfolio — portfolio EAD/AAI and
a frequency curve, not just score bands. live (walked 2026-08-27 on
trunk
73413cf:portfolio.spec.tssteps 6-7 run the computation and read a finite EAD off the panel — ui#228 + backbone #1008; smoke run 33064354961) - See real metrics on the portfolio list (exposure count, EAD per hazard) instead
of placeholders. live · Phase 17b (PF-8): the list's
total_eadcounted a dataset once per member row and mixed perils. Backbone #1571 landedead_by_hazard, one labelled figure per hazard read from the portfolio's own run. A dataset-level run stood in, weighted once per dataset, only when every attachment selectedalland every dataset had a run in the same cell, andtotal_eadbecame one hazard's figure, never a cross-hazard total. (walked 2026-08-27 on trunk2612a25:portfolio.spec.tsstep 3 reads real counts — ui#226 + backbone #1010; smoke run 33043634432. The third column, "Scenario", stays a dash: the list response carries no per-row scenario and fetching one would reintroduce the N+1 ui#226 exists to avoid) - Download a portfolio report. live (walked 2026-08-27 on trunk
73413cf:portfolio.spec.tsstep 8 exports the computed result and the browser receives a.csvdownload — ui#222; smoke run 33064354961) - Open one of the book's events — a replayed real past earthquake
(Samos 2020) or fire (Evia 2021): the same asset map and worst-N table,
with the observed footprint in place of the return-period layer.
live (walked 2026-09-03 on prod, UI
v0.12.0+ backbonev0.21.0: the Samos card in the book's Events section opens to the header, the life-safety line, the ranked table and the ShakeMap raster on the map; the Evia card plays a six-tick scrubber with the footprint changing per day; a book without an event shows no Events heading — phase-13-event-replay.md) · Re-walked on the new route 2026-09-17 (prod, UIv0.15.1/ backbonev0.26.0): the Events card landed on the Live event page — the portfolio event address redirected there (Phase 15 exit criterion 6, Phase 14 guardrail 2; both now open/explore?mode=events&event=) — and Evia plays the same six-tick scrubber on it (mid-review-phase-15.md, row M2.8) - Read the event loss as a screening-grade figure that states the snapshot's observed-at, its age and its source version — never an annual number, never a band. live (walked 2026-09-03: Samos reads 585,548,574 USD with the screening badge and observed-at 2020-10-30T11:51:27Z; Evia's loss changes with each scrubber tick and peaks on 6 August; a page search for "alert" finds nothing) · Re-walked on the Live event page 2026-09-17: Samos reads $585,548,575 with the screening badge and the same observed-at, no annual figure and no band (mid-review-phase-15.md, row M2.9) · Phase 17b (EV-10): the headline is the cumulative event-to-date loss; per-overpass figures remain the scrubber frames.
Backbone + UI landed with backbone v0.21.0 / UI v0.12.0 (2026-09-02),
and both replays are live on prod since 2026-09-03 — the Events section
now mounts on exactly the two replay books and stays absent elsewhere. The
smoke walk's event leg is green
(sdk-smoke.yml run 33597653760,
E2E_READY_EVT_GRC event_loss=49450.5251 assets=3 valid_at=2020-10-30T11:51:27Z,
grade screening) — Phase 13 exit criterion 1 is met.
Prod evidence (owner walk done 2026-09-03). Samos–İzmir M7.0, 2020-10-30 —
book 9de7a920… (100 LitPop Greece rows), event 2e3fd696…, one snapshot
47564d9e… (valid_at 2020-10-30T11:51:27Z, unit g), event loss
585,548,574 USD, grade screening, top members 134,898,561 / 78,285,453
/ 74,662,151 USD. North Evia wildfire, 3–10 Aug 2021 — book dbe2a065…
(216 rows), event da01cb7a…, six daily snapshots (unit K), losses
926,127 / 21,451,558 / 15,095,527 / 13,491,984 / 5,470,912 / 15,714,748
USD, the 08-06 peak matching the fire's worst day, the seeded Lüthi 1 km
curve auto-resolving. Neither payload carries ead or aai; tiles serve
through /v1/tiles/cog/{id}/… and snapshots stay hidden from
GET /v1/hazards. The owner walked /portfolios/9de7a920… and
/portfolios/dbe2a065… in the browser on 2026-09-03 and the markers
flipped — the walk, not the evidence, is what flips a marker
(#1146, closed
on the data proof; mid-review
mid-review-phase-13.md).
Moment 3 — Scientist: "How do scenarios and engines compare?"¶
Surfaces: /explore (the batch run, Engine + Compare engines),
/explore?mode=compare (two runs or engines side by side) and /analyses
(saved runs). Steps 1–6 were walked on Assess and Runs, the surfaces Explore
and Analyses replaced in Phase 17.
Phase 14 (opened 2026-09-05) moves these surfaces. The scenario × horizon batch (steps 1–4) becomes a run mode of Assess, the engine comparison (step 6) becomes an Engine option + Compare toggle on Assess, and saved batches / compare (steps 3, 5) live on Runs.
/matrixand/agreementare deleted; thelivemarkers below record the walks made on the old surfaces and stay valid as evidence; each step was re-walked on its new surface at the Phase 14 exit (owner, 2026-09-09 and 2026-09-10, prod UIv0.14.0→v0.14.1) — the PR that deletes a route rewrites its step here in the same change (phase-14-solidify.md guardrail 2 and D3/D4/D6).Done so far:
/agreementis deleted (ui#324 — step 6 below is rewritten onto Assess)./matrixis deleted too (ui#323 — steps 1–4 below are rewritten onto Assess). Its address survives only as a redirect:/matrix?batchId=X→ Explore's/explore?batch=X(one hop since Phase 17, ui#515), so the Phase 11–13 evidence links in this file and in the mid-review docs still resolve.
Steps 1–4 were walked on /matrix, which no longer exists. They are rewritten
below onto the surfaces that absorbed them (ui#322 moved the grid to Assess,
ui#314 the saved-batch list to Runs, ui#323 deleted the old page). The Phase
11–13 live markers are kept as the record of what was proven, with the trunk
and smoke run that proved it — and each carried a re-walk owed marker until the Phase 14 exit, because
the walk that produced it went through a page that is gone. The re-walks
landed at the Phase 14 exit: the owner walked every step below on prod on
2026-09-09 (UI v0.14.0), the findings shipped as R2.1 (UI v0.14.1), and the
owner re-walked the affected steps green on 2026-09-10 — ids per step.
- Run one hazard × impact-function × exposure across scenarios × horizons as
a tracked batch; watch per-cell progress. live — re-walked on Assess (owner, 2026-09-09/10, prod): batch
e0bf0155-5686-4189-b6fd-4235ac3acd5e— Aqueduct river flood Greece 1980 × LitPop Greece × JRC flood Europe buildings, ssp2-4.5 + ssp5-8.5 × 2030 + 2050, four cellscompleted. The batch is dispatched from Assess's own rail: widenScenarioHorizonControlpast a single cell and Run Assessment submits the whole grid toPOST /v1/compute/impact/matrixinstead of a single job. Progress is the grid itself — each tile carries its owndata-cell-stateand settles independently — rather than the separate progress page/matrixshowed first. The batch gets an address as soon as it is dispatched (Assess's?batch=<id>,/explore?batch=<id>since Phase 17), which is what makes a run in flight shareable. Covered byscenario-matrix.spec.ts:173-199(ui#322). - Read the result as a scenario × horizon heatmap grid and read any cell's
full result in place. live — re-walked on Assess (owner, 2026-09-09/10, prod): the cells of
batch
e0bf0155-5686-4189-b6fd-4235ac3acd5eread in place. (Originally walked 2026-08-27 on trunk73413cf— ui#224; smoke run 33064354961 — through/matrix's grid and its drill-in modal.) The grid is the same one, moved into Assess's results strip; the modal is gone. Clicking a tile loads that cell into the page's own map, stats bar and frequency curve, so the answer lands beside the map rather than on top of it —MatrixCellDrilldownwas deleted with the page in ui#323. Covered byscenario-matrix.spec.ts:197-213. - Save the batch and recall it later. live — re-walked on Runs (owner, 2026-09-09/10, prod): saved as
scenario
8cfee746-5cb5-4089-b709-35fa2c4be8e4("walk batch river flood GR",inputs.batch_id=e0bf0155-5686-4189-b6fd-4235ac3acd5e), reopened from the Runs hub as one row, and the single baseline saved as91fb2637-9b4e-4bcf-b84f-42fcead9c405("walk baseline river flood GR"). (Originally walked 2026-08-27 on trunk73413cf— ui#223 + backbone #1009; smoke run 33064354961 — reopening from/scenarios' saved batches.) The batch is saved as before; the list that recalls it is the Runs hub now (ui#314), one table of every scenario, batch and comparison, and a batch row reopens on Assess's?batch=address rather than on/matrix. Since Phase 17 the hub is Analyses (/analyses) and the batch opens in Explore. Covered byscenario-matrix.spec.ts:214-220(reopen from the address) and:290-317(reopen from the hub). - Download the composed report (PDF). live — re-walked on Assess (owner, 2026-09-09/10, prod) from the strip
header of batch
e0bf0155-5686-4189-b6fd-4235ac3acd5e. · Per-result CSV/PDF export on any result surface. live (walked 2026-08-27 on trunk73413cf:scenario-matrix.spec.tsexports a selected cell and asserts the.csvdownload — ui#222; smoke run 33064354961). The composed-report button moved with the results entry: it sits in the batch strip's header on Assess and renders the whole batch, the samePOST → 202 job_id → poll → GETcontract it always had. Its coverage moved too — ui#323 deletedmatrix.spec.ts(which walked the old run form to this download) and folded the download half intoscenario-matrix.spec.ts:222-259, since the form half no longer exists. - Compare two saved scenarios side by side — synchronized maps, delta stats.
live, on the Runs compare page (walked 2026-08-27 on trunk
2612a25:scenario-matrix.spec.ts:134reaches the compare view — ui#227; smoke run 33043634432). The top-level Compare nav entry was retired by ui#311: compare became a nested page under the Runs hub, reached by selecting two runs, and the spec asserts the old banner link is gone as well as that the view is still one click from Runs. Since Phase 17 compare is Explore's Compare mode (/explore?mode=compare&a=&b=, ui#523). - In Explore (
/explore, walked on Assess), pick an Engine for the run — or turn on Compare engines to run the same input across every live engine at once — and see real divergence badges. live — re-walked on Assess (owner, 2026-09-09, prod UIv0.14.0): engine comparison82e38d05-38ae-4266-badb-4f294a333af5(kind = engine_comparison, two engines,completed) on Aqueduct river flood Greece × LitPop Greece.
Rewritten onto Assess by
ui#324,
which deleted /agreement and moved both halves into Assess's run
settings:
- an Engine select, options from GET /v1/engines, each one disabled
with its reason inline when the deployment does not have it or the
chosen peril is outside its supported_hazards. Left unchosen the
request omits X-Engine and the deployment default applies (the header
ui#309 landed on the client).
- a Compare engines toggle. On, Run Assessment fans the same
prerequisites across the checked engines through
POST /v1/compute/impact/compare; the results column renders the same
per-engine EAD / AAI / insured-loss table — engine_version included
(ui#299/#301) — with divergence badges against the reference engine, and
the map keeps showing the reference engine's result. Offered on the
baseline horizon, which is the only cell the compare endpoint has a
request shape for. Phase 17b (EX-11, EX-15): engine compare takes any
scenario × horizon cell (/compare accepts the /impact body with a
cell), missing sides compute in place, default Today versus SSP5-8.5 ·
2080.
- the comparison rides in the URL as ?comparison=<id>, so a reload
reopens it instead of losing a run that cost real compute — the one
behaviour /agreement did not have (its id lived in component state).
The evidence below is the last /agreement walk. It still proves the
capability — the same components, the same endpoints, the same divergence
rendering — and the new surface was walked at the Phase 14 exit (id above),
so both records stand. (Walked 2026-09-02 on
prod, UI v0.12.0 +
backbone v0.21.0: /agreement listed climada and climate_lama, both
selected by default from GET /v1/engines; hazard Aqueduct river flood
Greece, exposure LitPop Greece → EAD/AAI 409,851,434 on both
engines, 0 % EAD/AAI divergence badges, climate_lama marked
reference, parity link "How the engines are compared" rendered; switching
to ESHM20 earthquake hazard - Cyprus disables climada with the inline
reason "(not supported for Earthquake)" — the roster's
supported_hazards drives the picker as D11 specified. Sidecar proof:
scripts/verify_engine_agreement.py exit 0, both engines completed,
failed_engines == [], 0.0000 % EAD divergence
(#1051);
/agreement UI walk verified
(#1053) —
phase-12-country-engine.md D11/D12)
Moment 4 — Decision-maker: "What is at risk right now?"¶
Surfaces: Explore's Events mode, /explore?mode=events (Phase 17 folded the
Live tab into it, mounted only when features.live_mode is on), and /adapt
for step 9. Steps 1–7 were walked on the Live tab before Phase 17
(phase-15-live-risk.md). Added 2026-09-08 by owner
instruction, promoting the charter's parked "Moment 4 (responder/official)"
(exploration/07-live-risk.md §13). The
responder is a lens of the P3 decision-maker persona, not a new one. The walk
runs on a replay feed over real archived data — the North Evia 2021 FIRMS
series released one observation per tick with its original observed-at — so
every number on screen is a real provider observation, never a demo fixture
(ADR-077).
Walked by the owner on prod on 2026-09-17 (UI v0.15.1, backbone
v0.25.0 → v0.26.0 from 16:09Z mid-walk, Alembic head 0094 at both tags,
features.live_mode: true) — steps 1–7 flipped to live on that walk; step 8
is an evidence read, not a walk, and stays target until
#1300 records it.
The walk's ids, figures and three tagged findings are in
mid-review-phase-15.md. Walk precondition: prod
carried no replay series, so a six-observation North Evia 2021 series was
staged on the host under the worker's /data mount from the Phase 13 daily
FIRMS rasters — the recipe is now in
DEPLOYMENT.md § "Staging a replay series on prod".
- Open Explore → Events (
/explore?mode=events, offered only when the deployment has live mode on; the Live tab before Phase 17) and see the open watches as cards: name, hazard, Replay or Near-real-time, a freshness dot whose opacity is the age of the latest observation, the latest event loss and a loss sparkline. Phase 17b (EV-10, EV-11): the latest event loss is the cumulative event-to-date loss, monotone, never falling between frames, grouped perevent_key. live (walked 2026-09-17 on prod: nav = 9 with Live mounted; the rail listed the two Phase 13 replay watches with chip, freshness dot, latest loss and sparkline) - Select a watch: the map flies to its area of interest and shows the latest observed footprint behind the book's assets coloured by loss; the scrubber shows one tick per observation with Follow latest on. live (walked 2026-09-17: the map flew to the AOI with Follow latest on and both the watched-area and event-loss layers rendered)
- Watch a new observation arrive without touching anything — the replay feed
ticks, the snapshot lands through the real ingest pipeline, the event lane
scores it, and the map, the scrubber and the headline update. live
(walked 2026-09-17: the scheduler released all six observations untouched,
then logged
live_feed.replay.series_exhausted. The ticks arrived at the deployment'slive_feed_tick_seconds= 300 s, not the feed's configured 120 s — the loop is right, the contract is not, filed #1444) - Read the two numbers — exposed count and value (assumption-free) and the
screening-grade event loss — with observed-at, age at render, source
version, the feed's latency budget and the life-safety line. Phase 17b
(EV-10, EV-14, EV-16): the headline loss is cumulative, labelled "ground-up
loss of one observed footprint, not annual", with its unit. live
(walked 2026-09-17 on the 6 August snapshot: event loss $21,451,558,
21 assets exposed, exposed value $21,451,558,
Screening-grade EAI, with observed-at, age, source and the life-safety line all present) - Read what changed since the previous observation: Δ loss, Δ exposed, the top movers and the newly exposed assets. Phase 17b (EV-11): the delta compares two observations of the same event key, never two events in one watch. live (walked 2026-09-17 against the 5 August snapshot: +$20,525,432 and +17 assets, with largest changes and newly exposed both populated)
- Open the ranked-assets drawer, sort it, and step back through the
timeline to see how the ranking moved. live (walked 2026-09-17:
Assets (100)sorted by event loss and by name, and stepping back through the timeline moved the ranking) - Create a watch from the UI — book or exposure dataset, area of interest
from the book's extent or the current map view, feed kind and cadence —
and close it again. live (walked 2026-09-17: watch
d2d04091-d117-4e73-bcdf-d2a64605e609with feeda2ed14e2,replayat 120 s, created 13:40:30Z and closed after the series exhausted. Two reporting defects on this step, neither in the data: the success toast is styled as an error (ui#481) and the new replay watch wears aNear-real-timechip in the rail until a reload (ui#482)) - (Prod only, evidence not a walk) A FIRMS near-real-time watch and a USGS
ShakeMap watch poll for 24 h with the feed strip showing last and next poll
and no error. target: P15 — opened and polling: FIRMS watch
d33c553d/ feed1f4de1a9first polled 2026-09-17T19:10:00Z and USGS watchaafa30f7/ feed6d0fba09at 19:15:00Z,last_errornull on both; the 24 h read is due 2026-09-18T19:15Z on #1300 and flips this marker. - Open Adapt (
/adapt), pick adaptation measures for the watched book and read the avoided loss: adapted against unadapted risk, with the future hazard climate-adjusted for the chosen scenario and horizon (Phase 17 D9). Phase 17b (AD-11, AD-12, AD-13, K20): the plan is one combined run in the canonical order (hazard shifts, hazard factors, protection standards, curve factors); avoided loss, BCR, payback and residual risk come from it, never from per-measure sums; the base is an ungrown, unadapted Today run; the appraisal period is the hazard horizon, capped by lifetime. target: P17 — walked at the phase-end walk on #1501.
Steps 8–9 of Moment 2 are re-walked on the Live event page at the Phase 15 exit: the portfolio event route redirected there (Phase 14 guardrail 2 — nothing is removed without its walk). Done 2026-09-17 — both markers carry the re-walk above.
Out of showcase scope (deliberate)¶
- Cross-hazard matrix runs (one batch spanning hazards) — parked, revisit after P12
- Report export packs (TCFD/CSRD), onboarding tour, multi-tenant admin flows
- Pan-EU data coverage (#447)