Skip to content

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.

Closed 2026-08-26 — all three exit criteria met

Two days, seven issues, one release. Every claim below was measured against the live tracker, the Actions history and the prod host on 2026-08-26 — none is inferred from a merge.

# Exit criterion Evidence
1 Clean clone → docker compose up + bootstrap env vars + scripts/smoke_e2e.py exits 0 sdk-smoke.yml does exactly that from a fresh checkout with compose up --build, then uv run python scripts/smoke_e2e.py (workflow L111/L172): green on 5c67b3d — run 32950123976, and on the three trunk SHAs before it
2 sdk-smoke.yml green running that walk, no demo.py, no SEED_READY Same run; grep -n "demo.py\|SEED_READY" .github/workflows/sdk-smoke.yml matches nothing on 5c67b3d
3 Demo layer gone from code; docs describe only the real walk #892 deleted it whole, #894 rewrote the docs, ADR-077 records it; the epic's residue grep (CL_SEED_DEMO\|CL_DEMO_USER_PASSWORD\|seed_demo\|demo@example.com\|SEEDED_FIXTURE_SOURCE over src/, docker/, compose, .env.example, .github/) returns 0 on 5c67b3d

Shipped and live. The sequence landed as #889 → #890 → #891 → #892 → #894 + ui#120, with the attended #893 purge done on 2026-08-25; epic #895 closed the same day. Prod runs backbone v0.17.1 (5c67b3d) + UI v0.8.0 since 2026-08-26 09:07 UTC (deploy-prod.yml run; scripts/verify-deploy.sh v0.17.1 identity check passed; fastapi 0.135.3 inside the api container confirms the lock-pinned install of #984 is what ships). The UI's smoke stack now provisions real ingested data (ui#212), so showcase Moment 1 steps 1–2 are exercised from a clean clone, not skipped.

Carried, deliberately. #954 (credential rotation) was scheduled in this phase's window as phase-independent ops, never as an exit criterion; it is being worked in its own attended session and stays on the GitHub milestone only until it closes. Nothing else is open against the phase.

Bookkeeping the close created. The 2026-08-25 sitting that walked Phase 9's Full-Catalog walkthrough ran on v0.17.0, so Phase 10 also discharged the Phase 9 coastal carry-over (#970) before it closed — see the struck note under Notes for the build.


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.~~ DISCHARGED 2026-08-25 — the owner's Full-Catalog walkthrough on prod v0.17.0 completed the coastal 3 × 3 grid (six scenario cells, 12:12 UTC) and confirmed the per-org seed (15 impact functions in northlane, three coastal). #970 is closed and Phase 10 carries no Phase 9 debt.
  • After #890 lands, sdk-smoke.yml becomes the walking-skeleton run: dispatch it at wave/phase boundaries (~6.5 min/run), not per PR — see the CI model in CLAUDE.md.

Exit criteria

  1. From a clean clone: docker compose up + bootstrap env vars + scripts/smoke_e2e.py completes the full journey with exit 0.
  2. sdk-smoke.yml is green running that walk (no demo.py, no SEED_READY sentinel).
  3. The demo layer is gone from the codebase and the docs describe only the real walk.