Skip to content

feat(githubbot): skip centaur-skip checks, and read check detail without the Checks API - #1589

Open
oponder wants to merge 1 commit into
paradigmxyz:mainfrom
0xSplits:githubbot-centaur-skip
Open

feat(githubbot): skip centaur-skip checks, and read check detail without the Checks API#1589
oponder wants to merge 1 commit into
paradigmxyz:mainfrom
0xSplits:githubbot-centaur-skip

Conversation

@oponder

@oponder oponder commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Two changes to githubbot's CI evaluation; the second is what makes the first work on a fine-grained PAT.

Skip a check. A check whose job id contains centaur-skip is dropped from the CI evaluation and from the escalation comment's failing list. Some required checks can never be turned green by an agent — an N-human-approvals gate, a manual sign-off — and today githubbot burns all three fix attempts on them and then escalates. The marker rides the job id, which GitHub uses as the check-run name and recomputes every run, rather than the workflow name, which GitHub caches per consuming repo for ruleset-injected required workflows and never refreshes.

Read check detail without the Checks API. A fine-grained PAT — the token type GitHub recommends — has no Checks permission, so statusCheckRollup returns null check nodes and the evaluation collapses to the bare aggregate: failingNames is always empty, fix turns get "Failing checks: unknown", escalations say "Still failing: the CI checks". When the nodes are unreadable, githubbot now rebuilds the checks from the Actions API (a job is the same object as its check run) and trusts that only when it accounts for every context GitHub counted — commit statuses and other Apps' check runs aren't Actions jobs — otherwise it keeps the existing aggregate behaviour.

No new configuration; auto-merge is untouched. Verified end-to-end on a deployment using a fine-grained PAT: gate-only red evaluates green, and gate plus a real failure fires exactly one fix turn that names only the real failure.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NY7uaJuKZDbHdD9UaBQZVc

…out the Checks API

An approval gate that fails until a person signs off reads to githubbot as red
CI: it spends every CI-fix attempt on a check no agent can turn green, then
escalates. Checks with `centaur-skip` in their name are now dropped from the CI
evaluation and from the escalation comment's failing list.

The marker rides the job id because GitHub recomputes the check-run name every
run, unlike workflowRun.workflow.name, which it caches per consuming repo for
ruleset-injected required workflows and never refreshes.

That filter needs readable check detail, and a fine-grained PAT — the token type
GitHub recommends — has no Checks permission at all, so statusCheckRollup
returns null check nodes. Today that silently degrades every deployment using
one: failingNames is always empty, so fix turns are dispatched with "Failing
checks: unknown" and escalations say "Still failing: the CI checks". When the
nodes are unreadable, githubbot now rebuilds the checks from the Actions API,
where a job is the same object as its check run. It trusts the reconstruction
only when it accounts for every context GitHub counted — commit statuses and
check runs from other Apps aren't Actions jobs — and otherwise keeps the
existing aggregate behavior rather than call a PR green on a check it never saw.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NY7uaJuKZDbHdD9UaBQZVc
@oponder
oponder marked this pull request as ready for review September 1, 2026 20:28
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.

1 participant