Skip to content

Review output and severities

The shape of a finished review, how issues are ranked by severity, and how they group by category.

A finished review is a flat list of issues. Each issue (sometimes called a finding) carries the same fixed set of fields, so the results view always has the same data to draw from no matter which lens produced it. This page documents that data model: the severity levels, the categories, the fields on a single issue, and the built-in profiles that decide which lenses run.

If you want to know how issues get produced in the first place, read the review pipeline. This page is about what comes out the other end.

Severities

Every issue has exactly one severity. There are five, listed here from most to least severe:

SeverityMeaning
blockerShip-stopping. A correctness or security fault you should not merge.
highSerious. Worth fixing before merge in most cases.
mediumA real problem, but not urgent.
lowMinor. Safe to defer.
nitCosmetic or stylistic. Take it or leave it.

Internally, severities are ranked by their position in that order, and the rank counts up as severity goes down. Blocker ranks lowest, nit ranks highest, so "lower rank means more severe." That rule drives the severity filter in the results list and the sort order of the issue list, where blockers float to the top.

The terminal UI colors each severity differently, and the exact color depends on the active theme. Blocker is red, high is orange, medium is yellow or amber, low is blue, and nit is a muted gray. The high-contrast palette keeps the same hue assignments but brightens them. Treat the hue as a quick severity cue, not a precise value; the palettes pick theme-appropriate shades rather than one fixed code per level.

Categories

Each issue is also tagged with one category, describing what kind of problem it is. There are seven:

CategoryWhat it covers
correctnessLogic errors, broken behavior, wrong results.
securityVulnerabilities, unsafe handling, exposure.
performanceSlow paths, wasted work, scaling problems.
apiAPI surface and contract problems.
testsMissing or inadequate test coverage.
readabilityCode that is hard to follow.
styleFormatting and stylistic conventions.
Info:

Note: The seven categories are not the same as the five lenses. A lens is a reviewer pass with a focus area (correctness, security, performance, simplicity, tests). A category is the label attached to an issue. The two lists overlap but do not match: api, readability, and style are categories with no lens of the same name, and simplicity is a lens whose issues surface under categories like readability. So a review running three lenses can still return issues across more than three categories.

Issue fields

A single issue follows a fixed shape. The results view spreads these across a few tabs, but the underlying record is one object:

FieldTypeDescription
idstringStable identifier for the issue.
severityseverityOne of the five levels above.
categorycategoryOne of the seven categories above.
titlestringShort headline for the issue.
filestringThe file the issue points at.
line_startnumber or nullFirst line of the range, or null when not line-specific.
line_endnumber or nullLast line of the range, or null.
rationalestringThe reasoning behind the issue.
recommendationstringWhat to do about it.
suggested_patchstring or nullA proposed fix as a diff, or null when none was produced.
confidencenumber (0 to 1)How sure the reviewer is, from 0 to 1.
symptomstringWhat is observably wrong.
whyItMattersstringWhy the issue is worth your attention.
fixPlanstep[] (optional)Ordered steps to fix it; each has an action and optional files and risk.
betterOptionsstring[] (optional)Alternative approaches worth considering.
testsToAddstring[] (optional)Tests that would catch this in future.
evidenceevidence[]Supporting references: code excerpts, docs, traces, or external sources.
tracetrace[] (optional)The agent steps taken to reach the issue.

Patch and Trace tabs follow the same binary rule. The results view includes Patch exactly when suggested_patch contains a patch, and includes Trace exactly when trace contains at least one step. A null patch, a missing trace, and an empty trace omit their respective tabs. For how each renders, see reading results.

Evidence references

Every evidence item keeps its title, source identifier, and excerpt in saved reviews. The web and terminal result views render all four supported types:

TypeResults presentation
codeA code block or terminal code snippet, with its file and starting line when available.
docA Documentation reference with its title, source identifier, and quoted excerpt.
traceA Trace evidence reference with its title, source identifier, and excerpt. This is separate from the issue's optional agent-step trace.
externalAn External reference with its title, source identifier, and excerpt. The source identifier is displayed as plain text, not treated as an executable link.

code evidence is always extracted from the diff the review ran on and listed first, so an excerpt shown as code is the reviewed source rather than text the model wrote. Provider-supplied references of the other three types are kept as given.

Profiles

A profile is a named preset that picks which lenses run and, optionally, a minimum severity to keep. Four ship built in:

ProfileNameLensesMinimum severity
quickQuick Reviewcorrectnesshigh
strictStrict Reviewcorrectness, security, testsglobal threshold (default low)
perfPerformance Reviewcorrectness, performancemedium
securitySecurity Auditsecurity, correctnessglobal threshold (default low)

quick is the fast path: it runs only the correctness lens and drops anything below high severity, so you see blockers and high-severity issues and nothing else. strict is the broad pass across correctness, security, and tests, but it still respects the configured severityThreshold. perf pairs the performance lens with a correctness baseline and hides anything below medium. security leads with the security lens, backed by correctness, and also respects the configured threshold.

The configured severityThreshold is always a floor. A profile minimum can tighten that floor, but it cannot relax it. To keep the full range down to nit, set severityThreshold to nit; profiles without their own minimum, such as strict and security, then inherit that wider range.