Skip to content

chore: converge AI review loop on accepted tradeoffs - #101

Merged
PiVortex merged 1 commit into
mainfrom
chore/review-loop-convergence
Jun 18, 2026
Merged

PiVortex merged 1 commit into
mainfrom
chore/review-loop-convergence

Conversation

@PiVortex

Copy link
Copy Markdown
Collaborator

What & why

PR #95 went ~10 review rounds without "consensus" — not because of open defects (the one real bug was fixed in round 1), but because the loop can't terminate on a deliberate, documented tradeoff. AI reviews are stateless: each round re-derives from scratch and re-flags the same by-design property (the exact-deposit coupling), so "zero findings" is unreachable, and every push (even a 1-line doc tweak) resets the gate. This gives the loop a real stop condition and lets it carry state across rounds.

Changes

  • .github/workflows/claude-review.yml — the reviewer now reads the PR's "Design decisions / Accepted tradeoffs" section + prior maintainer replies and must not re-raise settled decisions. "Found N issues" counts only new, actionable findings; by-design / already-accepted items go under a separate ### Design notes heading, excluded from the count.
  • .claude/commands/resolve-pr-reviews.md — adds a 🟰 Accepted / by-design classification, recorded in the PR's "Design decisions / Accepted tradeoffs" section (fetch-amend-set) so the reviewer prompt and future rounds stop re-litigating it; defines "unresolved" as new actionable findings only; adds a convergence / stop condition (both reviewers on current head + CI green + only LOW/accepted remain → done) with a 3-cycle hard cap.
  • .claude/commands/fix-issue.md — seeds a "Design decisions / Accepted tradeoffs" PR-body section when a change makes a deliberate tradeoff.

The accepted-tradeoffs section is the key lever: it is the shared state the (otherwise stateless) reviewer reads, so a decision made once isn't re-surfaced as a fresh finding every round.

Release impact

No release impact — CI workflow + command docs only, no published package touched.

🤖 Generated with Claude Code

The review loop never terminates on PRs containing a deliberate tradeoff:
stateless reviews re-flag the same by-design property every round, so
"zero findings" is unreachable. Give the loop a real stop condition and
let it carry state across rounds.

- claude-review.yml: read the PR's "Design decisions / Accepted tradeoffs"
  section + prior maintainer replies and do NOT re-raise settled decisions;
  "Found N issues" counts only new actionable findings; by-design/accepted
  items go under a separate "### Design notes" heading, excluded from the count.
- resolve-pr-reviews.md: add a 🟰 Accepted/by-design classification that gets
  recorded in the PR's accepted-tradeoffs section (so the reviewer prompt and
  future rounds stop re-litigating it); define "unresolved" as new actionable
  findings only; add a convergence/stop condition (only LOW/accepted remain →
  done) with a 3-cycle hard cap.
- fix-issue.md: seed a "Design decisions / Accepted tradeoffs" PR-body section
  when a change makes a deliberate tradeoff.
@PiVortex
PiVortex merged commit da021ab into main Jun 18, 2026
7 checks passed
@PiVortex
PiVortex deleted the chore/review-loop-convergence branch June 18, 2026 04:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant