v2.24.0
Added
- A provider “prompt too long” rejection now skips the review (#1056). The pre-flight estimate can be too low. Before, the provider rejected the prompt with an HTTP 400, every agent failed, and the comment said “0 findings, 2 failed agents”. Now the engine stops and posts a skip comment that names the agent, the model, and
AI_EXCLUDE_PATTERNS. The comment also carries the analyzer and SARIF findings, and the run does not advance the watermark.AI_FAIL_ON_CONTEXT_WINDOW=truemakes this skip exit with code 2. WithAI_FAIL_ON_FINDINGS=truethis skip also exits with code 2, because no agent reviewed the PR. That is the same exit code as the failed run had before. Only the Anthropic message text is matched, and only for the Anthropic provider. The pr-summarizer, the issue-linker, and the judge pass also continue when the provider rejects their prompt, so the main agents reach this skip. If only some agents are rejected, the review continues and the failed-agent note says so. - Bitbucket: the
/ai-pr-review feedback [F<n>] <text>command (#933). The text is required and anF<n>is optional. The command uses the same authorization asfalse-positiveandwont-fix. It writes to the learning-loop store only whenAI_FEEDBACK_LOOP=trueandAI_BITBUCKET_VERDICTS=true. See Slash commands and Bitbucket setup. -
The
COST_ESTIMATElog line ends withinput=andoutput_cap=(#1055). Use them to see how much of the estimate is the worst-case output cap. The configuration page has a worked example. See Configuration. - A new analyzer,
suppression-check(#1077). It flags a comment on an added line that turns off a security rule:noqawith anScode,nosec,nosemgrep,phpcs:ignoreon a security sniff,eslint-disableon a security rule. It reports Medium. A workflow with an explicitanalyzersallowlist must addsuppression-check. See Static analyzers. - A
cryptofinding category (#1076). It covers weak hashes, weak randomness and insecure tokens. Bitbucket shows it as aVULNERABILITYannotation. See Static analyzers and Bitbucket setup. - A finding can carry
impactandtrigger(#1078). GitHub and GitLab comments and the review body show them before the remediation. Bitbucket annotations do not. - The code-reviewer checks that a value one function writes and another reads agrees (#1079). A cookie against a header, or a
Bearerprefix that nobody strips, is the example. - A harness to measure a verifier that re-reads the code (#1082). It is a measurement tool and changes no review behavior.
Changed
- Behavior change: a style or documentation finding no longer merges into a nearby security finding (#1074). A
docsfinding, and a finding that an analyzer marks as style only (a phpcs style sniff, a ruff formatting or naming code, an eslint formatting rule, a shellcheck or hadolintstylefinding), cluster only with style findings of their own category. A rule that finds a defect, such as ruff F821 or a ruffSsecurity code, still merges with the agent finding for it. A finding counts as corroborated only when an analyzer and an agent describe the same kind of defect, so fewer findings show as corroborated. A finding that both reported but that is not corroborated shows the labelanalyzer and agent, not confirmed. The headline text of some clusters changes, so their fingerprints change once on open PRs. - Behavior change: phpcs sniffs in the
Commenting,WhiteSpace,FormattingandNamingConventionscategories are Low (#1075). A missing docblock was High. The other sniffs keepERRORto High andWARNINGto Medium. - Repeated semgrep findings of one rule roll up in each file (#1081). Two or more hits become one finding at the first line, with all the lines in its text. Only the first site gets an inline comment.
- A destructive shell command that an empty argument can aim at
/is Critical (#1080).chmod,chownandrmon$DIR/*with an unchecked argument, in a script that can run as root. - Behavior change: the severity icons are different shapes (#1037). Critical is ⛔, High is 🚨, Medium is 🔶, and Low is 💬. 🚨 meant Critical before and means High now. A review comment that was posted before the upgrade keeps its old icon until the next review rewrites it. No parser reads the icon. See Agents.
- The
also_reportednotes are capped only when they are shown (#1047). The first 5 notes are shown, with a “(+N more from other analyzers)” line. The count is now correct when a cluster has more than 5 notes. - The example workflows pass
approval-ceiling(#1064).vars.AI_REVIEW_APPROVAL_CEILINGnow reaches the action, so an organization-level variable covers every repository that copies the example. - The phpcs analyzer code is split (#1047). Behavior is unchanged. The security canary has a symlink case and a test with the real phpcs.