Release 2.1.23 (2026-06-09)¶
Bug fixes¶
- push with --force-with-lease to tolerate rebased branch (#1557) (#1562) Submitting a PR routinely follows a rebase onto the current base branch, which leaves a previously-pushed remote branch diverged and a plain push rejected non-fast-forward. Factor a _push_branch helper that pushes with --force-with-lease (safe overwrite — refuses if the remote moved since our last fetch; never bare --force) and raises a clear, actionable SystemExit instead of a raw traceback on refusal. Both push sites use it.
Features¶
- let report-fixes revise PR metadata mid-workflow (#1565) The oracle recorded PR metadata once via report-ready, so a pr-description-fidelity audit fail was unactionable: report-fixes took only --note and could not touch the summary/notes/title, and its no-empty-round guard rejected a description-only fix because no new commit was pushed.
report-fixes now accepts optional --title/--summary/--notes, which overwrite the corresponding pr_metadata fields. The empty-round guard now accepts a new HEAD OR a metadata revision, and rejects only a genuinely empty round (no new commit and no revision). A metadata-only round still bumps the round, sets status->reviewing and owner->audit so the revised description is re-reviewed.
Unblocks the dual-agent audit test kit (#1563), where pr-description-fidelity needs a normal fail -> fix -> pass round.
- add guarded vrg-reword to fix a branch-local commit message (#1567)
- refactor(commit): extract shared commit-message builder into lib
Move the conventional-subject/body/co-author construction and the auto-close body guard out of vrg-commit into lib/commit_message.py so vrg-reword can re-stamp messages through the identical standards path. vrg-commit's output is byte-for-byte unchanged. Ref #1566
- feat(commit): add guarded vrg-reword for branch-local commit messages
Add vrg-reword
The relaxation is bounded: it refuses commits reachable from the base branch (no rewriting shared history) and protected branches; refuses a target whose author differs from the current identity unless --allow-foreign-author; requires a clean tree; and pushes the rewrite with --force-with-lease (the #1557 pattern) only when the branch already has a remote. Rewording mid-chain re-applies later commits, changing their committer (author preserved) — the tool warns before doing so.