refactor: make iOS synthesized gesture policy explicit#1152
Conversation
Size Report
Startup median (7 runs, lower is better):
Top changed chunks:
|
|
Coverage is currently failing on CI for run 28941828847 / job 85865607515, while the workflow still has queued iOS/macOS smoke jobs. GitHub is not exposing the failed job log yet because the workflow is still in progress. Please inspect the Coverage logs when the run completes, address the failure, and reply with what changed and what validation remains blocked. |
Review —
|
|
Coverage logs are available now. The failing test is:\n\n |
|
CI is green again at 7deac38, and the coverage failure looks addressed by the provider timeout hardening. The latest commit does not address the open correctness review items from the prior pass, though: the policy still disables keyboard probing while AX health is .unknown, still uses app.frame as the healthy-AX reference frame, and still withholds XCTest-coordinate fallback before a synthesized drag/sequence context resolves. Keeping this off ready-for-human for now. Please address those findings or reply with the intended ordering/rationale plus any live device evidence so I can re-review. |
7deac38 to
1cbd4f3
Compare
|
Re-reviewed updated head 1cbd4f3 after the first-command synthesized drag fix. The previous blockers are addressed: drag and sequence now keep keyboard probing and XCTest-coordinate fallback available while AX health is unknown, app.frame is no longer used as the synthesized coordinate frame source, and the runner-source symbol verifier is shared. CI is green across 21/21 checks, including iOS smoke and Swift runner jobs. No actionable blockers found. Residual risk: I did not add local live device verification beyond reviewing the PR validation notes and green platform smoke checks. |
|
New head b3a7ba9 is still running platform smoke checks, so I removed the stale |
|
Re-reviewed updated head 6f31b39 after the synthesized policy simplification commits. The new delta keeps the prior fixes intact: synthesized command contexts use screenshot dimensions only, first-command drag/sequence keyboard probing and coordinate fallback remain available while AX health is unknown, and sequence synthesized tap/drag now share one context only because their policy values are equal and covered by unit tests. CI is green across 21/21 checks. No actionable blockers found. Residual risk remains live-device depth: I did not run additional local simulator/device verification beyond the green platform smoke checks. |
|
Re-checked latest head 95ae6cb. The only delta since the prior ready review is a comment correction in |
|
Re-checked current head abf3af8. The latest delta intentionally keeps synthesized gesture policy runner-local: the JSON manifest/TS mirror test is removed, while the Swift unit tests and ADR 0011 now carry the policy claims. The behavior reviewed previously is unchanged: screenshot-only coordinate frames, scroll private-synthesis-only fallback, and explicit synthesized drag/sequence fallback while AX is not known unavailable. CI is green across 21/21 checks, so I am keeping |
|
Summary
Make iOS synthesized gesture policy explicit in the runner with command/step-local contexts for AX health, frame source, keyboard probing, and fallback rules.
Default iOS scroll remains private-synthesis-only on AX unknown/unavailable screens. Explicit synthesized drag and sequence steps keep first-command keyboard avoidance and coordinate fallback while AX health is unknown, stop those AX-dependent paths once AX is stamped unavailable, and use screenshot-size coordinate frames instead of
app.frameso screenshot coordinates are not offset on non-fullscreen layouts. The TS policy checks now reuse a shared runner-source assertion helper.Validation
pnpm formatpnpm exec vitest run src/contracts/__tests__/synthesized-gesture-policy.test.ts src/contracts/__tests__/interaction-guarantees.test.tspnpm check:quickpnpm build:xcuitestAGENT_DEVICE_XCUITEST_INCLUDE_UNIT_TESTS=1 pnpm build:xcuitest