Repository navigation
ci shepherd: main's own failures labelled main; non-required infra failures stop blocking after 3 reruns; keep watching an empty queue (#4790) - #4830
Merged
Conversation
…ired infra failures stop blocking after 3 reruns (#4790) - ci_digest: one more call fetches the checks failing on main's newest commit; a real failure of the same check on a PR is triaged `main` (repro: fix main). The shepherd logs it and posts no PR note -- on 2026-10-09 every open PR got a misleading "real failure" note while main itself was red. - ci_shepherd: when every remaining failure is infra, none of those checks is required by main's rules (read from rules/branches/main; unreadable rules = everything required) and each has used its 3 reruns, the PR merges with one note saying so. muninn failed every PR for an hour on 2026-10-09 because Docker Hub throttled the image GitHub builds before any step runs. A real finding in a non-required check (muninn, CodeQL) still blocks; a required check always does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TBJdDBRtJis5hzE244NQKV
…rges); --exit-when-empty for the old stop 2026-10-09: it merged its last PR, found the queue empty and exited; #4818, queued minutes later, sat green. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TBJdDBRtJis5hzE244NQKV
…tay in part 1 (balance; #4829 ran 10.1 / 6.9 / 7.6 min) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TBJdDBRtJis5hzE244NQKV
| assert cs.main(["run", "--exit-when-empty"]) == 0 and sleeps == [] | ||
| try: | ||
| cs.main(["run", "--every", "5"]) | ||
| except KeyboardInterrupt: |
Contributor
Owner
Author
|
CI shepherd: real failure(s) on this head. Reproduce locally with the |
…ion_regex_bomb is a #4477 timing flake #4830's part 2 failed on it: 1.006 s against a 1.0 s bound on a loaded runner; the digest called it real and fell back to pr_gates --fast because 'full-suite part 2/3' did not match the repro table. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TBJdDBRtJis5hzE244NQKV
squid-protocol
marked this pull request as ready for review
October 10, 2026 04:22
This was referenced Oct 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Step 3 (part) of #4790, from what went wrong on 2026-10-09.
1. A failure main has too is main's.
ci_digestfetches the checks failing on main's newest commit. A real failure of the same check on a PR is triagedmain(repro: fix main). The shepherd logs it and posts no PR note. While main was red after #4820, every open PR got a misleading "real failure" note.2. Infra failures in non-required checks stop blocking after their reruns. muninn failed every PR for over an hour: GitHub builds its Docker image before any step runs, and Docker Hub was throttling (429/504). The shepherd now merges when all of these hold:
rules/branches/main; unreadable rules mean everything is treated as required);It posts one note saying so. A real finding in a non-required check (muninn, CodeQL) still blocks, and a required check always does.
3. Keep watching an empty queue. The shepherd merged its last PR, found the queue empty and exited; #4818, queued minutes later, sat green.
--exit-when-emptykeeps the old stop.4. (balance) The full-suite advisory summaries move to part 3; the entry-point checks stay in part 1. #4829 ran 10.1 / 6.9 / 7.6 min with both extras in part 1.
Tests: test_ci_shepherd + test_ci_digest + test_pr_check 30+ passed (new: main triage, merge-past-infra only when non-required and reruns used up, never for required/real/unreadable rules, empty-queue keep-alive). Ruff and mypy audits clean;
pr_gates --fast5/5. The shepherd has run from this branch since 2026-10-10 02:45Z (it merged #4829).🤖 Generated with Claude Code
https://claude.ai/code/session_01TBJdDBRtJis5hzE244NQKV