Release 2.1.103 (2026-07-02)¶
Bug fixes¶
- refuse meta-only ~/.lima sidecar dirs that poison limactl (#2097) (#2100) write_instance_meta silently mkdir'd a metadata-only dir under ~/.lima when the instance dir was absent. A dir there without a lima.yaml makes limactl fatally abort on every command, bricking vrg-vm for all instances. Two full-pipeline TestCreateDedicated tests mock create_vm but not write_instance_meta and do not isolate HOME, so on a short-home host they wrote such dirs into the developer's real ~/.lima (regression from #1837, which added the sidecar write without updating these tests).
Chores¶
- relicense to MIT (#2099)
- chore(license): relicense to MIT
Relicense vergil-tooling from GPL-3.0 to the MIT License (org-wide relicensing sweep). Swaps LICENSE and updates the repo's own license metadata; dependency license allowlists untouched. Ref vergil-project/.github#77.
- chore(license): correct copyright holder
Set the MIT copyright holder to Phillip Moore w.phillip.moore@gmail.com (personal copyright until Logical Minds Foundry is a legal entity), replacing the placeholder org name. Ref vergil-project/.github#77.
Features¶
- reuse one IAP/SSH connection via ControlMaster/ControlPersist (#2098)
- feat(off-platform): reuse one IAP/SSH connection via ControlMaster/ControlPersist
Off-platform vrg-vm opened a fresh gcloud/ssh connection (IAP tunnel + handshake + auth) for every guest command — ~18-20 back-to-back per rebuild. That burst is the trigger behind the IAP 4003 blip (#1992 retries the residual) and leaves ~25 half-open sessions lingering until sshd reaps them.
Inject SSH multiplexing (ControlMaster=auto, ControlPath=
Add close() to the Transport protocol (no-op for Lima); IapTransport/SshTransport tear the master down with a best-effort ssh -O exit plus socket unlink, wired into the cloud lifecycle finally so no master survives a crashed run (ControlPersist is the backstop). VERGIL_VM_DISABLE_SSH_MUX is a kill-switch for the un-live-validated path.
Azure SshTransport is supported and unit-tested but, like the rest of the Azure fallback, is not live-validated. GCP real-box validation (one tunnel not ~18; clean socket teardown on success and on a killed run) is a human/cloud smoke test before merge.
- refactor(off-platform): use Path.cwd() for the worktree discriminator; full mux coverage
Satisfy ruff PTH109/E501 by routing the cwd discriminator through a _cwd() helper (str(Path.cwd())) instead of os.getcwd(). Isolate the control dir in tests via HOME so the real _control_dir() is exercised, and cover SshTransport's kill-switch teardown branch — vm_transport back to 100%.