Fix flaky iOS loading UI test gates #20

Closed
backmeupplz wants to merge 4 commits from fix/82-loading-release-gate into main
backmeupplz commented 2026-10-12 16:27:08 +00:00 (Migrated from github.com)

Fixes agentboard #82 (https://agentboard.icefish-betta.ts.net/#82). This change is test-only: it touches ios/UITests/LoadingLifecycle.swift and no app code.

Causes

  1. Release gate timing out (job):
    • The press itself was not dropped. The failure snapshot shows Release fixture requests with value: released.
    • The first predicate read started about 1s in, and its element lookup took about 3s on the busy CI simulator. The 4s budget therefore allowed only one read, and it finished past the deadline.
  2. Login test reading fixture-us (job): Sign in was tapped 0.3s after typeText returned, before the field had all the keystrokes.
  3. Rapid library switch (run on this PR): after picking Fixture Library from the title menu, Loaded title never appeared in 12 consecutive reads. Like the tab taps in #15, the short synthesized touch on the menu item was never proven to commit.

Changes

  • Waits on states the fixture holds until the test acts now share a 15s gateTimeout. They still require the same condition and return as soon as it holds, so passing runs take no longer. The affected waits are:
    • the release, hold and tab acknowledgments
    • initial loading
    • the cached title
    • in-flight sign-in and linking
    • the retained list after Back
    • the Link sheet reopening
  • A new type(_:_:) helper waits until the username field reads the full text before the test submits. The login and link tests both use it.
  • A new library(_:from:to:) helper picks a library with a deliberate 0.1s press on the title menu and its item. It then waits for the navigation title to change before the test asserts what that library shows. All three library switches use it.
  • app.debugDescription is now attached to several content waits, so a future failure comes with a snapshot.

The stale-response, retention and empty-state assertions are unchanged.

PlaybackPreparation has the same unconfirmed taps. It has no observed failures, so it is tracked separately as agentboard #83.

Fixes agentboard #82 (https://agentboard.icefish-betta.ts.net/#82). This change is test-only: it touches `ios/UITests/LoadingLifecycle.swift` and no app code. ## Causes 1. **Release gate timing out** ([job](https://github.com/backmeupplz/absplus/actions/runs/38272792775/job/114890899422)): - The press itself was not dropped. The failure snapshot shows `Release fixture requests` with `value: released`. - The first predicate read started about 1s in, and its element lookup took about 3s on the busy CI simulator. The 4s budget therefore allowed only one read, and it finished past the deadline. 2. **Login test reading `fixture-us`** ([job](https://github.com/backmeupplz/absplus/actions/runs/37853315102)): `Sign in` was tapped 0.3s after `typeText` returned, before the field had all the keystrokes. 3. **Rapid library switch** ([run on this PR](https://github.com/backmeupplz/absplus/actions/runs/38278483871)): after picking `Fixture Library` from the title menu, `Loaded title` never appeared in 12 consecutive reads. Like the tab taps in #15, the short synthesized touch on the menu item was never proven to commit. ## Changes - Waits on states the fixture holds until the test acts now share a 15s `gateTimeout`. They still require the same condition and return as soon as it holds, so passing runs take no longer. The affected waits are: - the release, hold and tab acknowledgments - initial loading - the cached title - in-flight sign-in and linking - the retained list after Back - the Link sheet reopening - A new `type(_:_:)` helper waits until the username field reads the full text before the test submits. The login and link tests both use it. - A new `library(_:from:to:)` helper picks a library with a deliberate 0.1s press on the title menu and its item. It then waits for the navigation title to change before the test asserts what that library shows. All three library switches use it. - `app.debugDescription` is now attached to several content waits, so a future failure comes with a snapshot. The stale-response, retention and empty-state assertions are unchanged. `PlaybackPreparation` has the same unconfirmed taps. It has no observed failures, so it is tracked separately as agentboard #83.
backmeupplz commented 2026-10-12 18:31:33 +00:00 (Migrated from github.com)

Superseded: this PR's reviewed head fe5d19f was merged into #21 (which was red-blocked on the same PlaybackPreparation sites) and shipped in main as 09088cbd9b. main's tree now equals fe5d19f plus the #83 delta. Closing to avoid a duplicate squash; the branch is left in place for the #82 worker to clean up.

Superseded: this PR's reviewed head fe5d19f was merged into #21 (which was red-blocked on the same PlaybackPreparation sites) and shipped in main as 09088cbd9b1adfccd7b286cf819249048383c96c. main's tree now equals fe5d19f plus the #83 delta. Closing to avoid a duplicate squash; the branch is left in place for the #82 worker to clean up.

Pull request closed

Sign in to join this conversation.
No description provided.