Files

40 lines
3.3 KiB
Markdown
Raw Permalink 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.
# Phase 4: Destination Search + KL Gazetteer — Verification
**Verified:** 2026-10-24
**Method:** goal-backward against ROADMAP §Phase 4 success criteria; device-gate user verdict ("everything else is approved") after in-gate debug/UX rounds (see 04-DEVICE-GATE.md).
## Success Criteria
### SC1 (SRCH-01) — golden queries return the right KL landmark — ✅ PASS
- 75-case pinned corpus: **top-3 68/68 (100%)** ≥ 90% gate; golden landmarks (KLCC, Sunway Pyramid, DUKE), malls, transit hubs, kampung-style names all resolve.
- LIVE on the deployed Worker: gazetteer inlined into the bundle (30/30 ids verified in the served chunk), `/cari KLCC` → sendVenue card via the real bot.
### SC2 (SRCH-02) — abbreviated/typo'd/glued queries resolve — ✅ PASS
- Abbreviation tier 15, glued 7, typo 14 corpus cases green; JUPEM rule table (48 rows incl. Kpg) as DATA + OSA-Damerau residual net; `Jln Ampang`→`Jalan Ampang`, `KCLC`→KLCC verified in-suite and on-device.
### SC3 (SRCH-03) — native venue card confirms before navigation — ✅ PASS
- `sendVenue` card + OPEN IN ARAHARAH + 2–4 alternates (callback swap re-renders a new card); device legs 1–3 confirmed the card on Android/iOS/Desktop.
- Honest out-of-area refusal (SC "negatives"): `/cari Kuching` refuses in text — device leg 6 PASS; 7/7 corpus negatives refused with measured admission margin.
### SC4 (ONBD-02) — Mini App opens preloaded from search — ✅ PASS
- Two-carrier reader: primary `?dest=` on the web_app button (platform truth: `web_app` buttons cannot carry `start_param` — research-verified, D-10 mechanism amended, intent preserved), `start_param` secondary.
- Device legs 1–3: destination card "Suria KLCC" preloaded on Android, iOS, Desktop. Memory-only resolution (D-03/D-07 gates: no storage writes; BA drift gates over dist).
### SC5 (ONBD-03) — home-screen launch lands search-ready — ✅ PASS
- Device leg 4: home-screen relaunch lands the app booted in Telegram, search-ready; `addToHomeScreen`/`checkHomeScreenStatus` behind capability guards (iOS "unknown" ≠ failure, per RESEARCH).
### SC-bake-off — the experiment closes — ✅ PASS (closed at the first rung)
- D-14 gate: threshold met, escalation lever **None** (recorded in docs/SEARCH-QUALITY.md). Ladder preserved for later phases: table edits → WASM geocoder backend #2 → Photon-on-VPS (#3). VPS provisioning correctly deferred to Phase 5 (Valhalla).
## Known-open (non-blocking, recorded)
- `/cari` absent from the *client command menu*: Telegram-side silent-write defect on non-default `setMyCommands` scopes (diagnosed in 04-DEVICE-GATE.md; default scope is correct; the command itself works when typed; register script re-arms all scopes for retry).
- Leg 5 on-device re-send after the BotFather Main Mini App config was deferred by the user ("everything else is approved"); the unknown-id surface is covered by automated DP gates + capture.
- Post-gate UX shipped within this phase: map tilt (pitch 35°) + runtime building extrusion (style-owned colors), `/start` logo (static-asset URL), command-scope shadow law.
## Final gates at close
search 57/57 · bot 65/65 · web 57/57 · typechecks clean · theme audit clean · captures 8/8 · live deploy `41dedd84`.
## Verdict
**PHASE 4: PASSED** — 4/4 plans executed; all success criteria met. Phase 5 (Routing + Route Display) is next; VPS provisioning begins there.