fix(ios): verify deep-tree back on the sole screen
Merged
TH
3d ago+212+212+012345678901234567890123456789-27-27-01234567890123456789
Summary
- In-app
backnow recovers after the XCTest query rejection that deep trees cause on single-screen iPhones. It reuses the sole-screen synthesized dispatch and the before/after visual check. Healthy control selection and the #2728 outcomes are unchanged. - The top-leading fallback taps one point,
0.1·h(56–96), on both the window route and the sole-screen route. The health of the accessibility tree picks the route and the capture, not the target. A rejected query skips the windows query only where the sole screen answers; an iPad still asks for its windows. - 9 files: runner, display capture, regression tests, help, and the panel ADR.
Validation
Head 2864217fbe (main e3ed027a1d merged).
- On an iPhone 17 Pro (402x874), both the heavy-feed header and the automation-lab header put the back control at y 62–106. A tap at y 132 missed both; a tap at y 87 hit. Live heavy-feed
backsucceeded 3/3 (1127–1748 ms). With the heavy feed as the root screen,backreportedchanged=no, so back was unavailable. On an iPad deep tree the outcome is the same as base (unavailable). Details: https://github.com/callstack/agent-device/pull/3894#issuecomment-6337876717 - Earlier A/B on the Release heavy-feed fixture, base
9935ef51c2vsdb9c6a836a: 0/3 → 3/3, median 903 ms. - Runner Navigation tests: 18/18 on iPhone and on iPad. Mutations: an always-changed sole-screen capture fails only the new miss test; skipping windows on an iPad fails the new window-route test. Combined with #3893: 54/54 on both.
check:xctest-selectionpassed.check:affected --run --head 2864217fbepassed (exactCommit: true).
Known gap: on an iPad the bar sits at y 32–86, and the fallback point (y 96) misses it on both routes. This PR does not change that.
🤖 Generated with Claude Code