Files
arah2/.planning/phases/06-turn-by-turn-guidance-live-driving/06-DEVICE-GATE.md
T

83 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.
---
## FINAL VERDICT — 2026-10-25: **APPROVED** (user drive + gallery + ratification)
| Part | Verdict |
|---|---|
| A. Gallery fidelity | APPROVED — banner ink hierarchy, zero red, radius-0, token-pure |
| B. The real drive | APPROVED — banner+haptics, silent self-heal, minimize→turn-cards, resume, trip-end deletion |
| C. D-12 ratification | STREET-BEARING KEPT (default stands) |
Device-gate bug round 1 (commit `a69fe31`, deploy `39045611`): destination card's
terminal-with-no-forward gap → ROUTE button added; header title localized. Post-gate
records: A1 = c3 now / c2 next milestone.