- 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)
4.6 KiB
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:
/carimay 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.