Skip to content

fix(story-06): deterministic iOS sim + platform-split keyboard-guard smoke (#387)#490

Merged
Lykhoyda merged 1 commit into
mainfrom
fix/387-smoke-device-resolution-kbguard
Jul 6, 2026
Merged

fix(story-06): deterministic iOS sim + platform-split keyboard-guard smoke (#387)#490
Lykhoyda merged 1 commit into
mainfrom
fix/387-smoke-device-resolution-kbguard

Conversation

@Lykhoyda

@Lykhoyda Lykhoyda commented Jul 6, 2026

Copy link
Copy Markdown
Owner

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 open refuses on multiple booted. Fix: simctl shutdown all then boot exactly one in pre-boot.

2. Android fixture_bottom_button missing from the post-fill snapshot. The fill raised the soft keyboard; with adjustNothing the 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

…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>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@Lykhoyda Lykhoyda merged commit 27f320d into main Jul 6, 2026
14 checks passed
@Lykhoyda Lykhoyda deleted the fix/387-smoke-device-resolution-kbguard branch July 6, 2026 10:20
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>
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.

1 participant