Repository navigation
fix(ios): verify deep-tree back on the sole screen - #3894
Conversation
|
Size Report
Startup median (7 runs, lower is better):
|
|
I reviewed db9c6a8. I found no blocking problems in the code, but I did not rerun the heavy-feed live A/B or the native runner suite, so the live numbers come from the PR body alone. Cubic and Copilot have not reviewed this head yet. Lint, Typecheck & Package fails at packages/platform-apple/src/snapshot-route.test.ts:1003 (max-lines). This PR does not touch that file, the failure reproduces on base, and #3890 owns the fix. The check stays red until #3890 lands on main and this branch rebases. There are no conflicts. Not blocking, and you can take or leave these: (1) topLeadingNavigationFallbackPoint in RunnerTests+Navigation.swift:182 picks the y offset from windowResolved (0.155h clamped 56..132 versus 0.1h clamped 56..96). On a one-screen iPhone the resolved window frame and the sole-screen frame are the same rect, so the tap point for the same header depends on whether XCTest could read the tree. A deep-tree RN app with the tall search header would now be tapped at about 87 pt. (2) windowQueryRejected at RunnerTests+Navigation.swift:76 skips resolveRunnerWindowElement, but on an iPad soleScreenReferenceFrame returns nil, so back returns .unavailable. The base tried app.windows there, and I could not tell whether it still resolves on an iPad deep tree when navigationBars.buttons is rejected. (3) RunnerTests+NavigationTests.swift:37 drives the counter with a hand-written rejection issue, and no test covers a tap that lands on nothing on the sole-screen route, so an always-changed capture would still pass. Simplicity question: could you keep the capture choice keyed on context.resolvedWindow as it is, but use one geometry-derived fallback point, so AX health picks the route but never the target? Could windowQueryRejected also apply only where soleScreenReferenceFrame can answer? The next step is your answer on the y-offset in (1). |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AX health picks the route but no longer the target: the fallback taps 0.1h (56-96) on a resolved window and on the sole screen alike, the leading control of a standard bar (y 62-106 on a 402x874 iPhone). A rejected query skips the windows query only where the sole screen answers, so an iPad still asks for its windows as before. Tests cover a sole-screen tap that changes nothing and the iPad windows route after a rejected query. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks. Answers at (1) The y offset: use one point, 0.1·h clamped to 56–96I measured on my own iPhone 17 Pro simulator (402x874, iOS 27.0) with the Release test app:
The 0.155·h value (132 pt here) came from #1158 ("common custom RN search headers") with no recorded measurement. It misses both headers. The test app has no custom RN top-leading back: the product screen's back is a body button at y 418. So I found no header where 132 was right. I applied your simplification. The health of the accessibility tree now picks the route and the capture ( Known gap, unchanged by this PR: on an iPad (834x1210) the bar is y 32–86 and the back control y 32–76, so both 96 and 132 miss. (2)
|
|
This PR is ready at 2864217. The notes from the earlier review (#3894 (comment)) are addressed, and I found no new problems. All 19 checks pass at this commit, and the earlier max-lines failure came from the base and cleared with the main merge. I know of no conflicts, and nothing else needs to happen before merge. Not blocking, take or leave: I did not rerun the runner Navigation suite, the two mutations, or the heavy-feed live back. Those results come from the author's comment 6337876717. The change also lowers the resolved-window fallback height from 0.155h (132 pt cap, as on main) to 0.1h. The measurements cover a healthy native-stack header, not a |
Summary
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 fix(ios): use the resolved display for screenshots and visual verification #2728 outcomes are unchanged.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.Validation
Head
2864217fbe(maine3ed027a1dmerged).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: fix(ios): verify deep-tree back on the sole screen #3894 (comment)9935ef51c2vsdb9c6a836a: 0/3 → 3/3, median 903 ms.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