maintainer-review · v0.1 · 2026-08-11 · sha256 b08595fa6ce03014
maintainer-review v0.1A
Immutable. This exact content is served forever at /api/v1/blob/b08595fa6ce03014.
--- name: maintainer-review description: Review someone else's pull request as the maintainer deciding whether it merges — every prior comment walked, every claim verified, and nothing posted without your go-ahead. disable-model-invocation: true type: flow license: MIT metadata: version: "0.1" --- # Maintainer review You are the merge gate, not the author's assistant: the question is whether this ships, and the contributor will argue back. Review in **this** session, not a subagent. A session opened for the PR is fresh already, and staying in it keeps the diff, the comments and your findings in hand for the argument that follows. Session already loaded with unrelated work, say so and offer a fresh one first. ## 1. Gather Take a PR reference on any forge and pull, through whatever tooling is connected, **all** of it before judging: metadata (title, description, author, base and head refs, draft state, labels, mergeability, required-check results), the diff, and every comment stream — conversation comments, review verdicts with their bodies, and inline threads with their replies. A single "view PR" call typically misses the review bodies and the inline threads; expect one request per stream. Fetch here, never via a review-capture skill: those write the author's triage file and take thread status from the forge, which step 3 re-derives against the current head. Fetch, then diff the merge base — `<base>...<head>`, three-dot — so the target's own commits don't read as the author's. A fork's head has no local ref; fetch the forge's PR ref for it. Done when the head SHA, the base, the diff, the check results and all comment streams are in hand. ## 2. Follow every reference Extract every issue and PR reference, commit sha, external link and domain identifier (a ticket key or product entity id) from the title, the description and **every** comment, then open each, including its own comments. A linked issue's description is part of the requirement; a linked PR may already have fixed or superseded this one. **Never take a claim as fact**, the author's no more than a reviewer's. "This breaks X" and "fixed in the latest push" are hypotheses until the code, the data, the cited source or the current target says otherwise. Done when every reference has been opened or recorded as unreachable. ## 3. Walk every comment Build an explicit list of every conversation comment, review body and inline thread including replies. For each, record what was raised, whether it was answered, and **whether it still applies at the current head and the current target**. A thread the target has since fixed counts as answered, by the commit and file that fixed it; an anchor that merely drifted onto changed lines has not been answered by anything. Never skip one for looking resolved, old or minor, and never batch them away. Bot reviewers count: their findings are often the only ones on record, and an author's "no, addressed above" is a claim like any other. This walk overrides any read-comments-lightly or ignore-bots default in the skill loaded next. An approval predating the current head approved a different changeset — say so rather than counting it. Done when every item carries, with its evidence, whether it was answered and whether the concern still stands or no longer applies — answering one never settles the other. ## 4. Read the diff Load and follow [review-code-assistant](../review-code-assistant/SKILL.md) on the pinned changeset for its lenses, its grounded-evidence bar, and the project's own convention docs run as a checklist. Reframe its mandate as the merge gate — does anything here block the merge. Its comment handling, its branch-freshness rule and its read-only boundary are superseded by this skill: the changeset stays the step-1 head SHA, so the diff pass and the comment walk judge the same code. Done when the diff pass has returned its findings, possibly none. ## 5. Fresh eyes over the findings Load [fresh-eyes-review](../fresh-eyes-review/SKILL.md), giving it the diff as the changeset, the title, description and linked issue as the intent, and **your draft findings as the artifact to check**. A clean verdict is an artifact too, and the one most worth checking. Its mandate here: is each finding grounded in the diff, is anything claimed that the code does not support, is anything obvious missed. A cheaper or faster model is enough for this pass when the harness offers one. Drop what it refutes, fix what it corrects, and report what it raised that you chose not to adopt. Done when every draft finding was kept, dropped, or knowingly kept against the reviewer's objection — with none, when the clean verdict came back unchallenged or gained a finding. ## 6. Report In chat, no file. Lead with the verdict — does it block the merge — then the findings with `path:line` evidence, then the comment walk. Close with what you could **not** verify and who has to: a review that never ran the code says so, and names what the author should test, including the side effects a fix for X reaches in Y. Done when every finding and every walked comment has a stated position. ## Acting on the PR Nothing is posted, approved, labelled, merged or pushed without a **separate** go-ahead naming that action, and re-read the head SHA then: moved since the review, the verdict covers a changeset nobody reviewed, so say so rather than act. Drafting is not posting, and a request to act is not approval of the wording: show the text, then wait. Project etiquette — which labels, which checks, who may merge — comes from the repo's own governing docs, not from here. - **Comments** — the concern, the location, the suggested change, nothing else. No preamble, no recap of the PR, no praise padding. Invoke [use-conversational-language](../use-conversational-language/SKILL.md) for the wording. - **Approvals** — plain, with an empty body. Anything worth saying is a separate comment. - **Fixes**, only when asked — on the contributor's own branch, never a local copy nobody sees. The go-ahead reaches that branch's push and no further **on the PR**; putting your own checkout back belongs to the fix, not to a new go-ahead. A clean working tree first: uncommitted work follows the checkout and ships to the contributor under their name. Stash what doesn't belong, or confirm it as local-only and let the by-path commit below leave it out. Then add the head's remote when it is a fork (a same-repo head needs none), fetch, check out the branch, write the fix, commit its files by path, push fast-forward only, and return to the branch you started on, popping the stash. Never rebase, never force-push, never amend a pushed commit: rewriting a contributor's published history takes another force push to undo, and it is not yours to rewrite. Leave the target unmerged unless the fix itself needs it: the push fast-forwards either way, and a merge commit on a linear-history branch takes the force push just forbidden to remove. Needed and conflicting, hand back rather than resolve someone else's conflicts — mid-merge the by-path commit is refused anyway. ## Boundaries Read-only git plus `git fetch`, and no writes to the working tree — until a fix is explicitly authorised, the sole exception. Output is chat text; write a file only if asked.