fix(story-06): deterministic iOS sim + platform-split keyboard-guard smoke (#387)#490
Merged
Merged
Conversation
…smoke step (#387) Two device-CI-surfaced fixes on the final acceptance run (28783702105): - iOS 'open' failed 'No booted ios device found (or multiple booted)' on a DerivedData cache-HIT run (the build step, which had incidentally normalized sim state, was skipped). Shut down all sims then boot exactly one in pre-boot — device_snapshot open refuses on >1 booted. - Android reached row 80 (union-bbox scroll works!) then failed at 'fixture_bottom_button missing from the post-fill snapshot': the fill raised the soft keyboard and, with adjustNothing, the bottom bar is occluded — and Android UiAutomator DROPS occluded views (195 nodes incl. the full keyboard, but no bottom bar). iOS XCUITest keeps them. So the keyboard-guard step is now platform-split: iOS re-snapshots for a fresh occluded ref and asserts the refusal contract; Android presses the pre-fill ref (cached coords now under the keyboard) WITHOUT re-snapshotting (which would invalidate it — ref-map only updates on explicit snapshot commands) and asserts the dismiss contract. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Lykhoyda
added a commit
that referenced
this pull request
Jul 6, 2026
…#387) (#494) iOS acceptance data: WITHOUT shutdown-all, iOS was green 2/3 (one flaky 'multiple booted'); WITH the #490 shutdown-all it went RN_FAST_RUNNER_DOWN 2/2. shutdown-all cold-boots the TARGET sim, and the XCUITest runner's warm launch then exceeds the 30s ready gate. Three fixes: - Pre-boot now PREFERS an already-booted (warm) iPhone and shuts down only EXTRAS — keeps the runner launch fast AND leaves exactly one booted (the reason shutdown-all existed). - READY_TIMEOUT_MS is overridable via RN_FAST_RUNNER_READY_TIMEOUT_MS; the iOS lane sets 120s so a slow CI warm launch is not a false DOWN. - The smoke driver dumps the worker stderr on open failure (the open envelope swallows the real runner/xcodebuild error). Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Final acceptance run 28783702105 got much further — union-bbox scroll works (Android reached row 80), integrity green — but surfaced two more device-CI issues:
1. iOS
open— 'No booted ios device found (or multiple booted)'. This was a DerivedData cache-HIT run, so the build step (which had incidentally normalized simulator state on the prior cache-miss runs) was skipped, leaving >1 booted sim.device_snapshot openrefuses on multiple booted. Fix:simctl shutdown allthen boot exactly one in pre-boot.2. Android
fixture_bottom_button missing from the post-fill snapshot. The fill raised the soft keyboard; withadjustNothingthe bottom bar is occluded, and Android UiAutomator drops occluded views (the debug artifact shows 195 nodes incl. the entire keyboard, but no bottom bar). iOS XCUITest keeps them. Fix: platform-split the keyboard-guard step — iOS re-snapshots for a fresh occluded ref and asserts the refusal contract; Android presses the pre-fill ref (cached coords now under the keyboard) without re-snapshotting (which would invalidate it — the ref-map only updates on explicit snapshot commands) and asserts the dismiss contract.Diff is the workflow pre-boot step + the smoke driver. Re-dispatch after merge is the both-lanes-green acceptance run.
🤖 Generated with Claude Code