docs(06-08): complete the automated half — captures + replay knob; the ONE REAL DRIVE is the BLOCKING gate

- task 1 done: the ?drive= replay knob, the seven guidance legs, the
  DSGN-02 guidance gallery — all committed and green (web 148/148,
  bot 125/125, routing 65/65, captures 20/20)
- two device-gate bugs fixed before the road (G7b confirm survival,
  G7c puck+freshness)
- task 2 = checkpoint:human-verify gate=blocking: the executor STOPPED
  per protocol — 06-DEVICE-GATE.md carries the real-drive checklist
  (Parts A/B/C); device results are never faked
- STATE.md and ROADMAP.md intentionally untouched (orchestrator-owned,
  per the dispatch)
This commit is contained in:
araharah-executor
2026-10-24 21:41:06 +08:00
parent 5eeccdfe38
commit e546bcb2e0
2 changed files with 271 additions and 0 deletions
@@ -0,0 +1,68 @@
# 06-08 Device Gate — THE ONE REAL DRIVE (D-16) + DSGN-02 Gallery Review
**Status: BLOCKING — awaiting the human.** Everything automatable is green: web 148/148
(146 pre-existing + G7b confirm-survival + G7c puck/freshness), bot 125/125, routing
65/65, all typechecks clean, `npm run web:capture` 20/20 with the seven guidance legs
committed (`ed86196`, `5eeccdf`). Per the plan's law: **device results are never faked** —
this file records the protocol; the SUMMARY records the verdict verbatim once the drive
runs. A FAIL holds the phase open (the Phase 3 UNVERIFIED precedent).
---
## Part A — Gallery fidelity review (5 min, no device needed)
Open **`web/screenshots/guidance-gallery-compare.png`** (committed at `5eeccdf`): the
implemented cockpit (`shell-guidance-active.png`, `?drive=corridor-follow`, harness
build) beside `stitch_minimalist_route_navigator/active_route_guidance/screen.png`.
Confirm fidelity against 06-UI-SPEC:
- Banner ink hierarchy: **white distance** (`85 M`), **beige street** (`JALAN TUN
SAMBANTHAN` — real OSM name via the graph snap), **orange arrow** on the 48×48 plate,
register line in chassis-subtle (`GUIDE // NEXT`).
- **No red anywhere in guidance chrome**; radius-0 everywhere; no shadow/blur/glass.
- Recorded calls (the spec wins over the mockup — the composite makes them visible):
no incident band, no lane matrix, no speedometer/limit medallion, no
REROUTE-VIA-TELEGRAM-BOT / REPORT HAZARD / AUDIO buttons, 32×32 glyph at 3px stroke,
distance in pure-white (not orange).
**Approve** or list deviations (tokens.css wins over the mockup; the spec records calls).
## Part B — THE ONE REAL DRIVE (the phase's exit gate)
One drive, phone mounted, safe location to start. Steps 2–7 each get a **PASS/FAIL +
verbatim notes** recorded in 06-08-SUMMARY.md afterwards.
| # | Step | Verify |
|---|------|--------|
| 1 | `npm run deploy -w bot` (graph already uploaded — `kl-roadgraph.v1.bin` in R2) and open the Mini App from the bot | The app boots, destination resolves, route draws |
| 2 | Pick a golden destination (e.g. Merdeka 118 from Central Market), start driving | Banner shows distance + arrow + street; compact strip; guidance-card ETA progresses **without whiplash**; haptic at ~300 m approach and at the maneuver; **the puck rides the route line** (fixed this plan — `b83a88e`) and the strip stays LIVE past 45 s (fixed this plan — same commit) |
| 3 | Miss a turn DELIBERATELY | **No dialog, no blame** — the banner calmly shows `GUIDE // REROUTING` (dash + gantry), then the new route snaps in and `GUIDE // NEXT` returns |
| 4 | Minimize the app mid-drive | Within ~3–4 min a **turn-card arrives in chat** (glyph + street + ETA + distance + OPEN GUIDANCE) |
| 5 | Re-open via the card's OPEN GUIDANCE (or the chat header) | Guidance resumes at the **progressed position** — `GUIDE // RESUMING` (projected numbers), then live on the first fix |
| 6 | Tap END TRIP → confirm card → YES, ABANDON | "Trip ended" card + the deletion clause; the confirm card **survives live fixes** (fixed this plan — `fca2a90`); chat cards stop |
| 7 | (Optional, executor-assisted) KV spot-check | `npx wrangler kv key list --namespace-id=59f58a54bc44483e89872b20a005a5eb --prefix "guidance:"` → **no stale keys** (the D-14 deletion promise on real infrastructure) |
Record PASS/FAIL per step + anything that felt wrong (legibility in sunlight, haptic
feel, card lag, puck smoothness).
## Part C — Turn-card street-source ratification (2 min, named review item from 06-07)
Cards ship **street-bearing by DEFAULT** via cron-side graph reconstruction (one
`loadGraph` R2 read per cold isolate, one `snapToGraph` per carded tick) — a CPU-budget
tradeoff in the cron isolate. **Decide:**
- **Keep the default** (D-12 as written — street names on every card), or
- **Ratify the street-less degradation as final** (bare-verb cards; recorded in
UI-SPEC's recorded-calls fidelity list; 06-07's degradation path becomes the only path).
---
## Executor notes for the run
- **R2 activation** (06-CONTEXT post-planning): the R2 bucket click-through was pending
the Cloudflare dashboard (code 10042). If R2 is still unactivated, engine A answers
router-pending (designed degradation) and the cron's cards degrade to bare-verb —
the drive is still performable, but note it in the verdict.
- The **known-open cosmetic** from Phase 4: `/cari` may be absent from the client
command menu (Telegram setMyCommands defect; the command works when typed).
- **Never fake**: if a step cannot be executed (weather, road, time), mark it NOT RUN —
do not invent an outcome. The phase stays open on any FAIL or NOT RUN.