feat(limrun): serve iOS alert get/wait/accept/dismiss from tree capture

TH
2m ago
+2708-185

Summary

Closes #3349. Limrun iOS alert get/wait/accept/dismiss use existing element-tree capture and tap seams through the tree-alert driver and English vocabulary shared with Android. Ambiguous captures refuse untapped; dismiss never authorizes ATT. alert get reports visible|none|undecided.

Validation

Head: 957726b0de7e2049b556a0b58efceca0e4af31a6.

  • Direct gate run-Sh88Va passed with exactCommit: true and an unchanged clean checkout. Fresh isolated review found no new findings and assessed the size/design tradeoffs. All 22 threads are resolved.
  • Coverage's persistent-dialog failure was fixed in the driver, leaving the integration oracle unchanged. Cutoff paths use the latest completed observation; an undecided reread or no confirming answer remains unconfirmed. The press-cutoff disclosure has a detecting mutation test.
  • Corrected Android live proof at this head used only own-bundle FINE/COARSE permission revokes. The multi-grant sheet selected "While using the app", both permissions became granted, and the second lookup returned none. Quiet-screen dismiss returned typed alert-window-expired, dispatched: no; no tap-count claim is made. The prior global-reset violation and corrected evidence are disclosed in comment 6220298855.
  • Limrun live evidence at f584e8a15 uses an instrumented real client: one accept tap then absence, one denying dismiss tap, preferred location grant, and zero taps on an app dialog. Later commits change cutoff classification, tests and documentation.

CI: 18 successes, one skip and iOS smoke failed waiting for the deep-link destination (APP_NOT_RUNNING, wait_capture_stalled). Cause remains unestablished; no retry was taken. The branch conflicts with main; its owner is resolving it and investigating the failure. Limrun SDK 0.64.1 cannot abort in-flight elementTree/tap requests.