Skip to content

Phase 9 wave 0 — the six-moment Showcase walkthrough (owner-run)

✅ PASSED 2026-08-10 — this gate is CLEARED

The owner reports the six-moment walkthrough passed against prod. #550 is closed on that report — no agent session observed coverage.considered == N, and the closing comment says so. The Showcase claim is no longer gated.

This does not close Phase 9 (see "After it passes"). The phase exit is the Full-Catalog walkthrough, which the owner is running separately.

The rest of this file is kept as the re-run recipe: if a regression is suspected, run it again rather than reconstructing the steps from a transcript.

Why this file exists. Wave 0 is the only Phase 9 item that cannot be run by an agent session: phase-9-build-plan.md rule 8 — "Ghost sessions never mutate prod — ops runs happen owner-side". It has slipped twice because the steps lived in a chat transcript. They live here now.

What it closes: #550 (uploaded portfolio rows reach the rollup). Until it passes, the Showcase claim must not be made to an audience (plan.md, Current Phase).

#558 (matrix centroid preflight) was closed 2026-08-04 — but with no closing comment and no linked commit, 3½ minutes after its own status comment said "no matrix run has ever executed against production". Treat it as provisionally closed: still run moment 4, and reopen #558 rather than filing a new issue if it fails.

Next gate after this one: phase-9-full-catalog-walkthrough.md — the phase exit.

Preconditions — RE-ASSERT, do not inherit

The table below is a shape, not a fact: every row was true on 2026-08-04 and several have moved since. Check each one live before you start. The lesson is #638 — a config change was once applied to an image that could not support it, and every health check still looked green.

# 1. What is actually deployed?
curl -fsS https://api.climate-lama.online/v1/info | jq -r '.data.version, .data.git_sha'
# 2. Does that SHA contain the fix you are about to test? (exit 0 = yes)
git merge-base --is-ancestor <fix-sha> <deployed-sha>
Thing Check Expected
Backbone / worker / beat /v1/infoversion 0.11.0, git_sha 339f2cd… as of 2026-08-10 — re-check, do not assume. Prod is 7 commits behind trunk d4b2cc5 (the #791/#793/#797/#802/#803/#805 fix run is NOT deployed)
Deployed SHA contains waves 4–5 git merge-base --is-ancestor <wave5-sha> <deployed-sha> exit 0 — satisfied since v0.9.0
UI UI footer or docker ps on the host v0.5.0 or newer
Alembic ./dc exec -T api alembic current matches alembic heads at that tag
RLS flip (#556) pg_stat_activity + pg_roles app connects as climate_lama_app, rolsuper=f, rolbypassrls=f
Disk df -h / on the host measure it — it hit 93% once when docs claimed 78%

Known traps — read before moment 4

  1. ~~Do not read a baseline column in the matrix.~~ DISCHARGED 2026-08-07. #631 is fixed by cdcc6f4 (PR #644, "keep seeded demo hazards out of scenario resolution"), and that commit is contained in v0.8.0 — verified with git merge-base --is-ancestor; it was not in v0.7.0, which is why this trap stood until now. On any deploy of v0.8.0 or later the baseline column is safe to read. On an older tag it is not — re-check with the command above rather than trusting this line. The 2×3 SSP grid (ssp2-4.5 / ssp5-8.5 × 2030 / 2050 / 2080) remains the core of moment 4 either way.
  2. If the demo data is missing entirely, suspect #729 before anything else. It is closed but was never root-caused and is intermittent: it makes scripts/demo.py --seed-only exit 1, so a stack can come up unseeded. Identical product code failed the smoke and then passed it (git diff b23b236 d4f46d1 over src//scripts/ is empty). Reopen #729 on a recurrence rather than filing a new issue.
  3. The first matrix run is slow, and that is the fix working. No matrix has ever run against prod (jobs holds only impact_calc / data_ingest / report_render, newest 2026-08-04 05:51 UTC), and the seven Aqueduct datasets have 0 exposure-centroid assignments. PR #567's _load_exposures_with_preflight assigns them on demand under an advisory lock per (hazard, exposure) pair. Slow ≠ hung.
  4. Moment 5 (CLIMADA parity sidecar) is not deployed. Skip it; it is not part of #550/#558.

The six moments

# Moment Do this Expected result
1 Log in Sign in with the seeded demo account Dashboard renders; no error toast
2 Single run Configure hazard + region + scenario + horizon, run the impact calculation Job reaches completed; map + summary render with non-zero EAD/AAI
3 Portfolio upload (#550) Create a new portfolio, upload a CSV of N asset rows, open the rollup coverage.considered == N (not 0 of 0); uploaded rows appear in worst_members; hazard chips no longer read no_members_to_aggregate
4 Scenario matrix (#558) Run the 2×3 SSP matrix over the Aqueduct datasets All 6 cells return EAD/AAI. No cell shows "No exposure rows found with assigned centroids"
5 ~~CLIMADA parity~~ skip sidecar not deployed
6 Composed ORSA report Compose the report from the matrix batch Report renders; no "Report failed — please try again"

After it passes — DONE 2026-08-10

# #558 is already closed — only reopen it if moment 4 fails.
gh issue close 550 --repo CortoMaltese3/climate-lama --comment "Wave-0 walkthrough passed <date>: coverage.considered == N with uploaded rows in worst_members."

All three follow-ups are complete: #550 closed, the wave-0 box in phase-9-build-plan.md ticked, and the "gated on the owner walkthrough" paragraph dropped from plan.md's Current Phase section.

Attribution rule for whoever runs this next. The comment template above asserts an observation (coverage.considered == N). Only write it that way if you ran the walkthrough. An agent closing the issue on a reported pass must say so instead — the 2026-08-10 close reads "Closed on the owner's report that the wave-0 six-moment walkthrough passed against prod on 2026-08-10", and claims nothing it did not see.

Passing this does not close Phase 9. It clears the wave-0 gate and #550. The phase exit is the Full-Catalog walkthrough, which additionally needs the ops track (real pack ingests). Its other precondition, ui#100/#101, is cleared — both shipped in ui v0.5.0 and are live on prod as of 2026-08-07.

If a moment fails

Capture the failing job id and docker logs climate-lama-worker-1, open an issue against the specific moment, and do not waive it a second time — Phase 8 exited under a waived walkthrough (option A) and that is what produced this wave-0 debt in the first place.