Skip to content

feat(2284): give the Bugbot gate a caller here (advisory) - #139

Merged
LukasWodka merged 1 commit into
developfrom
feat/2284-bugbot-gate-caller
Aug 25, 2026
Merged

feat(2284): give the Bugbot gate a caller here (advisory)#139
LukasWodka merged 1 commit into
developfrom
feat/2284-bugbot-gate-caller

Conversation

@LukasWodka

@LukasWodkaLukasWodka commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

What this is

One of 19 sibling PRs rolling bugbot-gate.yml out to the rest of the org — the fleet half of tracebloc/backend#2284, following the claude-skills pilot (claude-skills#36).

This is step 2 of the three-step arming order the reusable's own header sets out: (1) the reusable reaches .github's main — done in #305/#312; (2) callers, advisory; (3) the bugbot / review required context — not taken here.

This is advice, not a gate — and that is deliberate

No branch protection is touched by this PR, and bugbot / review is not added to any required-context list. One measurement is why step 3 is not taken:

Bugbot does not review Dependabot PRs. Sampled 2026-08-25 over the last 30 PRs each of .github, cli, release-train, tracebloc-website, averaging-service and backend: every non-draft PR with no Cursor Bugbot check run on its head was authored by dependabot (cli#574, cli#575, tracebloc-website#510). The only other misses were drafts, which this gate passes by design.

Bugbot re-runs only on a push or an explicit bugbot run comment, so a requiredbugbot / review would park every Dependabot PR at a red check with no route to green. Until that is answered the verdict is reported and nothing is required.

Why it is safe to arm here

  • Bugbot demonstrably runs in this repo. Derived rather than assumed: the cursor GitHub App is installed on the org with repository_selection: all, and a per-repo sample of the last 15 PRs found a terminal Cursor Bugbot check on every non-draft, non-Dependabot head. A repo where Bugbot never runs would only ever measure the gate's own 900s timeout.
  • The pilot ran first.claude-skills#36 put the gate on real PRs on one low-traffic private repo before this went fleet-wide — CLAUDE.md rule 4 (arm while green), in the order that lets a misbehaviour be attributed to one repo rather than twenty.

repo-inventory.yml is not touched here — the flip is the required follow-up

Caller first, inventory entry after..github's caller state is read from its audit branch over the API, so a caller and its required row cannot land in one PR: the row would be checked against a branch the caller is not on yet. Same two-step blocked-gate and backend#2396 were forced into.

Between the two, a caller against an exempt row is the stale-exemption finding and the org audit is red. That window is the accepted cost of this order — the alternative is a PR that can never go green — and flipping every row to required is the required follow-up, one PR against tracebloc/.github covering all 20 repos.

Verification

  • actionlint1.7.12 — the version pinned as a required check in tracebloc/.github — clean on this file.
  • python3 -c "import yaml; yaml.safe_load(...)" clean.
  • The uses: target resolves: bugbot-gate.yml is blob 936771bb on .github's main and develop alike, and really declares all four inputs this caller declines to pass.
  • Below the header, this file is byte-identical to the proven pilot caller.
  • No paths: filter · ready_for_review present · no secrets: inherit · no workflow_dispatch · no inputs passed (all four defaulted, min-severity: high included — restating the callee's default in 20 files is CLAUDE.md rule 1 in reverse).

What to watch on this PR

This PR is its own first observation: the caller is on the head, so the gate runs against it. Expected — bugbot / review reports, having read Cursor Bugbot's terminal verdict on the head, and passes with no findings open at or above high.

Refs tracebloc/backend#2284


Note

Low Risk
Adds a non-blocking CI workflow with minimal read permissions; merge policy and branch protection are untouched.

Overview
Adds bugbot-gate-caller.yml, a thin GitHub Actions caller that invokes the org reusable tracebloc/.githubbugbot-gate.yml@main on pull requests (opened, reopened, synchronize, ready_for_review). The job surfaces check context bugbot / review by polling Bugbot and open review threads (defaults: 900s wait, min-severity: high).

This is step 2 of the backend#2284 rollout: advisory only — no branch protection changes and bugbot / review is not required, partly because Dependabot PRs often never get a Cursor Bugbot run. repo-inventory.yml is unchanged; flipping rows to required is a separate follow-up.

The caller sets concurrency (cancel superseded runs), read-onlycontents / checks / pull-requests permissions, no paths: filter, no secrets: inherit, and no custom inputs (fleet defaults stay on the reusable).

Reviewed by Cursor Bugbot for commit 0b94633. Bugbot is set up for automated code reviews on this repo. Configure here.

Step 2 of the reusable's three-step arming order, rolled from the
claude-skills pilot (claude-skills#36) to the rest of the fleet.
No branch protection is touched and `bugbot / review` is not required:
Bugbot does not review Dependabot PRs, so a required context would park
every one of them red with no route to green. Reported, not required.
repo-inventory.yml is untouched -- caller first, entry after; the flip to
`required` is the follow-up.
Refs tracebloc/backend#2284
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@LukasWodkaLukasWodka self-assigned this Aug 25, 2026

@saadqbalsaadqbal left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Checked this against the other four callers in the batch first: all five patches are byte-identical (same sha256), so this is one review, not five guesses.

Verified the claims that would hurt if wrong, rather than the prose:

  • bugbot-gate.yml on .github's main really is blob 936771bb, and develop is the same blob — so @main isn't racing a divergent branch.
  • It declares all four inputs (min-severity, wait-seconds, poll-seconds, quality-ref), so passing none can't die at startup_failure.
  • Callee job id is review, caller job id is bugbotbugbot / review is the context name, which matches what's already reporting on claude-skills PRs from the pilot.
  • The dependabot measurement holds: cli#574, cli#575 and tracebloc-website#510 have noCursor Bugbot check run at all, while human PRs do (pass on e2e-test-agent#248, skipping on client#833). So a required bugbot / review really would park every Dependabot PR at red with no route to green, and deferring step 3 is the right call rather than a missing one.

Advisory-only with no repo-inventory.yml change in the same PR is the correct order for the reason the header gives — a required row checked against a branch the caller isn't on yet can never go green. Worth being explicit that the stale-exemption window is real and the org audit will go red until the follow-up lands; the header says so, so nobody will be surprised.

ready_for_review in the trigger list, no paths: filter, no secrets: inherit, no workflow_dispatch, concurrency keyed on github.ref — all four of those are the ones that bite later, and all four are right here.

@LukasWodka
LukasWodka merged commit ecaea4a into developAug 25, 2026
12 checks passed
@LukasWodka
LukasWodka deleted the feat/2284-bugbot-gate-caller branch August 25, 2026 18:33
Sign up for freeto 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.

2 participants

@LukasWodka@saadqbal