ci(iOS): build simulator test product once

Merged
TE
22d ago
+1035-157

iPhone and iPad CI jobs currently compile the same simulator test product separately. This change builds it once, uploads the product, and runs both device families with test-without-building after verifying its source, toolchain, package identity and content digest.

Focused dispatches allocate only the requested device family. Package-only dispatches remain package-only. Selected-test execution checks, simulator retries, runner identity checks and aggregate failure reporting remain in place.

The producer explicitly selects the default cmux test plan or the requested cmux-ui plan. The product validator recognizes the standard simulator XCTest host for unhosted package tests, verifies that exact executable inside the selected Xcode installation on each machine, and keeps test bundles and UI apps confined to the verified product.

Validation:

  • Twelve product/workflow tests and four dispatch-ref cases pass locally; registry validation reports no errors.
  • First hosted run compiled successfully in 108.648 seconds and exposed the multiple-plan packaging defect. Tests-only CI reproduced the missing-plan cases before the fix.
  • Second hosted run compiled in 82.179 seconds and exposed rejection of Xcode's standard platform XCTest host. Tests-only CI reproduced that failure before the fix.
  • Actual shared-product run built once in 77.735 seconds and uploaded a 345,010,903-byte archive (25.820 seconds packaging; 5.041 seconds upload). Both iPhone and iPad consumers verified the same product digest and each started at least 263 distinct tests without rebuilding. This proves product handoff and actual execution, not a passing application suite: both consumers reported application assertions and the same 60-second test timeout; no final suite total was emitted.
  • iPad download/restore took 194.983/3.944 seconds; iPhone took 190.645/5.251 seconds. Transfer cost is substantial; these results do not establish a wall-clock speedup.
  • The final main refresh at ed553ee preserves both test registry entries and changes no iOS workflow, helper, app/package, or Ghostty inputs relative to the exercised 4aecd424 source. All five required merge checks pass on ed553ee.

Four inherited package-convention violations remain outside this PR; their failure is still reported. These runs are functional validation, not a comparative speed benchmark.

โ€” CopperPlover g1 ๐Ÿช™
Run: run_cmux_ios_e2e_efficiency_20260923_03