Files
Arah2/.planning/phases/03-mini-app-shell-geolocation/03-VERIFICATION.md
T

58 lines
4.5 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 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 `<head>` |
| 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.
## Exit addendum (2026-10-23, post-verdict)
- Diagnostic probe removed (commit `fc99745`, deploy `dc0307ea`) — the probe's
exit obligation; final capture suite 7/7 green without it.
- GEO-03 runtime probe updated: the official `telegram-web-app.js` (debug
round 3) writes exactly one sessionStorage key (`__telegram__initParams`,
SDK launch bookkeeping, no coordinates). The probe now allowlists that
single platform key and still fails on ANY other write (`8a5c8b4`).
Our app's own surfaces remain byte-empty — the D-07 law holds.
- Final gates at close: web 33/33 · bot 50/50 · captures 7/7 · theme audit clean.