Files
arah2/.planning/phases/04-destination-search-kl-gazetteer/04-VERIFICATION.md

3.3 KiB
Raw Permalink Blame History

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.