Files
opencode-mobile/HANDOFF.md
2026-06-02 01:35:19 -07:00

5.7 KiB

OpenCode Mobile — Handoff (2026-06-02)

App: cc.agentlabs.opencode (OpenCode Mobile) — Expo/React Native Android client for a user self-hosted opencode AI server. Owner: VIBE TECHNOLOGIES, LLC. Repo: dzianisv/opencode-mobile. Full running log: context.md. Goal: bug-free E2E + published on F-Droid & Play + 1k downloads.


TL;DR status

Goal State
#1 App works E2E, no bugs ✅ Done & verified (CUA smoke green; 4 bugs fixed)
#2 F-Droid published 🟡 self-hosted repo LIVE; updating to v0.4.3 (publish fix in flight)
#3 Google Play published 🟡 internal track live (v0.4.3); production needs owner console step
#4 Store optimization (ASO) ✅ assets authored in distribution/
#5 1k downloads ❌ needs public listings + growth posting (owner)

App URLs


What was done this session (committed to main)

Bug fixes (goal #1) — npm run typecheck + npm test green, E2E smoke verified:

  • 0615ab8 gradle versionName 0.4.1→0.4.2 (stale vs app.json)
  • bed0b6f #10 root cause: single src/stores/sessionScope.ts helper so session list/create scopes can't drift; node:test regression guard + npm test script
  • 66b89f7 2nd scope bug: created session opened/sent via wrong client (nav lacked directory); now stamped on the session + passed through
  • 059b5cc send-failure after a session switch flashed error on / refetched the wrong session
  • Full runtime audit (dismissed 2 false-positives with evidence).
  • CUA smoke GREEN (run 26803479355): connect→create→list passes (was the #10 repro).

Publishing (goals #2/#3):

  • c66f4fb cut v0.4.3 (versionCode 5).
  • eea84a3 F-Droid publish fix: pin androguard==4.1.3 (the ==4.1.4 pin added 2026-06-01 crashed in parse_v2_v3_signature) + apksigner v1+v2-only re-sign step in publish-fdroid.yml. Verified locally that 4.1.3 parses the APK signer cert.
  • Tag v0.4.3 re-pointed → re-runs the F-Droid publish (in flight at handoff).
  • Play internal track auto-published v0.4.3 via publish-play-store.yml (success).
  • 67773fc corrected IzzyOnDroid doc (was stale ai.opencode.mobile).

OWNER ACTIONS REQUIRED — only these unblock #2/#3/#5 (agent cannot do them)

  1. Google Play → production (biggest unlock, ~15 min). Play Console → app → Monitor and improve → Policy → App content. Complete the declarations using the pre-written, code-verified answers in distribution/PLAY-APP-CONTENT-ANSWERS.md. Then Production → create release → add the v0.4.3 AAB (CI already uploaded) → roll out → submit for review.

  2. F-Droid reach (any/all):

    • Self-hosted repo updates automatically once the in-flight publish run is green — just share the repo URL above. (Verify: command below.)
    • IzzyOnDroid (fast, popular): file the inclusion issue at https://codeberg.org/IzzyOnDroid/repodata/issues using distribution/izzyondroid-submission/INCLUSION-REQUEST.md (needs a Codeberg account).
    • Mainline F-Droid: respond to maintainer review on MR #39530.
  3. Growth → 1k downloads: post the launch kit in distribution/launch/ (Show HN, Product Hunt, Reddit, X, dev.to) from your accounts; ASO copy in distribution/play-listing.md / app-store-listing.md.


Verify / common commands

npm run typecheck          # tsc --noEmit (clean)
npm test                   # node:test suite (4 passing)
gh run list --workflow=publish-fdroid.yml --limit 3      # F-Droid publish status
gh run list --workflow=cua-smoke.yml --limit 3           # E2E smoke status
# Is the live F-Droid repo updated to cc.agentlabs.opencode @ v0.4.3?
curl -s https://dzianisv.github.io/opencode-mobile/fdroid/repo/index-v1.json | \
  python3 -c "import sys,json;d=json.load(sys.stdin);print({p:[v['versionName'] for v in vs] for p,vs in d['packages'].items()})"

Gotchas / notes

  • expo prebuild regenerates android/build.gradle in CI → enforce signing in the workflow (apksigner re-sign step), not only in gradle.
  • F-Droid breaks on androguard 4.1.4 ('NoOverwriteDict' has no attribute 'append'); use 4.1.3. The published APK must be v1+v2-only (no v3) for it to parse.
  • Play versionCode = github.run_number (auto-monotonic); re-tagging won't collide.
  • F-Droid publish triggers on v* tags only (agent has no admin to workflow_dispatch/rerun; can push commits/tags).
  • Session directory-scope invariant: all session ops must use sessionScopeDirectory or sessions go invisible (this was bug #10).
  • Shared browser (chrome-devtools over Tailscale) was offline this session, so browser-driven console/Codeberg steps couldn't be attempted.

Infra references (durable)

  • OpenCode server (testing): 100.108.64.76:4096 (Tailscale host openclaw-dev-1).
  • CUA smoke vision model: Azure gpt-5.4; endpoint https://info-mjnxtt51-eastus2.cognitiveservices.azure.com; gpt-5.x needs max_completion_tokens (not max_tokens). Secrets in repo Actions.
  • GitHub auth (local): source ~/.env.d/github-dzianisv.env.
  • Signing: production key SHA-256 0C:25:9D:94:E0:FF:EA:5D:63:19:61:4B:22:9D:4B:6B:DC:22:DE:1F:56:E3:8E:76:94:83:98:D2:DF:6A:A0:99 (same key across Play / F-Droid / IzzyOnDroid — in-place updates work).