Release 2.1.47 (2026-06-21)¶
Bug fixes¶
- auto-recover a poisoned uv cache instead of bricking the VM (#1725)
- fix(vrg-vm): force --reinstall on the self-heal retry to clear orphaned executables
When an unclean VM stop corrupts the uv cache and tool receipt, the reinstall removes the tool entry but cannot enumerate its entry points, orphaning the vrg-* executables in ~/.local/bin. The self-heal cleared the cache and retried, but the retry reused --reinstall without --force and died with 'Executable already exists', leaving the VM with no working tooling. Escalate the retry to --force --reinstall: only --force replaces existing entry points, so the recovery now completes instead of bricking the VM. Refs #1724.
- fix(vrg-vm): sync the guest before stopping to protect the uv cache
The rebuild pipeline writes the uv cache and tool receipt in install_tooling immediately before the terminal cycle-ssh stop, and restart stops the VM directly. A non-synced shutdown can truncate those just-written files, poisoning the next session's tooling update. Flush the guest page cache with a best-effort sync before limactl stop so the cache and receipt reach disk; a failed sync warns but never blocks the stop. This is the prevention half that reduces how often the self-heal retry is needed. Refs #1724.
- style(vrg-vm): collapse stop-sync warning to a single line for ruff format
ruff format requires the best-effort sync warning string on one line. Refs #1724.