v2.3.0
Audit of the layout and inspection tools against three real apps (RN 0.81 / 0.83 / 0.85, static-config and dynamic React Navigation and Expo Router, iOS and Android each). Twelve defects found; all fixed and verified on device.
Two silent failures
inspect_at_point was answering from partial data. A 500-node cap and a depth-250 cap discarded 45% of measurable host fibers on a mid-size screen, and the hit-test then ran against whatever survived — returning a confident wrong element rather than an error. Limits are now high enough not to bite, and anything that trips them is reported via incomplete.
The layout tools disagreed on what a coordinate meant. The screenshot formatters compensated for Android's status bar and for react-native-screens modals measuring from their own container; the point-space tools did not. So the documented "divide screenshot pixels by the device pixel ratio" landed an inset off whenever a modal was open. get_screen_state, get_screen_layout, measure, inspect_at_point, the screenshot summaries and tap now share one screen space — take a coordinate from any of them and pass it to any other unchanged.
Also fixed
- Route detection failed under
createStaticNavigation— every existing strategy missed it - Buttons inside a
ScrollViewwere reported as<ScrollView /> - A closed drawer's
opacity: 0scrim was listed as a full-screen tap target - Text frames reported the enclosing scroll container instead of the glyphs
- Local-asset images were listed twice, once per source form
inspect_at_pointreported an icon's box as its button's frame (fiber-alternate lookup)inspect_at_point'shierarchyinterleaved ancestors from two different screensmeasuresilently skipped screen-space normalisation, off by the status bar on Android
Removed
get_pressable_elements is gone. It was a weaker second implementation of get_screen_state, and its Android coordinates were wrong — five distinct list rows all reporting one 11x57 frame. Both screenshot fallbacks that called it are gone too; that fallback was what let the two renderings drift apart. Use get_screen_state, which additionally reports the active route, groups elements behind an open overlay or raised keyboard, and gives every element a tap-ready centre and frame.
58 tools (was 59). Net -652 lines.