Skip to content

fix(e2e): harden iOS simulator diagnostics - #100

Merged
leon-zym merged 9 commits into
mainfrom
agent/issue-99-ios-e2e-diagnostics
Aug 15, 2026
Merged

fix(e2e): harden iOS simulator diagnostics#100
leon-zym merged 9 commits into
mainfrom
agent/issue-99-ios-e2e-diagnostics

Conversation

@leon-zym

@leon-zym leon-zym commented Aug 13, 2026

Copy link
Copy Markdown
Owner

Summary

  • enforce one absolute monotonic deadline across iOS app-service and SpringBoard readiness, without starting a second probe after the budget is exhausted
  • keep one Maestro/XCUITest lifecycle and semantic Photos Picker readiness
  • publish schema-v2 observations that distinguish execution, Maestro, recorder, and telemetry completeness
  • collect bounded recent system logs and concrete business-assertion context while preserving the primary failure
  • make host sampling non-blocking and bounded; keep the first failing sample visible with no retry, device rebuild, fixed sleep, or global timeout broadening

Scope and conclusion

PR #98's product commits are not supported as the cause. The observed failures drift across CoreSimulator app services, Photos services, and Maestro/XCUITest startup while the same acceptance transaction can also pass.

This PR completes the diagnostic and fail-closed foundation for #99. It does not claim that same-host build → E2E on the standard hosted macos-26 runner is statistically stable. That execution-plane decision is tracked in #101.

The exact P0-head full run below is deliberately retained as a failed sample: the fresh Simulator passed guest health, app installation, and photo seeding, then Maestro's XCTest driver failed to start. The observation classified the failure as driver-startup, preserved cleanup evidence, and exposed severe post-build host contention instead of retrying the run green.

Verification

  • pnpm verify
  • ordinary PR CI 31888253128: static/unit/render verification, iOS compile, and Android compile all passed
  • earlier exact-head full L4 31677569172: Android 10/10 and iOS 10/10 passed, including export assertions and owned-device cleanup
  • P0-head iOS full 31888887580, SHA 0d9443c53d4050ad2714eea852cfd11f07938bdd: failed at Maestro driver startup after guest health/install/seed passed; schema v2 recorded execution:true, maestro:false, recorder:true, telemetry:false, failureBoundary:driver-startup; cleanup verified the owned Simulator absent
  • the same failed run published 16 bounded files with no truncation or over-limit omission; host evidence showed a 3-CPU/7-GiB runner, load1 above 455, roughly 100–160 MiB free memory around the critical window, and an interrupted XCTest runner build

Follow-up

#101 owns first-sample stability: build a sealed exact-SHA acceptance package, execute it on a fresh test host, and evaluate the accepted x86_64/macOS 15 execution plane with a staged, no-retry sample budget. This keeps later infrastructure experiments out of the already large #100 diff.

Closes #99

@leon-zym
leon-zym marked this pull request as ready for review August 13, 2026 04:25
@leon-zym

Copy link
Copy Markdown
Owner Author

Final exact-head verification is complete for 3e74467748882760f28d7e62b7da1de20d84d6f2:

  • ordinary PR CI 31677567714: verify, iOS compile, and Android compile passed
  • full dual-platform L4 31677569172: Android 10/10 and iOS 10/10 passed
  • iOS export assertions: ordered +1, +1, final +2; owned Simulator teardown/absence passed
  • final Standards, Spec, and architecture reviews: no code blocker

Residual hosted macOS/CoreSimulator long-tail risk is documented in Issue #99; this PR intentionally adds no retry, device rebuild, fixed sleep, or broader timeout.

@leon-zym

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3e74467748

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

}
publishCandidate(candidate, stagingRoot, summary, state);
}
writeFileSync(join(stagingRoot, "publication-summary.json"), `${JSON.stringify(summary)}\n`);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep the publication summary within artifact budgets

When failure evidence reaches MAXIMUM_FILES or approaches MAXIMUM_TOTAL_BYTES, this unconditional write adds an uncounted file and bytes after the limits have already been enforced. The published artifact can therefore exceed the hard file-count or total-byte bounds promised by ADR 0045, while filesPublished and totalBytes still imply that the limits were respected; reserve and account for the summary within both budgets.

Useful? React with 👍 / 👎.

@leon-zym leon-zym changed the title fix(e2e): stabilize iOS simulator diagnostics fix(e2e): harden iOS simulator diagnostics Aug 15, 2026
@leon-zym
leon-zym merged commit 42f8071 into main Aug 15, 2026
4 of 5 checks passed
@leon-zym
leon-zym deleted the agent/issue-99-ios-e2e-diagnostics branch August 15, 2026 14:31
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.

治理 iOS Simulator 与 Photos Picker 的 E2E 长尾失活

1 participant