After each iteration's _commit_iteration, record the new HEAD SHA and use
it as the diff anchor for the next iteration. Previously capture_diff
always diffed against the initial base commit, causing every iteration to
return the same full cumulative diff — reviewers couldn't see what changed
between iterations, leading to repeated feedback and stuck FAIL loops.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Claude in agentic mode (interactive, no -p flag) commits its own changes,
advancing HEAD. This made `git diff --cached HEAD` return empty, triggering
false EMPTY_DIFF errors every time. Now capture_diff diffs against the
base commit SHA recorded at worktree creation, so changes are captured
regardless of whether the agent committed them.
Also adds UX_IMPROVEMENT_PLAN.md for guided message improvements.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add -p flag to _CLAUDE_REVIEW_ARGS so reviewer uses print mode (stdin→stdout)
instead of interactive mode which conflicts with plan permission mode
- Copy input files (plan, checklist) into worktree .cross-eval-inputs/ so
agents in plan mode can access them without escaping the sandbox
- Simplify _snapshot_repo_state to use only git diff HEAD + untracked hashes,
eliminating false positives from staging state changes (git diff --cached)
and git status index drift during long-running pipelines
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>