Uh oh!
There was an error while loading. Please reload this page.
Fix triage: unusable model pin, and a sweep that cannot see pull requests - #280
Conversation
`triage-unlabeled-items` lists candidates with `issues.listForRepo`, which returns issues and pull requests together. Pull requests are dropped from that response unless the token can read them, and the drop is silent - a shorter list, not an error. Since #275 gave the job its own permissions block with `issues: read` and no `pull-requests` scope, it has been blind to pull requests. This repository currently has no open issues, so the sweep reported "Found 0 open issues and PRs" and triaged nothing, while #277 sat open and unlabeled. Granting `pull-requests: read` restores what the job saw before #275, when it inherited `pull-requests: write` from the workflow level. It stays read-only: the sweep only reads and dispatches, and the label writes happen in the triage jobs it dispatches to. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RdDrWtq6hWWuDDQDxQx94G
Warning Review limit reached
Next review available in:72 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
swissspidy
commented
Aug 13, 2026
The red It is, however, the first real execution of the v3 path, and it got further than the pre-merge attempts: So the CLI installed, was found on Two candidate causes, one now eliminated:
To confirm rather than assume: re-run this job with Enable debug logging ticked, which surfaces the CLI's stderr. If it reports an authorization or entitlement error, the policy is the fix. If it reports something else, the diagnosis above is wrong and the log will say so. This does not block merging — the fix here is independent and its own verification is the dispatch re-run described in the description. Generated by Claude Code |
Every triage run since the v3 upgrade has failed. With debug logging on, the Copilot CLI's stderr says why: Error: Model "gpt-4.1" from --model flag is not available. `gpt-4.1` is `actions/ai-inference`'s own default for the `model` input, so the workflow inherited it without naming it. The action only passes `--model` when the input is non-empty, and `auto` is the CLI's documented value for letting Copilot choose, so setting it explicitly both fixes the failure and stops a future model retirement from breaking triage again. This also settles the open question about authentication. Run unauthenticated, the CLI fails with "No authentication information found" before it ever validates the model. CI got the model error instead, so the token was accepted: `GITHUB_TOKEN` with `copilot-requests: write` authenticates, the organization policy is enabled, and no PAT is needed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RdDrWtq6hWWuDDQDxQx94G
Uh oh!
There was an error while loading. Please reload this page.
Two independent bugs, both of which have to be fixed before triage works end to end. Neither was introduced by the v3 upgrade in #279.
1. Triage fails on every run — an unavailable model
Every triage run since #279 has failed. The Copilot CLI's stderr is routed to debug-only logging by
actions/ai-inference, so the reason was invisible until the job was re-run with debug logging:gpt-4.1is the action's own default for itsmodelinput, so the workflow inherited it without ever naming it. Copilot no longer offers that model and the CLI rejects it outright.Setting
model: auto— the CLI's documented value for letting Copilot choose — fixes the failure and stops the next model retirement from breaking triage the same way.This also settles the authentication question. Run unauthenticated, the CLI fails with
No authentication information foundbefore it validates the model. This run got the model error instead, which means the token was accepted:GITHUB_TOKENpluscopilot-requests: writeauthenticates, the organization policy is enabled, and no PAT is required.2. The unlabeled sweep silently sees nothing
Dispatching with an empty
issue_numberreportsFound 0 open issues and PRsand triages nothing, while unlabeled pull requests such as #277 sit untouched. Reproduced in run 31708383158.The count is zero in total, not zero after filtering — the listing itself comes back empty.
issues.listForReporeturns issues and pull requests together, but pull requests are dropped when the token cannot read them, silently: a shorter list, not an error. This repository has no open issues, so the sweep saw nothing at all and exited 0 withNo unlabeled items to process, which is why it never showed up as a failing check.triage-unlabeled-itemspermissionspull-requests: writeactions: write,issues: read,contents: read#275 scoped
actions: writedown to the one job needing it, which was right, but the new job-level block replaced the inherited permissions wholesale andpull-requestswas not carried over. Grantingpull-requests: readrestores what the job saw before, and stays read-only — the sweep only reads and dispatches; label writes happen in the jobs it dispatches to.Verification
actionlint passes. Behavioural checks, both of which need this merged first, since
issue-triage.ymlresolves the reusable workflow at@mainregardless of the ref it is dispatched from:issue_number; the count should be non-zero.Known remaining issue, not fixed here
triage-single-itemreadscontext.issue.numberin its "Get item details" step, but aworkflow_dispatchpayload has noissue,pull_requestornumber, so it resolves toundefined. The apply step in the same job correctly usesinputs.issue_number. That means the runs the sweep dispatches will still fail at that step. Introduced in a482e38 (Apr 22), left alone here to keep this change reviewable.