Expand description
Alternating custody until a PR converges.
Roles are not fixed. Whoever holds the PR may implement, review, fix, or file follow-ups, and then hands custody to the other. An agent never reviews its own most recent edit.
Three failure modes are handled explicitly here, because each one breaks a naive loop:
- The nitpick spiral. Round 6 findings are worse than round 1 findings
and a loop that counts objections cannot tell. Only
blockinggates. - Re-litigation. A refuted point re-raised forever never terminates. Refutations are hashed into a ledger carried across rounds.
- Approval drift. Optimising for “get approved” pressures the author into accepting wrong review comments, so refutation is blessed and the merge gate is blocking-findings-empty, not reviewer-satisfied.
Enums§
- Ending
- How the run ended, which is the only thing about the run a reader needs.
Functions§
- disposition_
comment - One response to a review. Refutations carry their reasoning because that is the whole argument; fixes are a list of titles because the diff says the rest.
- filed_
issue_ number #123from a filed issue URL, falling back to the URL when it does not look like one. Shorter, and GitHub renders it as a link either way. The issue number a filed follow-up URL points at, when it is one. Local notes and anything unparseable yield nothing.- issue_
report - A finding written as a bug report, when it carries the parts of one.
- outcome_
comment - post_
outcome - Post the one comment a run leaves behind, if it has anything to say.
- pr_body
- The pull request body.
- resume_
pr - Pick up an existing PR and continue the loop.
- review_
comment - One review, as a reviewer would write it if they were in a hurry: a count line, a sentence, and one bullet per finding. Only blocking findings carry their detail, because only those are something the author has to act on now.
- run_
issue - skip_
comment - What is posted on an issue both agents declined. What is posted on an issue both reviewers declined.