feat(interaction)!: remove target-readiness waits

Merged
TH
3d ago
+533-2106

Summary

Removes the replay target-readiness wait, per the #3077 decision: the audited hosted evidence showed no rescue on either platform. Replayed press/click/longpress no longer poll for a missing target; post-gesture and scroll observation are unchanged. Scripts that need to wait use an explicit step:

wait 'label=Continue'
press 'label=Continue'

Breaking for Node clients that passed readinessTimeoutMs (shipped in v0.21.19). The key is now retired: the Node client (at its projection seam) and MCP/CLI input (through the common row) refuse it on every command with INVALID_ARGS and "add an explicit wait for the target" instead of dropping it silently. Also removed: the capture_sparse refusal (only the poll produced it; replay now reports selector_not_found on an empty tree, like live commands) and five observeUntil options only the wait used. 62 files, 533+/2,106โˆ’; the gross budget is waived for removals. Leftover result forwarding is tracked in #3607.

Closes #3077

Validation

Head 1f26100da, with main merged at 562e798d1.

  • pnpm check:affected --base origin/main --run: pass (685 files / 5,151 tests).
  • Retirement tests (Node press, click, longpress, fill, swipe; MCP press and fill) fail when either refusal site is removed.
  • Fresh-context review and cubic findings fixed.
  • Live evidence on pre-rebase source f22ddb765: Android full fixtures plus six replays (87 actions, first attempt, zero healing); iOS diagnostic six replays (47 actions). A later app-switcher fixture failure is outside the corpus and occurs without this change.

๐Ÿค– Generated with Claude Code