Release 2.1.179 (2026-08-07)¶
Bug fixes¶
- discard ref_exists subprocess streams so rev-parse's SHA doesn't leak to stdout (#2664) git.ref_exists ran 'git rev-parse --verify --quiet ' without capturing stdout. On success rev-parse --verify prints the resolved SHA to stdout (--quiet suppresses only the failure diagnostic), so the SHA leaked to the terminal. It surfaced as a stray 40-char hash printed above the vrg-worktree-status table once the new detached/rebase path (#2634) began probing refs with ref_exists during status gathering.
Redirect the subprocess's stdout and stderr to DEVNULL; only the return code is consulted. Verified against real git: ref_exists no longer emits the SHA.
-
thread one work-unit identifier across branch, dir, and summary (#2665) A single unit of work carried three divergent identifier strings: the worktree directory, the git branch, and the finalize/submit batch summary label. Two coupled root causes fixed:
-
Enforcement timing. The 'branch name must include the issue number' rule fired only at vrg-commit, never at branch creation. vrg-git now enforces the
/ - form when an issue-family branch is created (worktree add -b, checkout -b, switch -c), and worktree add additionally requires the directory to be the matching issue- - so the dir and branch stay in lockstep from the start. -
Lossy display. The submit batch summary labelled each item by the worktree directory name (wt.path.name), which could be a bare slug hiding the issue number (e.g. 'Merged: authz-apply-tag'). It now labels by the full branch name, which is unambiguous and round-trippable back to the issue.
The shared format lives in the new lib/branch_names.py so the creation-time guard and the commit-time guard read from one source and cannot drift.
CI Evidence: All gates passed — full audit bundle available. Download →