<?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: Critique</title>
    <description>The latest articles on DEV Community by Critique (@critiquedotsh).</description>
    <link>https://dev.to/critiquedotsh</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3963709%2Ff1bad91b-1351-4843-803a-ffdeaad824ba.png</url>
      <title>DEV Community: Critique</title>
      <link>https://dev.to/critiquedotsh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/critiquedotsh"/>
    <language>en</language>
    <item>
      <title>AI code review pricing is getting weird in 2026</title>
      <dc:creator>Critique</dc:creator>
      <pubDate>Tue, 02 Jun 2026 04:32:35 +0000</pubDate>
      <link>https://dev.to/critiquedotsh/ai-code-review-pricing-is-getting-weird-in-2026-5a1f</link>
      <guid>https://dev.to/critiquedotsh/ai-code-review-pricing-is-getting-weird-in-2026-5a1f</guid>
      <description>&lt;p&gt;AI code review pricing used to be easy to compare.&lt;/p&gt;

&lt;p&gt;How much per developer per month?&lt;/p&gt;

&lt;p&gt;That question is not useless, but it is no longer enough. In 2026, the actual bill can depend on seats, pull request volume, model usage, review effort, private-repo runner minutes, and whether the tool runs a shallow diff pass or an agentic review with broader repository context.&lt;/p&gt;

&lt;p&gt;The pricing page is only the start of the story.&lt;/p&gt;

&lt;p&gt;The four pricing shapes to compare&lt;br&gt;
If you are buying AI pull request review this year, you probably need to compare at least four models:&lt;/p&gt;

&lt;p&gt;Per-developer seats&lt;br&gt;
Usage-based review runs&lt;br&gt;
AI credits or model usage&lt;br&gt;
CI/runtime minutes for agentic review&lt;br&gt;
Those are not just different billing labels. They reward different behavior.&lt;/p&gt;

&lt;p&gt;Seat pricing is easy for finance. Usage pricing tracks workload better. AI credits expose the model bill. Runtime minutes show up when the review agent needs infrastructure, not just inference.&lt;/p&gt;

&lt;p&gt;The trap is comparing only the headline price.&lt;/p&gt;

&lt;p&gt;Seats are predictable, until usage is uneven&lt;br&gt;
CodeRabbit is the cleanest example of familiar seat pricing.&lt;/p&gt;

&lt;p&gt;As of this check, CodeRabbit documents Pro at $24 per developer per month when billed annually, or $30 month-to-month. Pro+ is listed at $48 per developer per month annually, or $60 month-to-month. Their docs also describe per-developer review limits and a usage-based add-on for eligible over-limit reviews.&lt;/p&gt;

&lt;p&gt;That is straightforward to budget.&lt;/p&gt;

&lt;p&gt;But it can still be awkward to right-size.&lt;/p&gt;

&lt;p&gt;A 6-person platform team touching auth, billing, queues, migrations, and infra may create more review risk than a 20-person team mostly shipping small UI changes. Seat count does not tell you how many PRs need deep review.&lt;/p&gt;

&lt;p&gt;The useful question is not:&lt;/p&gt;

&lt;p&gt;How many developers do we have?&lt;/p&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;p&gt;Which pull requests are expensive if the reviewer misses something?&lt;/p&gt;

&lt;p&gt;Usage pricing matches work, but needs policy&lt;br&gt;
Cursor's Bugbot is the clearest recent shift.&lt;/p&gt;

&lt;p&gt;Cursor announced that Bugbot is moving from a $40 per-seat subscription to usage-based billing for Teams and Individual plans. They say the average Bugbot run costs about $1.00-$1.50, depending on PR size and complexity. They also connect usage billing to configurable effort levels, including deeper review settings.&lt;/p&gt;

&lt;p&gt;That makes sense. A one-file typo PR should not cost the same as a complicated refactor.&lt;/p&gt;

&lt;p&gt;But usage pricing needs guardrails.&lt;/p&gt;

&lt;p&gt;Before turning it on everywhere, decide:&lt;/p&gt;

&lt;p&gt;Which paths deserve deep review?&lt;br&gt;
Who can trigger expensive reruns?&lt;br&gt;
Should docs-only PRs get the same effort as auth changes?&lt;br&gt;
What is the monthly review budget?&lt;br&gt;
What counts as value: bugs found, risky merges blocked, or comment count?&lt;br&gt;
Without policy, usage-based review can become a slot machine attached to every pull request.&lt;/p&gt;

&lt;p&gt;GitHub Copilot adds another line item: runtime&lt;br&gt;
GitHub Copilot code review adds a different wrinkle.&lt;/p&gt;

&lt;p&gt;GitHub says Copilot code review is billed through AI Credits, and that private-repository reviews started consuming GitHub Actions minutes on June 1, 2026. GitHub's docs describe code review as having two cost components: AI credits for the model interaction, and Actions minutes for agentic capabilities like context gathering and tool use.&lt;/p&gt;

&lt;p&gt;That does not mean Copilot code review is bad.&lt;/p&gt;

&lt;p&gt;It means the bill can show up in more than one place.&lt;/p&gt;

&lt;p&gt;If your org already tracks Actions spend closely, fine. If Actions minutes are treated as background CI noise, review usage may be harder to notice until later.&lt;/p&gt;

&lt;p&gt;This is the new pattern: the cost of review is no longer only the model. It can also be the system around the model.&lt;/p&gt;

&lt;p&gt;Model choice is becoming a budget control&lt;br&gt;
This is the part most pricing pages still hide.&lt;/p&gt;

&lt;p&gt;Not every PR needs the strongest available model. Not every finding needs a frontier model to inspect it. A practical review system should let teams spend differently based on risk.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Routine PRs can use cheaper review passes.&lt;br&gt;
Auth, billing, infra, permissions, migrations, and public APIs can trigger deeper review.&lt;br&gt;
Large or ambiguous diffs can escalate to stronger models.&lt;br&gt;
Specialist agents can inspect security, tests, performance, or architecture without making every run maximum-cost.&lt;br&gt;
Some teams may prefer bring-your-own-key so the model provider bills tokens directly.&lt;br&gt;
This is how we think about pricing in Critique.&lt;/p&gt;

&lt;p&gt;Critique's plans are built around shared review credits rather than per-developer seats. The current local pricing model is Solo at $19/mo with 750 credits, Pro at $49/mo with 3,000 credits, and Team at $149/mo with 10,000 credits plus frontier escalation lanes. The BYOK harness is $8/mo: Critique runs the orchestration layer, while OpenRouter or CrofAI bills model tokens separately.&lt;/p&gt;

&lt;p&gt;The point is not "credits are magically cheaper."&lt;/p&gt;

&lt;p&gt;The point is control. A team should be able to run broad, cheaper checks on everyday work and reserve expensive review for pull requests that can actually hurt production.&lt;/p&gt;

&lt;p&gt;The buyer question changed&lt;br&gt;
The old question was:&lt;/p&gt;

&lt;p&gt;Which AI code review tool has the cheapest plan?&lt;/p&gt;

&lt;p&gt;The better question is:&lt;/p&gt;

&lt;p&gt;What is the cost per useful review on the pull requests that matter?&lt;/p&gt;

&lt;p&gt;To answer that, model your own workload:&lt;/p&gt;

&lt;p&gt;Monthly PR volume&lt;br&gt;
Average changed files per PR&lt;br&gt;
Sensitive paths: auth, billing, data, infra, dependencies&lt;br&gt;
Private-repo CI/runtime cost&lt;br&gt;
Expected reruns&lt;br&gt;
False-positive tolerance&lt;br&gt;
True positives that would actually block a bad merge&lt;br&gt;
Then split PRs into tiers.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Low risk: docs, copy, simple UI&lt;br&gt;
Medium risk: feature work, tests, internal APIs&lt;br&gt;
High risk: auth, billing, permissions, migrations, infra, public APIs&lt;br&gt;
Run the cheap path broadly. Escalate the risky path deliberately.&lt;/p&gt;

&lt;p&gt;That one habit matters more than arguing over whether a seat, run, credit, or minute looks cheaper in isolation.&lt;/p&gt;

&lt;p&gt;A practical checklist before buying&lt;br&gt;
Before installing an AI review tool across every repo, ask:&lt;/p&gt;

&lt;p&gt;Does pricing scale with seats, PRs, models, minutes, or all of the above?&lt;br&gt;
Can we set review effort by path, branch, or risk tier?&lt;br&gt;
Can maintainers control expensive reruns?&lt;br&gt;
Can we start advisory-only before requiring the check?&lt;br&gt;
Can we see what each review cost?&lt;br&gt;
Are private-repo runtime minutes part of the bill?&lt;br&gt;
Are model costs hidden, bundled, or directly billed through our own key?&lt;br&gt;
If the vendor cannot explain this clearly, the pricing is not simple. It is just under-described.&lt;/p&gt;

&lt;p&gt;Where a calculator helps&lt;br&gt;
I do not think teams should pick AI review tooling from a pricing table alone.&lt;/p&gt;

&lt;p&gt;Take one busy repository. Count a normal month of PRs. Split the PRs into low, medium, and high risk. Then estimate what each pricing model does to that workload.&lt;/p&gt;

&lt;p&gt;That is why we made a small PR review cost calculator:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.critique.sh/tools/pr-review-cost-calculator" rel="noopener noreferrer"&gt;https://www.critique.sh/tools/pr-review-cost-calculator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use it as a sanity check before turning any AI reviewer into a required gate.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>github</category>
      <category>codereview</category>
      <category>programming</category>
    </item>
    <item>
      <title>A security checklist for AI-generated pull requests</title>
      <dc:creator>Critique</dc:creator>
      <pubDate>Tue, 02 Jun 2026 04:31:12 +0000</pubDate>
      <link>https://dev.to/critiquedotsh/a-security-checklist-for-ai-generated-pull-requests-2n3j</link>
      <guid>https://dev.to/critiquedotsh/a-security-checklist-for-ai-generated-pull-requests-2n3j</guid>
      <description>&lt;p&gt;AI-generated code is not automatically insecure.&lt;/p&gt;

&lt;p&gt;The problem is that it can create convincing pull requests faster than teams can inspect them. The diff may be formatted well, the helper names may look reasonable, and the tests may be green. None of that proves the change preserved the security rules your app depends on.&lt;/p&gt;

&lt;p&gt;When I review AI-generated PRs, I use a short checklist. It is close to the way we wrote Critique's &lt;code&gt;[critique-review]&lt;/code&gt;(&lt;a href="https://www.critique.sh/skills/critique-review" rel="noopener noreferrer"&gt;https://www.critique.sh/skills/critique-review&lt;/a&gt;) skill: establish scope, map blast radius, trace risky paths, check authorization, and only report findings that are grounded in the actual code.&lt;/p&gt;

&lt;p&gt;No vague "this might be risky" comments. If there is a security concern, it should point to a real path and a real failure mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start with blast radius
&lt;/h2&gt;

&lt;p&gt;Before reading every line, mark the parts of the system the PR touches.&lt;/p&gt;

&lt;p&gt;Pay extra attention to changes involving:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auth&lt;/li&gt;
&lt;li&gt;Billing&lt;/li&gt;
&lt;li&gt;Permissions&lt;/li&gt;
&lt;li&gt;Data export or import&lt;/li&gt;
&lt;li&gt;Migrations&lt;/li&gt;
&lt;li&gt;Webhooks&lt;/li&gt;
&lt;li&gt;Background jobs&lt;/li&gt;
&lt;li&gt;Infrastructure&lt;/li&gt;
&lt;li&gt;Public APIs&lt;/li&gt;
&lt;li&gt;AI agents, tool calls, or model output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not every AI-generated diff deserves the same review depth. A copy tweak does not need the same pass as a webhook handler. A CSS fix is not token validation. A UI-only change is not the same as a database migration.&lt;/p&gt;

&lt;p&gt;The first question is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What is the worst thing this PR can affect if it is wrong?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That answer decides how hard you review.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Trace untrusted input
&lt;/h2&gt;

&lt;p&gt;Find anything that enters the system from outside:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request bodies&lt;/li&gt;
&lt;li&gt;Headers&lt;/li&gt;
&lt;li&gt;Uploaded files&lt;/li&gt;
&lt;li&gt;Webhook payloads&lt;/li&gt;
&lt;li&gt;User-generated content&lt;/li&gt;
&lt;li&gt;Retrieved documents&lt;/li&gt;
&lt;li&gt;Model outputs&lt;/li&gt;
&lt;li&gt;Agent instructions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then follow where that data can go:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database writes&lt;/li&gt;
&lt;li&gt;Logs&lt;/li&gt;
&lt;li&gt;Commands&lt;/li&gt;
&lt;li&gt;Prompts&lt;/li&gt;
&lt;li&gt;Tool calls&lt;/li&gt;
&lt;li&gt;External APIs&lt;/li&gt;
&lt;li&gt;Credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI-generated code is often good at the happy path. It parses the payload, calls the helper, returns the response, and adds a test for the expected case.&lt;/p&gt;

&lt;p&gt;Security review is mostly about the other cases.&lt;/p&gt;

&lt;p&gt;What if the webhook payload is replayed? What if the uploaded file is bigger than expected? What if the retrieved document contains instructions for the model? What if a user passes another user's ID?&lt;/p&gt;

&lt;p&gt;Write the path down if needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;external input -&amp;gt; validation -&amp;gt; permission check -&amp;gt; side effect
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If one of those steps is missing, that is where the review should slow down.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Check authorization, not just authentication
&lt;/h2&gt;

&lt;p&gt;This is the mistake I see most often in generated code.&lt;/p&gt;

&lt;p&gt;The PR checks that a user is logged in, but does not check whether that user can access the specific object.&lt;/p&gt;

&lt;p&gt;Authentication asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Who are you?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Authorization asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Are you allowed to do this specific thing?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can user A access user B's object?&lt;/li&gt;
&lt;li&gt;Can one tenant read another tenant's data?&lt;/li&gt;
&lt;li&gt;Can a non-admin reach an admin-only path?&lt;/li&gt;
&lt;li&gt;Did the change bypass an existing owner check?&lt;/li&gt;
&lt;li&gt;Does the API enforce the same rule as the UI?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not enough:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Unauthorized&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You still need the object-level check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;project&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getProject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;projectId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ownerId&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Forbidden&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In a real multi-tenant app, even that may be too simple. You might need organization membership, role checks, feature policy, or plan limits.&lt;/p&gt;

&lt;p&gt;The point is not the exact code. The point is that "logged in" is rarely the whole rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Treat model output as untrusted
&lt;/h2&gt;

&lt;p&gt;If an LLM can influence a privileged action, its output is untrusted input.&lt;/p&gt;

&lt;p&gt;That includes output used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tool calls&lt;/li&gt;
&lt;li&gt;File writes&lt;/li&gt;
&lt;li&gt;Shell commands&lt;/li&gt;
&lt;li&gt;API requests&lt;/li&gt;
&lt;li&gt;Database updates&lt;/li&gt;
&lt;li&gt;Workflow routing&lt;/li&gt;
&lt;li&gt;Prompt construction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prompt injection is not only a chatbot problem. It is a tool authorization problem.&lt;/p&gt;

&lt;p&gt;The risky pattern looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;model reads untrusted content -&amp;gt; model decides action -&amp;gt; app executes action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The fix is not just "use a better prompt." Prompts help, but they are not a security boundary.&lt;/p&gt;

&lt;p&gt;Use boring controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allowlist tools&lt;/li&gt;
&lt;li&gt;Validate tool arguments outside the model&lt;/li&gt;
&lt;li&gt;Scope credentials tightly&lt;/li&gt;
&lt;li&gt;Require confirmation for sensitive writes&lt;/li&gt;
&lt;li&gt;Keep read tools separate from write tools&lt;/li&gt;
&lt;li&gt;Log tool calls&lt;/li&gt;
&lt;li&gt;Fail closed when the request is unclear&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a PR adds agent behavior, review it like a new public API. Ask what it can read, what it can write, and what happens when the input is hostile.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Validate the fix
&lt;/h2&gt;

&lt;p&gt;For security-sensitive changes, do not accept "looks patched."&lt;/p&gt;

&lt;p&gt;Ask for one of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A regression test&lt;/li&gt;
&lt;li&gt;A reproducer&lt;/li&gt;
&lt;li&gt;A before/after exploit path&lt;/li&gt;
&lt;li&gt;A clear invariant the code now enforces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good validation sounds like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Before: User A could request User B's invoice by ID.
After: The API checks organization membership before loading invoice details.
Test: A user from org_1 gets a 403 when requesting an invoice from org_2.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is much better than:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fixed auth bug.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same rule applies to tests. A generated PR may include tests, but check what they prove. Happy-path coverage is useful. Boundary coverage is what catches the security bug.&lt;/p&gt;

&lt;p&gt;Look for negative tests:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logged-out user cannot access the endpoint&lt;/li&gt;
&lt;li&gt;Normal user cannot access admin action&lt;/li&gt;
&lt;li&gt;Tenant A cannot update Tenant B's settings&lt;/li&gt;
&lt;li&gt;Invalid webhook signature is rejected&lt;/li&gt;
&lt;li&gt;Replayed webhook event does not double-apply&lt;/li&gt;
&lt;li&gt;Model output cannot call a disallowed tool&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the PR changes authorization and only tests the allowed case, the test suite is still missing the important part.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Keep review comments specific
&lt;/h2&gt;

&lt;p&gt;The least useful security review is a wall of generic warnings.&lt;/p&gt;

&lt;p&gt;Bad:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Make sure permissions are correct.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This endpoint checks that a session exists, but it does not verify that the requested invoice belongs to the caller's organization. A user who can obtain another invoice ID may be able to read it. Load the invoice through an organization-scoped query or compare the invoice organization against the caller's memberships before returning it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives the author something to fix.&lt;/p&gt;

&lt;p&gt;This is the part of Critique's &lt;code&gt;critique-review&lt;/code&gt; skill I like most. It pushes the reviewer to separate findings from guesses. A real finding needs a code path, an impact, and a fix direction. If the evidence is incomplete, call it an open question instead of pretending it is a confirmed bug.&lt;/p&gt;

&lt;p&gt;AI-generated code does not need a totally different review process.&lt;/p&gt;

&lt;p&gt;It needs a stricter one.&lt;/p&gt;

&lt;p&gt;Use the same standards you would use for human-written production code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;find the blast radius&lt;/li&gt;
&lt;li&gt;trace untrusted input&lt;/li&gt;
&lt;li&gt;check object-level authorization&lt;/li&gt;
&lt;li&gt;treat model output as untrusted&lt;/li&gt;
&lt;li&gt;require evidence for security fixes&lt;/li&gt;
&lt;li&gt;keep findings grounded in code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to block AI-generated PRs. The goal is to make them prove the same thing every production change should prove: the right users can do the right things, and the wrong users cannot.&lt;/p&gt;

&lt;p&gt;If you want the review posture in reusable form, the public &lt;code&gt;[critique-review](https://www.critique.sh/skills/critique-review)&lt;/code&gt; skill is built around that idea: fewer generic comments, more grounded findings.&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>github</category>
      <category>devplusplus</category>
    </item>
  </channel>
</rss>
