diff --git a/.planning/phases/03-mini-app-shell-geolocation/03-DEVICE-MATRIX.md b/.planning/phases/03-mini-app-shell-geolocation/03-DEVICE-MATRIX.md index d876afa..fd5c957 100644 --- a/.planning/phases/03-mini-app-shell-geolocation/03-DEVICE-MATRIX.md +++ b/.planning/phases/03-mini-app-shell-geolocation/03-DEVICE-MATRIX.md @@ -268,3 +268,48 @@ mid-session theme flip leg, then verdicts on all six legs + probe removal. | 6. Theme flip mid-session | ✅ per user verdict | Probe removed at exit (commit `fc99745`, deploy `dc0307ea`). Verification: 03-VERIFICATION.md. + +--- + +## 2026-10-25 — Phase 7 debt closure (/cari re-arm + A1/A3) + +D-07 items 2 and 3 (plan 07-05, task 3). The historical verdict table above is +the Phase-3 record and is untouched; this dated section is the closure. + +### A — the /cari re-arm attempt + +Ran `npm run bot:commands` (`bot/scripts/register-commands.mjs`, BOT_TOKEN from +gitignored `bot/.dev.vars`) on 2026-10-25. Every scope reported `ok:true`: + +``` +default (en) -> ok:true +default (ms) -> ok:true +all_private_chats (en) -> ok:true +all_private_chats (ms) -> ok:true +clear all_group_chats -> ok:true +clear all_chat_administrators -> ok:true +all command scopes armed +``` + +**Residual risk (unchanged by a successful re-arm):** Telegram clients cache the +command menu — a driver whose app cached the stale non-default scope may still see +`/cari` missing until the client restarts or re-syncs. The defect is Telegram's +`setMyCommands` scope-resolution behaviour (a chat's menu resolves from the narrowest +scope that has ANY commands set), not a bot bug; the command itself has always +worked. The user-facing statement plus the workaround (typing `/cari`) now live in +`docs/KNOWN-LIMITATIONS.md` (D-08, plan 07-05). + +### B — the A1/A3 assumption closure + +- **A1 (Android stale-fix hypothesis) is NOT RETIRED as a mechanism hypothesis** — + the Phase-3 walk completed WITHOUT needing the Location toggle on the tested + device and route ("A1 notes stand in 03-RESEARCH.md"), so the hypothesis was + simply not exercised, not disproven. The risk it covers is **MITIGATED-BY-DESIGN**: + the app's location chain degrades gracefully to polling when the stale-fix path + does not fire (`web/src/location/chain.ts`), so a stale native cache cannot strand + guidance. +- **A3 IS RETIRED as a decision constraint** — the project deploys to a remote + origin (`araharah-bot..workers.dev`), never to a LAN-IP dev server, so + the "localhost:8787 is a secure context" assumption no longer constrains any open + decision; `wrangler dev` remains a local convenience, not a deployment surface. +