Highlights
- AI SDK and MCP integrations: A first-party
agent-device/ai-sdktool set makes agent-device available to AI SDK applications, while compact MCP instructions and an MCP-only help tool reduce setup and discovery overhead. #1804, #1839 - More accurate iOS snapshots: Private-AX scroll visibility is unified, offscreen subtree leaks and clamped descendants are removed, snapshot presentation becomes an explicit seam, and transition snapshots derive from the visible capture. #1798, #1807, #1811, #1845, #1831, #1848, #1850, #1851
- Better Android visibility and gestures: Covering siblings hide only the content they actually cover, snapshot scope resolves once with the API 23 evidence gap disclosed, and saturated scroll gestures stay below the status bar. #1808, #1846, #1820
- Web hover automation: The new
hovercommand supports hover-gated menus, tooltips, and other web UI that cannot be exercised with click or touch alone. #1786, #1817 - Safer sessions, devices, and cloud runs: Invalid path-like session names are rejected, sessionless mutations enforce device claims, remote diagnostics reach the caller, and WebDriver cloud creation has a bounded budget without leaking billed sessions. #1815, #1809, #1814, #1782
- Lean, more trustworthy CI: Native lanes skip docs-only changes, parked suites are dispatch-only, nightly iOS runs the full XCTest suite, transient comment failures no longer fail bundle-size checks, and redundant or cascading jobs are removed. #1791, #1794, #1789, #1795, #1787, #1822
Release breakdown
- 46 commits
- 44 merged pull requests
- 1 contributor
What's Changed
- ci: drop duplicate nightly-macos replay job (#1781 A2) by @thymikee in #1787
- fix: unify private AX scroll visibility by @thymikee in #1798
- chore: restore unreleased version by @thymikee in #1805
- fix: prevent private AX subtree leaks at source by @thymikee in #1807
- ci: skip device lanes for root-level docs-only changes (#1781 A9) by @thymikee in #1791
- test(android): restore full-tier lifecycle and observability scenarios (#1781 A1) by @thymikee in #1793
- ci: move parked device replay suites to a dispatch-only workflow (#1781 A1) by @thymikee in #1794
- test: assert the specific error code instead of any failure (#1781 B4) by @thymikee in #1790
- chore(format): ignore .claude/** in oxfmt so a main-checkout format can't sweep worktrees by @thymikee in #1803
- fix: hide clamped descendants of offscreen iOS rows by @thymikee in #1811
- feat(web): add hover command for hover-gated UI (#1783) by @thymikee in #1786
- ci: keep Bundle Size job green on transient GitHub comment failures by @thymikee in #1795
- fix(daemon): reject '.', '..' and empty session names so session artifacts stay under sessions/ by @thymikee in #1815
- feat(ai-sdk): add agent-device/ai-sdk tool set and document the MCP zero-code path by @thymikee in #1804
- fix: reject selector-shaped wait arguments instead of reading them as text by @thymikee in #1813
- ci(ios): run the full XCTest suite nightly and check the PR test list (#1781 A7) by @thymikee in #1789
- fix(ios-runner): reject CGRect.infinite in navigation frame guards by @thymikee in #1816
- fix: declare frameworkTier on the hover descriptor by @thymikee in #1817
- fix: enforce device claims for sessionless device mutations (#1799) by @thymikee in #1809
- fix(scroll): keep saturated scroll gestures out of the status bar; gate Android replays from android/emulator (#1781 A1) by @thymikee in #1820
- fix(android): let a covering sibling hide only what its content covers by @thymikee in #1808
- fix: report real claim results from daemon stop by @thymikee in #1818
- fix: read replay scripts on the caller and ship them with the request by @thymikee in #1810
- chore(test): remove the contention retry (0 fires since 07-29) and shrink the subprocess-stub project to its 3 real spawners (#1781 A4) by @thymikee in #1827
- chore(layering): document R12/R18/R19, retire R8, make R9 shrink mandatory (#1781 A6) by @thymikee in #1825
- fix: serve remote daemon request diagnostics to the caller by @thymikee in #1814
- fix(webdriver): give cloud session creation its own budget and stop leaking billed sessions by @thymikee in #1782
- refactor: migrate snapshot to device runtime by @thymikee in #1779
- refactor: split the test-suite command out of the replay handler by @thymikee in #1826
- fix(layering): keep the snapshot interactor seam out of the type cycle by @thymikee in #1838
- refactor(ios): establish snapshot presentation seam by @thymikee in #1845
- ci: park perf-nightly to dispatch and stop the coverage-gate cascade double-red (#1781 A3, A5) by @thymikee in #1822
- chore(mutation): shrink to report-only — drop the ratchet, baseline and graduation (#1457, #1781) by @thymikee in #1828
- test: prune abandoned test-run tmp directories at run setup by @thymikee in #1834
- feat(mcp): compact server instructions in both eras + MCP-only help tool by @thymikee in #1839
- fix: derive iOS transition snapshots from visible presentation by @thymikee in #1831
- refactor(ios): route snapshot backends through presentation by @thymikee in #1848
- docs(agents): ADR 0019 unit checklist, owning-seam mock rule, worktree and rebase guidance by @thymikee in #1836
- fix(android): resolve snapshot scope once and disclose the API 23 occlusion-scan gap (#1832 C1/C2) by @thymikee in #1846
- feat(ios): unify snapshot eligibility by @thymikee in #1850
- refactor: migrate diff to request-bound runtime by @thymikee in #1847
- test: pin test files over 1,000 lines at their exact length so they can only shrink by @thymikee in #1843
- test(ratchet): pin snapshot-handler.test.ts at main's 2654 lines by @thymikee in #1860
- fix: derive transition backend from capture by @thymikee in #1851
Contributors
- @thymikee — 44 pull requests
Full Changelog: v0.20.9...v0.20.10