Skip to content

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 , which rewords any of the current branch's own commits via a scripted, non-interactive rebase (GIT_SEQUENCE_EDITOR flips the target to reword; GIT_EDITOR writes the re-stamped message), giving the USER agent a way to act on a commit-message-fidelity failure.

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.