docs(04): phase 4 PASSED — verification + checkpoint resolution

This commit is contained in:
araharah-executor
2026-10-24 03:19:17 +08:00
parent 280fd68147
commit f9a140dd84
2 changed files with 48 additions and 0 deletions
@@ -0,0 +1,39 @@
# 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.