feat(gesture): add gesture tap with 2 to 5 simultaneous contacts
Merged
CA
12h ago+2022+2022+0123456789012345678901234567890123456789-149-149-012345678901234567890123456789
Summary
Adds gesture tap: 2–5 distinct contacts, --hold-ms (default 50), and optional --count/--pause-ms for touch-heavy apps.
agent-device gesture tap 80 300 200 450 310 600 --count 20 --pause-ms 100
client.interactions.tapGesture({ points: [{ x: 80, y: 300 }, { x: 200, y: 450 }] })
- Renames topology
twotomulti; motion gestures retain two contacts. - Extends iOS runner and Android helper to 2–5 stationary contacts. WebDriver requires explicit
tapGesturesupport. - Replans each repetition against a fresh viewport. Series must fit 60 seconds, including 500 ms overhead allowance per tap.
- Shares tap/swipe repetition orchestration. Cancellation interrupts pauses, propagates the typed reason, and records no partial action.
- Updates ADR 0013 and GestureLab contact counters.
74 files. Scope includes swipe pause cancellation. No linked issue.
Validation
- Node 22:
pnpm check:affected --run --head e86c9d5d805b67f27ee29d227eb0ac724b7dd411passed; receiptrun-zcsUeI,exactCommit=true. Fixture commits used process-scopedcommit.gpgsign=falseafter a host GPG allocation failure reproduced on58eeb1239; selector tests pass 79/79 on both SHAs with that setting. - Cancellation evidence and receipt: 16 focused tests pass. Removing either boundary guard fails its regression. Fresh iPhone 17 Pro simulator/iOS 26.1 runs confirm tap/swipe pause cancellation and no recorded action at this head.
- Earlier GestureLab/contact-count runs on simulator, Android Seeker, and iPhone 12 remain at
7e653abd. - CI coverage, integration, and native lanes remain required. No fresh live Android ANR, iPadOS, Android emulator, or Limrun evidence. The 500 ms allowance remains an estimate.