Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changelogs/NEXT.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,6 @@

## PR review loop
- **[issue-134] Review fixes can no longer be left behind when a PR is opened or merged** — if a reviewer's fixes are committed but never pushed, the review loop now pushes them itself, `/do:pr` pushes anything still outstanding before opening the PR, and it refuses to merge while your branch is ahead of the remote, naming the commits that would have been dropped. Previously the fixes stayed on your machine while every reviewer reported clean and CI passed against the older pushed code.

## Docs
- **[issue-135] `--issues` no longer reads like it stops the run** — `/do:simplify`'s flag list and `/do:config`'s issue-mode default now say outright that `--issues` selects where findings are *recorded* and does not suppress remediation, and point at `--scan-only --issues` for the audit-and-file run people actually reach for. Previously the name suggested a run mode, and users were surprised when `/do:simplify --issues` went on to remediate and open PRs.
4 changes: 2 additions & 2 deletions commands/do/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ argument-hint: "[--show] [--project] [--review-with <list>] [--review-models <ag

The store also holds **per-agent default models**: `--review-models codex=o3,claude=claude-opus-4-8` pins which model each reviewer runs on, so future runs can omit the `<agent>[<model>]` bracket. It applies to the model-taking reviewers `codex`, `claude`, `agy`, `grok`, and `ollama` (the GitHub-side `copilot` and `@<login>` take no model). An explicit `<agent>[<model>]` bracket always wins over this saved `review-models` default — whether the bracket was typed on the run or carried by a saved `review-with` default (a bracket in `review-with` is source-agnostic in the resolver) — and a project-scoped `review-models` entry overrides the global one for that agent. Set one agent at a time without disturbing the others; `--review-models codex=` (empty value) clears just that agent's entry.

The same store also holds an **issue-mode default**: `/do:config --issues` makes every command that accepts `--issues` (`/do:next`, `/do:replan`, `/do:better`, `/do:better-swift`, `/do:simplify`, `/do:depfree`, `/do:review`, `/do:rpr`) default to filing/working tracker issues instead of `PLAN.md`. Pass `--no-issues` on a single run to fall back to PLAN.md mode for that run, and `--issues-label <name>` to save the scoping label.
The same store also holds an **issue-mode default**: `/do:config --issues` makes every command that accepts `--issues` (`/do:next`, `/do:replan`, `/do:better`, `/do:better-swift`, `/do:simplify`, `/do:depfree`, `/do:review`, `/do:rpr`) default to filing/working tracker issues instead of `PLAN.md`. It selects a **destination**, not a run mode — a saved `issues=true` does not suppress remediation, so the pipeline commands (`/do:better`, `/do:better-swift`, `/do:simplify`, `/do:depfree`) still remediate and PR as normal, merging on the same `--review-with` gate as ever (pair with `--scan-only` for an audit-and-file run). Pass `--no-issues` on a single run to fall back to PLAN.md mode for that run, and `--issues-label <name>` to save the scoping label.

It also holds a **self-only issue gate for `/do:next`**: `/do:config --self` makes `/do:next --issues` claim only issues filed by the authenticated account (`@me`) and never consider issues opened by anyone else — a security boundary for shared/multi-contributor trackers. Pass `--no-self` on a single run to fall back to claiming any open issue. Only `/do:next` reads this key.

Expand Down Expand Up @@ -48,7 +48,7 @@ At read time, **per-project overrides global, key by key** (see `lib/review-conf
- `--reviewer-applies` → key `reviewer-applies`, value `true`. Its explicit opposite `--no-reviewer-applies` → key `reviewer-applies`, value `false` — store this (rather than `--unset`) when a **project** default needs to override an inherited global `reviewer-applies=true` back off. (`--unset reviewer-applies` removes the key entirely and falls back to the lower-precedence value.) `--reviewer-applies` and `--no-reviewer-applies` are mutually exclusive.
- `--review-stop-on-findings` / `--review-stop-on-clean` → key `review-stop-mode`, value `"on-findings"` / `"on-clean"`. The explicit default `--review-stop-all` → key `review-stop-mode`, value `"all"` — store this when a **project** default needs to override an inherited global stop-mode back to "run every reviewer". These three are mutually exclusive — if more than one is present, abort with `--review-stop-on-findings, --review-stop-on-clean, and --review-stop-all are mutually exclusive`.
- `--review-mode <series|parallel>` → key `review-mode`. Must be one of `series`/`parallel`; else abort with `--review-mode must be one of series, parallel (got: {value}).` Store the string verbatim. Selects how the multi-reviewer loop dispatches reviewers (`series` — one-at-a-time, each sees the prior's fixes, the built-in default; `parallel` — reviews run concurrently then the union is applied once). Read by `/do:pr`, `/do:review`, `/do:better`, `/do:better-swift`, `/do:simplify`, `/do:depfree`, and `/do:release` (`/do:rpr` ignores it).
- `--issues` → key `issues`, value `true`. Its explicit opposite `--no-issues` → key `issues`, value `false` — store this (rather than `--unset`) when a **project** default needs to override an inherited global `issues=true` back to PLAN.md mode. (`--unset issues` removes the key entirely and falls back to the lower-precedence value.) `--issues` and `--no-issues` are mutually exclusive. A saved `issues=true` makes every command that accepts `--issues` (`/do:next`, `/do:replan`, `/do:better`, `/do:better-swift`, `/do:simplify`, `/do:depfree`, `/do:review`, `/do:rpr`) default to issue mode; an explicit `--issues`/`--no-issues` on a run still wins.
- `--issues` → key `issues`, value `true`. Its explicit opposite `--no-issues` → key `issues`, value `false` — store this (rather than `--unset`) when a **project** default needs to override an inherited global `issues=true` back to PLAN.md mode. (`--unset issues` removes the key entirely and falls back to the lower-precedence value.) `--issues` and `--no-issues` are mutually exclusive. A saved `issues=true` makes every command that accepts `--issues` (`/do:next`, `/do:replan`, `/do:better`, `/do:better-swift`, `/do:simplify`, `/do:depfree`, `/do:review`, `/do:rpr`) default to issue mode — which changes only where deferred findings are recorded, without altering remediation behavior; an explicit `--issues`/`--no-issues` on a run still wins.
- `--issues-label <name>` → key `issues-label`. Store the string verbatim — the label that scopes plan-tracking issues (built-in default `plan`). Only meaningful once issue mode is on.
- `--self` → key `self`, value `true`. Its explicit opposite `--no-self` → key `self`, value `false` — store this (rather than `--unset`) when a **project** default needs to override an inherited global `self=true` back to claiming any open issue. (`--unset self` removes the key entirely and falls back to the lower-precedence value.) `--self` and `--no-self` are mutually exclusive. A saved `self=true` makes `/do:next --issues` claim only issues filed by the running account (`@me`) — auto-pick filters out others and an explicit `#<num>` for someone else's issue is refused — as a security boundary; an explicit `--self`/`--no-self` on a run still wins. Only `/do:next` reads this key, and only in issue mode (PLAN.md items have no author).
- `--merge` → key `merge`, value `true`. Its explicit opposite `--no-merge` → key `merge`, value `false` — store this (rather than `--unset`) when a **project** default needs to override an inherited global `merge=true` back to leave-open. (`--unset merge` removes the key entirely and falls back to the lower-precedence value.) `--merge` and `--no-merge` are mutually exclusive. The shorthand `--merge=<method>` sets `merge=true` **and** `merge-method=<method>` in one token (the `<method>` is validated against `squash`/`rebase`/`merge` with the same abort as `--merge-method` below). If both `--merge=<method>` and `--merge-method <method>` are given with **different** methods, abort with `--merge=<method> and --merge-method specify conflicting methods ({first} vs {second})`; identical methods are accepted. A saved `merge=true` makes `/do:pr` auto-merge once reviews and CI are solid; an explicit `--merge`/`--no-merge` on a run still wins. Only `/do:pr` reads this key.
Expand Down
3 changes: 2 additions & 1 deletion commands/do/simplify.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ Argument handling:
- Pass `$ARGUMENTS` through to `do:better` verbatim. It parses every flag itself, including the saved `/do:config` defaults, so there is nothing to extract or re-validate here.
- `--simplify-only` / `--refactor-only` in `$ARGUMENTS` is redundant but harmless — do not error on it.
- `--strict` / `--nuclear` is implied (`SIMPLIFY_ONLY=true` sets `STRICT_MODE=true`); passing it explicitly changes nothing.
- Every other `do:better` flag works as documented: `--scan-only` stops after the narrowed plan, `--interactive` prompts at each gate, `--no-merge` stops after PR creation, `--issues`/`--issues-label` file deferred findings as tracker issues, and the review flags (`--review-with`, `--review-mode`, `--review-iterations`, `--review-stop-on-*`, `--reviewer-applies`) drive the Phase 6 loop.
- Every other `do:better` flag works as documented: `--scan-only` stops after the narrowed plan, `--interactive` prompts at each gate, `--no-merge` stops after PR creation, and the review flags (`--review-with`, `--review-mode`, `--review-iterations`, `--review-stop-on-*`, `--reviewer-applies`) drive the Phase 6 loop.
- `--issues` / `--issues-label <name>` select **where** deferred findings are recorded — tracker issues instead of `PLAN.md` lines. They do **not** change what the run does: `/do:simplify --issues` still remediates in a worktree, opens per-category PRs, and runs CI — and, when `--review-with` supplies a reviewer, runs the review loop and merges. To audit and file the work without touching your code, combine with `--scan-only` — a `--scan-only` run in issue mode remediates nothing, so **every** surviving finding is filed as a labeled issue, and those issues are the run's entire output.

## Notes

Expand Down