Skip to content

test(ios): speed up fixtures and run native regressions nightly - #3824

Merged
thymikee merged 10 commits into
mainfrom
test/ios-xctest-fixture-reuse
Oct 19, 2026
Merged

thymikee merged 10 commits into
mainfrom
test/ios-xctest-fixture-reuse

Conversation

@thymikee

@thymikee thymikee commented Oct 19, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Run the full native iOS regression suite nightly. PRs keep 338 host tests, four generated iOS branch checks, and public CLI E2E smoke.
  • Reuse native fixtures and check existing fixtures before XCTest's one-second polling wait. Retain native fault/identity oracles and remove the duplicate drag row.
  • Rebase onto perf: reduce iOS input readiness and PNG encoding latency #3820's readiness fix and preserve its production implementation. Scope expands to CI scheduling and profiling evidence: 26 files, 966 gross lines. Runtime +3/-2 (comments), tests +214/-234, CI/tooling +31/-73, evidence +409/-0.

Validation

  • Tested 14f32fb218ac9e5608012bf6a5805652dc61f7fc: affected gate passed, exactCommit=true, checkoutChanged=false (36 passed, 25 skipped, two deduplicated).
  • Same 118 methods: 718.284s → 484.579s local wall time. This includes upstream changes and warmer simulator state. Per-method results and attribution.
  • Those 118 plus 331 complementary methods cover all 449 nightly identifiers across runs: 448 passed, one expected failure, no unexpected failures or skips. Native source SHAs: 19573d42b0 / 7bb347f771.
  • Xcode 27.1: 15 focused checks passed; tooling: 75 passed. Five production mutants detected; restored controls pass. Four-method PR lane passes in 4.4s locally, including its count gate. Independent review found no issues.
  • CI at 14f32fb: Coverage and Integration passed. Android is blocked by #3831, a capture-stall signature also observed on main; cause unresolved, no infrastructure retry. Apple passed in 23m49s; iOS platform checks took 2m55s (four tests, 0.8s bodies). Native fault regressions now run after merge nightly.

@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Size Report

Metric Base Current Diff
Installed (including dependencies) 5.44 MB 5.44 MB +1 B
Package (unpacked) 5.44 MB 5.44 MB +1 B
Package (download) 1.64 MB 1.64 MB -13 B

Startup median (7 runs, lower is better):

Scenario Base Current Diff
CLI --version 42.4 ms 44.4 ms +2.0 ms
CLI --help 79.3 ms 81.6 ms +2.2 ms

@thymikee

Copy link
Copy Markdown
Member Author

The PR is ready at 431a94c. The code looks good, and I found nothing that needs a change.

Not blocking: the guardedCommands table in RunnerTests+CommandDispatchTests.swift has two identical drag entries ("standard drag" and "drag"), so you can drop one. The merged test also reports every failure only if continueAfterFailure is true, but the named assertions already identify the failing case, so no change is needed. Take or leave both.

Smoke Tests is still running, and I could not attribute any failure yet. The diff touches only the iOS runner XCTest sources, so it overlaps only the native iOS unit and regression route. I did not run the XCTest suite, so I have not confirmed that the merged tests pass or that the timing gain is real. I also did not confirm that the merged banner test fails when the interruption opt-out is removed, though the new stub assertion should catch that. There are no conflicts. Smoke Tests must finish green, including the native iOS runner unit tests, before this can merge.

@thymikee thymikee added the ready-for-human Valid work that needs human implementation, judgment, or maintainer merge label Oct 19, 2026
@thymikee
thymikee force-pushed the test/ios-xctest-fixture-reuse branch from 431a94c to 14f32fb Compare October 19, 2026 16:37
@thymikee thymikee changed the title test(ios): reuse fixtures across native regression cases test(ios): speed up fixtures and run native regressions nightly Oct 19, 2026
@thymikee

Copy link
Copy Markdown
Member Author

Addressed the optional duplicate drag row from the review. The retained drag assertion still catches the production mutant that admits non-tap commands to the cached activation bypass: one selected method fails on drag, scroll and sequences. The restored three-method control passes.

The complete profiling evidence records 118 matched methods, the 331-method nightly complement, the isolated fixture timing comparison, five detected mutants and Xcode 27 checks. Full native fault coverage now runs nightly; PRs retain host tests, four source-derived iOS branch checks and public CLI E2E. The optional-probe completion oracle moves with its test.

Final local receipt at 14f32fb218: passed, exactCommit=true, checkoutChanged=false; 36 passed, 25 skipped and two deduplicated. Hosted CI at this new head remains required. The PR stays ready for review.

@thymikee

Copy link
Copy Markdown
Member Author

Android at 14f32fb218 failed at wait text "Automation lab" 10000: one capture reached the deadline with zero readable captures (wait_capture_stalled). The screenshot shows the expected fixture screen; the subsequent diagnostic snapshot succeeded.

The same command, assertion and diagnostic failed on unchanged main a61556b8fd in run 39025922562. This PR does not change Android runtime or smoke inputs relative to base a661e43d83, whose own Android run passed. That establishes an older intermittent signature, not an infrastructure root cause.

Tracked in #3831 with ownership, both run links and the missing first-capture trace evidence. No timeout increase, skip or retry was applied. Android remains failed, and this PR is not merge-ready. Coverage and Integration passed at the actual head; Apple is still running. Ready-for-review status is preserved as requested.

@thymikee

Copy link
Copy Markdown
Member Author

The earlier clean review of 431a94c still holds at 14f32fb, and I found nothing in the diff that needs a change. The one failing check is Smoke Tests, in the step "Run Android smoke checks": waiting for "Automation lab" fails with wait_capture_stalled. This looks unrelated, because the diff touches no packages/ or src/ files and the Android capture and wait route does not overlap it; it also matches #3831, which you reproduced on unchanged main. I know of no conflicts. Before merge, re-run Smoke Tests or accept the Android failure as known flake #3831. The rewritten xctest-nightly.yml cannot run on this PR, and your evidence doc says the 449 nightly identifiers ran locally across two invocations, not as a dispatched CI run. I did not re-run those, the selection script or the Swift tests, and I did not check that each claimed mutation turns the new tap-count tests red. The lane counts (338 host, 4 PR, 449 nightly) come from your doc.

@thymikee
thymikee merged commit 26e7cb5 into main Oct 19, 2026
15 of 16 checks passed
@thymikee
thymikee deleted the test/ios-xctest-fixture-reuse branch October 19, 2026 17:42
@github-actions

Copy link
Copy Markdown
Contributor
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-10-19 17:42 UTC

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-human Valid work that needs human implementation, judgment, or maintainer merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant