Measured 2026-07-05 (main): fill @ref "alpenglow" into the Bluesky search field takes ~6.4s wall for 9 characters — ~700ms/char — while the surrounding action+observe steps are each under 1s. Typing dominates every form-filling agent step. Reproduced repeatedly; independent of --settle (settle added only ~1s of that wall).
Where to look: the iOS runner typing path in apple-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/ (fill/typeText handling, likely RunnerTests+Interaction.swift) and the TS dispatch in src/commands/ interaction runtime. XCUIElement.typeText is normally much faster than this; suspects are a per-character typing loop, focus/tap preambles repeated per chunk, or explicit inter-keystroke delays. type exposes --delay-ms (default should be 0 — verify the default actually is 0 on this path and that fill doesn't inherit a nonzero delay).
Constraints:
- Keep fill's verification/retry semantics intact (chunk-safe input + post-fill verification; see the Android analog
fillAndroid for the pattern).
- No spawnSync — use src/utils/exec.ts helpers for any TS-side process work.
- If the runner Swift changes, the interaction guarantee matrix rules apply (
src/contracts/interaction-guarantees.ts — no semantic drift in guarantees; gesture/tap synthesis files must remain untouched).
Acceptance: a benchmarked fill of a 10+ character string on iOS simulator completes in well under 2s wall (measure before/after with the same command against a real app and paste both timings in the PR); unit + integration suites green; full gate incl. node --experimental-strip-types scripts/layering/check.ts.
Measured 2026-07-05 (main):
fill @ref "alpenglow"into the Bluesky search field takes ~6.4s wall for 9 characters — ~700ms/char — while the surrounding action+observe steps are each under 1s. Typing dominates every form-filling agent step. Reproduced repeatedly; independent of --settle (settle added only ~1s of that wall).Where to look: the iOS runner typing path in
apple-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/(fill/typeText handling, likelyRunnerTests+Interaction.swift) and the TS dispatch insrc/commands/interaction runtime.XCUIElement.typeTextis normally much faster than this; suspects are a per-character typing loop, focus/tap preambles repeated per chunk, or explicit inter-keystroke delays.typeexposes--delay-ms(default should be 0 — verify the default actually is 0 on this path and that fill doesn't inherit a nonzero delay).Constraints:
fillAndroidfor the pattern).src/contracts/interaction-guarantees.ts— no semantic drift in guarantees; gesture/tap synthesis files must remain untouched).Acceptance: a benchmarked fill of a 10+ character string on iOS simulator completes in well under 2s wall (measure before/after with the same command against a real app and paste both timings in the PR); unit + integration suites green; full gate incl.
node --experimental-strip-types scripts/layering/check.ts.