Build1 distinct publisher3 min readPublished
A dev.to writeup argues the LLM reviewer belongs in the pull request thread and never in the required-checks list, because nothing in the pipeline keeps a pass/fail history for it. The config change is two lines.
The Engineer · Build desk

build
The stability step is a branch, not a pipeline: inside one team's release-candidate discipline1 distinct publisher
build
A GitHub graph in 21 requests: what PR metadata already knows about your files1 distinct publisher
build
Copilot's meter changed on June 1, and half your seats are still priced in the old unit1 distinct publisher
build
A decision rule sorts Codex and CodeRabbit by the unit of work each owns to completion1 distinct publisher
Compiled by The EngineerSomething wrong?How this is made
Branch protection is a list of check names, and that list holds the only real authority in the pipeline. A job that is not on it cannot block a merge, whatever it writes in the thread. So the load-bearing lines in the dev.to author's CircleCI config are not about AI at all: `requires: []` on the ai-review job, which lets it run in parallel and block nothing [11], and `--no-fail-on-issues` on the command it runs, which keeps that job's exit code out of the build result [12]. Only `test-and-lint` is registered as a required check [13]. Credit where it is due: the author names the exit code instead of writing a policy document about trust.
A gate does not need to be accurate so much as it needs to fail attributably. A test suite has a pass/fail history, and a linter has a changelog. A coverage threshold is a number you can graph. When any of them regresses, you can name the commit [9]. The same config pins that floor with `npx nyc check-coverage --lines 80` [14]. Eighty is a debatable number, but it is a bisectable one.
Run the same diff through the same model twice and the verdict can differ [7]. There is no regression suite for the reviewer and no versioned behaviour; nobody wrote down what a good verdict looked like last month, either [8]. A reviewer that starts approving what it used to reject therefore surfaces in the incident review rather than in CI [10]. That asymmetry, not the hit rate, is the argument for advisory position. The tool catches missing null checks and SQL built by concatenation instead of parameters, in seconds, on every pull request [5], and the author reports teams getting fewer round trips out of it as a first pass [6].
The proposed remedy is a golden set: five past pull requests that should have been rejected, five that were legitimately fine, diffs and expected verdicts committed to the repo [15], replayed by a scheduled pipeline against whatever model and prompt is current [16]. Treat that as a benchmark table, because it is one. Ten cases [1] means a single flipped verdict moves the score by ten points [2], and by the tool's own nondeterminism [7] a replay can fail with no change to model or prompt at all, so you need several runs per case before drift and sampling noise are separable. For the set to transfer to your repo, your five rejects have to resemble their five, and theirs come from their own incidents, including the empty-array diff that shipped [1].
The exercise pays off before the first replay runs, because assembling it forces someone to write down what a correct verdict is, which is the artefact that was missing in the first place [8].
In my context this is the right trade. The context: I can bisect a linter, and I cannot bisect a prompt. The fifteen minutes the author quotes for splitting the config [17] buys the one place where that difference gets expensive.
Ranked by verification strength, evidence, and original report placement.
The author's position is that AI code review should never be a merge gate, and should be treated as a colleague you consult rather than a bouncer trusted with a badge.
Running the same diff through the same model twice can produce two different verdicts, which the author describes as the nature of the tool rather than a filable bug.
There is no regression suite for the AI reviewer, no versioned behaviour, and no way to say it is worse than it was last month, because nobody wrote down what good looked like.
By contrast, in a mature pipeline a test suite has a known pass/fail history, a linter has a changelog, and a coverage threshold is a number you can graph over time, so a regression can be traced to the exact commit that broke it.
When an AI reviewer starts approving diffs it should reject, the author says you find out from the incident rather than from the pipeline.
The published CircleCI config puts test-and-lint and ai-review in the same pr-checks workflow, with ai-review carrying "requires: []" and the comment that it runs in parallel and blocks nothing.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 29, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Configs verify themselves; the incident does not
Split the story in two and the halves score very differently. The CircleCI workflows, the --no-fail-on-issues flag, the cimg/node:20.11 image and the nyc coverage floor are published in full and can be checked against public documentation without trusting the author at all. The payment reconciliation failure that gives the piece its force rests entirely on one paragraph of unattributed recollection — no repository, no postmortem, no dates beyond "two weeks ago", and no name for the reviewer that said LGTM.
One anonymous team on the record
Everything we can point to about real-world use is a single disclosure: the author's own team ran an AI reviewer with gate authority and got burned. The vendor is unnamed, the team is unnamed, and the broader assertion that "teams report real velocity gains" carries no team, tool or number behind it. The remedy — golden-set fixtures and a nightly replay — is presented as advice, with no indication that anyone, including the author, is running it yet.
Dramatic opening, modest fix
The overstatement is concentrated at the front. A payment reconciliation job and two production failures are used to establish causation the reporting never traces, and "nobody had tested the reviewer" does a lot of work for one clause. The prescriptions behind that opening are unusually restrained — two workflow jobs, one flag, ten fixture files — and the only place they oversell is the fifteen-minute estimate, which quietly assumes you own your CI config and your branch-protection settings.
Hot take, timed to the week's argument
The author tells you the incentive himself: "Here's my hot take," pinned to "the discourse this week" about AI promoting every developer to reviewer. That is engagement-seeking framing on a developer platform where authorship is personal brand. What is absent is commercial pull — no product is sold, no reviewer tool is named or attacked, and CircleCI appears only as the CI the author happens to configure, with no relationship disclosed or implied.
Clear text, single vantage point
We are confident about what the story says and what it recommends: the text is unambiguous, the configuration is complete, and the reasoning from non-determinism to "no baseline" to "you find out from the incident" holds together on its own terms. We are much less confident about the world beyond it. Nothing corroborates the failure, nobody contests the fix, and one voice on one platform is thin ground for judging how common merge-gating LLM reviewers actually is.