Refactor Apply
Turns a reviewed plan into edits. Never runs unasked; the plan it consumes was
shown to the user first, by refactor or by the user invoking an analysis
directly.
Input
One plan file: an individual ./tmp/simple-refactor-plan-*.md or
./tmp/deep-refactor-plan-*.md, or the orchestrator's
./tmp/refactor-merged-*.md. All three share the same shape - Critical /
Warning / Info sections, each item with file:line, a fix, and an
Auto-fixable: Yes/No flag.
Process
1. Read the plan and the repo's checks
Parse every item. Then find what "passing" means in this repository - its
lint, typecheck, and test commands from package.json, Makefile, CLAUDE.md
or AGENTS.md. Run them once before touching anything so a pre-existing
failure is not mistaken for one you caused.
2. Auto-fixable first
Apply every Auto-fixable: Yes item, grouped by file. Rules:
- Change only the lines the finding names and what the fix strictly requires. A refactor pass does not widen a PR's scope.
- Never alter behaviour to satisfy a convention; if a fix would, it is not auto-fixable - move it to manual and say why.
- After the group, run the repo's checks. Fix straightforward failures you introduced; revert an item you cannot make pass and report it.
--auto-only stops here with a summary.
3. Manual, one at a time with the user
For each Auto-fixable: No item, in plan priority order - Critical first:
state the finding, the proposed change, and any judgment call it needs; wait
for the user's answer; apply; run the checks. The user may skip any item; a
skipped Critical is recorded, not argued.
4. Report
Applied: X auto-fixable, Y manual (Z skipped by user) Checks: [each command] PASS/FAIL Reverted: [items that could not pass, with reason] Left for follow-up: [skipped or out-of-scope items]
Do not commit. The user (or prepare-pr) owns the commit, and the diff should
be reviewable as its own step.
Rules
- No blanket rewrites; every edit traces to a plan item.
- Behaviour-preserving only. If a change would alter behaviour, it needs the user's explicit yes and a test.
- Pre-existing debt marked "not against this PR" is not applied unless the user asks for it by name.
- Secrets, credentials, and generated files are stop conditions.


