test(ios): stabilize text clearing and snapshot budget regressions
Merged
TH
5d ago+79+79+01234567890123456789-81-81-01234567890123456789
Summary
Make two iOS regressions independent of incidental XCTest recovery and host timing. Drop every select-all while retaining real synthesized deletes and field reads. Derive the refusal seed from the clear-pass budget.
Fix #3800 by supplying fixed snapshot, viewport, orientation, and keyboard facts around the intentionally delayed root read. Run the real capture plan off main. Retain delayed-entry, exact budget, and non-healthy assertions. Three test files; scope expands to the snapshot fixture that blocked CI. No production, timeout, retry, or selection changes.
Validation
Tested head: 090e27420ad5521a14f657c80cd09e33ad089145; rebased onto 3d9190107e with unchanged original patch verified by range-diff.
- At this head: Xcode 26.2/iOS 26.2, both regressions passed 1/1; Xcode 27.1/iOS 27.1, both passed 5/5. Builds passed; no test retries.
- Controlled prerequisite delay reproduced the old
capture-failedversusbudgetassertion. Negative controls fail both revised tests: dropping the deadline outcome yieldshealthy/no reason; restoring two clear passes retainsorather thanfresh. Production mutations were confined to a disposable checkout. pnpm check:affected --run --head 090e27420ad5521a14f657c80cd09e33ad089145passed: 2 checks passed, 5 skipped; receiptrun-ZKN3It,exactCommit=true,checkoutChanged=false.- Full-repository format, frozen install, build, XCTest selection, and independent review passed. CI is green at this head: iOS 125/125, Coverage, Integration Tests, repo guards, and remaining executable checks passed. Statuses: 15 successes, one cache matrix skipped, one review bot neutral. GitHub reports
CLEAN/MERGEABLE; no unresolved review threads. Ready to merge; no merge performed.