Mobile Tasks

Status: Android production APK passes physical-device startup smoke Owner: Core product team Last updated: 2026-07-08

Goal

Finish native mobile validation with Android first, then iOS, so both native clients match the production web experience for authentication, account state, workout history, progress, notifications, offline reads, and queued writes.

Working Rules

Baseline Commands

Run from the repository root unless noted otherwise.

pnpm install --frozen-lockfile
pnpm --filter @3plates/contract typecheck
pnpm --filter @3plates/mobile typecheck
pnpm --filter @3plates/mobile test
pnpm --filter @3plates/api typecheck
pnpm --filter @3plates/api test

Use the repo’s pinned runtime requirements: Node 24 and pnpm 9.15.4.

Android Device Test Command

With a physical Android device attached, USB debugging approved, and a production APK built, run:

pnpm --filter @3plates/mobile test:android:device

The device smoke test installs apps/mobile/dist/3plates-android-production.apk, launches com.christitustech.threeplates, waits for startup, confirms the process stays alive, saves full logcat output to apps/mobile/dist/android-device-smoke.log, and captures apps/mobile/dist/android-device-smoke.png so a mostly white blank first screen fails the check. The script locates adb from ANDROID_HOME, ANDROID_SDK_ROOT, the default Windows Android SDK path, or PATH. Use -- --fresh to clear app data before launch, -- --keep-open to leave the app open after the check, -- --screenshot <path> for a custom screenshot path, or -- --device <serial> when multiple devices are attached.

Current Android Build Decisions

Installed Android Toolchain

Phase 0 - Mobile Build Inventory

Purpose: make the native build path explicit before Android implementation starts.

Tasks:

Automated gate:

Commit gate:

Phase 1 - Android Build Foundation

Purpose: create a repeatable Android APK build that can be installed on a physical device.

Tasks:

Automated gate:

Evidence from 2026-07-08:

Production APK correction from 2026-07-08:

Physical-device startup fix from 2026-07-08:

Manual Android gate:

Commit gate:

Purpose: verify the account lifecycle on Android before checking product state.

Tasks:

Automated gate:

Manual Android gate:

Commit gate:

Phase 3 - Android Progress, Workouts, and Cached State

Purpose: verify the core product flows on Android against persisted backend state.

Tasks:

Automated gate:

Manual Android gate:

Commit gate:

Phase 4 - Android Notifications and Offline Writes

Purpose: finish Android native behavior for push registration and queued mutations.

Tasks:

Automated gate:

Manual Android gate:

Commit gate:

Phase 5 - Android Release Candidate

Purpose: cut a clean Android APK candidate for broad physical-device testing.

Tasks:

Automated gate:

Manual Android gate:

Commit gate:

Phase 6 - iOS Build Foundation

Purpose: start iOS only after the Android APK gate is complete.

Tasks:

Automated gate:

Manual iOS gate:

Commit gate:

Phase 7 - iOS Auth, State, Notifications, and Offline Regression

Purpose: match Android’s accepted behavior on iOS.

Tasks:

Automated gate:

Manual iOS gate:

Commit gate:

Phase 8 - Cross-Platform Release Readiness

Purpose: verify Android, iOS, and web behave as one product before store-facing work.

Tasks:

Automated gate:

Manual gate:

Commit gate:

Android APK Install Runbook

Use this after the Android APK build gate passes.

  1. On the Android device, open Settings and enable developer options by tapping Build number seven times.
  2. In Developer options, enable USB debugging.
  3. Connect the Android device to the computer over USB.
  4. When the device asks whether to allow USB debugging, approve the computer’s RSA fingerprint.
  5. Verify the device is visible:

    adb devices
    
  6. If the device shows as unauthorized, unlock the phone, approve the prompt, then run adb devices again.
  7. From the repository root, install the APK:

    adb install -r apps/mobile/dist/3plates-android-production.apk
    
  8. If Android blocks the install because of an older incompatible signature, uninstall the previous test build and reinstall:

    adb uninstall com.christitustech.threeplates
    adb install apps/mobile/dist/3plates-android-production.apk
    
  9. Launch 3Plates from the app drawer.
  10. Confirm the app opens, reaches the configured API, and shows sign-in when no session exists.
  11. Run the Android release-candidate regression checklist from Phase 5.
  12. Capture logs if the app crashes or hangs:
   adb logcat

Acceptance