perf(android): bound target readiness and confirm moved clears
Summary
Bound Android press readiness and avoid redundant stale-tree recovery; reuse the warm helper for app launch. Confirm moved empty fields only from complete, fresh captures with unique pre/post identity. Dead helper sessions retire centrally; uncertain mutations fail without a resend.
const caps = await client.devices.capabilities({ platform: 'android' });
// caps.targetReadiness?.press === 'bounded-geometry'
Moving-clear fixture: 1.637 s plus failure→0.323 s success. Unsafe adapter timer bypasses were rejected; its settling timer remains. Experiment and limits. Experimental-engine parity remains open.
49 files, parent-relative: production +363/−51; tests +575/−21; docs +1485/−1; 2,496 gross lines. Stacked on #3811. Adapter #1253 stays draft pending SDK release/dependency bump. Reference: e2e#1234.
Validation
Final c2fddc1ef9, parent 1977e685b2, main a661e43d83: full rebased gate 16,439 passed/one skipped (run-watm1q); final incremental gate 1,946 passed (run-FXwZHp); both exact/unchanged. All 20 upper commits remain patch-equivalent after rebase; independent review has no findings.
Isolated mutations detect missing moved-clear handoff, dead-session admission, and cancellation bypass. Live API 36: helper refusal→ADB fill; controlled screenshot failure→PNG; warm open zero host launches; exited-helper open exactly one. Test-app fill/clear/refill preserves its sibling; native alert acceptance uses one cancellable host tap. Sessions/daemons closed.
Fresh full benchmark: original eef1a3f76d 335.069 s; pre-daemon 0a43d61ff6 282.000 s; final c2fddc1ef9 273.989 s (18.2% reduction from original). All 42 passed, one authored skip, zero retries/recoveries. One local run per arm. Older APIs/physical devices and actual-head CI obligations remain.