fix(ios): read simulator snapshots past 64 accessibility levels
Summary
On an iOS simulator, snapshot dropped every control nested more than 64 accessibility levels deep, so press by label or ref could not find it. Fixes #4088.
- The daemon asks the simulator AX bridge for its full protocol bound, 128 levels, instead of 64 (
limits.ts). - One native request still reads at most 65 levels and the rest arrives through continuations, so trees up to 65 levels deep make exactly the same requests as before. Depth hints compare against that first request, so a hint is still forgotten once a probe-back succeeds.
- The continuation budget goes from 32 to 64. Without it, screens with several deep chains exhaust the budget and fall back to the slow runner capture. Exhaustion still fails closed (#2414).
8 files: the bridge README, the shared recovery fixture, and the native fixture, which now checks every continuation's levels.
Validation
Device run at 7fcde94 (the bridge change before review fixes to host-side hint bookkeeping, the hint cap, and tests), Xcode 26.6, iOS 26.5 simulator, iPhone 17 Pro, Deep target under N plain UIViews:
| screen | base 3b9e8d1 | head |
|---|---|---|
| AX depth 25–64 | found, pressed | same |
| AX depth 65–125 | missing, Selector did not match | found, pressed |
| 70×20 chains | 8/20, 5471 ms (runner fallback) | 20/20, 516 ms |
| 100×12 | 0/12, 397 ms | 12/12, 535 ms |
| 120×20 | 0/20, ~6.4 s (budget exhausted) | same |
At d1a2434 on macOS: snapshot-source vitest 134/134 (native fixtures included), oxlint, typecheck, fallow audit --base upstream/main, check:production-exports. Runner conformance XCTests passed at 7fcde94 (fixture unchanged since).
No check:affected --run receipt: locally layering and eager-closure-budgets.test.ts fail identically on the unchanged base (the clone's origin is a stale fork). CI is the record. Not tested: Xcode 27, iOS 27, physical devices.
Changes made by Claude Opus 5.5 in Claude Code (T3 Code).