pr-fix
The one-shot: gather every review finding already sitting on a PR, fix the valid ones, push once, and stop. No loop, no re-review, nothing posted back to the PR, and — as always — no merging.
- Triggered by:
xiv pr fix [prNumber](aliasprf); with no argument it uses the current branch's open PR — see /commands/pr - Source:
pack/workflows/pr-fix.tsx
Shape
A single agent task, pr:fix. That is the whole graph — no <Loop>, no gates. The prompt
(pack/prompts/pr-fix.mdx) drives three steps in one pass:
- Gather from every comment surface. Formal reviews, inline diff comments, and issue/conversation comments — the last being where reviewers most often post a whole review as one long comment, and the surface most easily missed.
- Classify each finding against the current head. Already-fixed (verify in the code, no
action), actionable (fix properly, with a meaningful test when it concerns behavior), or
non-actionable (no code change; record it in
skippedwith an honest, defensible reason). GitHub's resolved/unresolved thread state is ignored — the code is the judge. - Push once. Run the project's tests/lint, commit,
git push, capture the new head SHA.
When to use it vs. pr refine
pr-fix acts on feedback that is already there — one pass, no CI settling. Use
pr-review-loop (xiv pr refine) when you also want the red-build →
fix → confirm cycle. pr-fix never re-reads the PR after pushing.
Inputs and outputs
Input:
| Field | Meaning |
|---|---|
prNumber | Required integer — the PR whose findings to address. |
Output (addressFindingsSchema):
| Field | Meaning |
|---|---|
addressed[] | Each fixed finding with its commit. |
skipped[] | Each deliberately unfixed finding with the reason (a human will read it). |
headSha | The new head after the single push. |
Model and failure semantics
Runs on the autonomous agent pool — heavy Claude with git/gh permissions and a hard
never-merge system prompt (codex under XIV_ENGINE=codex); see
/concepts/model-tiers. One 30-minute timeout with a 10-minute heartbeat;
no continueOnFail — if the pass fails, the run fails and nothing was half-pushed.