Skip to content

Wait for TestFlight before Claude build analysis - #25905

Draft
mokagio wants to merge 1 commit into
trunkfrom
mokagio/claude-analysis-await-testflight
Draft

Wait for TestFlight before Claude build analysis#25905
mokagio wants to merge 1 commit into
trunkfrom
mokagio/claude-analysis-await-testflight

Conversation

@mokagio

@mokagio mokagio commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Description

The :claude: 🕵️ Check for Build Failures step lists three groups in depends_on and testflight_builds_group is not one of them. It therefore fires as soon as the linters, prototype builds and unit tests settle, and upload-claude-analysis.sh snapshots the build's job states at that instant — where a job still running counts as not-failed. The TestFlight uploads are the longest jobs in the pipeline, so on trunk they are almost always still running, and they are the only jobs that can detect a release-pipeline outage.

That is not hypothetical. Trunk's TestFlight uploads had been rejected by App Store Connect with error 90186 since the 27.1 train closed, and the analyser reported it away twice on 2026-08-17:

Build Uploads failed Check ran Result
#33780 04:32:24Z 04:31:31Z saw zero failures, skipped the analysis entirely — no annotation
#33786 12:48:50Z annotation published 12:48:45Z "The build has one real failure: the Unit Tests job. Everything else either passed or is in expected states."

#33753 diagnosed the outage correctly on 08-13 — naming 90186 and recommending a pre-flight version check — only because an upload happened to fail 28 seconds before the check fired. That 28 seconds is the whole difference between the one correct report and twelve days of silence.

Two things a reviewer should know:

  • This closes the instance, not the class. The analysis still asserts a global all-clear over whatever snapshot it is handed. Making it count non-terminal jobs and say "N jobs still running, not covered" is the general fix, and is deliberately not in this PR.
  • The delay is trunk-only. testflight_builds_group is gated on build.branch == 'trunk', so PR builds skip it and the new dependency resolves immediately. On trunk, analysis now waits for the uploads — which is the point.

Testing instructions

Nothing to test in the app; this is a pipeline-graph change and only Buildkite can exercise it.

The behaviour it relies on is already demonstrated in the builds above: prototype_builds_group is PR-only, so on trunk builds #33780 and #33786 its jobs are broken and the check step ran anyway, because of the allow_dependency_failure: true already on the step. testflight_builds_group resolves the same way in reverse on PR builds.

To confirm on this PR: the check step should still run and reach its "All steps passed, skipping Claude analysis" branch despite both TestFlight and prototype dependencies being skipped. The real confirmation is the next red trunk build, where the analysis should now start after the uploads finish rather than before.

`upload-claude-analysis.sh` snapshots the build's job states the moment its `depends_on` groups settle, and a job still running counts as not-failed.
The TestFlight uploads take ~15 minutes and were absent from that list, so they were invisible both to the analysis and to the script's decision to run one at all.

Trunk's TestFlight uploads had been rejected by App Store Connect since the 27.1 train closed, and the analyser reported it away twice on 2026-08-17.
In build #33780 the uploads failed 52s after the check ran, so it saw zero failures and skipped the analysis entirely.
In #33786 they failed 4s after the annotation was published, which opens "The build has one real failure: the Unit Tests job."
Build #33753 diagnosed the outage correctly on 08-13 only because an upload happened to fail 28s before the check fired.

The group is gated on `build.branch == 'trunk'`, so PR builds skip it and the dependency resolves immediately — the same way `prototype_builds_group` already resolves on trunk builds, where it is skipped and the step runs regardless.

This closes the instance, not the class: the analysis still asserts a global all-clear over whatever snapshot it is given.

---

Generated with the help of Claude Code, https://code.claude.com

Co-Authored-By: Claude Code Opus 5 <noreply@anthropic.com>
@mokagio mokagio self-assigned this Aug 18, 2026
@dangermattic

Copy link
Copy Markdown
Collaborator
1 Message
📖 This PR is still a Draft: some checks will be skipped.

Generated by 🚫 Danger

@wpmobilebot

Copy link
Copy Markdown
Contributor
App Icon📲 You can test the changes from this Pull Request in WordPress by scanning the QR code below to install the corresponding build.
App NameWordPress
ConfigurationRelease-Alpha
Build Number33804
VersionPR #25905
Bundle IDorg.wordpress.alpha
Commit4f4bd6f
Installation URL1g2bd1ljffi5o
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

@wpmobilebot

Copy link
Copy Markdown
Contributor
App Icon📲 You can test the changes from this Pull Request in Jetpack by scanning the QR code below to install the corresponding build.
App NameJetpack
ConfigurationRelease-Alpha
Build Number33804
VersionPR #25905
Bundle IDcom.jetpack.alpha
Commit4f4bd6f
Installation URL0vi95mmrudt3g
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

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.

3 participants