fix(webdriver): avoid unused pre-tap focus geometry reads

BH
29m ago
+78-12

Summary

Related to #3985/#3990; six files. Pre-tap identity only; post-tap validation, deadlines, classifications and no-resend writes unchanged. No timeout increase.

Workflow

flowchart LR
  F[fill] --> I[Pre-tap identity only]
  I --> T[Tap]
  T --> P[Existing post-tap checks]
  P --> D[Existing fill dispatch]
  I -->|error| E[Refuse]

Validation

Head: 9603d5f2777a79af8b45fad700760e881bc880c2; base: eedc0df3d2168275dcd89ed21613c3362d595731.

  • Same regression: base failed/head passed.
  • 94 unit + 13 provider/facade passed.
  • Exact-head affected gate: format/lint/types/layering/Fallow/build passed; related 979 passed/1 failed (Apple fake-record timeout), matching base 977 passed/1 failed. Gate failed.
  • Cubic clean. CI, Linux, Apple passed; Android cancelled.

Combined hosted proof

Local cbb02e58a1465003f3746afa5775e180dcd4826a: #3990@13d32dac + readiness runtime@42da9495; test-only conflict resolutions. Later changes are docs-only. Not unmodified-head proof. Combined 103 unit + 18 provider passed.

Public Swag Labs 2.7.1, dummy data. iPhone17/iOS26.6 and GalaxyS25/Android15: A stayed neighbor-unchanged; B changed empty→three masked characters after old. Later fixture-local login confirmed exact secure replacement.

iOS second-field wire, UTC (IDs normalized; intervening reads omitted):

17:07:43.964 GET /element/active          A
17:07:44.421 POST /actions               200
17:07:45.260 GET /element/active          B
17:07:45.574 GET /element/B/rect          200
17:07:45.813 POST /element/B/clear        200
17:07:46.051 POST /element/B/value "old"  200

Full-log audit: zero pre-tap rectangles, preserved post-tap rectangles, zero session POST /keys. Sessions closed. Underlying transport latency remains unexplained.

Pending: Android CI; second-landing rebase. #3990: live rejected-clear/WebView-password unproven.