Does Devin Review Check the Fix Against the Original Customer Report?
No. Devin Review checks a pull request against instruction files that live in your repository, things like REVIEW.md, AGENTS.md, CLAUDE.md, CONTRIBUTING.md, and similar config such as .cursorrules. It has no mechanism to open the Jira or Linear ticket the PR came from and compare the diff against what the customer described. It reviews the code you wrote, not the report that started the work.
That's not a hidden limitation. It's the documented scope of the feature: Devin Review "respects instruction files in your repository," and REVIEW.md is where you tell it what to watch for, things like "areas of the codebase that need extra scrutiny" or "common pitfalls to watch for." None of that is a pointer back to a ticket. If the originating bug report never made it into REVIEW.md word for word, Devin Review has no way to know it exists, and the Linear and Jira integrations that hand Devin the task in the first place don't close that loop either. Both describe how work gets assigned and how progress posts back to the ticket, not a verification step that checks the finished diff against the ticket's original wording.
What Devin Review is actually built to catch
Cognition built Devin Review around what its own post calls the "Lazy LGTM problem": small PRs are easy to read and argue about, and that breaks down once diffs get large enough that no reviewer can hold the whole thing in their head, so the honest outcome is a rubber-stamp approval instead of real scrutiny. The fix Cognition shipped is a reviewer that reads the entire diff every time, checks it against the conventions your team wrote down, and flags what a tired human would skim past.
You can trigger it a few ways. Comment /devin review on an open PR, swap github.com for devinreview.com in any PR URL, run npx devin-review from the CLI, or turn on auto-review so it fires whenever a PR opens, gets a new commit, or comes off draft. All of those paths do the same analysis, diffing against instruction files plus whatever a language model can infer about code quality from the change itself, and none of them read the linked ticket.
That's a real problem solved well. It's also a narrower problem than "does this PR do what the customer asked for," and the two get conflated easily because both show up as a green checkmark on the same PR.
Where the two get separated
A bug travels through at least three rewrites before Devin Review ever sees it. The customer describes a symptom in their own words, usually to a support person, not an engineer. Whoever files the ticket paraphrases that into a title and a couple of sentences. Then whoever scopes the Devin task narrows it further, to whatever file or condition seems most likely.
Each step is a reasonable compression, and each one can drop something the customer said. A paraphrase that says "export sometimes fails" can lose the detail that it only fails on reports over 90 days, because the person writing the ticket didn't think that detail mattered. Devin Review has no way to catch that loss, because by the time it opens the diff, the only version of the story left is the ticket's, not the customer's.
The bump-lag bug that passed review twice
At Griddle, the screens on the line show tickets moving from the register to the kitchen, and a job is supposed to clear off every screen the moment a cook marks it done. Griddle sells that display system to restaurant chains running several locations at once, so the same bug can turn up more than once with a different address attached. Bea Sorenson reviews most of the pull requests that touch the display flow, with Devin's auto-review turned on so a scoping comment lands before she looks at anything by hand.
A support ticket came in from an ops manager at one of Griddle's chains:
Customer (ops manager, filed via chat support): When the expo bumps an order off the screen, it still shows on the line for a few seconds after. During a normal rush that's fine, nobody notices. During the Friday dinner rush when we've got four stations firing on the same ticket, a line cook sees it's still up and starts the next item before realizing it already bumped. We've had two double-fires this month because of it.
Whoever triaged the ticket filed it in Linear as:
Bumped orders lag briefly on the line display before clearing.
Devin picked up the ticket, found the bump-handling code, and opened a PR that shortened the polling interval on the line display so bumped tickets clear faster. Devin Review ran automatically, checked the diff against Griddle's CONTRIBUTING.md conventions for the display service, and said the diff was clean, followed the existing polling pattern, and had no flagged issues. Bea skimmed the green check and merged it.
The fix made single-station tickets clear faster. It didn't touch the actual failure, which only showed up on multi-station tickets during high concurrency, where four stations wrote to the same ticket's state within milliseconds of each other and the display read a stale value regardless of polling interval. The same chain reported the same double-fire issue nine days later, this time from a different location, same Friday-rush pattern.
Nothing in that review cycle malfunctioned. The Linear ticket was a fair paraphrase. The diff followed the repo's conventions. Devin Review checked exactly what it's built to check, and confirmed the code was clean. The condition that made the bug real, four stations, one ticket, a narrow concurrency window, lived only in the customer's original message, and nothing downstream of that message carried it forward.
Doing it by hand, and what breaks first
The obvious response is to make ticket-writing more careful, quoting the customer directly instead of compressing the conditions out of the summary. That helps, and it costs nothing to start doing today. It also depends on the person filing the ticket recognizing which detail matters before anyone has looked at the code, which is asking them to already know what made the Griddle bug hard.
The other fix is procedural. Before merging on a green Devin Review, pull up the original support thread and read it against the diff, not just the ticket. That works, and it's the right habit at low volume. It also depends on someone remembering to do it on every PR, every time, and being able to find the original thread quickly. Once tickets are coming from chat support, Slack Connect threads with customers, and the occasional call note all at once, that lookup becomes its own five-minute tax per review, and the reviews where it gets skipped are indistinguishable from the ones where it didn't matter, until the same bug comes back.
Keeping the customer's exact words attached
This is the point an aggregation layer earns its place. Full disclosure: Modem is what we sell, so check the claims below against your own review process instead of trusting them outright. Modem keeps the customer's original conversation, the actual chat transcript or support thread, attached to the same topic as the Linear or Jira issue it produced. When a task goes to Devin, that transcript rides along in the task brief, so the scoping step starts from the customer's own words instead of just the ticket's summary of them. Separately, a human checking Devin Review's green check can open that same topic and read those exact words next to the diff, rather than hunting down the original thread first.
It doesn't replace Devin Review, and it doesn't make Devin scope the ticket correctly on the first pass either; Griddle's concurrency detail still had to get noticed by someone reading carefully. What it removes is the search. The original report already sits next to the issue it produced, so checking a diff against what the customer said costs the time it takes to read one topic, not a hunt across chat support and Slack for the thread that started it. Below the volume where that search takes five minutes and everyone remembers to run it, doing it by hand is fine.
For the other integrations Devin ships and how they compare on this same handoff, see our guide to the best ways to hand customer-reported bugs to Devin. And if the ticket itself is usually the thin part, not the review, what context Devin actually needs to fix a customer-reported bug covers what belongs in the task before Devin ever opens a PR.
Before you trust the next green check
Pull the original customer message, not the ticket's summary of it, and read it once against the diff before merging. Ask specifically whether the diff's condition matches the customer's condition, not just the bug's title, the way "polling interval" and "four stations writing at once" both plausibly describe "bumped orders lag" without being the same bug. If the ticket passed through more than one person's hands before reaching Devin, assume a detail got compressed out, and go find out which one before the same report comes back with a different customer's name on it.
