Repository navigation
Commit 9ef444a
committed
fix(ios): stop fill from failing and repairing fields that normalize their input (#2634)
The bug was textEntryValueEchoes' containment clauses, not the repair gate.
A field that reformats what it holds (a '## ### ## ##' digit grouping, a
phone mask, a currency format) shows the request with the formatter's
separators inserted; clauses 2/3 classify that as an echo, which withheld
the unconfirmed outcome, so the fill fell to mismatch -> destructive
clear-and-retype of a correct field -> TEXT_ENTRY_MISMATCH. Measured on
iPhone 18 Pro / iOS 27.0 against a digit-grouping fixture:
REPAIR_TEXT_ENTRY expectedLength=9 observedLength=12, then the mismatch.
A value that COMPLETES the request now falls through to the existing
unconfirmed-evidence path: every request character in order, plus inserted
characters strictly between the request's own characters that appear
nowhere in the request. Degradation removes; entry cannot insert a
separator between two characters the same burst typed, and a failed
clear leaves residual text at the ENDS of the typed run — so end-only
insertions ('old123456') stay echoes and keep their repair, while an
interior foreign insertion does not. Leftmost embedding and a
no-request-character-extras guard keep doubled entries and ambiguous
embeddings on the failure side.
This deliberately flips the pin that '(555) 123-4567' IS an echo: 'echo'
means 'could be a degraded copy', and a complete mask value is not one.
Completion is never a correctness claim — a cents-shifting mask passes it
— so the outcome is unconfirmed with before/after evidence, never
verified: true; only exact equality verifies. fill-evidence.ts already
names app-owned formatting as this shape's purpose; Android already
reports it unconfirmed; iOS was the outlier.
isRepairableTextEntryMismatch and the synthesized-replacement commit wait
are UNCHANGED; the coordinate route's exact-match-only settle is pinned as
an explicit non-goal. The write-back-truncation shape (ada@example ->
adxe) stays a typed failure under #2903's ownership, and so do drops,
stale residuals, and doubled entries.
Fixture: AgentDeviceDigitGroupingTextField reproduces the reported
formatter and restores the caret across reformats the way the real
formatter it models does; both normalizing device tests share one
fill-and-assert helper so their plumbing cannot drift. The device test
proves the repair no longer runs (message 'typed', not 'typed after
repair') and the field keeps 00 062 91 77.1 parent 24b2ce6 commit 9ef444a
6 files changed
Lines changed: 358 additions & 17 deletions
File tree
- apple/runner/AgentDeviceRunner
- AgentDeviceRunnerUITests
- UnitTests
- AgentDeviceRunner
- src/commands/schema
- website/docs/docs
Lines changed: 93 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
97 | 97 | | |
98 | 98 | | |
99 | 99 | | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
100 | 179 | | |
101 | 180 | | |
102 | 181 | | |
| |||
408 | 487 | | |
409 | 488 | | |
410 | 489 | | |
411 | | - | |
412 | | - | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
413 | 504 | | |
414 | 505 | | |
415 | 506 | | |
| |||
Lines changed: 56 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
47 | 54 | | |
48 | 55 | | |
49 | 56 | | |
50 | | - | |
51 | | - | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
52 | 64 | | |
53 | 65 | | |
54 | 66 | | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
55 | 109 | | |
56 | 110 | | |
57 | 111 | | |
| |||
0 commit comments