fix(mobile): guard App Store release versions#6177

merged2
main
agent/mobile-version-1-0-3
openedAug 11, 2026byJJulius Marminge
View on GitHubTwo-way sync enabledPR last imported 20d ago

Problem

Apple rejected a production iOS submission because version 1.0.2 had already been approved and its release train was closed. EAS increments the developer-facing build number, but does not increment the user-facing marketing version.

Fix

  • Bump the checked-in mobile marketing version to 1.0.3.
  • Default manual production builds to the version already in app.config.ts.
  • Add an optional workflow version override; when supplied, validate it, update and format app.config.ts, commit it through the release GitHub App, and push it to the dispatched branch before scheduling EAS.
  • Explain closed App Store release trains in the run summary and workflow documentation.
  • Keep EAS builds asynchronous with --auto-submit --no-wait, avoiding Blacksmith runner usage while EAS builds Android and iOS.

Impact

The next production binaries use a valid App Store version. Routine manual builds require no version input, while a release operator can intentionally start a new version train from the workflow without preparing a separate version-bump commit.

Validation

  • Production Expo config reports 1.0.3
  • Version override transformation check
  • Mobile TypeScript check
  • Mobile native static lint
  • Project lint
  • Workflow and app-config formatting
  • Git diff validation

Implemented with Codex (GPT-5) in T3 Code.


Note

Medium Risk Changes production mobile release automation and commits version bumps via a GitHub App; mistakes could cut wrong store binaries or miss submission failures because builds still use async --auto-submit --no-wait.

Overview Bumps the Expo marketing version in app.config.ts from 1.0.2 to 1.0.3 so the next store binaries use a fresh App Store version after a closed release train.

Extends manual workflow_dispatch production builds with an optional version input: when set, the workflow mints a release GitHub App token, rewrites apps/mobile/app.config.ts, formats, and commits/pushes the bump to the dispatch branch before building. Manual build runs also write a job summary that shows the resolved app version and warns that iOS needs a version newer than what Apple has already approved.

On push auto store builds, eas build now passes --no-wait (same as manual), so CI schedules build+auto-submit asynchronously and summarizes “scheduled” instead of blocking on completion. Workflow comments document that Apple closes an iOS release train after App Store approval and that version must be bumped before another iOS submit.

Reviewed by Cursor Bugbot for commit c8d39fe666850a45ff07e1a53e38d40777337633. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Guard App Store release versions with a manual version override in the mobile EAS production workflow

  • Adds a version input to the workflow_dispatch trigger in mobile-eas-production.yml; when provided, the workflow validates the version format, commits a version bump to app.config.ts, and pushes the change before building.
  • Mints a GitHub App token (via actions/create-github-app-token) on manual dispatch with a version override so the workflow can commit and push to the branch.
  • Both manual and push-triggered EAS builds now run with --no-wait, making the build submission non-blocking.
  • Bumps the app version in app.config.ts from 1.0.2 to 1.0.3.

Macroscope summarized c8d39fe.

Added 1 commit

  • fix(mobile): guard App Store release versionse2f7577
Synced from GitHub

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: af04a728-3425-4a48-a855-0b81830c3ba4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

Synced from GitHub

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire11.4 KiB11.3 KiB−23 B (−0.2%)15.1 KiB✅
CodexThread snapshot wire5.5 KiB5.5 KiB−6 B (−0.1%)7.3 KiB✅
CodexLive turn WebSocket wire5.9 KiB5.9 KiB−17 B (−0.3%)7.8 KiB✅
CodexLive turn WebSocket decoded49.7 KiB49.7 KiB0 B (0.0%)66.4 KiB✅
CodexLive turn messages16160 (0.0%)21✅
ClaudeTotal thread wire11.3 KiB11.3 KiB−8 B (−0.1%)15.1 KiB✅
ClaudeThread snapshot wire5.5 KiB5.5 KiB0 B (0.0%)7.3 KiB✅
ClaudeLive turn WebSocket wire5.9 KiB5.9 KiB−8 B (−0.1%)7.8 KiB✅
ClaudeLive turn WebSocket decoded50.6 KiB50.6 KiB0 B (0.0%)66.4 KiB✅
ClaudeLive turn messages16160 (0.0%)21✅

Baseline: c842c6f · PR result: c8d39fe · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 94.6 KiB
  • Claude decoded thread snapshot: 95.4 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Added 1 commit

  • fix(mobile): make release version override optionalc8d39fe
CcursorBotreviewed · 1 inline threadAug 11, 2026
Synced from GitHub

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is ON, but it could not run because the branch was deleted or merged before autofix could start.

Reviewed by Cursor Bugbot for commit c8d39fe666850a45ff07e1a53e38d40777337633. Configure here.

……@@ -178,8 +251,8 @@ jobs:
181- if eas build --platform "$platform" --profile production --auto-submit --non-interactive; then
182- echo ":building_construction: $platform: cut production build for $version (auto-submitted)" >> "$GITHUB_STEP_SUMMARY"
254+ if eas build --platform "$platform" --profile production --auto-submit --non-interactive --no-wait; then
255+ echo ":building_construction: $platform: scheduled production build and submission for $version" >> "$GITHUB_STEP_SUMMARY"
CcursorBoton line 255Aug 11, 2026

Async store submits hide failures

High Severity

Automatic production builds now pass --no-wait to eas build --auto-submit. The job succeeds as soon as work is scheduled, so App Store or Play submission rejections no longer fail GitHub Actions. That also releases the concurrency lock before the build finishes, so fingerprint-gated OTAs for the new native binary can be skipped while the build is still in flight and never retried.

Reviewed by Cursor Bugbot for commit c8d39fe666850a45ff07e1a53e38d40777337633. Configure here.