On-device: production readiness — drop the Design-only gate, host assets properly, TestFlight rollout #642

Open
opened 2026-09-07 02:06:06 +00:00 by gambit-admin · 3 comments
Owner

Part of EPIC #632.

Today the native module refuses outside com.rungambit.design, assets are served from Kris's PC over tailscale (:8198), and the Settings toggles are Design-only. To ship: host encoder + packs + detector on a CDN/R2 with versioned manifests (same SHA-256 verified installer), remove the bundle-id gate behind a remote-config flag, a first-run download UX (size shown, wifi-only default, resumable, storage check), settings copy for real users, and the version bump (native change → new version, runtime policy appVersion). Keep EXPO_PUBLIC_* bases correct for the production profile — never inline the design base.

Depends on: size issue (nobody downloads 1 GB on first run), multi-game packs, heat issue.
Done when: a production TestFlight build with the flag on recognizes EN Pokémon offline after a one-time download ≤ 700 MB, and the flag can turn it off remotely.


Filed from a Claude Code session

Part of EPIC #632. Today the native module refuses outside `com.rungambit.design`, assets are served from Kris's PC over tailscale (`:8198`), and the Settings toggles are Design-only. To ship: host encoder + packs + detector on a CDN/R2 with versioned manifests (same SHA-256 verified installer), remove the bundle-id gate behind a remote-config flag, a first-run download UX (size shown, wifi-only default, resumable, storage check), settings copy for real users, and the version bump (native change → new `version`, runtime policy `appVersion`). Keep `EXPO_PUBLIC_*` bases correct for the production profile — never inline the design base. **Depends on:** size issue (nobody downloads 1 GB on first run), multi-game packs, heat issue. **Done when:** a production TestFlight build with the flag on recognizes EN Pokémon offline after a one-time download ≤ 700 MB, and the flag can turn it off remotely. --- Filed from a Claude Code session
gambit-admin added the feature label 2026-09-07 02:06:06 +00:00
Author
Owner

Rollout phases and decisions recorded on EPIC #632 (2026-09-06): Tower stays the fallback for local misses; phone-home default ON (#644). Phase B gates for this issue: size ≤ 700 MB (#637), per-game packs (#638), older-iPhone test (#646) sets the minimum device rule, remote-config flag per vendor, Tower agreement from #644 as the go/no-go number.

Rollout phases and decisions recorded on EPIC #632 (2026-09-06): Tower stays the fallback for local misses; phone-home default ON (#644). Phase B gates for this issue: size ≤ 700 MB (#637), per-game packs (#638), older-iPhone test (#646) sets the minimum device rule, remote-config flag per vendor, Tower agreement from #644 as the go/no-go number.
Author
Owner

Decisions 2026-09-06 (Kris):

  • No user-facing on-device toggle. Whether recognition runs on the phone is a remote-config flag per vendor (same mechanism as pricing mode). The three test toggles (on-device, find card edges, on-device only) + the benchmark screen move under the hidden DEVELOPER section, still behind the Design lock until the flag exists.
  • Prepackage the static parts, download the rest. Encoder + detector ship inside the app binary once the encoder is palettized (~250 MB, #637) — not at 581 MB. Card packs stay a silent background download on first launch with per-set deltas: new sets land every 1–2 weeks and OTA cannot carry 400 MB assets, so baking packs in would tie card data to App Store releases.
Decisions 2026-09-06 (Kris): - **No user-facing on-device toggle.** Whether recognition runs on the phone is a remote-config flag per vendor (same mechanism as pricing mode). The three test toggles (on-device, find card edges, on-device only) + the benchmark screen move under the hidden DEVELOPER section, still behind the Design lock until the flag exists. - **Prepackage the static parts, download the rest.** Encoder + detector ship inside the app binary once the encoder is palettized (~250 MB, #637) — not at 581 MB. Card packs stay a silent background download on first launch with per-set deltas: new sets land every 1–2 weeks and OTA cannot carry 400 MB assets, so baking packs in would tie card data to App Store releases.
Author
Owner

TestFlight behaviour decided 2026-09-06: cascade on-device → Tower → Gemini (Design testing runs fully on device with pricing only). This issue flips cardvisionOnDeviceOnly back to false for the production profile and puts on-device behind the remote-config flag.

TestFlight behaviour decided 2026-09-06: cascade **on-device → Tower → Gemini** (Design testing runs fully on device with pricing only). This issue flips `cardvisionOnDeviceOnly` back to false for the production profile and puts on-device behind the remote-config flag.
Sign in to join this conversation.