Files
Arah2/.planning/phases/04-destination-search-kl-gazetteer/04-DISCUSSION-LOG.md
T
2026-10-23 22:37:55 +08:00

59 lines
3.4 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.
# Phase 4: Destination Search + KL Gazetteer - Discussion Log
> **Audit trail only.** Do not use as input to planning, research, or execution agents.
> Decisions captured in CONTEXT.md — this log preserves the analysis.
**Date:** 2026-10-23
**Phase:** 04-destination-search-kl-gazetteer
**Mode:** default (interactive)
## Areas Discussed
### Search interaction surface
| Question | Options presented | Selection |
|---|---|---|
| Where does the user type? | /cari command / free-text / in-webview / command+shared module | /cari command |
| Shortlist presentation | best+inline alternates / list-then-choose / single result | Best + inline alternates |
| Backend architecture | gazetteer-first pluggable / KL-scale WASM now / full pivot | Gazetteer-first pluggable |
### Photon/VPS detour (user education round)
User asked what Photon is, why static hosts (Cloudflare Pages/GitHub Pages) can't run it, and proposed SQLite/sql.js and Rust-WASM (tantivy) alternatives — including a full "Malaysia-only Photon-lite" sketch (Geofabrik pbf → SQLite/FTS5 → sql.js in browser on GitHub Pages, forkable). Explained: static hosts execute nothing; the Worker is mandatory for the webhook regardless; full-MY index exceeds Worker memory caps; client-side engine means huge mobile downloads; chat-side /cari needs server-side answers. The forkable endgame is preserved as SearchSource backend #2. **Notable: user's pushback killed the default VPS-now plan** — search is $0 in-Worker; VPS defers to Phase 5 (Valhalla).
### License (user-surfaced area)
| Question | Options presented | Selection |
|---|---|---|
| License for forkability | MIT / Apache-2.0 / GPL-3.0 / later | **GPL-3.0** |
### Gazetteer + Malay normalizer
| Question | Options presented | Selection |
|---|---|---|
| Sourcing | hand-curated / OSM pipeline / curated + Overpass top-up | Curated + Overpass top-up |
| Canonical format | JSON in repo / SQLite now (user asked "how heavy?": ~1.5MB WASM + cold-start of pure cost at this scale) | JSON in repo |
| Normalizer | rules+folding+fuzzy residual / fuzzy only / research decides | Rules + folding + fuzzy residual (after a worked-example explanation of why short-word fuzzy fails: jln→jalan is high-distance, tmn≈Tun collisions, vowel-drop conventions, glued words, Stesen/Station synonym class) |
| Aliases | in entries / separate table | Aliases in entries |
### Venue card + deep-link hand-off
| Question | Options presented | Selection |
|---|---|---|
| startapp payload | plain id / full payload / signed | Plain gazetteer id |
| Venue card | sendVenue + buttons / styled message | sendVenue + buttons |
| ONBD-03 scope | minimal PWA hooks / full PWA | Minimal PWA hooks |
### Acceptance corpus + thresholds
| Question | Options presented | Selection |
|---|---|---|
| Corpus shape | pinned golden set / log-derived | Pinned golden set (~60–100, incl. negatives) |
| Bake-off close | 90% top-3 + honest negatives / 80% top-1 / judgment | 90% top-3 + honest negatives; escalation order fixed (table edits → backend #2 → Photon) |
## Corrections Made
None reversed; two user questions reshaped defaults materially (VPS deferral; license capture). Third-round education (fuzzy-vs-rules) ended in the recommended option being chosen with informed consent.
## Auto-Resolved
Not applicable.
## External Research
Deferred to planning's research step per roadmap (gazetteer sourcing, Overpass shapes, corpus composition details).