Skip to content

Bump iOS to 1.0.3 (build 9) to ship Begin-crash fix (#259)#260

Merged
auerbachb merged 2 commits into
mainfrom
issue-259-bump-ios-build-9
Apr 27, 2026
Merged

Bump iOS to 1.0.3 (build 9) to ship Begin-crash fix (#259)#260
auerbachb merged 2 commits into
mainfrom
issue-259-bump-ios-build-9

Conversation

@auerbachb
Copy link
Copy Markdown
Owner

@auerbachb auerbachb commented Apr 27, 2026

Summary

Bump iOS to 1.0.3 (build 9) so the Begin-button crash fix from #250 / PR #256 reaches TestFlight and the App Store. Build 8 (currently shipping) is broken — every Begin tap crashes.

Next steps after merge

Per `ios/RELEASING.md`:

```bash
git checkout main && git pull
git tag ios-v1.0.3-build9
git push origin ios-v1.0.3-build9
```

The tag push triggers .github/workflows/ios-testflight.yml which archives + uploads to TestFlight automatically.

Test plan

  • Local CR review clean
  • CI green
  • After merge: `ios-v1.0.3-build9` tag pushed
  • TestFlight upload succeeds
  • Smoke test on device: Begin → timer loads, complete a session
  • Promote build 9 to App Store after TestFlight smoke passes

Closes #259

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Chores
    • Bumped iOS build number from 8 to 9 across release metadata and documentation.
    • Updated release checklist and procedure text to reflect the new build and suggested commit/tag names.
    • Revised App Store submission target date to 2026-04-29 and added a note linking the sequence to TestFlight build 9 smoke test results.

Build 8 (currently on the App Store) crashes on Begin tap. The fix
landed in main at 3780c0a (PR #256, closes #250) but won't reach users
until a new build is uploaded.

- ios/project.yml: CURRENT_PROJECT_VERSION 8 -> 9
- ios/QA_CHECKLIST.md: header + line 34 referencing build 9
- ios/RELEASING.md: example commands updated to ios-v1.0.3-build9

Closes #259

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
still-point Ignored Ignored Preview Apr 27, 2026 8:57pm

Request Review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 27, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 42e012a8-1146-4830-ae2e-cae0ab0c77e7

📥 Commits

Reviewing files that changed from the base of the PR and between 1be778a and 5618e61.

📒 Files selected for processing (1)
  • ios/QA_CHECKLIST.md
✅ Files skipped from review due to trivial changes (1)
  • ios/QA_CHECKLIST.md

📝 Walkthrough

Walkthrough

Bumped the iOS application build number from 8 → 9 in the Xcode project configuration (CURRENT_PROJECT_VERSION) and updated related release documentation (QA checklist and RELEASING guide) including example commit, tag, and submission dates.

Changes

Cohort / File(s) Summary
iOS Release metadata & config
ios/QA_CHECKLIST.md, ios/RELEASING.md, ios/project.yml
Updated CURRENT_PROJECT_VERSION from 89 in ios/project.yml; aligned ios/QA_CHECKLIST.md and ios/RELEASING.md (build number, example commit/tag names, last-updated and App Store target date, TestFlight note).

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Possibly related issues

Possibly related PRs

Poem

🐰 hops with a tiny drum
From eight to nine I bound and cheer,
A little bump to bring release near,
Files updated, tags in line,
Build nine ready — hop! 🎉

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: bumping the iOS build to version 1.0.3 (build 9) to deploy a Begin-crash fix, which is clearly reflected in all modified files.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue-259-bump-ios-build-9

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

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
ios/QA_CHECKLIST.md (1)

39-39: ⚠️ Potential issue | 🟡 Minor

Consider updating the stale target date.

The App Store submission target date of 2026-04-24 is three days in the past, but the submission checklist item remains unchecked. Consider updating this to reflect the current timeline, especially since the PR description indicates submission will occur after TestFlight verification of build 9.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@ios/QA_CHECKLIST.md` at line 39, Update the stale "Target date: 2026-04-24"
entry in ios/QA_CHECKLIST.md to reflect the current timeline (or remove it if
the date is TBD) so the App Store submission target matches the PR plan to
submit after TestFlight verification of build 9; locate the "Target date:
2026-04-24" line and replace it with the new agreed date or a "TBD" and ensure
the corresponding checklist item status is consistent with that change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@ios/QA_CHECKLIST.md`:
- Line 39: Update the stale "Target date: 2026-04-24" entry in
ios/QA_CHECKLIST.md to reflect the current timeline (or remove it if the date is
TBD) so the App Store submission target matches the PR plan to submit after
TestFlight verification of build 9; locate the "Target date: 2026-04-24" line
and replace it with the new agreed date or a "TBD" and ensure the corresponding
checklist item status is consistent with that change.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 40d7ecbc-d0e7-42bf-abd1-ddf2ac96826a

📥 Commits

Reviewing files that changed from the base of the PR and between 3780c0a and 1be778a.

📒 Files selected for processing (3)
  • ios/QA_CHECKLIST.md
  • ios/RELEASING.md
  • ios/project.yml

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@auerbachb
Copy link
Copy Markdown
Owner Author

@coderabbitai Fixed in latest commit: ios/QA_CHECKLIST.md:39 target date refreshed to 2026-04-29 (after TestFlight build 9 smoke test passes).

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 27, 2026

Tip

For best results, initiate chat on the files or code changes.

@auerbachb Thanks for the update! The target date at line 39 of ios/QA_CHECKLIST.md refreshed to 2026-04-29 (after TestFlight build 9 smoke test passes) looks good — that ties the promotion gate cleanly to the smoke test outcome.

@auerbachb
Copy link
Copy Markdown
Owner Author

@cursor review

Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 5618e61. Configure here.

@auerbachb auerbachb merged commit 90fd4cd into main Apr 27, 2026
14 checks passed
@auerbachb auerbachb deleted the issue-259-bump-ios-build-9 branch April 27, 2026 21:06
auerbachb added a commit that referenced this pull request Apr 27, 2026
The iOS Begin-button crash (issue #250) shipped in App Store build 8
despite having a UI test that taps Begin and asserts SessionView mounts.
Root cause for the gap: scripts/e2e/run-ios-tests.sh pointed at
ios/StillPointUITests (the actual directory is ios/StillPointAppUITests),
and on missing-directory it set FINAL_STATUS="skipped" + exit 0 — so the
ios-e2e-smoke / ios-e2e-critical CI checks have been "passing" without
running anything for an extended period. Logs from PR #260 confirm:
"iOS E2E suite not present (ios/StillPointUITests); skipping critical lane."

This PR closes the gap on three layers:

1. Fix the runner script:
   - IOS_UI_TESTS_DIR default -> ios/StillPointAppUITests
   - Drop bogus -testPlan StillPointE2E (no .xctestplan exists)
   - Lane mapping points at the real classes/methods:
     smoke -> StillPointAppUITests/StillPointAppUITests/testLaunchLoginCompleteSessionAndHistoryPersistence
     critical -> StillPointAppUITests/StillPointAppUITests
   - Hard-fail (exit 1) on missing test directory, never silently skip
   - Add IOS_TEST_CONFIGURATION knob so callers can pin Release config

2. Add a Release-config pre-flight gate to ios-testflight.yml:
   - New pre-flight-tests job runs the smoke lane with
     IOS_TEST_CONFIGURATION=Release on simulator
   - build-and-upload now `needs: pre-flight-tests` — a failing UI test
     blocks the TestFlight upload outright
   - Uploads simulator DiagnosticReports + xcresult bundle on every run

3. Defense in depth on PR-time runs:
   - e2e-ios.yml uploads simulator DiagnosticReports as artifact too,
     so any future silent crash leaves a recoverable trace
   - ios/QA_CHECKLIST.md gains a Pre-tag manual smoke section for the
     real-device pass that the simulator gate cannot fully replace

After this lands, intentionally re-introducing the build 8 bug on a
throwaway branch should fail the pre-flight gate and block a hypothetical
TestFlight tag push, satisfying the issue's primary acceptance criterion.

Closes #253

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
auerbachb added a commit that referenced this pull request Apr 27, 2026
* Add iOS Release-config UI test gate to TestFlight workflow (#253)

The iOS Begin-button crash (issue #250) shipped in App Store build 8
despite having a UI test that taps Begin and asserts SessionView mounts.
Root cause for the gap: scripts/e2e/run-ios-tests.sh pointed at
ios/StillPointUITests (the actual directory is ios/StillPointAppUITests),
and on missing-directory it set FINAL_STATUS="skipped" + exit 0 — so the
ios-e2e-smoke / ios-e2e-critical CI checks have been "passing" without
running anything for an extended period. Logs from PR #260 confirm:
"iOS E2E suite not present (ios/StillPointUITests); skipping critical lane."

This PR closes the gap on three layers:

1. Fix the runner script:
   - IOS_UI_TESTS_DIR default -> ios/StillPointAppUITests
   - Drop bogus -testPlan StillPointE2E (no .xctestplan exists)
   - Lane mapping points at the real classes/methods:
     smoke -> StillPointAppUITests/StillPointAppUITests/testLaunchLoginCompleteSessionAndHistoryPersistence
     critical -> StillPointAppUITests/StillPointAppUITests
   - Hard-fail (exit 1) on missing test directory, never silently skip
   - Add IOS_TEST_CONFIGURATION knob so callers can pin Release config

2. Add a Release-config pre-flight gate to ios-testflight.yml:
   - New pre-flight-tests job runs the smoke lane with
     IOS_TEST_CONFIGURATION=Release on simulator
   - build-and-upload now `needs: pre-flight-tests` — a failing UI test
     blocks the TestFlight upload outright
   - Uploads simulator DiagnosticReports + xcresult bundle on every run

3. Defense in depth on PR-time runs:
   - e2e-ios.yml uploads simulator DiagnosticReports as artifact too,
     so any future silent crash leaves a recoverable trace
   - ios/QA_CHECKLIST.md gains a Pre-tag manual smoke section for the
     real-device pass that the simulator gate cannot fully replace

After this lands, intentionally re-introducing the build 8 bug on a
throwaway branch should fail the pre-flight gate and block a hypothetical
TestFlight tag push, satisfying the issue's primary acceptance criterion.

Closes #253

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Fix iOS e2e simulator destination + CR Minor (archive vs ipa)

- run-ios-tests.sh: default simulator iPhone 16 -> iPhone 17. macos-26
  runners no longer have an "iPhone 16" simulator (only "iPhone 16e"),
  so xcodebuild was failing immediately with "Unable to find a device
  matching the provided destination specifier". This was the actual
  cause of the iOS e2e failures on this branch — once the runner script
  stopped silently skipping (per the parent fix in this PR), it surfaced
  the simulator mismatch as a real failure. iPhone 17 is the runner's
  current default phone simulator.
- QA_CHECKLIST.md: clarify the install step. An xcarchive is not directly
  installable; reword to either (a) install the TestFlight build via the
  TestFlight app (preferred) or (b) export an Ad Hoc .ipa and drag it
  onto the device. Addresses CR Minor on PR #261.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Add [E2E-DIAG] launch-time diagnostics + UserDefaults synchronize (#253/#266)

After PR #267's reset-store wipe + 30s launchTimeout bump, three iOS UI
tests still fail on the same auth-screen waitForExistence assertion.
The fix didn't move the needle on the actual symptom, so before pushing
more fixes blind, instrument the suspect surfaces:

- APIClient.init: print parsed UITestConfig + final isAuthenticated.
  This tells us whether SP_UI_TEST_MODE is being honored and whether the
  reset-store path actually produced a fresh isAuthenticated=false store.
- AppViewModel.checkAuth: print final currentView slug + currentUser
  email + elapsedMs, so we can correlate with APIClient.init and see if
  the app is landing on .auth/.home/something else.
- Defensive defaults.synchronize() after the reset wipe in case there's
  a cross-process cfprefsd timing issue specific to macos-26 + iOS 26
  simulator.

The print() lines are guarded by uiTestConfig != nil so they're noise-free
in production builds.

Refs #253, #266, PR #261

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Pick first available iPhone simulator instead of hardcoding (CodeAnt)

CodeAnt flagged: hardcoding `iPhone 17` as the default has the same
infra-failure mode that bit us when the prior default `iPhone 16` was
removed from the macos-26 runner image. Future runner refreshes will
break this lane the same way.

Replace the hardcoded default with a runtime fallback chain. The new
resolve_test_destination function:

- Honors IOS_TEST_DESTINATION env var if explicitly set (unchanged)
- Otherwise greps `xcrun simctl list devices available` for the first
  installed iPhone from a preferred-order list (17 Pro, 17, 17 Pro Max,
  17e, 16e, 16 Pro, 16, 15 Pro, 15, Air)
- Last-resort fallback to the prior hardcoded default so xcodebuild's
  own error message surfaces if the host has no iPhone simulators at all

Echoes the resolved destination into the CI log so future failures show
exactly which simulator was selected.

Refs PR #261, addresses CodeAnt Suggestion finding from 2026-04-27.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Gate [E2E-DIAG] checkAuth print on SP_UI_TEST_MODE (CodeAnt PII)

CodeAnt flagged: the diagnostic print included currentUser.email, which
would leak PII into production logs. Gate the entire print on
SP_UI_TEST_MODE=1 so the diag only emits during UI-test runs (the only
context where it's useful) and is silent in production.

The fixture sets SP_UI_TEST_MODE=1 via launchEnvironment, so test runs
keep the diagnostic for debugging while production builds emit nothing.

Refs PR #261 / CodeAnt finding 2026-04-27.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cut iOS build 9 to ship the Begin-button crash fix

1 participant