Phase 10 — Walking Skeleton¶
Defined 2026-08-24 at the goal reset (plan.md). Serves Goal B (backbone maturity): a clean clone walks end-to-end on real accounts, scripted and machine-checkable, with the demo scaffolding deleted.
Why first¶
Every later phase verifies against this walk. Phase 9's fix avalanche (~30 integration-seam issues) came from verifying units while no automated end-to-end walk existed; this phase makes the walk the platform's permanent verification spine before the showcase work begins.
Scope — the demo-purge sequence (epic #895)¶
In dependency order; all issues already specified:
| Order | Issue | What | Repo |
|---|---|---|---|
| 1 | #889 | First-class environment bootstrap (org/admin/roles via CL_BOOTSTRAP_ADMIN_*, compose one-shot, RLS-guarded, idempotent) — replaces demo seeding |
backbone |
| 2 | #890 | scripts/smoke_e2e.py real-journey walk (bootstrap → boundaries → real ingest of the reference raster → queued compute → assert); rewires sdk-smoke.yml off demo.py |
backbone |
| 3 | #892 | Delete the demo layer whole (seed_demo.py, demo.py, demo_data/, CL_SEED_DEMO/CL_DEMO_USER_PASSWORD, lifespan seeding, demotion filter) |
backbone |
| 4 | #894 | Docs rewrite to the persistent-users walk (MVP slice, DEPLOYMENT, RUNBOOK, quickstarts) | backbone |
| 4 | ui#120 | Remove demo onboarding wiring (banner, tour, demo creds) | UI |
| — | #893 | Owner-gated attended prod cleanup (acme-demo rows, MinIO sweep) — not on the critical path | backbone |
Also scheduled in this phase's window (phase-independent ops): #954 — rotate the leaked prod credentials.
Notes for the build¶
- These issue bodies were written 2026-08-13, before the goal reset — run the
pre-dispatch premise check (grep named symbols against current
src/, check sibling closing PRs) and post corrections on the issue before dispatching. - The coastal walk debt carried from Phase 9 (deploy + per-org
POST /v1/impact-functions/seed+ first coastal 3×3 grid) rides the first post-#890 release, proven by the new walk. - After #890 lands,
sdk-smoke.ymlbecomes the walking-skeleton run: dispatch it at wave/phase boundaries (~6.5 min/run), not per PR — see the CI model inCLAUDE.md.
Exit criteria¶
- From a clean clone:
docker compose up+ bootstrap env vars +scripts/smoke_e2e.pycompletes the full journey with exit 0. sdk-smoke.ymlis green running that walk (nodemo.py, noSEED_READYsentinel).- The demo layer is gone from the codebase and the docs describe only the real walk.