Product
Platform Agentic Code Scanner Unified Runner Tomosu Agents Indexes Solutions
Get Started
Scan your repo VS Code plugin Tomosu MCP GitHub App CodeRabbit FAQ
Resources
Case Studies Governance Impact TCO Calculator Download / Free Trial
Company
About Blog News Contact Request Demo →
Field notes · Integrations

The Code Review Observability Checklist Most Teams Skip

Tomosu AI·7 min read·

A PR comment is not a production signal. Code review tools are starting to treat it like one anyway.

Pull an error rate, a recent incident, a flaky service into the review thread, and a reviewer knows a change touches something already on fire. Vendors are moving fast on it. New Relic launched an AI Coding Observability product in June 2026, open source, that watches Claude Code, Cursor, GitHub Copilot, Windsurf, and Amazon Q. Gartner's forecast is why: 90% of enterprise engineers are expected to be using an AI code assistant by 2028. CodeRabbit and Qodo are building toward the same thing: production context inside the review.

None of that is a bad instinct. What gets skipped is the checklist. The integration pitfalls only show up after the demo, when two systems that were never built to share a data model have to share one anyway.

Why this is harder than the demo makes it look

A code review tool speaks in diffs, files, and pull requests. An observability tool speaks in services, traces, and spans. Nothing about those two vocabularies lines up automatically. Most integrations bridge the gap with name matching: this repo maps to that service because the names happen to be similar. A name match is not an identity system. It works fine in the demo and quietly breaks the first time a service gets renamed, split, or moved into a monorepo.

TWO VOCABULARIES, ONE FRAGILE BRIDGE CODE REVIEW TOOL diffs files pull requests OBSERVABILITY TOOL services traces spans fuzzy name match not an identity system THE BRIDGE BREAKS ON A rename checkout-svc → orders-api A split one repo, now three services A monorepo move many services, one repo name
The integration is only as good as the join between a change and a service. Most products ship that join as string similarity and call it done.

That's the real engineering problem. Not "can we call the API," but "can we keep the mapping between a change and a service correct as the codebase changes shape." Most integration docs skip this part because it isn't a feature. It's the maintenance cost of one.

The checklist to run before turning an integration on

01

Where does the signal actually originate?

A trace, a log line, an alert, and a synthetic check all have different latency and different rates of false positives. "We pull from observability" isn't specific enough to know what a reviewer is actually looking at.

02

What's the latency to a review comment?

If it's minutes, it's context. If it's hours, it's an archive, and a reviewer reading it Tuesday for a PR opened Monday will treat it as history, even when it isn't.

03

Does the mapping survive a rename or a split?

Ask before adopting, not after the first quarter of drift. Most teams find out the hard way, once the integration has been annotating the wrong PR for weeks without anyone noticing.

04

Does it fail open or fail closed?

When the observability API times out or the credentials expire, does the review tool say nothing, or does it block the merge? Silent failure is worse than no integration at all. The team just stops trusting the annotations that do show up.

05

Is the signal advisory, or does it gate the merge?

Two different products, wearing the same feature name. A comment a reviewer can ignore and a check that blocks CI carry very different risk when the underlying data is wrong.

06

Who owns it when it silently stops?

Integrations rot. Someone needs to get paged when the pipe goes quiet, or this whole checklist is theoretical the first time it matters.

CHECKLIST ITEMS 01 + 02: ORIGIN AND LATENCY Latency from production event to review comment → False positives → seconds minutes hours context archive Trace precise, narrow, expensive to join Raw alert fast and loud, most of it already triaged Synthetic check clean signal, only covers what you scripted Log-derived aggregate by the time it lands, the reviewer reads it as history
"We pull from observability" describes four different products. Where the signal comes from sets both how fast it can reach the review and how often it will be wrong.

The integration pitfalls this checklist exists to catch

Stale service maps. A refactor renames or splits a service, the mapping doesn't get updated, and the integration keeps confidently annotating the wrong pull request. Nobody catches it, because a plausible but wrong annotation doesn't look broken.

One way sync. Observability data flows into the review tool, but nothing flows back about which flagged PRs actually caused the incident they warned about. The loop never closes, so the integration never learns which signals were worth surfacing.

Alert shaped noise instead of review shaped context. Piping raw alert volume into a PR comment isn't the same as telling a reviewer something useful. A noisy alert that's already been triaged and a fresh, unexplained one are not the same risk. They show up identically if the integration can't tell them apart.

No weighting for blast radius. "This touches a service with an open incident" treats a shared auth boundary and a single internal dashboard as the same risk. They aren't. The trigger isn't the cause, and a flat alert count doesn't know the difference either.

SAME ALERT COUNT, DIFFERENT REACH PR #4812, SHARED AUTH BOUNDARY Open alerts on the touched service 3 Downstream services reached 47 Should stop a reviewer cold PR #4813, INTERNAL DASHBOARD Open alerts on the touched service 3 Downstream services reached 1 Worth a note, not a stop
A flat alert count rates these two changes identically. Reach is the variable that separates them, and it is the one most integrations never look up.

Attribution collisions in a monorepo. Two PRs touch the same shared boundary in the same window, and the integration can't tell which one the signal actually belongs to. It picks one, arbitrarily, and now both reviewers have partially wrong information.

CHECKLIST ITEM 05: ADVISORY OR GATE MAPPING CORRECT MAPPING WRONG ADVISORY COMMENT BLOCKING CHECK Useful context The reviewer learns something real and still holds the decision. Wasted attention Recoverable, until the team learns to scroll past every annotation. A real gate Worth having, but only if the mapping is owned, not inferred. Delivery stops on bad data The quadrant nobody scopes for, because the demo never enters it.
Advisory and gating ship under the same feature name. The difference only becomes visible in the right-hand column, which is exactly where a name-matched mapping puts you.

What actually has to be true for this to work

None of this is really about whether a vendor supports Datadog or New Relic. It's about whether the review tool and the observability tool share the same idea of risk and reach. Whether a "flagged" PR means "this touches code with a documented history of breaking," or just "this touches a service that happens to be noisy this week." Code written by an AI assistant already drifts from established patterns in ways a reviewer skimming a diff won't catch. An observability integration that can't tell pattern drift from routine noise just adds volume to the review queue. Not judgment.

That's the gap Tomosu is built around: reading the whole codebase to know which changes sit under a wide blast radius before they merge. Forwarding an alert feed into a comment box after the fact isn't the same thing, even when both get called observability. Seeing a signal and deciding what to do about it are different jobs. An integration that skips straight from "detected" to "flagged in review" has quietly merged the two.

None of this is a reason to skip these integrations. It's the difference between one that makes review comments more informed, and one that just adds a second, less reliable alert channel your team eventually learns to scroll past.

Frequently asked questions

What should you check before integrating a code review tool with observability?

Six things: where the signal originates (trace, log, alert, or synthetic check), the latency between a production event and the review comment, whether the service-to-repo mapping survives a rename or a split, whether the integration fails open or fails closed, whether the signal is advisory or gates the merge, and who gets paged when the integration silently stops sending data.

Why do code review observability integrations break?

Most integrations bridge code review and observability with name matching: a repo maps to a service because the names look similar. That is not an identity system. It works in the demo and breaks the first time a service is renamed, split, or moved into a monorepo, and the failure is silent because a plausible but wrong annotation does not look broken.

What is the difference between an advisory signal and a merge gate?

An advisory signal is a comment a reviewer can ignore. A merge gate is a check that blocks CI. They are often shipped under the same feature name, but they carry very different risk when the underlying data is wrong: a wrong comment wastes attention, a wrong gate stops delivery.

Should an observability integration fail open or fail closed?

Either is defensible, but the behavior has to be explicit and visible. Silent failure is the worst option: when the observability API times out or credentials expire and the integration simply says nothing, the team stops trusting the annotations that do show up.


Tomosu builds merge-gate governance infrastructure that reads the whole codebase to weight a change by blast radius before it merges, not by whichever service happened to be noisy this week. If you're wiring production context into code review and want the mapping to survive contact with a refactor, we are opening a small design partner cohort. Request Demo →