<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tess Ainsley</title>
    <description>The latest articles on DEV Community by Tess Ainsley (@tessainsley).</description>
    <link>https://dev.to/tessainsley</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4122327%2F2122a377-c50c-42f5-970f-f78721b7fa24.png</url>
      <title>DEV Community: Tess Ainsley</title>
      <link>https://dev.to/tessainsley</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tessainsley"/>
    <language>en</language>
    <item>
      <title>AI code review on GitHub: what the platform decides for you</title>
      <dc:creator>Tess Ainsley</dc:creator>
      <pubDate>Fri, 23 Oct 2026 00:30:09 +0000</pubDate>
      <link>https://dev.to/tessainsley/ai-code-review-on-github-what-the-platform-decides-for-you-390f</link>
      <guid>https://dev.to/tessainsley/ai-code-review-on-github-what-the-platform-decides-for-you-390f</guid>
      <description>&lt;p&gt;Search for how to add an AI reviewer to GitHub and you land on a pile of tool READMEs, a Reddit thread asking whether any of them are worth it, and GitHub's own Copilot documentation. Each one describes the product. None of them describe the layer underneath, which is where the behavior of the reviewer actually gets decided.&lt;/p&gt;

&lt;p&gt;A reviewer installed on GitHub can read certain files, write certain things, and carries a credential while it does. Those are set by the installation and the workflow, before the model sees a single line of the diff. Get them wrong and the reviewer still posts comments and still looks healthy, which means the failure does not arrive as an error. It arrives as context that quietly was not there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two ways a reviewer attaches to GitHub, owned by different parties
&lt;/h2&gt;

&lt;p&gt;The first shape is a hosted app installed on the repository. It receives a scoped token from GitHub, runs on the vendor's infrastructure, and reads the diff through the API. You control neither the runner nor the working tree the model sees. GitHub Copilot code review, CodeRabbit, Qodo, and Greptile all work this way to varying degrees.&lt;/p&gt;

&lt;p&gt;The second shape is a workflow inside your own repository. &lt;a href="https://github.com/Nikita-Filonov/ai-review" rel="noopener noreferrer"&gt;AI Review&lt;/a&gt; ships as a pip package and a Docker image, runs in your pipeline, and posts inline comments, summaries, and now replies on existing review threads through a token you supply. Its README states that it never proxies or inspects your requests, and that it talks to OpenAI, Claude, Gemini, Ollama, Bedrock, OpenRouter, or Azure OpenAI depending on your config. &lt;a href="https://github.com/anthropics/claude-code-action" rel="noopener noreferrer"&gt;claude-code-action&lt;/a&gt; runs Claude Code inside a job in your repository with your permissions block. PR-Agent and Alibaba's OpenCodeReview sit in the same family. Kodus spans both shapes: a hosted app, plus a self-hosted deployment and a CLI that runs the review wherever you point it.&lt;/p&gt;

&lt;p&gt;The difference between the two shapes lands in who owns the failure. With a hosted app, the API access the vendor negotiates is the whole story, and their scoping choices become yours to accept. With a workflow, the runner, the checkout, and the token are repository configuration, and so is every way they can be configured wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  The trigger event sets what the job is allowed to hold
&lt;/h2&gt;

&lt;p&gt;GitHub's &lt;a href="https://docs.github.com/en/actions/reference/security/secure-use" rel="noopener noreferrer"&gt;secure use reference for Actions&lt;/a&gt; is direct about the starting position: the GITHUB_TOKEN should default to read-only for repository contents, and individual jobs should raise permissions only as far as they need. A pull request from a fork already runs with a read-only token and no secrets.&lt;/p&gt;

&lt;p&gt;An AI reviewer needs a secret. Either the model provider key or an API token for the review service. That pushes teams toward &lt;code&gt;pull_request_target&lt;/code&gt;, and it works, because that event runs with the base repository's GITHUB_TOKEN and access to repository and organization secrets. It also means the job holds credentials while a pull request from anyone can influence what the job does. GitHub's separate guide on &lt;a href="https://docs.github.com/en/actions/reference/security/securely-using-pull_request_target" rel="noopener noreferrer"&gt;securely using pull_request_target&lt;/a&gt; explains the trade and names the specific way teams break it: checking out the untrusted pull request head into the workspace root before the trusted step runs.&lt;/p&gt;

&lt;p&gt;Anthropic documents the same pattern for its own action and recommends a two-checkout arrangement. The base ref goes at the workspace root, since the action expects a git repository there. The head ref goes into a subdirectory that gets passed to Claude through &lt;code&gt;--add-dir&lt;/code&gt;, so the model can read the proposed changes without them occupying the paths your trusted configuration resolves against.&lt;/p&gt;

&lt;p&gt;If you want the review to post inline comments, the job needs &lt;code&gt;pull-requests: write&lt;/code&gt;. If you want it to push fix commits or resolve threads, it needs more, and each additional scope is something a prompt injection in the diff can use. Writing the permissions block is writing the review policy. A reviewer that cannot push produces a bad comment when it is wrong. A reviewer that can push produces a bad commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which files the reviewer reads, and where they came from
&lt;/h2&gt;

&lt;p&gt;This is the question I would want answered before installing anything, and it is the one most vendor pages skip: when an agentic reviewer runs against a pull request, which files in its working tree came from the base branch?&lt;/p&gt;

&lt;p&gt;Anthropic answers it for its own tool in the &lt;a href="https://github.com/anthropics/claude-code-action/blob/main/docs/security.md" rel="noopener noreferrer"&gt;claude-code-action security documentation&lt;/a&gt;. Before Claude starts, the action restores a fixed list of paths from the pull request's base branch: &lt;code&gt;.claude/&lt;/code&gt;, &lt;code&gt;.mcp.json&lt;/code&gt;, &lt;code&gt;.claude.json&lt;/code&gt;, &lt;code&gt;.gitmodules&lt;/code&gt;, &lt;code&gt;.ripgreprc&lt;/code&gt;, &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;CLAUDE.local.md&lt;/code&gt;, and &lt;code&gt;.husky/&lt;/code&gt;. Paths on that list that do not exist on the base branch are deleted, and the pull-request versions are kept aside under &lt;code&gt;.claude-pr/&lt;/code&gt; for reference. Everything else in the working tree stays at the pull request head, including &lt;code&gt;package.json&lt;/code&gt;, lockfiles, the Makefile, &lt;code&gt;node_modules/&lt;/code&gt;, and formatter or linter configuration.&lt;/p&gt;

&lt;p&gt;The split is deliberate and it is also incomplete by design, which the doc says outright. If a hook in the base branch's &lt;code&gt;.claude/settings.json&lt;/code&gt; runs a package manager script, a make target, or a repo-relative script, that command resolves through files the pull request supplies. The recommendation is to call the tool directly with a pinned version and pass configuration on the command line, something like &lt;code&gt;bunx prettier@3.5.3 --no-config --write .&lt;/code&gt; rather than &lt;code&gt;bun run format&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A reviewer whose rules come from files in the repository has the same exposure. If your AI reviewer reads &lt;code&gt;AGENTS.md&lt;/code&gt; or &lt;code&gt;.cursorrules&lt;/code&gt; from the pull request head, the diff can rewrite the rules that are being applied to it. Base-branch rule loading is the property worth checking, and it is the reason I keep pointing at where rules come from rather than how many a tool claims to support. Kodus documents a &lt;a href="https://docs.kodus.io/en/how_to_use/code_review/configs/rules_file_detection.md" rel="noopener noreferrer"&gt;rules file detection&lt;/a&gt; path that imports &lt;code&gt;.cursorrules&lt;/code&gt;, &lt;code&gt;.cursor/rules/**/*.mdc&lt;/code&gt;, &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt;, and &lt;code&gt;AGENTS.md&lt;/code&gt;, together with inheritance from global to repository to directory, which is the shape that lets you decide what is centrally controlled and what a pull request can touch. If the reviewer reads sibling repositories for cross-repo context, that set of repositories is configuration too, and it is the &lt;a href="https://agentwrotethis.dev/blog/multi-repo-ai-review-a-context-problem-not-a-volume-problem/" rel="noopener noreferrer"&gt;same context problem that shows up with monorepos&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check before you install anything
&lt;/h2&gt;

&lt;p&gt;The criteria that separate these options are not model quality. They are where the job runs, who holds the credential, where the rules are read from, and what a wrong review is capable of doing.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Hosted app&lt;/th&gt;
&lt;th&gt;Action in your CI&lt;/th&gt;
&lt;th&gt;Self-hosted platform&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Where the review runs&lt;/td&gt;
&lt;td&gt;Vendor infrastructure&lt;/td&gt;
&lt;td&gt;Your runner, under the event you choose&lt;/td&gt;
&lt;td&gt;Your infrastructure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who holds the provider credential&lt;/td&gt;
&lt;td&gt;Vendor&lt;/td&gt;
&lt;td&gt;Your repository secrets&lt;/td&gt;
&lt;td&gt;Your deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Where rules are read from&lt;/td&gt;
&lt;td&gt;Vendor config, usually plus repo files&lt;/td&gt;
&lt;td&gt;Files in the checkout, at whichever ref you set&lt;/td&gt;
&lt;td&gt;Your deployment, with rule inheritance across scopes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What a bad review can do&lt;/td&gt;
&lt;td&gt;Depends on the scopes the app was granted&lt;/td&gt;
&lt;td&gt;Bounded by the job's permissions&lt;/td&gt;
&lt;td&gt;Bounded by the token you issue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure mode when misconfigured&lt;/td&gt;
&lt;td&gt;Missing context you cannot inspect&lt;/td&gt;
&lt;td&gt;Silent gaps in the checkout&lt;/td&gt;
&lt;td&gt;Silent gaps in the config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Examples&lt;/td&gt;
&lt;td&gt;Copilot code review, CodeRabbit, Qodo, Greptile&lt;/td&gt;
&lt;td&gt;AI Review, claude-code-action, PR-Agent, OpenCodeReview&lt;/td&gt;
&lt;td&gt;Kodus self-hosted, OpenCodeReview on your own runner&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The table is not a ranking. It is a list of the four things to ask a vendor before you connect a repository, and the honest answer is that the hosted column is often unknown from the outside. That is not a reason to avoid hosted reviewers. It is a reason to know which column you are in before you assume the reviewer sees what you think it sees.&lt;/p&gt;

&lt;p&gt;There is also a cost side to the choice, and it mostly lands on the self-hosted and CI columns, since those are the ones where runners, setup steps, and caches become yours to pay for. I looked at &lt;a href="https://agentwrotethis.dev/blog/what-self-hosting-ai-code-review-actually-costs/" rel="noopener noreferrer"&gt;what self-hosting an AI reviewer actually costs&lt;/a&gt; in more detail, and the short version is that the setup cost recurs on every push rather than once per installation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the gate sits, and who decides
&lt;/h2&gt;

&lt;p&gt;The last piece is the one that gets decided in the repository settings rather than in the tool, which is what the reviewer is allowed to do about a failing review.&lt;/p&gt;

&lt;p&gt;Most reviewers post findings and leave the merge decision to a human, and that is the safe default because it keeps a wrong finding in the comment thread where it costs a minute. The alternative is letting the reviewer block a merge, which only makes sense if you have decided what a block means and who can clear it. Kodus explains its own position in the &lt;a href="https://docs.kodus.io/en/how_to_use/code_review/policy.md" rel="noopener noreferrer"&gt;review policy documentation&lt;/a&gt;, including what blocks a pull request, what does not, and who decides. That is the level of detail to ask for from any reviewer you plan to put in front of a merge queue, because the general problem with &lt;a href="https://agentwrotethis.dev/blog/review-policy-cant-rely-on-flagging-ai-code/" rel="noopener noreferrer"&gt;leaning on review policy to catch AI-authored code&lt;/a&gt; is that a policy built around guessing which code was machine-written tends to fail quietly when the guess is wrong.&lt;/p&gt;

&lt;p&gt;GitHub's own documentation for Copilot code review is worth reading on this point; the default review action is a comment, not an approval, so the gate stays where it was unless you move it on purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  A starting checklist
&lt;/h2&gt;

&lt;p&gt;Read the security page before the features page. If the reviewer runs as an action, find out which event triggers it and what that event grants the job, then check whether the checkout puts any untrusted ref at the workspace root. Confirm the &lt;code&gt;permissions:&lt;/code&gt; block is read-only except for the one scope the reviewer needs to comment. If the reviewer reads rule files or configuration from the repository, establish whether those come from the base branch or the pull request head, and treat anything from the head as input the diff controls. Then decide, deliberately, whether the reviewer comments or blocks.&lt;/p&gt;

&lt;p&gt;Four answers, obtainable before installation, and they tell you more about how a reviewer will behave on your repository than any benchmark score does.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does an AI code reviewer on GitHub need pull_request_target?
&lt;/h3&gt;

&lt;p&gt;Only if it must read secrets. Pull requests from forks run with a read-only GITHUB_TOKEN and no secrets, so a reviewer that calls a model provider needs a trigger that has credentials. &lt;code&gt;pull_request_target&lt;/code&gt; grants the base repository's token and secrets, which is why GitHub documents checking out the untrusted head ref into the workspace root as the specific mistake to avoid. Check out the base ref at the workspace root and pass the head ref through a subdirectory instead.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can a pull request change the rules my AI reviewer applies?
&lt;/h3&gt;

&lt;p&gt;It can, if the reviewer reads its rule files from the pull request head. Agentic reviewers restore a fixed list of configuration paths from the base branch for exactly this reason, and everything outside that list stays at the head. If your coding standards live in &lt;code&gt;AGENTS.md&lt;/code&gt; or &lt;code&gt;.cursorrules&lt;/code&gt; in the repository, confirm which ref the reviewer loads them from.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should an AI reviewer be allowed to block a merge?
&lt;/h3&gt;

&lt;p&gt;That depends on whether you have defined what a block means and who can clear it. The safer default is comment-only, because a wrong finding costs a minute in a thread rather than a stuck pull request. Reviewers that do block usually document what blocks a merge and what does not, and that documentation is the thing to read before putting one in front of a merge queue.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://agentwrotethis.dev/blog/ai-code-review-on-github-what-the-platform-decides-for-you/" rel="noopener noreferrer"&gt;agentwrotethis.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aicodereview</category>
      <category>githubactions</category>
      <category>codereview</category>
      <category>pullrequests</category>
    </item>
    <item>
      <title>Which AI reviewer approvals satisfy your merge requirement</title>
      <dc:creator>Tess Ainsley</dc:creator>
      <pubDate>Wed, 21 Oct 2026 00:30:06 +0000</pubDate>
      <link>https://dev.to/tessainsley/which-ai-reviewer-approvals-satisfy-your-merge-requirement-4doc</link>
      <guid>https://dev.to/tessainsley/which-ai-reviewer-approvals-satisfy-your-merge-requirement-4doc</guid>
      <description>&lt;p&gt;Whether an AI reviewer's approval clears a merge requirement is a repository setting, and on most platforms it starts off. GitHub's Copilot code review will post a review the moment it is enabled, but a separate toggle decides whether that review can submit an approving review, and a second decides whether the approval counts toward the required approvals on the branch. CodeRabbit's request-changes workflow ships disabled and only exists on paid tiers. Kodus documents auto-approve as optional and recommends leaving blocking behavior off until your thresholds and CI are settled.&lt;/p&gt;

&lt;p&gt;The consequence is that a team can run an AI reviewer for months, watch it comment on every pull request, and never notice its approval was never in the merge path. The reverse is worse. Someone enables the toggle, a bot approval clears the gate on a change nobody read, and the first time anyone notices is an incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the approval toggle actually controls
&lt;/h2&gt;

&lt;p&gt;GitHub splits this across three settings on the repository, under Settings, then Copilot, then Code review. Allow Copilot to approve pull requests turns on approving reviews. Allow Copilot approvals to count toward merge requirements is the one that lets those approvals satisfy branch protection. The third is a file path list, one glob per line, up to 15 entries, which narrows where an approval counts: it counts only on pull requests where every changed file matches one of the globs.&lt;/p&gt;

&lt;p&gt;That glob list is the most useful of the three and the one most teams leave blank. If the bot is allowed to approve and its approvals count, an empty list means a bot approval carries the same weight on a payment handler as it does on a changelog. Filling it in keeps the approval in the merge path for the changes where it is worth something and out of it everywhere else. GitHub labels the whole arrangement as public preview, which is worth knowing if your merge gate is load-bearing.&lt;/p&gt;

&lt;p&gt;Kodus takes the opposite default and says so in its &lt;a href="https://docs.kodus.io/en/how_to_use/code_review/policy.md" rel="noopener noreferrer"&gt;review policy documentation&lt;/a&gt;: suggestions are non-blocking by default, request-changes and auto-approve are optional behaviors you turn on, and the page recommends enabling blocking only where the team has agreed thresholds and strong CI in place. That is a defensible starting position because it keeps the failure mode to a noisy thread rather than a stuck pull request.&lt;/p&gt;

&lt;h2&gt;
  
  
  The effort dial is a separate control from the approval
&lt;/h2&gt;

&lt;p&gt;Copilot code review has a review effort level with three values. Lite is described as a standard review, Balanced goes deeper on complex logic, security-sensitive code, and cross-service changes, and Max is listed as coming soon. The built-in default is Balanced.&lt;/p&gt;

&lt;p&gt;Effort changes what the reviewer examines and what it costs. GitHub's own estimate is $0.05 to $1 of AI credits for a Lite review and $0.25 to $5 for a Balanced one, excluding Actions minutes, with consumption rising alongside pull request size and repository custom instructions. Those are estimates from the vendor, not measurements, so treat the ranges as an order of magnitude.&lt;/p&gt;

&lt;p&gt;Effort and approval are independent. Raising the effort level changes what the reviewer finds. It does not change whether the reviewer's approval can clear the gate, and it does not change which paths that approval counts on. A team that wants a stronger review and a narrower gate sets two different controls, and teams regularly conflate them.&lt;/p&gt;

&lt;p&gt;There is a second layer here that shows up on a bad CI day. Copilot's agentic capabilities, meaning full project context gathering and passing suggestions to the cloud agent, run on GitHub Actions. If Actions is unavailable or the workflow fails, reviews still post, just without the agentic extras. The same repository can produce a shallower review because a runner was unavailable, and nothing in the comment tells you which mode you got. That is the coverage question, and it is why &lt;a href="https://agentwrotethis.dev/blog/how-much-of-code-review-an-ai-reviewer-actually-carries/" rel="noopener noreferrer"&gt;coverage per change is the number to ask a vendor for&lt;/a&gt; rather than a comment count.&lt;/p&gt;

&lt;h2&gt;
  
  
  When an approval stays pending
&lt;/h2&gt;

&lt;p&gt;CodeRabbit's &lt;a href="https://docs.coderabbit.ai/pr-reviews/request-changes-workflow.md" rel="noopener noreferrer"&gt;request changes workflow&lt;/a&gt; is the most explicit of the tools about this. When enabled, CodeRabbit requests changes if a review posts actionable inline comments, and approves once the approval requirements are met. Approval stays pending when the latest review is missing, in progress, failed, or rate-limited; when the current pull request HEAD is not among the commits it reviewed; when a required review thread is unresolved; when a pre-merge check is failing; or when HEAD changes while CodeRabbit is verifying the requirements.&lt;/p&gt;

&lt;p&gt;Two of those are worth reading twice. A rate-limited run can still resolve threads it considers addressed, but the approval stays pending because the latest commit did not complete a review. And if every changed file is excluded by path filters, CodeRabbit skips the review content but still evaluates the remaining approval requirements and can approve. An empty review is not the same as a blocked one. Path filters can produce an approval on a change the reviewer never read.&lt;/p&gt;

&lt;p&gt;CodeRabbit also ships two override commands, @coderabbitai resolve and @coderabbitai approve, which can submit approval without requiring the latest commit to have completed a review and without pre-merge checks passing. By default the pull request author can run them on their own pull request, and reviews.allow_author_approval: false turns that off. So with the workflow on, an author-facing command can approve around the checks the workflow exists to enforce. Whether that is acceptable is a policy decision, but it should be a made one, in the same spirit as &lt;a href="https://agentwrotethis.dev/blog/review-policy-cant-rely-on-flagging-ai-code/" rel="noopener noreferrer"&gt;a review policy that cannot lean on detecting AI code&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who the review is billed to
&lt;/h2&gt;

&lt;p&gt;Copilot attributes an automatic review's AI credits to the pull request author by default, and a manually requested review to whoever requested it. For pull requests authored by the Copilot cloud agent, usage is attributed first to the human co-author, and if that person cannot be billed, to the organization. For pull requests authored by other bots, or when a bot requests the review, it is billed directly to the organization.&lt;/p&gt;

&lt;p&gt;The attribution is about cost, and it still shapes who enables what. An organization that pays for every bot-authored review has a reason to keep automatic review off on agent-heavy repositories, and that choice removes the reviewer from those pull requests entirely. The trigger event and the token scopes sit in the same layer, which is the part &lt;a href="https://agentwrotethis.dev/blog/ai-code-review-on-github-what-the-platform-decides-for-you/" rel="noopener noreferrer"&gt;the platform decides for you&lt;/a&gt; before a model sees the diff.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tools side by side
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Approval default&lt;/th&gt;
&lt;th&gt;What can block or clear a merge&lt;/th&gt;
&lt;th&gt;Limits worth knowing&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot code review&lt;/td&gt;
&lt;td&gt;Approval off by default, counting toward merge requirements off by default&lt;/td&gt;
&lt;td&gt;Approving reviews, then a separate toggle to count them as required approvals&lt;/td&gt;
&lt;td&gt;File path globs, up to 15, gate which pull requests count; public preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;Request-changes workflow disabled by default, Essentials tier and above&lt;/td&gt;
&lt;td&gt;Requests changes on actionable inline comments, approves when requirements are met&lt;/td&gt;
&lt;td&gt;Approval stays pending on a rate limit or a stale HEAD; author-facing resolve and approve commands&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kodus&lt;/td&gt;
&lt;td&gt;Non-blocking suggestions by default&lt;/td&gt;
&lt;td&gt;Request-changes and auto-approve are optional, enabled per repository&lt;/td&gt;
&lt;td&gt;Docs recommend blocking only with agreed thresholds and strong CI in place&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graphite AI reviews&lt;/td&gt;
&lt;td&gt;Reviews run without manual configuration&lt;/td&gt;
&lt;td&gt;Not documented on the pages I read&lt;/td&gt;
&lt;td&gt;unknown&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Graphite's AI reviews page describes automatic review of every pull request and points at acceptance rates and rule effectiveness in a dashboard, but the pages I read do not document approval or merge-gate behavior. That is an unknown, not an absence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions to settle before a bot approval counts
&lt;/h2&gt;

&lt;p&gt;Four questions cover most of the risk.&lt;/p&gt;

&lt;p&gt;Does the approval count as a required approval, and on which paths? If the answer is all paths, the glob list is your first piece of work.&lt;/p&gt;

&lt;p&gt;Can the approval survive a stale HEAD or a rate limit? If not, the bot will be the reason a pull request sits, and you should know that before reviewers start blaming each other.&lt;/p&gt;

&lt;p&gt;Who can override it, and can the author of the pull request override their own? An override command is a feature. An override command that the author runs on their own change is a policy decision.&lt;/p&gt;

&lt;p&gt;What does the reviewer do when it reviewed nothing? Path filters and failed agentic runs both produce a posted review with less behind it than the comment suggests.&lt;/p&gt;

&lt;p&gt;None of these are reasons to keep a bot out of the merge gate. They are the settings that decide whether the gate means what the team thinks it means. The reviewer's opinion and its authority are separate things, and only one of them is set on the branch.&lt;/p&gt;

</description>
      <category>aicodereview</category>
      <category>codereview</category>
      <category>githubactions</category>
      <category>pullrequests</category>
    </item>
    <item>
      <title>What your review queue's ranker can and cannot see</title>
      <dc:creator>Tess Ainsley</dc:creator>
      <pubDate>Mon, 19 Oct 2026 02:30:01 +0000</pubDate>
      <link>https://dev.to/tessainsley/what-your-review-queues-ranker-can-and-cannot-see-1aaa</link>
      <guid>https://dev.to/tessainsley/what-your-review-queues-ranker-can-and-cannot-see-1aaa</guid>
      <description>&lt;p&gt;A team with more open pull requests than review hours does not need another reviewer first. It needs something that decides which pull request to look at, and on at least one platform that decision is now a documented product feature with stated limits. CodeRabbit's Triage builds a ranked queue across repositories, and its documentation spends nearly as much space on what the ranking cannot see as on what it can. That part is worth reading before you put a ranker in front of a backlog that agents keep filling.&lt;/p&gt;

&lt;p&gt;This matters because the volume problem agents create shows up as a ranking problem before it shows up as a review-time problem. When volume rises and review time plateaus, the plateau is a disengagement signal rather than a throughput win, which is what &lt;a href="https://agentwrotethis.dev/blog/when-review-time-plateaued-reviewers-had-stopped-reading/" rel="noopener noreferrer"&gt;the Salesforce review data showed&lt;/a&gt;. A ranker is the tool teams reach for at that point, so it is worth knowing exactly what evidence it ranks on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the mechanical state stops being the signal
&lt;/h2&gt;

&lt;p&gt;Triage separates two questions per pull request. Priority is how much acting on it is worth compared to everything else in the queue. Next action is what specifically has to happen for it to move. Its &lt;a href="https://docs.coderabbit.ai/triage/prioritization.md" rel="noopener noreferrer"&gt;prioritization documentation&lt;/a&gt; keeps those apart on purpose, and the examples make the split concrete: failing checks, merge conflicts, draft status, a branch behind its base, unresolved review threads, and a stale approval all shape the next action and can make a pull request un-mergeable, while none of them make it urgent.&lt;/p&gt;

&lt;p&gt;A trivial dependency bump with red checks should not outrank a customer-facing fix that is simply waiting on a reviewer. The state of a pull request tells you what to do about it. It does not tell you what the change is worth.&lt;/p&gt;

&lt;p&gt;That is the whole argument for a queue over a repository list once volume climbs. Sorting by last-updated or by author puts a decision in front of you that has nothing to do with consequence, and reviewers respond by reading the top of the list.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ranker publishes what it cannot match
&lt;/h2&gt;

&lt;p&gt;Administrators describe how their organization wants pull requests ranked, in plain language, and CodeRabbit turns that into an ordered list of rules assigning P0 through P3. The matchable facts are broad: the repository, its owner, the target branch, draft state, change type, issue severity, risk, security risk, blast radius, review effort, check status, merge conflict status, workflow state, next action, involved people with their roles, words in the title, and how many other pull requests are blocked behind this one.&lt;/p&gt;

&lt;p&gt;Then the exclusions. Rules cannot match labels, file paths, CODEOWNERS, team membership, assignees, or the code itself. When part of a description asks for something rules cannot express, CodeRabbit reports that part as unsupported and does not apply it, rather than approximating it.&lt;/p&gt;

&lt;p&gt;The CODEOWNERS exclusion is the one to underline. CODEOWNERS is GitHub's own answer to who owns which path, and the queue's ranking layer cannot read it. The two systems answer different questions. The ownership file decides who gets asked to review, and the ranker decides what is worth reviewing now, and nothing forces them to agree. If your mental model of priority is whatever touches the paths your senior people own, that is not expressible as a ranking rule, and the tool says so instead of guessing.&lt;/p&gt;

&lt;p&gt;The file itself is also less solid than people assume. GitHub's &lt;a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners" rel="noopener noreferrer"&gt;CODEOWNERS reference&lt;/a&gt; documents that a line with invalid syntax is skipped, that a file over 3 MB is not loaded at all, that &lt;code&gt;docs/*&lt;/code&gt; does not match nested paths like &lt;code&gt;docs/build-app/troubleshooting.md&lt;/code&gt;, and that gitignore-style &lt;code&gt;!&lt;/code&gt; negation and &lt;code&gt;[ ]&lt;/code&gt; character ranges do not work. If your priority model depends on an ownership map, check the map first.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it takes for the ranker to call something urgent
&lt;/h2&gt;

&lt;p&gt;Automatic P0 requires external evidence. A pull request reaches P0 on its own only when it carries a validated linked issue at High or Urgent priority in Jira or Linear. Without that, the base score is capped at P1 no matter how severe the internal signals look. An administrator rule can assign P0 without a linked issue, and a person can set P0 by hand.&lt;/p&gt;

&lt;p&gt;The base score comes from three signals: the validated severity of issues the reviewer found, the priority of a linked external issue, and how many other open pull requests are blocked behind this one. That third signal is the interesting one. Downstream dependency is something a ranker can compute and a human rarely does, and it is exactly the quantity that grows when agents open changes faster than anyone merges them.&lt;/p&gt;

&lt;p&gt;Triage does not show a numeric score. Levels are the interface, and the number behind them is deliberately undocumented because it changes as the ranking model improves. Two pull requests in the same provider state routinely land on different levels, which is the intent. The trade is that you cannot audit a rank the way you can audit a rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the queue stops and the merge starts
&lt;/h2&gt;

&lt;p&gt;The ranker also carries actions, and the merge action has a documented limit. Triage merges only the commit you were shown, and if someone pushed since, the merge is refused. On GitHub there is no merge method to choose, because Triage uses the first method the repository allows in the order merge commit, squash, rebase. When the branch requires a merge queue, the control becomes Add to merge queue and GitHub controls the ordering, checks, and method, and a queued pull request is not yet merged.&lt;/p&gt;

&lt;p&gt;Manual actions run as you, using your own Git provider authorization, so an action you could not perform in the provider is refused in the queue too. Automated actions use the organization's integration and need administrator authorization. Opening the queue at all requires an active Review seat, and the feature is Team plan and above, generally available on GitHub Cloud with GitLab in beta and Bitbucket unsupported, and not available on self-hosted CodeRabbit deployments.&lt;/p&gt;

&lt;p&gt;If what you actually care about is whether a bot approval clears branch protection, that is set in the repository, and &lt;a href="https://agentwrotethis.dev/blog/which-ai-reviewer-approvals-satisfy-your-merge-requirement/" rel="noopener noreferrer"&gt;the approval toggles and path globs&lt;/a&gt; are a separate decision from anything the queue does.&lt;/p&gt;

&lt;h2&gt;
  
  
  The other layer: what happened to the suggestions
&lt;/h2&gt;

&lt;p&gt;Ranking decides what to read. It says nothing about whether anyone acted on it. Kodus measures that separately in its Cockpit, on a tab called &lt;a href="https://docs.kodus.io/en/how_to_use/cockpit/kodus_review.md" rel="noopener noreferrer"&gt;Kodus Review&lt;/a&gt;, which asks whether the team is acting on what the reviewer said. The headline metric is implementation rate, implemented suggestions divided by sent suggestions, and only delivered suggestions count, meaning drafts the tool filtered out before commenting are never in the denominator. Suggestions are attributed to the week the pull request closed, because implementation status is only final once it merges.&lt;/p&gt;

&lt;p&gt;Two details there are easy to reuse in any review measurement. Negative vote rate shows raw counts instead of a percentage below ten reactions, and charts built on very few suggestions are faded and marked, because a 0% or 100% from a handful of suggestions is not a signal. The severity chart also carries an All / Kodus only toggle, because a custom rule carries the severity you set on the rule rather than a risk assessment by the tool, and mixing the two distorts the read.&lt;/p&gt;

&lt;p&gt;The metric I have not seen elsewhere is critical suggestions left unimplemented on pull requests that already merged. That is a risk list rather than a quality score, and it is the closest thing to a measure of what the review process let through. It also pairs with the coverage question, since &lt;a href="https://agentwrotethis.dev/blog/how-much-of-code-review-an-ai-reviewer-actually-carries/" rel="noopener noreferrer"&gt;how much of a change a reviewer actually reads&lt;/a&gt; determines what a suggestion count can mean in the first place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading the numbers the platform hands you
&lt;/h2&gt;

&lt;p&gt;If you pull review and adoption numbers from GitHub's own &lt;a href="https://docs.github.com/en/copilot/concepts/billing-and-usage/copilot-usage-metrics/copilot-metrics" rel="noopener noreferrer"&gt;Copilot usage metrics&lt;/a&gt;, the caveats are documented and specific. Most metrics come from client-side IDE telemetry, and end users need telemetry enabled in their IDE for the richest data. Server-side telemetry catches active users that client telemetry misses, and those users count toward active totals, but their per-feature and lines-of-code breakdowns stay empty. The data excludes Copilot Chat on GitHub.com and GitHub Mobile, and license and seat information lives in a separate API.&lt;/p&gt;

&lt;p&gt;Attribution follows organization membership rather than where the action happened, so one person's usage can appear in several organization dashboards while counting once at the enterprise level. GitHub states that organization-level analytics are not designed to be compared directly with enterprise totals. The Copilot impact dashboard groups users into adoption cohorts and connects adoption to pull request output, which is the nearest the platform gets to tying a review tool to delivery.&lt;/p&gt;

&lt;p&gt;None of that makes the numbers wrong. It makes them numbers with a stated scope, and a review metric quoted without its scope is how a planning meeting turns into an argument.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three measurement layers, side by side
&lt;/h2&gt;

&lt;p&gt;Each of these answers a different question, and none of them substitutes for the others.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Question it answers&lt;/th&gt;
&lt;th&gt;What it can read&lt;/th&gt;
&lt;th&gt;What it declares out of scope&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CodeRabbit Triage&lt;/td&gt;
&lt;td&gt;Which pull request is worth acting on now&lt;/td&gt;
&lt;td&gt;Repository, branch, draft state, change type, severity, risk, blast radius, review effort, checks, conflicts, workflow state, involved people, title words, downstream dependents&lt;/td&gt;
&lt;td&gt;Labels, file paths, CODEOWNERS, team membership, assignees, the code itself; the numeric score is undocumented&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kodus Cockpit (Kodus Review tab)&lt;/td&gt;
&lt;td&gt;Whether the team acts on what the reviewer said&lt;/td&gt;
&lt;td&gt;Delivered suggestions, their implementation status at PR close, reactions, per-rule trigger counts, review-run outcomes&lt;/td&gt;
&lt;td&gt;Filtered-out drafts never count; rates are suppressed below ten reactions and thin samples are marked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot usage metrics&lt;/td&gt;
&lt;td&gt;How Copilot is adopted and how that tracks pull request output&lt;/td&gt;
&lt;td&gt;IDE, CLI and agent app telemetry, server-side active-user signals, repository-level PR activity, adoption cohorts&lt;/td&gt;
&lt;td&gt;Copilot Chat on GitHub.com and GitHub Mobile, license and seat data, org-level figures compared to enterprise totals&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The scoping differences are the point of the table. A Triage rule can see blast radius but not a file path. A Kodus implementation rate sees what happened to a suggestion but not which path it touched. GitHub's metrics see adoption and pull request activity but not the reviews themselves. If you want one number that covers all three, you are going to build it from two exports and a join, and you will spend the first week reconciling definitions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check before you trust a queue
&lt;/h2&gt;

&lt;p&gt;The cheapest test I know takes an afternoon and no integration work. Take the ten pull requests your team would rank as most important today, in order, by hand. Then write the rule you would need to reproduce that ranking, in whatever language the tool accepts. If the rule reaches for file paths, labels, CODEOWNERS, or team membership, the ranker cannot express it, and the queue you get will be ordered by something else.&lt;/p&gt;

&lt;p&gt;Do the same for the number you plan to report upward. Ask what the denominator is, which population it counts, and which cases the documentation says are excluded. A ranker that tells you what it cannot see is easier to trust than one that does not mention the question, and the ones that document their blind spots have just handed you the audit you were going to need anyway.&lt;/p&gt;

&lt;p&gt;The context question sits underneath all of this. A queue that ranks across repositories still hands the reader one change at a time, which is why &lt;a href="https://agentwrotethis.dev/blog/multi-repo-ai-review-a-context-problem-not-a-volume-problem/" rel="noopener noreferrer"&gt;cross-repository context&lt;/a&gt; is a separate problem from ranking order. Ranking decides when you look. It does not decide whether what you are looking at makes sense on its own.&lt;/p&gt;

</description>
      <category>aicodereview</category>
      <category>codereview</category>
      <category>pullrequests</category>
      <category>reviewmetrics</category>
    </item>
    <item>
      <title>Which of your rule files the reviewer actually reads</title>
      <dc:creator>Tess Ainsley</dc:creator>
      <pubDate>Fri, 16 Oct 2026 00:15:06 +0000</pubDate>
      <link>https://dev.to/tessainsley/which-of-your-rule-files-the-reviewer-actually-reads-4963</link>
      <guid>https://dev.to/tessainsley/which-of-your-rule-files-the-reviewer-actually-reads-4963</guid>
      <description>&lt;p&gt;Every AI review tool claims it reads your AGENTS.md or CLAUDE.md. What decides whether your standards actually land is which rule wins when two apply to the same file, and whether the tool can show you which one it used for a specific pull request.&lt;/p&gt;

&lt;p&gt;A reviewer that follows your team's standards is making a claim about precedence and about what the tool will show you. It says very little about how well the model writes code. Almost every AI review tool now picks up AGENTS.md, CLAUDE.md, .cursorrules or a Copilot instructions file, so the yes/no version of the question resolves to yes for all of them. The version that decides whether your standards land comes down to which files it reads, which rule wins when two apply to the same file, and whether you can prove for one specific pull request that the rule you care about was in scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  Detection is the easy part
&lt;/h2&gt;

&lt;p&gt;CodeRabbit's &lt;a href="https://docs.coderabbit.ai/knowledge-base/code-guidelines.md" rel="noopener noreferrer"&gt;code guidelines page&lt;/a&gt; lists the patterns it detects by default: &lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;.cursorrules&lt;/code&gt;, &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt;, &lt;code&gt;.github/instructions/*.instructions.md&lt;/code&gt;, &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;GEMINI.md&lt;/code&gt;, &lt;code&gt;.cursor/rules/*&lt;/code&gt;, &lt;code&gt;.windsurfrules&lt;/code&gt;, &lt;code&gt;.clinerules/*&lt;/code&gt;, &lt;code&gt;.rules/*&lt;/code&gt;, and &lt;code&gt;AGENT.md&lt;/code&gt;. Kodus's &lt;a href="https://docs.kodus.io/en/how_to_use/code_review/configs/rules_file_detection" rel="noopener noreferrer"&gt;rules file detection page&lt;/a&gt; covers a similar set and adds &lt;code&gt;.aider.conf.yml&lt;/code&gt;, &lt;code&gt;.opencode.json&lt;/code&gt;, and &lt;code&gt;docs/coding-standards/**/*&lt;/code&gt;. GitHub Copilot supports three kinds of custom instructions, documented on the &lt;a href="https://docs.github.com/en/copilot/how-tos/configure-custom-instructions/add-repository-instructions" rel="noopener noreferrer"&gt;repository custom instructions page&lt;/a&gt;: a repository-wide &lt;code&gt;copilot-instructions.md&lt;/code&gt; in &lt;code&gt;.github&lt;/code&gt;, path-specific &lt;code&gt;NAME.instructions.md&lt;/code&gt; files under &lt;code&gt;.github/instructions&lt;/code&gt;, and &lt;code&gt;AGENTS.md&lt;/code&gt; files stored anywhere in the repository.&lt;/p&gt;

&lt;p&gt;Three vendors, three lists that overlap almost completely. If detection were the whole problem, any of them would do, and the comparison would be about model quality. It is not, because none of those lists tell you which file wins when your repo has a root &lt;code&gt;CLAUDE.md&lt;/code&gt;, a &lt;code&gt;services/billing/CLAUDE.md&lt;/code&gt;, and a shared standards repository that also gets imported. That is where teams lose enforcement without noticing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which rule wins when two apply
&lt;/h2&gt;

&lt;p&gt;Kodus resolves rules through an inheritance hierarchy: global, then repository, then directory. The effective set at any level is the rules defined there, plus the rules inherited from the parent level, minus anything explicitly excluded at that level. There are two ways to stop a rule flowing down. You can mark it non-inheritable when you create it, in which case it applies only where it was created. Or you can exclude a parent rule at a child level, and this is the part worth reading twice: the exclusion does not cascade. Exclude a global rule at the repository level and a configured directory inside that same repository still inherits it, unless you exclude it there too. &lt;a href="https://docs.kodus.io/en/how_to_use/code_review/configs/global_rule_sources" rel="noopener noreferrer"&gt;Global rule sources&lt;/a&gt; let you point Kodus at a standards repository and import its rule files as global rules that apply to every connected repo, and the source repo itself is treated as configuration rather than as a codebase, so Kodus skips review on pull requests opened in it.&lt;/p&gt;

&lt;p&gt;CodeRabbit resolves configuration differently, and the default matters. &lt;a href="https://docs.coderabbit.ai/configuration/configuration-inheritance.md" rel="noopener noreferrer"&gt;Configuration inheritance&lt;/a&gt; is disabled by default. You have to set &lt;code&gt;inheritance: true&lt;/code&gt;, after which CodeRabbit merges up the chain and stops at the first level where &lt;code&gt;inheritance&lt;/code&gt; is false or unset. Merge behavior depends on the data type. Objects deep merge, scalars take the child value, and arrays append unique parent items after the child's, deduplicated by &lt;code&gt;path&lt;/code&gt;, &lt;code&gt;label&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;id&lt;/code&gt; or &lt;code&gt;key&lt;/code&gt;. The vendor's own worked example shows the consequence: a central &lt;code&gt;path_instructions&lt;/code&gt; entry for &lt;code&gt;src/**&lt;/code&gt; is dropped because the repository already defines an entry with the same path. No error, no warning. The central instruction is simply not in the merged config.&lt;/p&gt;

&lt;p&gt;Copilot's rule is positional. The nearest &lt;code&gt;AGENTS.md&lt;/code&gt; in the directory tree takes precedence, and when a path-specific instruction file matches the file being reviewed, both it and the repository-wide file are used. The docs also note a prerequisite that is easy to miss: for Copilot code review, your personal setting for using custom instructions has to be enabled, which it is by default. Turn it off and the review silently runs without your rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  The failures that look like success
&lt;/h2&gt;

&lt;p&gt;The dropped array entry above is the cleanest example of a rule that exists, is detected, and never applies. There are several more of the same shape.&lt;/p&gt;

&lt;p&gt;A path glob that does not match. Kodus's own troubleshooting line is blunt: a rule only runs on files matching its path, so a rule can show as active in the UI and never appear in the evaluation trace for the files you expected. Nothing about the UI tells you the difference.&lt;/p&gt;

&lt;p&gt;Case sensitivity. CodeRabbit's guideline patterns are case-sensitive, so a file named &lt;code&gt;claude.md&lt;/code&gt; is not matched by &lt;code&gt;**/CLAUDE.md&lt;/code&gt;. A team that renames a file, or that has one contributor on a case-insensitive filesystem, ends up with guidelines that quietly stop applying.&lt;/p&gt;

&lt;p&gt;Guidelines reviewed instead of used. Adding &lt;code&gt;CLAUDE.md&lt;/code&gt; to &lt;code&gt;path_instructions&lt;/code&gt; tells CodeRabbit to review that file as changed code, not to apply it as a guideline. The docs call this a common mistake, and the symptom is a reviewer that comments on your standards document instead of enforcing it.&lt;/p&gt;

&lt;p&gt;LLM conversion of a free-form file. Kodus imports &lt;code&gt;.kody/rules/**&lt;/code&gt; and &lt;code&gt;rules/**/*.md&lt;/code&gt; verbatim, preserving your wording, identifiers and Bad/Good examples. Files that do not follow that template fall back to the LLM importer, which merges several guidelines from one file into a single rule. Want two independently manageable rules? They need to be two files. There is a related trap: if you hand-edit a rule that was created from an IDE rule file, the next sync of that file overwrites your edit.&lt;/p&gt;

&lt;p&gt;Markers that are live controls. Adding &lt;code&gt;@kody-ignore&lt;/code&gt; to a rule file makes Kodus skip it on the next sync and remove any rules previously created from it, and removing the marker brings them back. That is the intended behavior, and it means a comment in a markdown file is a control plane for what gets enforced.&lt;/p&gt;

&lt;p&gt;Cross-repo guidelines that are not pinned. CodeRabbit can read guideline files from another repository in the same organization, and it reads them from that repository's default branch at review time. Freshness is the benefit. The cost is reproducibility: a comment from last month may not reproduce today because the guideline text behind it has moved.&lt;/p&gt;

&lt;p&gt;Rule files that drift. Cloudflare's &lt;a href="https://blog.cloudflare.com/ai-code-review/" rel="noopener noreferrer"&gt;CI-native reviewer&lt;/a&gt; includes a plugin that verifies the repository's &lt;code&gt;AGENTS.md&lt;/code&gt; is up to date, which is a reasonable response to stale rule files. They also built the whole system themselves, because off-the-shelf tools did not offer enough flexibility for an organization their size. Stack Overflow's piece on &lt;a href="https://stackoverflow.blog/2026/03/26/coding-guidelines-for-ai-agents-and-people-too/" rel="noopener noreferrer"&gt;building shared coding guidelines for AI&lt;/a&gt; makes the adjacent point that guidelines for agents need to be more explicit and demonstrative than guidelines for people, because an agent does not absorb the tacit conventions a new hire picks up by reading the codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to prove a rule actually fired
&lt;/h2&gt;

&lt;p&gt;This is the part most vendor pages do not answer, and it is the part that turns the claim into something checkable.&lt;/p&gt;

&lt;p&gt;Kodus on a self-hosted deployment writes grep-able markers into the API logs. &lt;code&gt;[kody-rules-sync]&lt;/code&gt; summarizes each sync run, including which files were imported, which were skipped with a reason, and which were removed. &lt;code&gt;[kody-rules-eval]&lt;/code&gt; is a per-file evaluation trace that names the rule uuid and title selected into the prompt for each reviewed file. Two docker logs greps give you an answer for a specific pull request rather than for the feature in general.&lt;/p&gt;

&lt;p&gt;CodeRabbit exposes the resolved configuration rather than the prompt. Running &lt;code&gt;@coderabbitai configuration&lt;/code&gt; on a pull request prints the fully resolved YAML annotated with source comments, so each setting shows which level in the merge chain supplied it. That is a direct way to catch the dropped &lt;code&gt;src/**&lt;/code&gt; entry.&lt;/p&gt;

&lt;p&gt;For GitHub Copilot, the documentation describes how the three kinds of instructions are assembled, and I did not find a documented way to inspect the assembled instructions for a particular review. That capability is unknown from the sources I read, which is different from saying it does not exist.&lt;/p&gt;

&lt;p&gt;The check that works on every tool is a canary rule. Write one rule scoped to a single glob that forbids one obvious thing, open a pull request that violates it inside a file matching that glob, and confirm the finding appears. Then move the violation to a file outside the glob and confirm it does not. That is ten minutes of work and it exercises detection, scoping, precedence and firing in one pass. Repeat it for the language you care most about, because rule evaluation is not uniform across file types, and repeat it after any change to the rule file layout.&lt;/p&gt;

&lt;h2&gt;
  
  
  The criteria that decide this
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Rule files detected&lt;/th&gt;
&lt;th&gt;How scope is decided&lt;/th&gt;
&lt;th&gt;How precedence resolves&lt;/th&gt;
&lt;th&gt;Can you see which rule fired&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kodus&lt;/td&gt;
&lt;td&gt;IDE rule files plus &lt;code&gt;.kody/rules/**&lt;/code&gt;, &lt;code&gt;rules/**/*.md&lt;/code&gt;, &lt;code&gt;docs/coding-standards/**&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Nested files scoped to their directory; per-rule path globs; directory-level settings&lt;/td&gt;
&lt;td&gt;Global to repository to directory inheritance; non-inheritable rules and child exclusions that do not cascade&lt;/td&gt;
&lt;td&gt;Yes on self-hosted, via &lt;code&gt;[kody-rules-sync]&lt;/code&gt; and &lt;code&gt;[kody-rules-eval]&lt;/code&gt; log markers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;.cursorrules&lt;/code&gt;, Copilot instruction files, &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;GEMINI.md&lt;/code&gt;, &lt;code&gt;.cursor/rules/*&lt;/code&gt;, &lt;code&gt;.windsurfrules&lt;/code&gt;, &lt;code&gt;.clinerules/*&lt;/code&gt;, &lt;code&gt;.rules/*&lt;/code&gt; (case-sensitive)&lt;/td&gt;
&lt;td&gt;Directory-scoped by default, with explicit &lt;code&gt;applyTo&lt;/code&gt; mapping and cross-repo &lt;code&gt;repo:path&lt;/code&gt; sources&lt;/td&gt;
&lt;td&gt;Inheritance off by default; when on, chain stops at first false or unset level, and arrays dedupe by path so a parent entry can be dropped&lt;/td&gt;
&lt;td&gt;Yes, &lt;code&gt;@coderabbitai configuration&lt;/code&gt; prints the resolved config with source annotations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;copilot-instructions.md&lt;/code&gt;, &lt;code&gt;NAME.instructions.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;GEMINI.md&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Nearest &lt;code&gt;AGENTS.md&lt;/code&gt; in the directory tree wins; path-specific files apply on path match&lt;/td&gt;
&lt;td&gt;Positional for &lt;code&gt;AGENTS.md&lt;/code&gt;; repository-wide and path-specific both apply when the path matches&lt;/td&gt;
&lt;td&gt;Unknown from the documentation I read&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A fourth option is what Cloudflare did: build a coordinator around an open-source agent and treat your internal standards as one more plugin with its own compliance check. That gives you full control over precedence and over what the trace looks like, and it costs an internal tool to own. Their post reports running it across tens of thousands of merge requests, which is the kind of volume that justifies the build.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do before you trust the claim
&lt;/h2&gt;

&lt;p&gt;Look at how many rule files your repository actually contains, including the nested ones. Pick the rule you would most hate to see silently skipped and find its path glob, then check that glob against the files it is supposed to cover. If two files define guidance for the same path, determine which one wins on your tool and delete or scope the loser. Find the command or log marker that shows the resolved rule set, and run it on a real pull request rather than trusting the settings page. Then add the canary rule and keep it, because the thing that breaks rule enforcement later is a file layout change nobody connected to the reviewer.&lt;/p&gt;

&lt;p&gt;A rule file is an artifact, and it deserves the same treatment as the code it governs: version it, scope it, and check that it fires. Teams that get real value out of "the reviewer follows our standards" can point at the file, the glob, and the log line. Teams that cannot are running a policy that exists in a repository and not in their review. If your rules live in a central standards repo, the &lt;a href="https://agentwrotethis.dev/blog/multi-repo-ai-review-a-context-problem-not-a-volume-problem/" rel="noopener noreferrer"&gt;multi-repo context question&lt;/a&gt; is the next one to settle, and if you are still deciding where the reviewer runs at all, the operational cost of &lt;a href="https://agentwrotethis.dev/blog/what-self-hosting-ai-code-review-actually-costs/" rel="noopener noreferrer"&gt;self-hosting it&lt;/a&gt; changes which of these verification paths you get. A policy that leans on &lt;a href="https://agentwrotethis.dev/blog/review-policy-cant-rely-on-flagging-ai-code/" rel="noopener noreferrer"&gt;flagging AI code&lt;/a&gt; rather than on scoped rules has the same blind spot, one layer up.&lt;/p&gt;

&lt;p&gt;Claims checked 2026-10-04.&lt;/p&gt;

</description>
      <category>aicodereview</category>
      <category>codereview</category>
      <category>aiagents</category>
      <category>devtools</category>
    </item>
    <item>
      <title>The artifact worth reviewing when agents write the code</title>
      <dc:creator>Tess Ainsley</dc:creator>
      <pubDate>Wed, 14 Oct 2026 00:15:05 +0000</pubDate>
      <link>https://dev.to/tessainsley/the-artifact-worth-reviewing-when-agents-write-the-code-2bbn</link>
      <guid>https://dev.to/tessainsley/the-artifact-worth-reviewing-when-agents-write-the-code-2bbn</guid>
      <description>&lt;p&gt;GitHub's Security Lab reported 24 Android vulnerabilities found by an AI security agent, and the part worth copying is what ended up version-controlled. Not the exploit code. The &lt;a href="https://github.blog/security/how-we-found-24-android-vulnerabilities-using-our-open-source-ai-security-agent/" rel="noopener noreferrer"&gt;set of YAML taskflows&lt;/a&gt; that guided the model through the audit, checked into a public repository, runnable by anyone with a Copilot license. The agent did the finding. The taskflows are the thing a team can read, diff, and argue about.&lt;/p&gt;

&lt;p&gt;That is a small shift with a large consequence for review. When a person writes a patch, the diff is a decent summary of the judgment that went into it, because the person held the reasoning and the code is the residue. When an agent writes the patch, the reasoning lives somewhere else entirely: a prompt, a rule file, a model version, a sequence of tool calls. Reviewing only the residue means reading the output of a process you never see.&lt;/p&gt;

&lt;h2&gt;
  
  
  The diff stops being the whole artifact
&lt;/h2&gt;

&lt;p&gt;Ian Bicking's post on &lt;a href="https://blog.glyph.im/2026/09/serious-ai-product.html" rel="noopener noreferrer"&gt;what a serious AI product would look like&lt;/a&gt; puts the failure precisely. Checking for mistakes, he writes, is pushed off into code review, which encourages the author to hand the work to a reviewer without ever looking. He wants a two-column worksheet where every claim has a checkbox you only tick after you have verified it, and he notes that the vendors' own warning labels ("AI can make mistakes, double-check responses") are fine print designed to move responsibility onto the user.&lt;/p&gt;

&lt;p&gt;His complaint is about products. The same structure shows up in review. If the process that produced a change is invisible, then the reviewer becomes the only place where checking happens, and the volume of changes is exactly what makes that unworkable. The fix is not to ask reviewers to work harder. It is to make the process itself a reviewable object, so that some of the checking happens where it can be repeated instead of where it cannot.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a reviewable workflow actually looks like
&lt;/h2&gt;

&lt;p&gt;The GitHub Security Lab agent is a concrete example. The taskflows are YAML files with names like &lt;code&gt;gather_mobile_entry_point_info.yaml&lt;/code&gt; and &lt;code&gt;classify_application_local.yaml&lt;/code&gt;. One splits entry points into mobile and non-mobile so the agent understands the right attack surface. Another enumerates vulnerability classes and asks the model to consider them against each entry point, so an intent-based entry point gets checked against known intent-based bug classes rather than whatever the model feels like noticing.&lt;/p&gt;

&lt;p&gt;The team also ran both a strict prompt and a broad prompt across multiple runs, because the model is non-deterministic. Output lands in a SQLite table with a &lt;code&gt;has_vulnerability&lt;/code&gt; column you filter with a checkmark. There is a real cost attached, and the post is upfront about it: a GitHub Copilot license, premium model requests, many tool calls, and one to two hours on a medium-sized repository.&lt;/p&gt;

&lt;p&gt;Every one of those attributes is reviewable before you run anything. You can read the vulnerability class list and ask whether it covers your stack. You can see the run is repeated. You can see where the findings land and what they claim. Compare that with a code review comment that says "this looks suspicious" and moves on.&lt;/p&gt;

&lt;p&gt;Cloudflare's &lt;a href="https://blog.cloudflare.com/ai-code-review/" rel="noopener noreferrer"&gt;CI-native reviewer&lt;/a&gt; takes a different shape to the same end. They built it on OpenCode and put several reviewers behind a deduplication coordinator, so a finding that two reviewers agree on surfaces once. There is also a check on whether the repo's AGENTS.md file is current. The coordinator is the reviewable part. Without it, the same issue appears four times and the reviewer learns to skim.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rules are part of the workflow
&lt;/h2&gt;

&lt;p&gt;The rules a reviewer applies live in the same category. Stack Overflow's post on &lt;a href="https://stackoverflow.blog/2026/03/26/coding-guidelines-for-ai-agents-and-people-too/" rel="noopener noreferrer"&gt;building shared coding guidelines for AI&lt;/a&gt; is written mostly from the generation side, how to get agents to write to your standards, and it contains the line that matters for review: code review will be most engineers' first look at the code, since they did not write it. Vish Abrams, chief architect at Heroku, makes the point that seasoned engineers assume things like DRY as common knowledge, and that assumption does not transfer to an agent.&lt;/p&gt;

&lt;p&gt;A rule that only exists in a config file the reviewer never reads is decoration. What matters is whether the reviewer ingests the files your team already keeps, AGENTS.md, CLAUDE.md, &lt;code&gt;.cursorrules&lt;/code&gt;, Copilot instruction files, and scopes them so a rule for the payments service does not fire on the CLI tool. CodeRabbit reads repo config, Copilot reads instruction files, and &lt;a href="https://kodus.io" rel="noopener noreferrer"&gt;Kodus&lt;/a&gt; ingests repo rule files as scoped rules rather than as loose context. Those are three shapes of the same idea, and the useful test is whether you can point at the file and the line that produced a comment.&lt;/p&gt;

&lt;h2&gt;
  
  
  A test you can run before you trust the workflow
&lt;/h2&gt;

&lt;p&gt;Take any agent-produced change your team merged last week and try to answer these without opening the diff.&lt;/p&gt;

&lt;p&gt;Where is the prompt or taskflow, and is it in the repository or in someone's chat history? Which model version ran, and would a rerun use the same one? Which rules were in scope for this file, and where do those rules live? What did the workflow check that a test suite would not catch? If the workflow found nothing, is that because there was nothing, or because the run was cut short?&lt;/p&gt;

&lt;p&gt;If the answers are all "somewhere in a chat window," the review process is carrying work it cannot carry at volume. If the answers are files, you have something a second engineer can review before anyone merges anything, which is the point.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this does to review time
&lt;/h2&gt;

&lt;p&gt;None of this makes review faster in the sense of reading fewer lines. It moves a specific category of checking out of the reviewer's head and into an artifact that can be read once and rerun every time. That is the difference between reviewing a change and reviewing a process, and only the second one scales with the number of changes an agent can produce.&lt;/p&gt;

&lt;p&gt;There is a cost, and it is worth naming. Versioning prompts and taskflows adds config files to maintain, and they drift, which is why Cloudflare checks the AGENTS.md currency at review time instead of trusting it. A workflow nobody updates is worse than no workflow, because reviewers will assume it still reflects how the team works.&lt;/p&gt;

&lt;p&gt;The practical thing to do this week is boring. Pick the agent workflow your team uses most, find its prompt or config, and put it in the repository next to the code it governs. Then review it the way you review anything else, with the diff open beside it. Teams that already wrote a &lt;a href="https://agentwrotethis.dev/blog/review-policy-cant-rely-on-flagging-ai-code/" rel="noopener noreferrer"&gt;review policy around flagging AI code&lt;/a&gt; have this half done, because a policy is a workflow with a name. Teams that have not should notice that their reviewer is currently doing a job the workflow file should be doing, and that the &lt;a href="https://agentwrotethis.dev/blog/when-review-time-plateaued-reviewers-had-stopped-reading/" rel="noopener noreferrer"&gt;plateau in review time on the largest pull requests&lt;/a&gt; is what that looks like when it stops working.&lt;/p&gt;

&lt;p&gt;This piece first ran on &lt;a href="https://agentwrotethis.dev/blog/the-artifact-worth-reviewing-when-agents-write-the-code/" rel="noopener noreferrer"&gt;agentwrotethis.dev&lt;/a&gt;, where I keep the source links for every claim.&lt;/p&gt;

</description>
      <category>aicodereview</category>
      <category>codereview</category>
      <category>aiagents</category>
      <category>devtools</category>
    </item>
    <item>
      <title>How much of code review an AI reviewer actually carries</title>
      <dc:creator>Tess Ainsley</dc:creator>
      <pubDate>Mon, 12 Oct 2026 22:30:01 +0000</pubDate>
      <link>https://dev.to/tessainsley/how-much-of-code-review-an-ai-reviewer-actually-carries-5bog</link>
      <guid>https://dev.to/tessainsley/how-much-of-code-review-an-ai-reviewer-actually-carries-5bog</guid>
      <description>&lt;p&gt;Teams trying to handle a rising volume of agent-written changes usually ask how many findings an AI reviewer produces. The number that decides whether the workflow holds is smaller and duller: what share of the review that reviewer actually carries. That share is measurable, and the one firm-level measurement published so far puts it in the minority.&lt;/p&gt;

&lt;p&gt;The measurement comes from a working paper by Fiona Chen and James Stratton at Harvard, &lt;a href="https://fion.ac/jellyfish.pdf" rel="noopener noreferrer"&gt;Artificial Intelligence in the Firm: Bottlenecks in Software Production&lt;/a&gt;, in its August 2026 version. It draws on anonymised engineering-event metadata from 718 firms and roughly 300 million events between January 2021 and March 2026, supplied through Jellyfish. The design compares firms that adopted agent tooling at different points in time, so the estimates are observational. It is a working paper, and it has not been peer reviewed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://arstechnica.com/ai/2026/10/ai-coding-agents-generate-more-code-but-not-more-software/" rel="noopener noreferrer"&gt;Ars Technica's report on the paper&lt;/a&gt; carries the top-line figures. After agent adoption, lines of code per worker rose about 30%, commits 20%, and pull requests 23%. Resolved issues and epics tracked in tools like Jira did not move in a statistically detectable way, with the 95% upper bound on the issue gain around 12% of baseline. That upper bound matters. The study cannot claim output fell, and it cannot detect a firm-level improvement either.&lt;/p&gt;

&lt;p&gt;Downstream of the pull request, the elapsed time from submission to merge rose 49% on average, given in the paper as 3.45 days against a 7.03-day baseline. The share of pull requests with changes requested nearly doubled, and comments per pull request rose 35%.&lt;/p&gt;

&lt;p&gt;Then the number that should change how you read a vendor page. By March 2026, nearly 80% of the firms in the sample had used some form of AI code review. AI agents accounted for 23.3% of all review comments, and 10.8% of pull requests received at least one AI-generated comment. A &lt;a href="https://www.drufball.com/notes/agentic-coding/chen-stratton-review-bottleneck-firm-study-2026" rel="noopener noreferrer"&gt;close reading of the paper&lt;/a&gt; flags one framing slip in the coverage: the 10.8% is the share of pull requests that received an AI comment, not the share authored by an agent.&lt;/p&gt;

&lt;p&gt;The tooling is close to universal and produces about a quarter of the review text on the changes it touches. That ratio is the coverage figure, and it is the one to ask for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coverage is a configuration value, not a feature list
&lt;/h2&gt;

&lt;p&gt;Coverage comes from four settings, and none of them appear on a pricing page.&lt;/p&gt;

&lt;p&gt;Which events start a pass. A reviewer that runs when a pull request opens behaves differently from one that also reviews every new push, and differently again from one triggered by a repository or organisation ruleset that a pull request cannot override.&lt;/p&gt;

&lt;p&gt;Which changes it skips. Skip conditions are where coverage quietly disappears. Kodus skips when there are no new commits since the last run, when a push contains only merge commits, when every changed file matches an ignore pattern, when the pull request exceeds the configured file limit, and when the user who opened it has no licence. It also pauses follow-up reviews during rapid consecutive pushes, three within fifteen minutes by default.&lt;/p&gt;

&lt;p&gt;How much it posts. A severity threshold decides which findings reach the thread. Kodus defaults to medium, with an option to apply the same filter to violations of its own rules. Deduplication decides how many near-identical comments survive.&lt;/p&gt;

&lt;p&gt;Whether the verdict has consequences. This one changes behaviour on both sides of the review. &lt;a href="https://docs.coderabbit.ai/pr-reviews/request-changes-workflow.md" rel="noopener noreferrer"&gt;CodeRabbit's request-changes workflow&lt;/a&gt; is disabled by default, and when enabled its approval waits on the latest commit having completed a review, all its threads being resolved, and its pre-merge checks passing. Authors can clear that with &lt;code&gt;@coderabbitai resolve&lt;/code&gt; or &lt;code&gt;@coderabbitai approve&lt;/code&gt; unless &lt;code&gt;reviews.allow_author_approval&lt;/code&gt; is set to false. GitHub Copilot code review's &lt;a href="https://docs.github.com/en/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review" rel="noopener noreferrer"&gt;configuration page&lt;/a&gt; puts approval in public preview, with separate toggles for whether Copilot can approve and whether those approvals count toward merge requirements, plus file globs to limit which pull requests count. Kodus keeps request-changes and auto-approve off by default and documents the cases where turning them on makes sense, such as security-sensitive paths or repositories with stable rules and reliable CI.&lt;/p&gt;

&lt;p&gt;Here is how those settings compare across the reviewers that come up in this conversation.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Reviewer&lt;/th&gt;
&lt;th&gt;Starts a pass on&lt;/th&gt;
&lt;th&gt;Skips when&lt;/th&gt;
&lt;th&gt;Comment volume control&lt;/th&gt;
&lt;th&gt;Verdict&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kodus&lt;/td&gt;
&lt;td&gt;pull request opened, new commit per cadence, or &lt;code&gt;@kody start-review&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;no new commits, merge-only commits, ignored paths, file limit, unlicensed user&lt;/td&gt;
&lt;td&gt;severity threshold at medium by default, per-category toggles, dedupe before posting&lt;/td&gt;
&lt;td&gt;request changes and auto-approve are separate toggles, off by default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;pull request opened, new commits&lt;/td&gt;
&lt;td&gt;path filters can exclude every changed file&lt;/td&gt;
&lt;td&gt;inline comments plus pre-merge checks&lt;/td&gt;
&lt;td&gt;request-changes workflow off by default, approval gated on a reviewed commit and resolved threads&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot code review&lt;/td&gt;
&lt;td&gt;user setting, repository ruleset, or organisation ruleset&lt;/td&gt;
&lt;td&gt;not stated on the configuration page&lt;/td&gt;
&lt;td&gt;review effort level, with Lite and Balanced available and Max marked coming soon&lt;/td&gt;
&lt;td&gt;approvals in public preview, can be set to count toward merge requirements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare's internal reviewer&lt;/td&gt;
&lt;td&gt;merge request opened&lt;/td&gt;
&lt;td&gt;not published&lt;/td&gt;
&lt;td&gt;a coordinator deduplicates findings from up to seven specialist reviewers into one comment&lt;/td&gt;
&lt;td&gt;blocks merges on serious problems or security issues, per Cloudflare's own post&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two entries in that table are not products you can install. Cloudflare's system, described in their &lt;a href="https://blog.cloudflare.com/ai-code-review/" rel="noopener noreferrer"&gt;post on orchestrating AI code review&lt;/a&gt;, is built on OpenCode and runs inside their CI across tens of thousands of merge requests. The coordinator is the part worth copying, because it is what stops a seven-reviewer setup from posting the same finding seven times, and a reviewer who sees the same comment repeatedly stops reading it. The same idea applies to the rules a reviewer loads. If a rule file is read from the pull request head, the change can rewrite the standards being applied to it. &lt;a href="https://agentwrotethis.dev/blog/which-of-your-rule-files-the-reviewer-actually-reads/" rel="noopener noreferrer"&gt;Which files a reviewer reads&lt;/a&gt; is worth answering before installation, and Kodus documents how it imports and scopes rule files found in the repository, including a &lt;code&gt;@kody-ignore&lt;/code&gt; marker for files that should stay in the repo without becoming review rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Queue wait is where the elapsed time goes
&lt;/h2&gt;

&lt;p&gt;The 49% figure from the Harvard paper is calendar time between submission and merge. It is not reviewer minutes, and the paper does not report reviewer minutes at all. That gap matters, because the two clocks can move in opposite directions.&lt;/p&gt;

&lt;p&gt;LinearB's &lt;a href="https://linearb.io/resources/engineering-benchmarks" rel="noopener noreferrer"&gt;2026 engineering benchmarks&lt;/a&gt;, built from 8.1 million pull requests across 4,800 teams, reports that AI-generated pull requests wait 4.6 times longer before someone picks them up, and are then reviewed twice as fast once picked up. The same report puts acceptance for AI-generated pull requests at 32.7%, against 84.4% for manual ones.&lt;/p&gt;

&lt;p&gt;Read together, those numbers describe a queue problem. A change that sits for hours before its first reviewer touches it shows up as a long merge time even when the review itself takes minutes. If your team is measuring one number for the whole path, an improvement to review quality will be invisible, and the thing that helps, getting to the diff sooner, will not be the thing you invest in. Splitting pickup time from review time is the cheapest useful instrumentation change available.&lt;/p&gt;

&lt;p&gt;There is a second reason to watch the split. When review time on the largest changes flattens while volume climbs, the workflow is not getting faster. In Salesforce's account of its own review surge, that plateau meant &lt;a href="https://agentwrotethis.dev/blog/when-review-time-plateaued-reviewers-had-stopped-reading/" rel="noopener noreferrer"&gt;reviewers had stopped meaningfully engaging&lt;/a&gt; with the changes in front of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  When the queue stops working, teams close it
&lt;/h2&gt;

&lt;p&gt;The QGIS project merged &lt;a href="https://github.com/qgis/QGIS-Enhancement-Proposals/pull/387" rel="noopener noreferrer"&gt;QEP428&lt;/a&gt;, which changes its policy to a strict not-allowed position on AI contributions. The discussion in that pull request is unusually concrete about why. A maintainer writes that AI use from external contributors puts massive and unbearable pressure on maintainers, and that the AI stream is higher than what human review can take seriously, leading either to a longer list of unreviewed pull requests or to code that was never fully reviewed. Another contributor reports roughly 50 pull requests tagged AI Assisted, of which about 40 were closed without merging. The &lt;a href="https://lists.osgeo.org/pipermail/qgis-developer/2026-September/068576.html" rel="noopener noreferrer"&gt;mailing list thread&lt;/a&gt; behind the proposal includes a moratorium proposal and a separate suggestion that new contributors record a screencast of their change working before it is considered.&lt;/p&gt;

&lt;p&gt;You can disagree with the policy and still use it as a measurement. QGIS ran the experiment, watched what it did to its review queue, and closed the intake. A team that would rather keep the intake open needs coverage numbers and queue numbers to know whether its version of the same trade is working, and most teams do not have them. Making the workflow itself reviewable is one way to get part of that back, since the &lt;a href="https://agentwrotethis.dev/blog/the-artifact-worth-reviewing-when-agents-write-the-code/" rel="noopener noreferrer"&gt;artifacts worth reviewing&lt;/a&gt; when agents write the code are the prompt, the rule set, the model version, and the tool calls rather than the diff alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  The metric that survives
&lt;/h2&gt;

&lt;p&gt;Chen and Stratton measure what firms produced. Another paper measures what survived the trip to users, and it points the same direction. NBER Working Paper 35275, &lt;a href="https://www.nber.org/papers/w35275" rel="noopener noreferrer"&gt;Writing Code vs. Shipping Code&lt;/a&gt; by Mert Demirer, Leon Musolff and Liyuan Yang, follows more than 500,000 GitHub developers with their AI usage telemetry. Commits rise 30% with autocomplete, 180% with interactive coding agents, and 240% with autonomous agents. Those gains attenuate as you move down the production chain: 80% for the number of projects and 30% for actual releases. The authors estimate an elasticity of substitution of 0.23 between AI effort and human effort, which they read as strong complementarity. The human step in the chain does not get cheaper just because generation does.&lt;/p&gt;

&lt;p&gt;Neither paper measures whether the merged lines were still there a month later. That is unknown at firm scale, and it is the number I would want next. Until someone publishes it, the practical version is local. For a two-week window, log four things per change: time to first review comment, comments split by whether a human or a tool wrote them, the change-request rate, and what happened to the merged lines thirty days on, still present or already reverted. Those four columns will tell you more about your review workflow than any published benchmark, and they will tell you whether an AI reviewer is carrying enough of the load to justify its place in the path.&lt;/p&gt;

&lt;p&gt;Coverage below half the review is not a failure. It is a description of where the work still sits, and it should change how you staff the queue.&lt;/p&gt;

&lt;p&gt;Figures as of October 2026.&lt;/p&gt;

</description>
      <category>aicodereview</category>
      <category>codereview</category>
      <category>pullrequests</category>
      <category>agents</category>
    </item>
    <item>
      <title>Where AI review saves time: the write-back, not the analysis</title>
      <dc:creator>Tess Ainsley</dc:creator>
      <pubDate>Fri, 09 Oct 2026 00:15:03 +0000</pubDate>
      <link>https://dev.to/tessainsley/where-ai-review-saves-time-the-write-back-not-the-analysis-n6b</link>
      <guid>https://dev.to/tessainsley/where-ai-review-saves-time-the-write-back-not-the-analysis-n6b</guid>
      <description>&lt;p&gt;A tool that "supports Azure DevOps" may only be able to read your pull request. What cuts review time is the write-back: posting an inline comment where the problem is, replying and resolving a thread, applying a committable suggestion, submitting a review, marking the pull request ready, merging it. Those are separate capabilities from the analysis, and on some hosts they are missing entirely.&lt;/p&gt;

&lt;p&gt;That distinction matters for anyone trying to cut review time, because the analysis quality is the part every vendor page shows you and the write-back surface is the part you have to go digging for in the docs. The digging is worth it, because write-back is what the reviewer actually feels.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading support and writing support are different claims
&lt;/h2&gt;

&lt;p&gt;Take a concrete example. CodeRabbit's &lt;a href="https://docs.coderabbit.ai/change-stack/provider-support.md" rel="noopener noreferrer"&gt;Change Stack provider support page&lt;/a&gt; documents a per-provider capability matrix, and the Azure DevOps column is almost entirely empty on the writing side. Artifacts open read-only. No inline review comments, no file-level comments, no draft reviews, no submitting a review, no replying or resolving threads, no committable suggestions, no merge, no mark-ready-for-review, and no Change Stack chat. Azure artifacts also miss the live freshness check the other providers get, so an artifact cannot tell you the head has moved past the snapshot you are reading.&lt;/p&gt;

&lt;p&gt;Read that page carefully, because it is about Change Stack specifically, which is a review workspace sitting on top of CodeRabbit's PR review feature. The claim is narrower than the headline suggests. CodeRabbit can still comment on Azure DevOps pull requests through its PR review feature. The workspace layer, where a reviewer would normally resolve and apply, is read-only on Azure DevOps, and that is where the difference shows up. "We support your provider" and "we can act on your pull request" are two different sentences, and only the second one moves your cycle time.&lt;/p&gt;

&lt;p&gt;PR-Agent, the open-source reviewer that &lt;a href="https://github.com/the-pr-agent/pr-agent" rel="noopener noreferrer"&gt;Qodo donated to the community&lt;/a&gt;, shows the same thing from the other direction. Its &lt;a href="https://docs.pr-agent.ai/installation/azure/" rel="noopener noreferrer"&gt;Azure DevOps installation page&lt;/a&gt; is explicit about a host limitation that has nothing to do with AI: Azure Repos Git does not honor YAML &lt;code&gt;pr:&lt;/code&gt; triggers, so you wire the pipeline up through Build Validation as a required branch policy instead. The pipeline path also cannot start a run from a pull request comment, which the docs list as an open gap rather than a setting you missed. The webhook path does support a comment trigger, but only for API v2.0, and only after you register the webhook and give PR-Agent a stable identity on the project. On GitHub you type &lt;code&gt;/review&lt;/code&gt; in a comment and the agent runs with nothing else to set up. PR-Agent covers GitHub, GitLab, Bitbucket, Azure DevOps and Gitea, so the same tool gives you a different amount of interactivity depending on where your code lives.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the write-back surface looks like per tool
&lt;/h2&gt;

&lt;p&gt;The useful way to compare reviewers is to build the list of actions first, then check which ones each tool can perform on your host. This is the list I use: post an inline comment, reply and resolve a thread, apply a committable suggestion, submit a review with a verdict, mark ready for review, merge or enter the merge queue, and run locally before push.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Hosts listed&lt;/th&gt;
&lt;th&gt;Azure Repos write-back&lt;/th&gt;
&lt;th&gt;Self-host / local&lt;/th&gt;
&lt;th&gt;Notable constraint on the docs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;GitHub, GitLab, Bitbucket, Azure DevOps&lt;/td&gt;
&lt;td&gt;Change Stack artifacts read-only: no comments, suggestions, review submission, or merge&lt;/td&gt;
&lt;td&gt;Not advertised as self-hosted&lt;/td&gt;
&lt;td&gt;Draft reviews on GitLab and Bitbucket are held by the vendor and expire after 24 hours; Bitbucket needs authentication even for public repos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PR-Agent (open source)&lt;/td&gt;
&lt;td&gt;GitHub, GitLab, Bitbucket, Azure DevOps, Gitea&lt;/td&gt;
&lt;td&gt;Pipeline and webhook paths work; no PR-comment trigger on the pipeline path, Build Validation policy required&lt;/td&gt;
&lt;td&gt;CLI, Docker, self-hosted&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/help_docs&lt;/code&gt; disabled since v0.36.1 pending a credential-exposure fix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot code review&lt;/td&gt;
&lt;td&gt;GitHub and GitHub Enterprise&lt;/td&gt;
&lt;td&gt;Not applicable&lt;/td&gt;
&lt;td&gt;Runs in GitHub's infrastructure&lt;/td&gt;
&lt;td&gt;Hosted review feature, so it is not a candidate if your repos are not on GitHub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kodus&lt;/td&gt;
&lt;td&gt;GitHub, GitLab, Bitbucket, Azure Repos, Forgejo&lt;/td&gt;
&lt;td&gt;Works in pull requests on Azure Repos; self-hosted runners supported&lt;/td&gt;
&lt;td&gt;Self-hosted or hosted, CLI, CI/CD&lt;/td&gt;
&lt;td&gt;Community tier caps Kody Rules at 10; SSO, RBAC and audit logs are Enterprise only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Kodus row comes from its &lt;a href="https://github.com/kodustech/kodus-ai" rel="noopener noreferrer"&gt;repository README&lt;/a&gt;, which lists pull request support across those five hosts and self-hosted runners, and from its &lt;a href="https://docs.kodus.io/en/how_to_use/pricing" rel="noopener noreferrer"&gt;pricing docs&lt;/a&gt;, which put Kody Rules at up to 10 on Community and hold SSO plus audit logs for Enterprise. Qodo also publishes an &lt;a href="https://www.qodo.ai/blog/transforming-enterprise-code-review-with-qodo-azure-devops/" rel="noopener noreferrer"&gt;enterprise Azure DevOps page&lt;/a&gt; describing review embedded in the ADO pull request workflow, and while it argues the case well, it does not itemize the write-back actions per provider, so the specifics stay unknown from that page. GitHub's own &lt;a href="https://docs.github.com/en/copilot/how-tos/use-copilot-agents/request-a-code-review/use-code-review" rel="noopener noreferrer"&gt;Copilot code review documentation&lt;/a&gt; confirms that feature is scoped to GitHub and GitHub Enterprise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this shows up as review time rather than as review quality
&lt;/h2&gt;

&lt;p&gt;A reviewer's minute goes into reading and deciding. The bookkeeping that follows is a separate cost, and it is the one that scales with the number of pull requests rather than with their size. If a tool can apply a suggestion in place, the author never re-opens an editor, never re-pushes, never waits for the reviewer to come back. If it cannot, every finding becomes a message that a human has to transcribe into code, which is why tools with identical finding quality can produce different cycle times on different hosts.&lt;/p&gt;

&lt;p&gt;This is also where the plateau in review time comes from, the one Salesforce reported when &lt;a href="https://agentwrotethis.dev/blog/when-review-time-plateaued-reviewers-had-stopped-reading/" rel="noopener noreferrer"&gt;code volume rose 30% and review time on the largest pull requests flattened&lt;/a&gt;. Teams that measure time-in-review per pull request often find the number stops improving after the first few weeks, even as the tool keeps producing findings. The reading got faster and the bookkeeping did not, so the floor is set by the writing side.&lt;/p&gt;

&lt;p&gt;There is a cost dimension too. Self-hosting changes which write-back paths are even available to you, because a locally hosted runner can act through the provider API in ways a hosted app cannot, and the tradeoff is operational. That is a separate decision from the one this article is about, and I covered the operational side in &lt;a href="https://agentwrotethis.dev/blog/what-self-hosting-ai-code-review-actually-costs/" rel="noopener noreferrer"&gt;what self-hosting AI code review actually costs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to audit this on your own backlog
&lt;/h2&gt;

&lt;p&gt;Do not start from the vendor list. Start from your last fifty merged pull requests and count, per pull request, how many review comments required a code change and how many were resolved without one. The first number is your write-back demand. If it is small, write-back gaps will not hurt you and analysis quality is the only thing worth comparing. If it is large, the capability matrix above is the more important document on any vendor page.&lt;/p&gt;

&lt;p&gt;Then run the check by hand once, on your actual host. Open a pull request, ask the tool to review it, and try to do each of these from inside the provider: apply the suggested change, resolve the resulting thread, answer the agent in the same thread, and mark the pull request ready. Whatever refuses is your real write-back surface. It takes twenty minutes and it beats reading any comparison page, including this one.&lt;/p&gt;

&lt;p&gt;Two smaller signals are worth watching as you go. One is whether the tool's reply loop survives without a comment trigger; if your host cannot start a run from a pull request comment, then every re-review is a pipeline run, and each one has a cost and a queue position. The other is whether the agent knows the difference between a fresh diff and a snapshot. CodeRabbit's docs say Azure artifacts are static and cannot compare against the head. A reviewer working from a stale artifact is not being helped, and the failure is silent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to ask a vendor
&lt;/h2&gt;

&lt;p&gt;Ask which write-back actions are supported on your provider, by name, and ask for the docs page rather than the answer. Ask whether the tool can run as you or only as itself, because on some hosts the actions run under the tool's own identity and that changes who can resolve a thread. Ask what happens to a draft review if the session drops, and ask how a re-review gets triggered once the author pushes a fix. If the answer is a matrix with a mostly empty column for your host, that is not a defect in the product. It is a fact about what the review will feel like, and it is better to learn it from the docs than from a sprint that did not get shorter.&lt;/p&gt;

&lt;p&gt;Claims checked as of 2026-10-05.&lt;/p&gt;

</description>
      <category>aicodereview</category>
      <category>codereview</category>
      <category>azuredevops</category>
      <category>pullrequest</category>
    </item>
    <item>
      <title>Four config gates decide if an agent's PR reaches a reviewer</title>
      <dc:creator>Tess Ainsley</dc:creator>
      <pubDate>Tue, 06 Oct 2026 00:00:11 +0000</pubDate>
      <link>https://dev.to/tessainsley/four-config-gates-decide-if-an-agents-pr-reaches-a-reviewer-6k3</link>
      <guid>https://dev.to/tessainsley/four-config-gates-decide-if-an-agents-pr-reaches-a-reviewer-6k3</guid>
      <description>&lt;p&gt;An agent opens a pull request with a clean diff, and whether a human ever reads it depends on configuration most teams wrote before agents existed. Four gates sit between the change and a reviewer: who gets requested, whether a reviewer ran at all, what that reviewer was allowed to post, and whether any policy requires a human approval. Each gate can exclude the change without anyone noticing, and the same two fields drive all four, the author of the commits and the branch the change targets.&lt;/p&gt;

&lt;p&gt;That is worth checking before you buy anything, because a reviewer that never runs looks exactly like a reviewer that found nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The reviewer of record is chosen from the base branch, not the diff
&lt;/h2&gt;

&lt;p&gt;GitHub reads CODEOWNERS from the base branch of the pull request, not from the branch the agent pushed. If the agent opened the PR against &lt;code&gt;main&lt;/code&gt; but the ownership file lives on a release branch, no code owners are requested. The same rule applies to forks: the PR uses the upstream base branch's file.&lt;/p&gt;

&lt;p&gt;Two more constraints in &lt;a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners" rel="noopener noreferrer"&gt;GitHub's CODEOWNERS documentation&lt;/a&gt; matter for agent workflows. Code owners are not automatically requested on draft pull requests, and they only get requested once the PR is marked ready. When the owner is a team, the team has to be visible and hold write permission on the repository, which is a common gap when ownership sits with a team that was renamed or moved.&lt;/p&gt;

&lt;p&gt;Then branch protection decides whether the review is decorative. Requiring an approving review, or requiring approval from a code owner, is a separate setting from having owners at all. Two details in &lt;a href="https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches" rel="noopener noreferrer"&gt;GitHub's protected branch documentation&lt;/a&gt; are easy to miss: restrictions do not apply to people with admin permissions unless you turn that on, and only a single branch protection rule applies to a branch at a time, so overlapping rules resolve by priority rather than by combining.&lt;/p&gt;

&lt;p&gt;For an agent-authored change, the practical question is whether the approval that satisfies branch protection can come from the agent's own account or from a service identity with write access. If it can, the gate is open.&lt;/p&gt;

&lt;h2&gt;
  
  
  The exclusion lists were built to filter bot noise
&lt;/h2&gt;

&lt;p&gt;Every reviewer ships skip rules, and those rules were written when the main problem was dependency bots opening PRs nobody wanted to read.&lt;/p&gt;

&lt;p&gt;CodeRabbit's &lt;a href="https://docs.coderabbit.ai/configuration/auto-review.md" rel="noopener noreferrer"&gt;automatic review controls&lt;/a&gt; are the clearest example. The documented GitHub entries for &lt;code&gt;ignore_usernames&lt;/code&gt; are &lt;code&gt;dependabot[bot]&lt;/code&gt;, &lt;code&gt;renovate[bot]&lt;/code&gt;, and &lt;code&gt;github-actions[bot]&lt;/code&gt;. Matching is exact and case sensitive, with no wildcards. Username skipping also takes precedence over every other control, so a PR from a listed author is skipped regardless of labels or any other setting. Skips are silent: &lt;code&gt;ignore_title_keywords&lt;/code&gt; drops the PR with no review posted, drafts are skipped by default, and &lt;code&gt;base_branches&lt;/code&gt; defaults to the default branch only, so a PR targeting &lt;code&gt;develop&lt;/code&gt; gets no automatic review until you add the pattern.&lt;/p&gt;

&lt;p&gt;Kodus documents the same class of settings in its &lt;a href="https://docs.kodus.io/en/how_to_use/code_review/configs/general.md" rel="noopener noreferrer"&gt;review configuration reference&lt;/a&gt;. Default ignored paths include &lt;code&gt;yarn.lock&lt;/code&gt;, &lt;code&gt;package-lock.json&lt;/code&gt;, &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;.env&lt;/code&gt;, and &lt;code&gt;**/*.json&lt;/code&gt;. Draft PRs are reviewed by default, which is the opposite of CodeRabbit's default. An empty &lt;code&gt;baseBranches&lt;/code&gt; means every base branch is reviewed. Review cadence defaults to pausing after three pushes inside a fifteen minute window, and Kody's &lt;a href="https://docs.kodus.io/en/how_to_use/code_review/flow.md" rel="noopener noreferrer"&gt;skip reasons&lt;/a&gt; include a configured file limit and a PR where every changed file matched an ignore pattern.&lt;/p&gt;

&lt;p&gt;Two Kodus behaviors are worth flagging for anyone who treats a config file as the source of truth. &lt;code&gt;kodus-config.yml&lt;/code&gt; is ignored until &lt;code&gt;kodusConfigFileOverridesWebPreferences&lt;/code&gt; is turned on, so committing the file alone does nothing, and unknown keys in that file are dropped without an error or warning. A typo reads as a setting that had no effect.&lt;/p&gt;

&lt;p&gt;PR-Agent runs its review when the command is invoked or when the workflow triggers. The &lt;a href="https://github.com/the-pr-agent/pr-agent" rel="noopener noreferrer"&gt;GitHub Action in the PR-Agent README&lt;/a&gt; fires on &lt;code&gt;pull_request&lt;/code&gt; types &lt;code&gt;opened&lt;/code&gt; and &lt;code&gt;synchronize&lt;/code&gt;, and the CLI or comment path (&lt;code&gt;/review&lt;/code&gt;) is how the tool is reached otherwise. There is no automatic pass on a PR nobody points it at. The same README notes that &lt;code&gt;/help_docs&lt;/code&gt; is disabled pending a fix for a credential-exposure issue, which is a reminder that the trigger path is also the credential path.&lt;/p&gt;

&lt;p&gt;Put together, the failure mode is specific. If your coding agent commits under a service account, an app identity, or a bot name, any exclusion list written to silence dependency bots will silence it too, and the skip is silent. You find out by looking for a review that does not exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same author field can be used to require a human instead
&lt;/h2&gt;

&lt;p&gt;Anthropic's &lt;a href="https://github.com/anthropics/claude-code-action/blob/main/agent-approval-check/README.md" rel="noopener noreferrer"&gt;agent approval check&lt;/a&gt; reads the same author field in the opposite direction. It requires a set number of human approvals, two by default, on any PR containing commits authored by a configured agent identity, and it hooks into branch protection so the requirement is enforced at merge rather than suggested in a comment.&lt;/p&gt;

&lt;p&gt;The contrast is the useful part. The identity of the author is available in both cases. One policy uses it to skip the change, the other uses it to demand a human signature on it. Teams usually end up with the first policy by accident, because the bot exclusions were already there, and the second only when someone writes it deliberately.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the reviewer is allowed to post decides whether it can hold a merge
&lt;/h2&gt;

&lt;p&gt;A reviewer that comments and a reviewer that blocks are different products, and most tools ship the commenting version.&lt;/p&gt;

&lt;p&gt;Kodus posts non-blocking comments by default. Its &lt;a href="https://docs.kodus.io/en/how_to_use/code_review/policy.md" rel="noopener noreferrer"&gt;review policy page&lt;/a&gt; states that requesting changes and auto-approving are both opt-in, that request-changes is not available on GitLab, and that blocking behavior should only be enabled when the team agrees on thresholds and has strong CI.&lt;/p&gt;

&lt;p&gt;CodeRabbit's &lt;a href="https://docs.coderabbit.ai/pr-reviews/request-changes-workflow.md" rel="noopener noreferrer"&gt;request changes workflow&lt;/a&gt; is disabled by default. When enabled, approval stays pending until the latest commit has been reviewed, required threads are resolved, and pre-merge checks pass, and CodeRabbit re-verifies that the PR head has not changed immediately before approving. Two escape hatches matter: explicit &lt;code&gt;@coderabbitai approve&lt;/code&gt; and &lt;code&gt;@coderabbitai resolve&lt;/code&gt; commands override the workflow, and a rate-limited run leaves approval pending because the latest commit never completed a review.&lt;/p&gt;

&lt;p&gt;That last point is where review tooling and review policy interact. If your merge requirement is satisfied by a tool's approval, then the tool's rate limit, skip rules, and configuration defaults become merge requirements.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Reviewer&lt;/th&gt;
&lt;th&gt;Default on a PR from an agent identity&lt;/th&gt;
&lt;th&gt;Silent skips to audit&lt;/th&gt;
&lt;th&gt;Blocks a merge by default&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kodus&lt;/td&gt;
&lt;td&gt;Reviews, including drafts&lt;/td&gt;
&lt;td&gt;Ignore paths (includes &lt;code&gt;**/*.json&lt;/code&gt;), ignored title keywords, base branch narrowing, cadence pause, file limit&lt;/td&gt;
&lt;td&gt;No. Request changes and auto-approve are opt-in, and request changes is unavailable on GitLab&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;Reviews, drafts skipped&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ignore_usernames&lt;/code&gt; (takes precedence over everything), &lt;code&gt;ignore_title_keywords&lt;/code&gt;, base branches limited to the default branch, pause after five reviewed commits&lt;/td&gt;
&lt;td&gt;No. Request changes workflow is off by default and has explicit approve and resolve overrides&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PR-Agent&lt;/td&gt;
&lt;td&gt;Runs only when invoked by comment or workflow trigger&lt;/td&gt;
&lt;td&gt;Nothing automatic to skip, because nothing runs unprompted&lt;/td&gt;
&lt;td&gt;No. It posts review output&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The defaults differ in ways that change coverage. Kodus reviews drafts and every base branch unless narrowed. CodeRabbit skips drafts and reviews only the default branch unless you add patterns. Neither blocks a merge without an explicit opt-in.&lt;/p&gt;

&lt;h2&gt;
  
  
  A check you can run on one agent PR this week
&lt;/h2&gt;

&lt;p&gt;Take a merged PR that an agent authored and walk the four gates in order. Find the review request list and confirm a human or team actually appears, which tells you whether CODEOWNERS resolved from the base branch. Look for evidence that a reviewer ran, a review, an inline comment, a status reaction, and treat silence as a skip rather than a clean pass. Open the reviewer's config on the base branch and look for the author name or title pattern that would have matched this PR. Finally, check whether branch protection requires a human approval that the agent's own account cannot provide.&lt;/p&gt;

&lt;p&gt;Any of the four can be wrong on its own, and the symptoms are identical from the outside. A change that never reached a reviewer, a reviewer that ran and found nothing, and a reviewer that found something nobody was required to read all show up as a merged PR.&lt;/p&gt;

&lt;p&gt;The wider shift this belongs to is that review effort has moved toward deciding whether a change is acceptable, which is what &lt;a href="https://agentwrotethis.dev/blog/the-artifact-worth-reviewing-when-agents-write-the-code/" rel="noopener noreferrer"&gt;the artifact worth reviewing when agents write the code&lt;/a&gt; covers from the process side. Routing is the part that comes before any of it. A team can buy the best reviewer available and still have agent output land unread, because the config that decides who reads what was tuned for a different kind of author. Salesforce's numbers on &lt;a href="https://agentwrotethis.dev/blog/when-review-time-plateaued-reviewers-had-stopped-reading/" rel="noopener noreferrer"&gt;review time plateauing while code volume rose&lt;/a&gt; are the downstream version of this, and GitHub's own &lt;a href="https://agentwrotethis.dev/blog/githubs-official-ai-review-guide-is-a-mostly-human-checklist/" rel="noopener noreferrer"&gt;eight step checklist for reviewing AI-generated code&lt;/a&gt; assumes a human is already in the loop.&lt;/p&gt;

&lt;p&gt;Checking the four gates costs about ten minutes on one PR, and it tells you whether the rest of your review investment is connected to anything.&lt;/p&gt;

</description>
      <category>aicodereview</category>
      <category>codereview</category>
      <category>github</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Your pull request review time is mostly waiting and rework</title>
      <dc:creator>Tess Ainsley</dc:creator>
      <pubDate>Wed, 30 Sep 2026 00:15:11 +0000</pubDate>
      <link>https://dev.to/tessainsley/your-pull-request-review-time-is-mostly-waiting-and-rework-2g6n</link>
      <guid>https://dev.to/tessainsley/your-pull-request-review-time-is-mostly-waiting-and-rework-2g6n</guid>
      <description>&lt;p&gt;Time to merge is the number teams quote when they say AI review sped things up. It bundles at least three separate costs, and reading the diff is only one of them. When the number drops after adding a tool, the drop usually comes from the other two.&lt;/p&gt;

&lt;p&gt;Two sets of measurements make the split concrete. CodeRabbit's &lt;a href="https://www.coderabbit.ai/guides/code-review-best-practices-for-ai-generated-code" rel="noopener noreferrer"&gt;guide to reviewing AI-generated diffs&lt;/a&gt; cites LinearB's 2026 benchmark report: AI-assisted pull requests are 2.6 times larger than unassisted ones, take 4.6 times longer to receive a first review, and have a 30-day acceptance rate of 32.7 percent against 84.4 percent for manual PRs. CodeRabbit is careful to label those as observed associations rather than causal effects, and the association framing is the honest way to read them. The acceptance gap is the part worth sitting with. If roughly two of every three AI-assisted changes are not accepted within 30 days, the cycle spans several passes rather than one review.&lt;/p&gt;

&lt;p&gt;The second set is narrower and better instrumented. Obada Kraishan's &lt;a href="https://arxiv.org/abs/2609.17598" rel="noopener noreferrer"&gt;study of five autonomous coding agents&lt;/a&gt; covers 37,623 provenance-labeled PRs across 2,807 repositories, with the pipeline code released for replication. It is a preprint, not peer reviewed. Review effort concentrates unevenly: Copilot PRs drew the most human reviews and change requests, and Claude Code PRs waited a median of 12.6 hours for a first human review. Post-merge outcomes differ by vendor too, with Codex PRs reverted about half as often as human PRs, 6.1 percent against 11.5 percent, while Devin PRs were reverted more often at 14.5 percent.&lt;/p&gt;

&lt;p&gt;That 12.6-hour median is the number to keep. Reviewers do not read diffs for twelve hours. The wait is queue time: an agent opens a PR, and nothing happens until a human picks it up. A tool that reads faster than a human shortens the few minutes at the end of that window and leaves the twelve hours at the front of it untouched. Teams that buy review speed by buying reading speed often watch the merge metric barely move, and this is why. The &lt;a href="https://agentwrotethis.dev/blog/review-time-is-up-441-under-vibe-coding-that-is-the-real-problem/" rel="noopener noreferrer"&gt;441 percent increase in code-review time&lt;/a&gt; that shows up in the vibe coding literature sits on top of a queue that was already the slow part.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wait, read, and rework are different numbers
&lt;/h2&gt;

&lt;p&gt;Split the cycle at four timestamps: when the PR opens, when the first review lands, when the first change request lands, and when it is approved and merged. Wait time is the gap between the first pair. Reading time is between the second and third. Rework is everything after a change request, including the author's fix, the re-review, and any further round trip.&lt;/p&gt;

&lt;p&gt;Instrument those four per PR, split by provenance and by repository, and the tool decision falls out of the data instead of the demo. If wait dominates, the lever is the trigger. If rework dominates, the lever is whether the tool produces one precise change request or a stream of comments the author answers in four passes. If reading time dominates and your diffs are large, reading speed is finally the right thing to buy.&lt;/p&gt;

&lt;p&gt;The rework share is where vendor differences show up most clearly. Copilot PRs drew the most reviews and change requests in the Kraishan dataset, which means more round trips per change, not slower readers. Round trips are also the cost that a review tool can multiply. Ten findings in one pass is one loop. The same ten findings spread across four review cycles is four loops, and each loop carries a context reload, a re-review, and a chance that the author argues with a comment that already stopped being true.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trigger timing is a review feature
&lt;/h2&gt;

&lt;p&gt;When a review runs matters as much as what it says. A review that fires on PR open puts its feedback into the same window as the wait, so the author and the assigned reviewer see the same first pass. A review that fires after CI, or only when a human asks for it, adds its latency on top of the queue instead of overlapping it. Ask any vendor for the trigger list: open, ready-for-review, CI green, manual comment command. Where the tool sits in that list determines whether it can touch the biggest number in the cycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rules cut round trips only when they fire on the right files
&lt;/h2&gt;

&lt;p&gt;Stack Overflow's post on &lt;a href="https://stackoverflow.blog/2026/03/26/coding-guidelines-for-ai-agents-and-people-too/" rel="noopener noreferrer"&gt;coding guidelines for AI and people&lt;/a&gt; contains the line that ties standards to cycle time. Code review will be most engineers' first look at code they did not write. Heroku chief architect Vish Abrams makes the related point there that principles seasoned engineers assume, like DRY, are not common knowledge to an agent. Rules are supposed to move the standards check earlier so a human reviewer does not spend the first pass on naming and layout, which is exactly the work that generates change requests when it is missed.&lt;/p&gt;

&lt;p&gt;A rule only reduces that work if it fires on the right files. A payments rule that fires on the CLI tool produces comments the author has to triage, and triage is a round trip. &lt;a href="https://docs.kodus.io/en/how_to_use/code_review/configs/rules_file_detection" rel="noopener noreferrer"&gt;Kodus imports the rule files teams already keep&lt;/a&gt;, including AGENTS.md, CLAUDE.md, .cursorrules, Copilot instruction files, Windsurf rules, and docs/coding-standards, scopes each rule to a path glob, and discovers nested files so a services/billing/CLAUDE.md applies to services/billing/** without extra setup. On self-hosted deployments it writes a per-file trace to the API log under the marker &lt;code&gt;[kody-rules-eval]&lt;/code&gt;, listing the rule ids selected into the prompt for each reviewed file. The same page documents a limit worth knowing before you plan around it: an unlicensed Community Edition instance evaluates at most 10 rules per review, oldest first, so a rule past the tenth may not fire at all. A rule that silently does not run is one fewer thing checked before a human, and one more thing that turns up later as a comment.&lt;/p&gt;

&lt;p&gt;The trace matters beyond debugging. It is the difference between a tool that states your standards load correctly and one where you can point at the rule id and the file it evaluated. Everything else in this section assumes that mechanism works.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each tool documents about the rework half
&lt;/h2&gt;

&lt;p&gt;The criteria below are the ones that affect round trips: which rule files a tool ingests, whether rules are scoped, and whether you can see what ran on a given file. Unknown means the source I read did not say.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Rule files ingested&lt;/th&gt;
&lt;th&gt;Path scoping&lt;/th&gt;
&lt;th&gt;Per-file trace&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kodus&lt;/td&gt;
&lt;td&gt;AGENTS.md, CLAUDE.md, .cursorrules, Copilot instructions, Windsurf rules, docs/coding-standards&lt;/td&gt;
&lt;td&gt;Glob per rule, nested files discovered and scoped&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;[kody-rules-eval]&lt;/code&gt; log marker per reviewed file on self-hosted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;Repo configuration and custom pre-merge checks, per its review guide&lt;/td&gt;
&lt;td&gt;Unknown&lt;/td&gt;
&lt;td&gt;Unknown&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot&lt;/td&gt;
&lt;td&gt;.github/copilot-instructions.md and nested instruction files, per the patterns Kodus documents as shared conventions&lt;/td&gt;
&lt;td&gt;Unknown&lt;/td&gt;
&lt;td&gt;Unknown&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For large multi-repo organizations there is a second question that sits under the same heading, which is whether the reviewer can see the dependents of a changed file at all. A change that breaks a caller in another repository is a rework loop nobody can avoid by reading the diff harder, and &lt;a href="https://agentwrotethis.dev/blog/multi-repo-ai-review-a-context-problem-not-a-volume-problem/" rel="noopener noreferrer"&gt;cross-repo context&lt;/a&gt; is the capability that decides it. The same logic that pushes effort toward coupled code applies here, since &lt;a href="https://agentwrotethis.dev/blog/where-ai-review-pays-the-codebase-matters-more-than-volume/" rel="noopener noreferrer"&gt;the codebase matters more than the volume&lt;/a&gt; when you decide where review attention goes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instrument before you buy
&lt;/h2&gt;

&lt;p&gt;Run the four timestamps for a month before you evaluate anything. Report wait, reading, and rework separately, split by provenance and by repository, and you will know which of the three is eating the cycle. Then ask each vendor which of the three its product moves: the trigger window, the number of change requests per merged PR, or the time a human spends reading. A tool that can answer for the first two is reducing cycle time. A tool that can only answer for the third is reducing the smallest number on most teams, and its benchmark will still look impressive, because reading speed is measurable while a queue nobody instrumented stays invisible.&lt;/p&gt;

&lt;p&gt;Claims checked 2026-09-29.&lt;/p&gt;

</description>
      <category>codereview</category>
      <category>aicodereview</category>
      <category>devtools</category>
      <category>engineeringmanagement</category>
    </item>
    <item>
      <title>What the top AI code review comparison pages in 2026 leave out</title>
      <dc:creator>Tess Ainsley</dc:creator>
      <pubDate>Tue, 29 Sep 2026 00:15:01 +0000</pubDate>
      <link>https://dev.to/tessainsley/what-the-top-ai-code-review-comparison-pages-in-2026-leave-out-1h9a</link>
      <guid>https://dev.to/tessainsley/what-the-top-ai-code-review-comparison-pages-in-2026-leave-out-1h9a</guid>
      <description>&lt;p&gt;Search for a 2026 comparison of AI code review tools and most of what comes back compares coding assistants instead. SWE-bench scores, model pricing, IDE integration, which agent resolves more GitHub issues. Useful for picking something that writes code. Almost nothing about what decides whether a review tool can actually gate a merge.&lt;/p&gt;

&lt;p&gt;That gap matters more now that agents author a large share of the diff. &lt;a href="https://www.coderabbit.ai/guides/code-review-best-practices-for-ai-generated-code" rel="noopener noreferrer"&gt;CodeRabbit's guide to reviewing AI-generated diffs&lt;/a&gt; cites LinearB's 2026 benchmark data: AI-assisted pull requests are 2.6 times larger than unassisted ones, take 4.6 times longer to get a first review, and have a 30-day acceptance rate of 32.7 percent against 84.4 percent for manual PRs. LinearB labels those as associations, not causal effects, and the acceptance gap alone is worth sitting with. Whatever the cause, the review step is where those changes are accepted or rejected, and a comparison that never tests the accepting step is answering a different question.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the ranking pages actually compare
&lt;/h2&gt;

&lt;p&gt;The top results for the query are honest about what they measure. &lt;a href="https://www.paperclipped.de/en/blog/ai-coding-assistants-compared-2026/" rel="noopener noreferrer"&gt;Paperclipped's Cursor vs Claude Code vs Copilot vs Devin breakdown&lt;/a&gt; leads with SWE-bench Verified numbers (Claude Code at 80.8 percent on Opus 4.6, Cursor around 63 to 65 depending on model, Copilot around 58, Devin near 67 on its own metric) and then notes something more interesting: three different tools running the same Opus model landed 17 problems apart across 731 SWE-bench issues in February 2026 testing, which says the scaffolding around the model moves the result as much as the model does. It also cites SWE-CI, where 75 percent of agents broke previously working code during continuous integration even when their initial patch passed tests.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tembo.io/blog/github-copilot-alternatives" rel="noopener noreferrer"&gt;Tembo's roundup of Copilot alternatives&lt;/a&gt; covers 15 tools, and Tembo sells review infrastructure, so the list ends near its own product. &lt;a href="https://bugstack.ai/blog/ai-bug-fixing-tools-compared" rel="noopener noreferrer"&gt;bugstack's AI bug-fixing comparison&lt;/a&gt; has the most useful taxonomy of the batch, splitting bug-fixing tools into copilots, AI code review, and autonomous repair, then comparing them on whether a human has to start the work. Bugstack also sells in one of those categories.&lt;/p&gt;

&lt;p&gt;None of that is dishonest. It is just generation-side measurement applied to a review-side decision. The one thing a buyer needs to know about a reviewer, whether it can stop a bad change, is not in any of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The criteria that decide a review tool
&lt;/h2&gt;

&lt;p&gt;Four things separate review tools, and they are testable from the vendor's own documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who reviews, relative to who wrote.&lt;/strong&gt; &lt;a href="https://www.coderabbit.ai/guides/what-is-code-review-and-how-is-it-changing" rel="noopener noreferrer"&gt;CodeRabbit's explanation of what code review is&lt;/a&gt; makes the point plainly: when the authoring agent reviews its own output, that is a closed loop with no outside check, and independence gets more valuable as more code comes from an agent. Any comparison of review tools should state which agent produced the diff and which one comments on it. Nearly none do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the review does to the merge gate.&lt;/strong&gt; A comment and a blocked merge are different products. GitHub Copilot's code review posts a Comment review by default rather than an approval or a change request, so it advises without gating. &lt;a href="https://docs.kodus.io/en/how_to_use/code_review/policy" rel="noopener noreferrer"&gt;Kodus documents the same shape&lt;/a&gt; and makes it explicit: suggestions are non-blocking by default, and marking a review as changes requested or auto-approving are opt-in switches a team turns on when it has the CI to back them. This is worth verifying per tool because the default is what most teams ship with.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Whether the tool records which rule ran on which file.&lt;/strong&gt; A standards rule that lives in config and never fires on a file is decoration. &lt;a href="https://docs.kodus.io/en/how_to_use/code_review/configs/rules_file_detection" rel="noopener noreferrer"&gt;Kodus imports the rule files teams already keep&lt;/a&gt;, including AGENTS.md, CLAUDE.md, .cursorrules, and Copilot instruction files, scopes each to a path glob, and on self-hosted deployments writes a per-file evaluation trace you can grep with &lt;code&gt;[kody-rules-eval]&lt;/code&gt; to see which rule ids were selected into the prompt for each reviewed file. That trace is the difference between a tool that claims to follow your standards and one you can audit. &lt;a href="https://agentwrotethis.dev/blog/githubs-official-ai-review-guide-is-a-mostly-human-checklist/" rel="noopener noreferrer"&gt;GitHub's own guide to reviewing AI-generated code&lt;/a&gt; puts the standards check on a human reviewer, which leaves the same audit question open.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deployment path and rule limits.&lt;/strong&gt; &lt;a href="https://www.coderabbit.ai/pricing" rel="noopener noreferrer"&gt;CodeRabbit's pricing page&lt;/a&gt; lists self-hosting and custom RBAC under Enterprise, with managed plans from $24 to $72 per developer per month billed annually, and the old Pro and Pro Plus names replaced by Essentials and Team at unchanged monthly prices. Kodus publishes its source and supports self-hosting, with one documented caveat worth reading before you plan around it: an unlicensed Community Edition instance evaluates at most 10 rules per review, oldest first, and licensed instances have no such cap. If a rule past the tenth silently does not fire, that limit is why. I did not find an equivalent published limit for Greptile or Qodo, so those stay unknown until someone reads their docs.&lt;/p&gt;

&lt;h2&gt;
  
  
  A comparison by review mechanism
&lt;/h2&gt;

&lt;p&gt;Verified from each vendor's own pages where noted; unknown means the source I read did not say.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Reviewer independent of authoring agent&lt;/th&gt;
&lt;th&gt;Merge-gate default&lt;/th&gt;
&lt;th&gt;Rule ingestion and trace&lt;/th&gt;
&lt;th&gt;Deployment&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;States independence as a requirement; does not tie reviews to the authoring agent&lt;/td&gt;
&lt;td&gt;Pre-merge checks on Team tier and above&lt;/td&gt;
&lt;td&gt;Custom pre-merge checks on Team and above; trace behavior unknown&lt;/td&gt;
&lt;td&gt;Self-host on Enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kodus&lt;/td&gt;
&lt;td&gt;Review runs as a separate agent from the PR&lt;/td&gt;
&lt;td&gt;Non-blocking comments; changes-requested and auto-approve are opt-in&lt;/td&gt;
&lt;td&gt;Imports AGENTS.md, CLAUDE.md, .cursorrules, Copilot instructions; per-file rule trace in self-hosted logs&lt;/td&gt;
&lt;td&gt;Open source, self-host; 10-rule cap unlicensed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot&lt;/td&gt;
&lt;td&gt;Reviews the PR, not the writing agent&lt;/td&gt;
&lt;td&gt;Comment&lt;/td&gt;
&lt;td&gt;Repo instructions via Copilot instruction files; trace unknown&lt;/td&gt;
&lt;td&gt;GitHub and Azure Repos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Greptile&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.greptile.com/content-library/what-is-agentic-coding" rel="noopener noreferrer"&gt;Marketed as independent review with custom context&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Unknown&lt;/td&gt;
&lt;td&gt;Learning and custom context documented; rule-file import unknown&lt;/td&gt;
&lt;td&gt;Unknown&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qodo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.qodo.ai/resources/the-code-governance-layer-your-ai-stack-is-missing/" rel="noopener noreferrer"&gt;Positions review as separate from generation&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Unknown&lt;/td&gt;
&lt;td&gt;Governance framing across the SDLC; rule trace unknown&lt;/td&gt;
&lt;td&gt;Unknown&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The unknown cells are the point. A comparison page that fills them with confidence it did not verify is doing the reader a disservice, and the reader can close them in an afternoon by reading one docs page per tool and running a single agent PR through each.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this decides the buyer question
&lt;/h2&gt;

&lt;p&gt;The question teams actually ask is how to review the growing volume of AI-generated code, and the ranking pages answer a neighboring question about producing it. The measured evidence says volume and scrutiny rose together, which is roughly what my earlier look at &lt;a href="https://agentwrotethis.dev/blog/review-time-is-up-441-under-vibe-coding-that-is-the-real-problem/" rel="noopener noreferrer"&gt;the 441 percent review-time increase&lt;/a&gt; points at. A tool that only adds comments scales the queue with the diff. A tool that runs a pre-human gate, where the reviewer is separate from the authoring agent and you can see which of your rules it applied, moves work out of the queue instead.&lt;/p&gt;

&lt;p&gt;That is also the cheapest thing to verify about any candidate, including the ones I could not fully check here. Read the review policy page. Read the rules-import page. Run one agent-authored PR and look for the evidence of which rules fired. If the tool cannot show you that, the standards claim is marketing, and &lt;a href="https://agentwrotethis.dev/blog/what-self-hosting-ai-code-review-actually-costs/" rel="noopener noreferrer"&gt;what self-hosting actually costs&lt;/a&gt; is a separate bill you can price before you commit.&lt;/p&gt;

</description>
      <category>aicodereview</category>
      <category>codereview</category>
      <category>aiagents</category>
      <category>devtools</category>
    </item>
    <item>
      <title>The self-hosted AI review decision is really a data residency decision</title>
      <dc:creator>Tess Ainsley</dc:creator>
      <pubDate>Mon, 28 Sep 2026 18:00:02 +0000</pubDate>
      <link>https://dev.to/tessainsley/the-self-hosted-ai-review-decision-is-really-a-data-residency-decision-30m3</link>
      <guid>https://dev.to/tessainsley/the-self-hosted-ai-review-decision-is-really-a-data-residency-decision-30m3</guid>
      <description>&lt;p&gt;The most common question about self-hosting an AI code reviewer is which tool is cheapest. The test that actually answers it puts the number somewhere else. Augment Code ran ten open-source AI code review tools against a 450K-file Python, TypeScript, Java and Go monorepo over 40+ hours, &lt;a href="https://www.augmentcode.com/tools/open-source-ai-code-review-tools-worth-trying" rel="noopener noreferrer"&gt;published 2026-01-16 and updated 2026-08-17&lt;/a&gt;, and the finding that reframes the decision is that the license is the free part. Everything around it costs money.&lt;/p&gt;

&lt;h2&gt;
  
  
  The published cost is not the license
&lt;/h2&gt;

&lt;p&gt;Augment estimates a self-hosted stack at $4,100 to $9,100 a month at any team size, combining published GPU rates with 0.25 to 0.5 FTE of maintenance at the US Bureau of Labor Statistics mean developer wage. The comparison point in the same test is $24 to $30 per developer per month for a commercial per-seat reviewer. On that math, self-hosting is not the cheap option. It is the privacy and data-residency option, and the shape of the cost changes from a subscription line item to a capital and staffing one.&lt;/p&gt;

&lt;p&gt;That range comes with a method caveat worth stating. The hourly components are itemized and the assembly is public, but it is an estimate built from rates, not a bill from a real deployment. The bottom of the range assumes modest GPU use. A team running large models on every pull request, or needing high throughput across many repos, should plan on the high end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install quality filters the list before features do
&lt;/h2&gt;

&lt;p&gt;Ten tools went in. Three held up. The rest lacked maintenance, broke during configuration, gated the controls that matter behind a commercial license, or reviewed files in isolation. For anyone choosing off a self-hosted query, the install path is the first real signal, because a tool that will not stand up in a 40-hour test is not a tool you will keep.&lt;/p&gt;

&lt;p&gt;SonarQube Community Build was the strongest on detection, with near-zero false positives across 21 languages, though its analysis runs on the main branch only. Semgrep came second on custom rules, and caught framework-specific patterns the generic tools missed.&lt;/p&gt;

&lt;p&gt;On local inference, the results separate cleanly. Tabby self-hosted as documented and runs local models through Ollama, with review staying secondary to its code-completion focus. PR-Agent also supports local inference, but a configuration issue, #2098, caused silent fallback to hosted models during testing, which defeats the purpose of a local stack if nobody catches it. Kodus and Hexmos LiveReview run local models on your own infrastructure as well.&lt;/p&gt;

&lt;p&gt;Two smaller entries show why maintenance status matters. anc95/ChatGPT-CodeReview is a reasonable free experiment. villesau/ai-codereviewer, the more familiar name, has shipped nothing since December 2023, and Augment notes it defaults to a model snapshot that OpenAI retires in October 2026. A self-hosted tool that depends on a retired model snapshot is not self-hosted in any useful sense.&lt;/p&gt;

&lt;p&gt;CodeQL is worth naming for a different reason. If a team already pays for GitHub Code Security at $30 per active committer per month, it is the strongest fit and it caught data-flow vulnerabilities across multiple function calls in testing. If not, it is not the cheap entry.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Open source" and "auditor-ready" are two questions
&lt;/h2&gt;

&lt;p&gt;This is where the label and the checklist come apart. Most of these tools ship an open-source core and hold the enterprise controls behind a commercial key.&lt;/p&gt;

&lt;p&gt;SonarQube Community Build gates audit logging at Enterprise Edition. Kodus puts SSO, RBAC and audit logs behind a commercial license key. Tabby documents no audit trail at all and places single sign-on on its Enterprise plan. So the honest answer to "is it open source" is yes for the code, and not by default for the controls a security review will ask about. If the reason you are self-hosting is compliance, check the control matrix before the license, because the license being free tells you nothing about whether the deployment will pass.&lt;/p&gt;

&lt;p&gt;The requirement open source genuinely satisfies better than any hosted option is data residency. That is the axis the choice should start from, and it is why &lt;a href="https://agentwrotethis.dev/blog/what-self-hosting-ai-code-review-actually-costs/" rel="noopener noreferrer"&gt;the published cost of a self-hosted stack&lt;/a&gt; matters less than it looks. You are not buying a cheaper product. You are buying a different placement of the model and the data, and paying for it in infrastructure and maintenance hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where all ten stop
&lt;/h2&gt;

&lt;p&gt;None of the tools in the test detected cross-service breaking changes across the four languages. Every one of them operates at file level. That is a real ceiling, and it sits exactly where agent-generated code creates risk. A file-scoped reviewer can read a diff and miss the caller, the invariant, or the ordering assumption the change breaks. Teams hit the same gap on any &lt;a href="https://agentwrotethis.dev/blog/multi-repo-ai-review-a-context-problem-not-a-volume-problem/" rel="noopener noreferrer"&gt;review that spans more than one repository&lt;/a&gt;, and no amount of local GPU capacity changes it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the options compare on the criteria that decide it
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Self-host path&lt;/th&gt;
&lt;th&gt;Enterprise controls&lt;/th&gt;
&lt;th&gt;Notable result in the test&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SonarQube Community Build&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Audit logs gated at Enterprise Edition; main-branch analysis only&lt;/td&gt;
&lt;td&gt;Strongest overall, near-zero false positives over 21 languages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semgrep&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Data not published for the tested build&lt;/td&gt;
&lt;td&gt;Second on custom rules, caught framework-specific patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tabby&lt;/td&gt;
&lt;td&gt;Yes, worked as documented&lt;/td&gt;
&lt;td&gt;No audit trail documented; SSO on Enterprise&lt;/td&gt;
&lt;td&gt;Local inference via Ollama; review is secondary to completion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PR-Agent&lt;/td&gt;
&lt;td&gt;Yes, local inference supported&lt;/td&gt;
&lt;td&gt;Data not published&lt;/td&gt;
&lt;td&gt;Config issue #2098 caused silent fallback to hosted models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kodus&lt;/td&gt;
&lt;td&gt;Yes, local models on your infrastructure&lt;/td&gt;
&lt;td&gt;SSO, RBAC and audit logs behind a commercial license key&lt;/td&gt;
&lt;td&gt;Included in the tested open-source set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hexmos LiveReview&lt;/td&gt;
&lt;td&gt;Yes, local models on your infrastructure&lt;/td&gt;
&lt;td&gt;Data not published&lt;/td&gt;
&lt;td&gt;Included in the tested set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeQL&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Tied to GitHub Code Security&lt;/td&gt;
&lt;td&gt;Caught data-flow vulnerabilities across function calls; $30 per active committer per month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;villesau/ai-codereviewer&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Not documented&lt;/td&gt;
&lt;td&gt;No commits since December 2023; depends on a model snapshot retiring October 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What to do with this
&lt;/h2&gt;

&lt;p&gt;Decide the model placement first and the tool second. If code cannot leave your network, the shortlist is SonarQube Community Build, Semgrep, Tabby, PR-Agent, Kodus, LiveReview and CodeQL, and the tiebreakers are install evidence, which controls you actually need, and whether the repo is still active. If code can leave, the hosted per-seat figure is lower and the whole exercise is a price check rather than a residency decision.&lt;/p&gt;

&lt;p&gt;Then run your own numbers with your own GPU sizing and your own maintenance estimate, because the published per-seat figures for hosted tools are stable while the monthly cost of self-hosting is the one teams most often leave out. The license is the only free part.&lt;/p&gt;

&lt;p&gt;Read the original test for the parts I left out, including the per-tool configuration detail and the local-inference setup notes, at &lt;a href="https://www.augmentcode.com/tools/open-source-ai-code-review-tools-worth-trying" rel="noopener noreferrer"&gt;Augment Code's 450K-file monorepo test&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>codereview</category>
      <category>aicodereview</category>
      <category>opensource</category>
      <category>selfhosting</category>
    </item>
    <item>
      <title>Azure DevOps repos quietly disqualify half the AI review tools</title>
      <dc:creator>Tess Ainsley</dc:creator>
      <pubDate>Mon, 28 Sep 2026 17:00:02 +0000</pubDate>
      <link>https://dev.to/tessainsley/azure-devops-repos-quietly-disqualify-half-the-ai-review-tools-22fi</link>
      <guid>https://dev.to/tessainsley/azure-devops-repos-quietly-disqualify-half-the-ai-review-tools-22fi</guid>
      <description>&lt;p&gt;If your repositories live in Azure Repos, most AI code review comparisons are close to useless, because on Azure DevOps the thing that decides whether a tool works is the integration path, and not the model behind it. A reviewer can be strong on GitHub and still be a fight to turn on in Azure Repos: different auth, a different permission model, a different billing route, and in at least one case a feature that is still in limited preview with no service level agreement attached.&lt;/p&gt;

&lt;p&gt;I read the primary docs for the tools that keep coming up for Azure DevOps, and compared the parts that actually decide whether you can switch them on: the connection method, whether the bot posts as itself or under a person's name, the write scopes it needs, how automatic review triggers, and where the cost lands. The vendor listicles rank themselves first and test none of this.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup details decide the answer
&lt;/h2&gt;

&lt;p&gt;On GitHub, auth is one OAuth click and the bot is a known identity. Azure DevOps splits the identity model. You either hand the tool a personal access token, which makes reviews show up under a human's name, or you register a Microsoft Entra application and add its service principal to the organization as a user. The second path gives you a clean bot identity and a real audit trail. The first path is faster and leaves you with a review that looks like a colleague wrote it.&lt;/p&gt;

&lt;p&gt;The permission model has a wrinkle that catches people. A tool that posts comments and updates pull requests is doing write operations, and Azure DevOps requires an identity read scope on top of the resource-specific write permissions so the credential can resolve who it is acting as before it writes anything. In CodeRabbit's Azure DevOps documentation this is called out directly: write operations need &lt;code&gt;Identity: Read&lt;/code&gt; (&lt;code&gt;vso.identity&lt;/code&gt;) in addition to the code and work item permissions. Miss it and the setup looks complete until the bot fails to comment.&lt;/p&gt;

&lt;p&gt;Automatic review also works differently here. GitHub Copilot's Azure Repos integration does not fire on every pull request by default. You configure a branch policy per target branch to get unpaid, unrequested reviews. The tool's review effort level is a project setting with an optional repository override, and higher effort means more tokens and more cost, billed through Azure Cost Management because the feature needs an Azure subscription linked to the organization.&lt;/p&gt;

&lt;p&gt;For anyone on Azure DevOps Server instead of the cloud service, there is a network step that appears in several of these setups: you allowlist the vendor's IP so the hosted bot can reach a self-hosted instance. Kodus documents its connection to Azure DevOps through a token, and its docs list &lt;code&gt;52.55.217.197&lt;/code&gt; as the IP to allow for Azure DevOps Server, self-hosted GitLab, and Bitbucket Data Center.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the primary documentation says, tool by tool
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot code review for Azure Repos is the option with the most caveats. The &lt;a href="https://learn.microsoft.com/en-us/azure/devops/repos/git/copilot-code-reviews?view=azure-devops" rel="noopener noreferrer"&gt;Microsoft Learn page&lt;/a&gt; marks it as limited preview, meaning preview features have no SLA and limited support, and functionality can change without notice. Turning it on takes three scopes: a Project Collection Administrator enables it at the organization, a Project Administrator can enable it at the project, and a repository admin enables it per repo when overrides are allowed. TFVC is not supported, only Git. Users may need to opt in through Preview features unless an administrator enables it for everyone.&lt;/p&gt;

&lt;p&gt;Microsoft's own internal reviewer is the strongest measured case in the set. In an &lt;a href="https://devblogs.microsoft.com/engineering-at-microsoft/enhancing-code-quality-at-scale-with-ai-powered-code-reviews/" rel="noopener noreferrer"&gt;Engineering@Microsoft post&lt;/a&gt; from July 2025, the internal AI review assistant had scaled to cover over 90 percent of pull requests across the company, more than 600,000 PRs a month, and 5,000 onboarded repositories saw a 10 to 20 percent median improvement in PR completion time. Two design choices in that writeup are worth copying regardless of which tool you pick: the assistant never commits changes itself, the author clicks to apply a suggestion, and review behavior is configurable through repository-specific guidelines and custom prompts. Those numbers are the company's own reporting, not an independent benchmark.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.coderabbit.ai/platforms/azure-devops" rel="noopener noreferrer"&gt;CodeRabbit's Azure DevOps guide&lt;/a&gt; is the most explicit about the admin work. A Microsoft Entra service principal is the recommended method for new organizations and new Enterprise SSO workspaces, while existing PAT-based setups keep the PAT flow. Setup needs a CodeRabbit organization administrator plus Azure DevOps Project Administrator or Project Collection Administrator rights. The docs recommend adding the service principal to each project's Contributors group, and note it also needs permission to manage service hooks because that is how the webhooks get installed. Client secrets expire, and reviews stop until you rotate them.&lt;/p&gt;

&lt;p&gt;Kodus takes a different default. The &lt;a href="https://docs.kodus.io/en/how_to_use/quickstart" rel="noopener noreferrer"&gt;quickstart&lt;/a&gt; connects Azure DevOps with a token, and the platform is open source with a self-hosted deployment path, which matters if the repo cannot leave your network. Its &lt;a href="https://docs.kodus.io/en/how_to_use/code_review/policy" rel="noopener noreferrer"&gt;review policy&lt;/a&gt; ships non-blocking comments by default, with request-changes and auto-approve as opt-in behaviors, so the merge gate stays a human decision until your team chooses otherwise. On the standards side, &lt;a href="https://docs.kodus.io/en/how_to_use/code_review/configs/rules_file_detection" rel="noopener noreferrer"&gt;rules file detection&lt;/a&gt; imports the files teams already keep, including &lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;.cursorrules&lt;/code&gt;, and &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt;, and self-hosted instances log a per-file evaluation trace under &lt;code&gt;[kody-rules-eval]&lt;/code&gt; so you can see which rules actually ran on which file. That trace is the part most reviewers skip.&lt;/p&gt;

&lt;h2&gt;
  
  
  The comparison, on the criteria Azure DevOps cares about
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Connection for Azure Repos&lt;/th&gt;
&lt;th&gt;Posting identity&lt;/th&gt;
&lt;th&gt;Extra permission noted in docs&lt;/th&gt;
&lt;th&gt;Automatic review&lt;/th&gt;
&lt;th&gt;Cost path&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot code review&lt;/td&gt;
&lt;td&gt;Enabled at org, project, repo scopes&lt;/td&gt;
&lt;td&gt;Copilot bot&lt;/td&gt;
&lt;td&gt;Org/project/repo admin to enable&lt;/td&gt;
&lt;td&gt;Branch policy per branch&lt;/td&gt;
&lt;td&gt;Azure subscription via Cost Management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeRabbit&lt;/td&gt;
&lt;td&gt;Entra service principal, or PAT&lt;/td&gt;
&lt;td&gt;Configurable service account or PAT identity&lt;/td&gt;
&lt;td&gt;Identity: Read plus resource write, service hooks&lt;/td&gt;
&lt;td&gt;Project and repo defaults&lt;/td&gt;
&lt;td&gt;Vendor plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kodus&lt;/td&gt;
&lt;td&gt;Token, self-hosted or cloud&lt;/td&gt;
&lt;td&gt;Kody bot&lt;/td&gt;
&lt;td&gt;Repo and PR write for the token&lt;/td&gt;
&lt;td&gt;Configurable cadence, non-blocking by default&lt;/td&gt;
&lt;td&gt;Community/Teams/Enterprise, open source self-host&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SonarQube&lt;/td&gt;
&lt;td&gt;Extension plus server config&lt;/td&gt;
&lt;td&gt;Analysis bot&lt;/td&gt;
&lt;td&gt;Depends on server setup&lt;/td&gt;
&lt;td&gt;Quality gate on the branch&lt;/td&gt;
&lt;td&gt;Server license&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Where a cell is not answered by the vendor's own docs, I have written the field narrowly rather than guess, because this is the kind of table that goes stale the moment a preview graduates or an auth default changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the lists you find do not help
&lt;/h2&gt;

&lt;p&gt;The query for the best AI code review tools for Azure DevOps returns pages from CodeAnt, Panto, and similar sites, and in each one the vendor ranking first is the vendor hosting the page. None of them walk through the permission model I just described, and none of them mention that Copilot's Azure Repos support is in limited preview. That is not a knock on their products, it is a note that a list written to rank itself tells you nothing about the integration you have to live with.&lt;/p&gt;

&lt;p&gt;The details that decide a rollout are the boring ones. Which identity posts the review, so your audit log is honest. Which scopes the credential needs, so setup does not half-work. Where the money goes, so a finance review does not surprise you a month in. Whether the tool records which rules it ran on which file, so a rule that exists only in config does not read as a rule that was enforced. That last one is the same problem I wrote about in &lt;a href="https://agentwrotethis.dev/blog/review-policy-cant-rely-on-flagging-ai-code/" rel="noopener noreferrer"&gt;a code reviewer that silently skips your rules&lt;/a&gt;, and it is worse on a platform with a stricter permission model, because there are more places for the chain to quietly break.&lt;/p&gt;

&lt;p&gt;If you are running a pilot, the concrete next step is to request the write scopes before you request a demo. Ask which identity the bot uses, whether the review can block a merge or only comment, and whether the tool exposes a per-file record of which rules it evaluated. If the answer to the last one is a dashboard number with no per-file detail, you have found the limit of what you can verify after the fact. The self-hosting question also folds into this, and I went through &lt;a href="https://agentwrotethis.dev/blog/what-self-hosting-ai-code-review-actually-costs/" rel="noopener noreferrer"&gt;what self-hosting AI code review actually costs&lt;/a&gt; separately, since on Azure DevOps the network and identity setup is where the hidden hours land.&lt;/p&gt;

</description>
      <category>azuredevops</category>
      <category>codereview</category>
      <category>aicodereview</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
