> ## Documentation Index
> Fetch the complete documentation index at: https://qodex.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshooting PR review

> Fix common PR review issues, including skipped reviews, neutral checks, uncertain anchors, and opt-outs.

# Troubleshooting PR review

Use this page when Qodex did not review a PR, a Check Run looks wrong, a finding seems misanchored, or you want to opt out.

Most PR review issues come from one of four places: the repo is not linked, GitHub did not send a review-triggering event, `.qodex.yaml` changed the policy, or the preview deployment could not be checked.

## Why didn't Qodex review my PR?

Check these in order:

1. **Is the repo linked to your project?** Open Settings > Integrations > GitHub > Repos in your project. If the repo is not in the list, link it via [Connect a repo](/pr-review-connect-repo). Qodex skips PRs from repos no project has linked.
2. **Is the PR a draft?** Draft PRs are skipped with a `neutral` Check Run and the reason "PR is a draft; Qodex will review on ready\_for\_review." Mark the PR ready for review and the next push fires a review.
3. **Does `.qodex.yaml` opt out?** When the repo has `pr_review.enabled: false` at the head SHA, the review is skipped with a `neutral` Check Run and the reason "Qodex review opt-out." Set `enabled: true` (or delete the line) to re-enable.
4. **Did the action trigger a review?** Only `opened`, `synchronize`, and `reopened` are actionable. A `labeled` or `assigned` event is acknowledged but does not run a review. To force a review on a non-triggering action, comment `@qodex review` on the PR.
5. **Did the GitHub App install lose access?** If the App was uninstalled or the repo was removed from the install's "Only select repositories" list, Qodex can no longer fetch the PR. Re-install the App or add the repo to the selected list.

## Why is the Check Run stuck on `in_progress`?

The Check Run is posted at the start of the review and updated at the end. If it never updates to `completed`, the review didn't finish cleanly.

Two common causes.

1. **The LLM call timed out and the recovery write to GitHub also failed.** If GitHub itself is degraded, even Qodex's "this review failed" update can fail and the Check Run never updates.
2. **The Qodex server restarted mid-review.** The in-flight review is lost and the Check Run is orphaned.

What to do:

* **Push a new commit or run `@qodex review`.** A new review creates a new Check Run. The orphaned one will not block a merge because branch protection looks at the most recent Check Run with that name.
* **Wait for the head SHA to change.** A `synchronize` event opens a new review on the new head SHA, and the orphaned one becomes irrelevant.

## Why does Qodex post "Anchor uncertain" on a finding?

The anchor check fired. After a finding is pinned to a line, Qodex looks at the actual source text on that line. If it is clearly non-code, such as a comment, blank line, import, brace-only line, or markdown structural marker, the suggestion block is stripped and the `Anchor uncertain` badge is added.

What to do:

* **Look nearby.** The bug is usually within a few lines of the cited anchor. Misanchoring tends to happen when the relevant code sits below a comment block.
* **Treat as advisory.** The description is still useful even when the line is wrong. If the description names a clear bug, the fix is real even when the suggestion was stripped.
* **If the description is also wrong**, the finding is a false positive. Mark it in the Qodex Pull Requests view; slash-command resolution is on the roadmap.

## How do I opt out of review for one PR?

Two options.

1. **Mark the PR a draft.** Click "Convert to draft" in the GitHub PR header. Qodex skips drafts with a `neutral` Check Run. Reverting to "Ready for review" re-enables.
2. **Push a `.qodex.yaml` to the PR's branch with `pr_review.enabled: false`.** The config is fetched from the head SHA, so a per-PR opt-out is a per-PR file change. Useful when the PR is a generated diff (lockfile bump, version bump) that does not need review.

```yaml theme={null}
# PR-branch override
pr_review:
  enabled: false
```

Either choice lands the Check Run as `neutral` with the reason in the title. Neither blocks a merge.

## How do I opt out of review for the whole repo?

Commit a `.qodex.yaml` at the repo root with `pr_review.enabled: false`. The file is fetched from the PR head SHA on every review, so committing to the default branch propagates to every new PR.

```yaml theme={null}
# Repo-wide opt-out
pr_review:
  enabled: false
```

To re-enable, delete the line (or the file) and push.

If you want to keep the reviewer but disable the Check Run gating, leave `enabled: true` and set `block_pr_merge: false` (the default). Findings still post; the Check Run is always `neutral`.

If you want the full nuclear option, uninstall the Qodex GitHub App on the account at `github.com/settings/installations`. The webhook stops; the Check Run stops; no comment is ever posted. See [Disconnect a GitHub account](/pr-review-disconnect) for the project-level partial-revoke.

## Why is the walkthrough comment in two places?

The same PR linked from two Qodex projects gets two walkthroughs by design. See [Multi-project routing](/pr-review-multi-project-routing). If this was not intentional, disconnect the install from the project you did not mean to link.

## Why is the Check Run conclusion `neutral` when I have findings?

This usually means the repo is in advisory mode. The repo's `.qodex.yaml` either has `pr_review.block_pr_merge: false` (the default) or no file at all, which also defaults to false. To gate merges, set `block_pr_merge: true` and add `Qodex review` to branch protection. See [Check Run and merge gating](/pr-review-check-run).

Even in gated mode, only verified findings at or above `block_on_severity` flip to `failure`. A walkthrough with five unverified findings still lands as `success` because nothing is blocking.

## Related

<CardGroup cols={2}>
  <Card title="Limits and caveats" icon="ruler" href="/pr-review-limits-caveats" />

  <Card title=".qodex.yaml reference" icon="file-code" href="/qodex-yaml-reference" />

  <Card title="How a review fires" icon="webhook" href="/pr-review-how-it-fires" />

  <Card title="Slash commands" icon="terminal" href="/pr-review-slash-commands" />
</CardGroup>
