Review finding verdict
record_finding_verdictApply a post-hoc triage verdict to a finding that was previously recorded via record_finding. Used by the /reply-to-code-review flow to persist whether a finding is TRUE / FALSE / UNCERTAIN and the FIX / DEFER / IGNORE action taken. The finding is located only by the exact finding_id returned by list_pr_findings, on ANY lifecycle status (open, fixed, or dismissed — so verdicts still apply after a PR is merged and findings were swept to dismissed). Only findings recorded into the data layer (the aictrl-dev MCP path) can receive a verdict. Idempotent: re-applying overwrites the prior verdict. A not_found response is an application error; call list_pr_findings to refresh stale IDs and do not treat the write as successful. judged_at_sha is required: send the full 40-hex commit SHA of the code you actually read. A SHA that is neither the review SHA nor a later commit of the same PR is rejected with validation_error. reasoning is required too (#5364): a verdict whose reasoning cannot be audited later is not worth storing. Each write appends to the finding's judgment history; a re-judge from the same run at the same commit updates that run's own row rather than appending a duplicate. A FALSE verdict on an OPEN finding of severity MINOR or NIT (medium/low/info) also dismisses it as a false positive, with your reason as the note; on MAJOR or BLOCKER (high/critical) it stays a suggestion a person confirms. The result reports autoDismissed (and autoDismissReason when false). A dismissal is not reopened by this tool; a person can restore the finding from the pull-request page.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| pr | Yes | ||
| action | No | Action taken on the finding (optional). | |
| reason | No | Optional one-line summary. NOT a substitute for `reasoning` — it is kept only for continuity with pre-#5364 verdicts and is not used for calibration. | |
| verdict | Yes | Triage outcome: is the finding a real, actionable issue? | |
| evidence | No | Repo-relative locations you read to form the verdict. Each file must exist at `judged_at_sha`; a file that does not is rejected when the repository is reachable. Optional, but a verdict that cites nothing is weaker evidence. | |
| reasoning | Yes | Required reasoning chain. Each part must carry at least 40 characters of substance about the code. Run bookkeeping ("[A/B wave 3]", "[re-judge 2026-07-14]") is stripped before the length is measured and is never stored, so padding with it does not help. Placeholders ("n/a", "test", "looks fine") are rejected. | |
| finding_id | Yes | Required exact recorded finding id returned by list_pr_findings. This is the only supported finding selector. | |
| repository | Yes | ||
| judged_at_sha | Yes | Required full 40-character commit SHA of the code the verdict was formed at. Must be the SHA the finding was reviewed at or a later commit of the same PR — a SHA outside the PR, or one that precedes the review SHA, is rejected. Send the commit you actually read, not the branch tip. | |
| organization_id | Yes | The organization that owns the pull request. Call list_organizations if you do not have it. |