Skip to content

feat(review-loop): add ask-first soft stops between full-CLEAN and budget exhaustion - #225

Merged
spxrogers merged 1 commit into
mainfrom
claude/review-loop-soft-stops
Aug 1, 2026
Merged

feat(review-loop): add ask-first soft stops between full-CLEAN and budget exhaustion#225
spxrogers merged 1 commit into
mainfrom
claude/review-loop-soft-stops

Conversation

@spxrogers

Copy link
Copy Markdown
Owner

Summary

  • The review-loop skill previously only stopped on unanimous CLEAN — ship it across all four reviewer lenses, or on exhausting the round budget (default 5) — nothing in between was ever a reason to pause and check in.
  • Running the loop on a small PR in this same repo (feat(cli): fold converged into clean in status UI, add status --legend #222, a status --legend/converged-fold change) burned the full 5-round budget: round 1 earned its keep (all four lenses independently caught a real flag-validation bug), but every round after found progressively smaller things while the loop kept auto-continuing, since neither hard-stop condition ever fired.
  • Adds two ask-first soft stops to Step 5 (.agentsync/skills/review-loop/SKILL.md, the canonical source — .claude//.agents/ are its rendered copies):
    • A NIT-only round (no BLOCKER/ISSUE from any lens) surfaces "stop here, or one more round?" instead of continuing unasked.
    • A declining-severity trend — worst severity has strictly dropped for two rounds straight, and neither other stop has fired — prompts the user once. Deliberately capped at one ask per run so the check-in doesn't become a slower version of the problem it's meant to fix.
    • Both weigh the user's stated mandate ("fix everything" may still want the full budget even off a NIT-only round) and, when no mandate was ever given, double as the moment to get one.
  • Added a "Lessons from the field" entry citing the feat(cli): fold converged into clean in status UI, add status --legend #222 run by name/shape, matching the doc's existing convention of grounding rules in concrete incidents, and a one-clause update to the frontmatter description so the soft stops surface wherever the skill's summary is shown.

Type of change

  • Bug fix
  • New feature / enhancement
  • Refactor (no behavior change)
  • Docs
  • Tests / CI / tooling

Test plan

This is a markdown skill-definition change with no Go code touched, so the usual Go test/lint gates don't apply here.

  • Re-rendered .claude/skills/review-loop/SKILL.md and .agents/skills/review-loop/SKILL.md from the canonical source via agentsync apply --scope project (built from this repo) and diffed all three: only YAML frontmatter re-wrapping differs between the canonical file and its two rendered copies; the body content is byte-identical.
  • just test-release is green — N/A, no Go code changed
  • just lint is clean — N/A, no Go code changed

Checklist

  • Conventional commit messages with a scope (feat(review-loop): …).
  • Tests added/updated for the behavior changed — N/A, this is a prose skill definition, not testable code.
  • N/A — doesn't touch internal/secrets, internal/capture, or source.Write*.
  • Docs updated: this PR is the doc update (the skill's canonical source + its rendered copies, kept in sync via agentsync apply --scope project).

Generated by Claude Code

…dget exhaustion

The loop previously only stopped on unanimous CLEAN across all four
lenses or on exhausting the round budget (default 5) — nothing in
between was ever a reason to pause. Running the loop on a small
status --legend/converged-fold PR (#222 in this same repo) burned the
full 5-round budget: round 1 earned its keep (a real flag-validation
bug, caught by all four lenses), but every round after found
progressively smaller things while the loop kept auto-continuing
because neither hard-stop condition ever fired.

Adds two soft stops to Step 5, both ask-don't-assume rather than
silent:

- A NIT-only round (no BLOCKER/ISSUE from any lens) surfaces
  "stop here, or one more round?" instead of continuing unasked.
- A worst-severity trend that has strictly declined for two rounds
  straight (and neither other stop has fired) prompts the user once
  — deliberately capped at one ask per run so the check-in doesn't
  become a slower version of the problem it fixes.

Both weigh the user's stated mandate ("fix everything" may still want
the full budget off a NIT-only round) and, when no mandate was given,
double as the moment to get one. Added a "Lessons from the field"
entry citing the #222 run by name/shape, matching the doc's existing
convention of grounding rules in concrete incidents.
@spxrogers
spxrogers merged commit 904b948 into main Aug 1, 2026
7 checks passed
@spxrogers
spxrogers deleted the claude/review-loop-soft-stops branch August 1, 2026 18:38
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.

2 participants