iOS: fix flaky OfflineLibrary Storage swipe-to-remove (#95) #25

Merged
backmeupplz merged 5 commits from fix/95-offline-swipe-remove into main 2026-10-13 01:30:56 +00:00
backmeupplz commented 2026-10-12 22:57:58 +00:00 (Migrated from github.com)

Fixes agentboard #95 (https://agentboard.icefish-betta.ts.net/#95).

Problem

OfflineLibrary.testMembershipStorageAndLiveCompletion failed in CI (iOS (offline-progress)) because partial.swipeLeft() on the Storage row didn't reveal the swipe action. The swipe was synthesized on the short title text, right after the fast app.swipeUp() loop that stops as soon as the title peeks in, which often leaves it at the bottom edge by the home indicator, on a list that may still be moving.

Change (test only)

  • Scroll Storage with slow swipes until the title is hittable, then center the row with one held vertical drag (no momentum) and wait (bounded) for its frame to settle.
  • Reveal the action with a deliberate slow partial drag across the row cell (90% → 60% of the width, end hold), retried at most 3 times; every attempt must stay on Storage (Downloads nav bar), never opening details.
  • The test still proves the real behavior: Remove must be hittable and belong to the partial row (same midY), and tapping it must delete the row. A full swipe that deletes without the tap fails the test.

Verification

  • Local (Xcode 27, iPhone 17 simulator): both OfflineLibrary tests passed 5/5 iterations each at the final head; the first drag revealed Remove every time. The previous head also passed 5/5 + 3/3.
  • Negative control: removing .swipeActions from the Storage list makes the test fail at "Swipe reveals the Remove action".
  • Baseline (unchanged) test passed 4/4 locally, so the flake is CI-only; CI reruns are the reliability evidence.
Fixes agentboard #95 (https://agentboard.icefish-betta.ts.net/#95). ## Problem `OfflineLibrary.testMembershipStorageAndLiveCompletion` failed in CI (`iOS (offline-progress)`) because `partial.swipeLeft()` on the Storage row didn't reveal the swipe action. The swipe was synthesized on the short title text, right after the fast `app.swipeUp()` loop that stops as soon as the title peeks in, which often leaves it at the bottom edge by the home indicator, on a list that may still be moving. ## Change (test only) - Scroll Storage with slow swipes until the title is hittable, then center the row with one held vertical drag (no momentum) and wait (bounded) for its frame to settle. - Reveal the action with a deliberate slow partial drag across the row cell (90% → 60% of the width, end hold), retried at most 3 times; every attempt must stay on Storage (Downloads nav bar), never opening details. - The test still proves the real behavior: `Remove` must be hittable and belong to the partial row (same midY), and tapping it must delete the row. A full swipe that deletes without the tap fails the test. ## Verification - Local (Xcode 27, iPhone 17 simulator): both OfflineLibrary tests passed 5/5 iterations each at the final head; the first drag revealed Remove every time. The previous head also passed 5/5 + 3/3. - Negative control: removing `.swipeActions` from the Storage list makes the test fail at "Swipe reveals the Remove action". - Baseline (unchanged) test passed 4/4 locally, so the flake is CI-only; CI reruns are the reliability evidence.
Sign in to join this conversation.
No description provided.