# 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.