Skip to content

E2E matrix across Xcode 26/27 × Simulator.app/Device Hub, plus the #76 login-flow fixture fix - #77

Merged
onevcat merged 2 commits into
mainfrom
feat/e2e-matrix
Jul 28, 2026
Merged

onevcat merged 2 commits into
mainfrom
feat/e2e-matrix

Conversation

@onevcat

@onevcat onevcat commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

What

Two commits:

  1. make e2e-matrix (scripts/e2e-matrix.sh) — runs the iOS E2E suites across the four supported host environments:

    leg selected Xcode UI host at boot HID transport exercised
    x26-sim Xcode 26.x Device Hub closed legacy SimulatorKit (indigo)
    x27-sim Xcode 27.x Device Hub closed legacy SimulatorKit (indigo)
    x26-hub Xcode 26.x Device Hub open CoreDevice dtuhidd (dtuhid)
    x27-hub Xcode 27.x Device Hub open CoreDevice dtuhidd (dtuhid)

    One leg runs the full 22-suite pass (default x27-hub, the primary workflow once Xcode 27 ships; --full <leg>|all|none), the rest run a new smoke tier (test-runner.sh --smoke: describe-ui, tap, type, scroll). Legs whose Xcode is not installed are skipped.

  2. Fixes BatchTests login-flow cases fail: QuickType bar overlaps the fixture's Continue button, tap never advances the screen #76 — the Batch Login Flow playground screen placed Continue/Sign In inside the band the system text-suggestion strip occupies below a focused field; the strip swallowed the batch's tap and both login-flow E2E cases failed. Pad the buttons clear of the band + disable autocorrection on the email field. Fixture-only.

How the matrix stays honest

  • Build once, swap the runtime Xcode only: swift build/swift test stay on the xcode-select toolchain (build_products/ is toolchain-locked); each leg passes SIM_USE_TEST_DEVELOPER_DIR, which TestUtilities.CommandRunner injects as DEVELOPER_DIR into every spawned process — the same shape as a released binary meeting whatever Xcode a user has selected. Injection verified by pointing it at a bogus path and watching the spawned sim-use fail on exactly that path.
  • Per-generation device selection: simulator runtimes are system-wide, so each leg boots a device whose iOS runtime matches its Xcode generation instead of "newest available" (which would boot iOS 27 sims on the Xcode 26 legs).
  • Anti-mix-up gates: before the suites, pgrep -x dtuhidd must match the leg (present for hub legs, absent for sim legs) and a SIM_USE_DEBUG probe (ios key 231, daemonless) must log the matching transport-selection predicate; after the suites, the dtuhidd state is re-checked for drift. Per-leg logs plus an evidence.txt (xcodebuild version, UDID, runtime, hub state, probe line) land in .build/e2e-matrix/<timestamp>/.

Test plan (all executed on this branch's tree)

  • make test: 1205 passed (one unrelated HIDSendDeadlineTests timing flake under full parallel load; green in isolation).
  • make e2e-matrix full run: x26-sim ✅ x27-sim ✅ x26-hub ✅ (smoke) · x27-hub full 21/22 — the only red was the pre-existing BatchTests login-flow cases fail: QuickType bar overlaps the fixture's Continue button, tap never advances the screen #76 fixture rot, reproduced identically with Device Hub closed, then root-caused and fixed here. After the fix, BatchTests passes 14/14 on the same simulator. Evidence files confirm every leg ran its intended Xcode build, iOS runtime generation, hub state, and transport predicate.
  • make e2e-android: 7/7 suites green.
  • Notable byproduct: Device Hub attaches dtuhidd to iOS 26.5-runtime simulators too, so x26-hub genuinely exercises the auto→DTU path on Xcode 26.

🤖 Generated with Claude Code

https://claude.ai/code/session_01BwbDm4Nave4bm6AisX6BJV

onevcat added 2 commits July 28, 2026 21:40
make e2e-matrix drives the iOS E2E suites across the four supported host
environments: selected Xcode 26.x/27.x crossed with Device Hub closed at
boot (the classic Simulator.app workflow, legacy indigo HID) or open at
boot (CoreDevice dtuhidd). One leg runs the full 22-suite pass (default
x27-hub, the primary workflow once Xcode 27 ships; --full <leg>|all|none),
the rest run a new smoke tier (test-runner.sh --smoke: describe-ui, tap,
type, scroll); legs whose Xcode is not installed are skipped.

The package builds once on the xcode-select toolchain (build_products/ is
toolchain-locked); each leg swaps only the runtime Xcode via
SIM_USE_TEST_DEVELOPER_DIR, which TestUtilities injects as DEVELOPER_DIR
into every process the suites spawn, and boots a device whose iOS runtime
matches the leg's generation (runtimes are system-wide, so "newest
available" would cross-contaminate). Every leg is double-gated against
silently green-running the wrong combination: pgrep -x dtuhidd checks
before and after the suites plus a SIM_USE_DEBUG probe that must report
the matching transport-selection predicate; per-leg logs and an evidence
file land in .build/e2e-matrix/<timestamp>/.

test-runner.sh also gains arbitrary repeatable swift test --filter
patterns (previously one suite from a stale whitelist) and resolves its
default simulator by exact device name on the newest available runtime.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BwbDm4Nave4bm6AisX6BJV

Signed-off-by: onevcat <onevcat@gmail.com>
…strip

The system suggestion strip attaches ~41pt below a focused text field and
swallows taps on anything it covers. The Batch Login Flow screen placed
Continue/Sign In right inside that band, so the batch E2E's step-2 tap hit
the strip, the screen never left the email stage, and the password was
typed (and autocorrected) into the email field - failing step 4 in both
login-flow cases. Pad the buttons clear of the band and disable
autocorrection on the email field. Reproduced identically on legacy and
DTU HID transports, so this was fixture rot, not a product regression.

Fixes #76

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BwbDm4Nave4bm6AisX6BJV

Signed-off-by: onevcat <onevcat@gmail.com>
@onevcat
onevcat merged commit 4d225e5 into main Jul 28, 2026
4 checks passed
@onevcat
onevcat deleted the feat/e2e-matrix branch July 28, 2026 12:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

BatchTests login-flow cases fail: QuickType bar overlaps the fixture's Continue button, tap never advances the screen

1 participant