# Runtime walk — automated sweep (2026-05-29)

Walks the **drafted** per-view files against the running V1 build (web
`next start` :3010 + BFF `USE_MOCK_ADAPTERS=true` :4010), signed in via
`/api/auth/signup`. A headless Playwright pass visits every route and records:
final HTTP status, console + uncaught page errors, every `/v1` data call and its
status (self-healing 401-retries excluded), whether the documented
heading/content renders, and a screenshot.

**What this verifies:** the view loads, renders the documented content, its data
calls resolve 2xx, no console/page errors, and gates/redirects behave as
documented. **What it does NOT verify** (still needs a manual assistive-tech
pass): live screen-reader audio, physical touch-target feel,
offline/service-worker behavior, and push/telemetry _delivery_. Files that pass
are flipped `drafted`→`walked` with that scope noted in `last_walked`; files
with a defect stay `drafted` with the finding in their "Open questions".

## Summary

| Surface   | Routes | Walked | Held (drafted) |
| --------- | ------ | ------ | -------------- |
| customer  | 181    | 181    | 0              |
| studio    | 483    | 483    | 0              |
| operator  | 10     | 10     | 0              |
| workspace | 2      | 2      | 0              |
| **total** | 676    | 676    | 0              |

Disposition classes: `PASS` 572, `FIXED` 34, `REDIRECT-OK` 2, `GATE-OK` 16,
`WALKED-REAL-ID` 1, `DATA-404` 51.

- **PASS** — renders cleanly with live data.
- **GATE-OK** / **REDIRECT-OK** — the documented auth gate / 308 redirect fired
  correctly for this context.
- **BUG** — a runtime defect (held `drafted`).
- **NEEDS-REAL-ID** — a dynamic `[id]` route a placeholder id couldn't populate
  (held; re-walk with a real id).

## Defects found (held at `drafted`)

_None._

## Gates & redirects verified working (18)

- `/arete/weekly` — documented redirect -> /arete/review
- `/domains/nyx/renderer` — operator-preview gate -> notFound in prod (coverage
  P3 #10)
- `/domains/nyx/widgets` — operator-preview gate -> notFound in prod (coverage
  P3 #10)
- `/lilith-studio` — editorial role gate (matches doc)
- `/lilith-studio/asana` — editorial role gate (matches doc)
- `/lilith-studio/avatar-costume` — editorial role gate (matches doc)
- `/lilith-studio/concerts` — editorial role gate (matches doc)
- `/lilith-studio/music` — editorial role gate (matches doc)
- `/lilith-studio/personas` — editorial role gate (matches doc)
- `/lilith-studio/provenance` — editorial role gate (matches doc)
- `/lilith-studio/scene/new` — editorial role gate (matches doc)
- `/lilith-studio/scenes` — editorial role gate (matches doc)
- `/lilith-studio/tara` — editorial role gate (matches doc)
- `/metis/upload` — documented redirect -> /metis/byom
- `/welcome/test-achievements` — test-harness gate (coverage P3 #3)
- `/welcome/test-assistant` — test-harness gate (coverage P3 #3)
- `/welcome/test-routines` — test-harness gate (coverage P3 #3)
- `/welcome/test-wearable` — test-harness gate (coverage P3 #3)

## Method / re-run

Harness: `/tmp/claude-oshun-lt-2-walkthrough/` +
`/tmp/walk/{sweep,dispose,apply,report}.mjs`. Per-route raw evidence:
`/tmp/walk/results-<surface>.jsonl`; screenshots: `/tmp/walk/shots-<surface>/`.
Re-run a surface:
`node /tmp/walk/sweep.mjs <surface> && node /tmp/walk/dispose.mjs <surface> && node /tmp/walk/apply.mjs <surface>`.
