From 9d6fdc64beb0f1d611a4510802f45da1f7c9952c Mon Sep 17 00:00:00 2001 From: araharah-executor Date: Fri, 23 Oct 2026 18:45:15 +0800 Subject: [PATCH] docs(03): device matrix PASSED + phase verification --- .../03-DEVICE-MATRIX.md | 16 +++++++ .../03-VERIFICATION.md | 46 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 .planning/phases/03-mini-app-shell-geolocation/03-VERIFICATION.md 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 867d777..d876afa 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 @@ -252,3 +252,19 @@ off-Telegram (SDK stub defines LocationManager and reports 6.0) where **Remaining for the exit:** Android boot-state choreography + reopen (no second prompt), Android stale-fix walk (A1), iOS (device permitting), mid-session theme flip leg, then verdicts on all six legs + probe removal. + +--- + +## FINAL VERDICT — 2026-10-23: **PASSED** (user: "device matrix passed") + +| Leg | Verdict | +|---|---| +| 0. BotFather origin prerequisite | ✅ workers.dev origin | +| 1. Android boot + persistence | ✅ LIVE, no second prompt | +| 2. Android stale-fix (A1) | ✅ per user pass; A1 notes stand in 03-RESEARCH.md | +| 3. iOS | ⚠ UNVERIFIED — no device (honest; Phase 7 hardening item) | +| 4. Desktop Telegram | ✅ native fix (`s ok · loc live`) — issue #77 denial class not hit on this client; chat-KB route remains test-gated | +| 5. Plain browser | ✅ deliberate denied state — evidence: `leg5-plain-browser-evidence.png` | +| 6. Theme flip mid-session | ✅ per user verdict | + +Probe removed at exit (commit `fc99745`, deploy `dc0307ea`). Verification: 03-VERIFICATION.md. diff --git a/.planning/phases/03-mini-app-shell-geolocation/03-VERIFICATION.md b/.planning/phases/03-mini-app-shell-geolocation/03-VERIFICATION.md new file mode 100644 index 0000000..97d1259 --- /dev/null +++ b/.planning/phases/03-mini-app-shell-geolocation/03-VERIFICATION.md @@ -0,0 +1,46 @@ +# Phase 3: Mini App Shell + Geolocation — Verification + +**Verified:** 2026-10-23 +**Method:** goal-backward against ROADMAP §Phase 3 success criteria, after in-execution debug rounds 1–6 (see 03-DEVICE-MATRIX.md) and the user's final device-matrix verdict ("device matrix passed"). + +## Success Criteria + +### SC1 (GEO-01) — Android: grant, live position on Rams basemap, permission persists — ✅ PASS +- Real Android phone, Telegram webview: boot reaches LIVE, `s ok` (probe round 7), position marker on the Rams basemap. +- Probe round 6 root-caused the last blocker: the server's HMAC validator excluded the Ed25519 `signature` field from the data-check-string (spec: exclude ONLY `hash` for the bot's own check). Fixed + regression-tested (T2b vectors, 50 bot tests) + live-verified (signed-with-signature initData → 200). +- User-confirmed reopen behavior: no second permission prompt. + +### SC2 (GEO-02) — fallback chain recovers origin — ✅ PASS (with a recorded upgrade) +- Telegram Desktop delivered a **native** geolocation fix (`s ok · loc live`) — stronger than the designed denial-class fallback (research's issue-#77 assumption retired on that client). +- The chat-keyboard fallback route is fully implemented and gated: `POST /api/location-fallback` (claim-scoped), `GET /api/location` relay, 60s bounded client poll, `?pin=1` harness capture — 48 bot + 33 web tests green. Not exercised live on-device because no tested client landed in the denied class during the matrix; the plain-browser leg proves the deliberate denied surface. + +### SC3 (PX-02) — deliberate denied state, themes, Rams-constant map — ✅ PASS +- Plain-browser leg evidence: `leg5-plain-browser-evidence.png` (real-browser capture at the deployed origin) — denied card over the Rams shell, red LOCATION OFF lamp, no blank, no off-Telegram settings CTA (version gate `19a51e5`). +- 7/7 capture suite includes light + dark live shots; theme-slot machine tested (PX02 gates); copy en+ms verbatim from the UI-SPEC (COPY1–6 gates). + +### SC4 (GEO-03) — no coordinate persists — ✅ PASS +- Automated runtime probe: localStorage/sessionStorage/cookies/IndexedDB all empty after a real boot-to-live cycle (03-04 capture harness). +- Session token memory-only (D-03/D-07); KV namespaces TTL-only (PG1/PG2 gates from 03-01). + +### SC5 — device-matrix exit pass — ✅ PASS (user verdict, 2026-10-23) +- Android ✅ · Telegram Desktop ✅ (native fix) · plain browser ✅ (denied by design) · theme flip ✅ (per user verdict) · iOS — not available: **UNVERIFIED — no device** (recorded honestly per the matrix protocol; does not block v1 KL-metro scope, flagged for Phase 7 hardening). + +## Debug rounds during execution (summary) + +| Round | Symptom | Root cause | Fix | +|---|---|---|---| +| 1 | No webview entry; dead CTAs on awaiting card | Menu button was `commands` (phase 2); wiring only on first denied instance | `set-menu-button.mjs` (web_app); wire both instances | +| 2 | No prompt / no enable path | `openSettings()` never invoked | LOCATION SETTINGS CTA + `locationManagerUpdated` re-run | +| 3 | App behaves as off-Telegram everywhere | `telegram-web-app.js` never loaded (research erratum) | Script tag in `` | +| 4 | Settings CTA missing on main denied card | Patch attached to wrong instance | Both instances | +| 5 | Buttons "dead" | Diagnostic probe added (removed at exit) | On-screen category-only probe | +| 6 | `s tampered` on real clients | HMAC dcs excluded `signature` (spec: hash only) | Validator fix + T2b regressions + live 200 proof | +| 7 | Probe readings decoded; CTA visible off-Telegram | SDK stub defines LocationManager at v6.0 | CTA eligibility = chain's 8.0 version gate | + +## Requirements coverage + +- **GEO-01** ✅ · **GEO-02** ✅ (native-desktop upgrade recorded) · **GEO-03** ✅ · **PX-02** ✅ + +## Verdict + +**PHASE 3: PASSED** — 4/4 plans executed; 5/5 success criteria met (iOS leg honestly UNVERIFIED, no device). Phase 4 (destination-search-+-kl-gazetteer) is next.