Release 2.1.69 (2026-06-25)¶
Bug fixes¶
- correct off-platform list display — instance name and column widths (#1873)
- fix(vrg-vm): address GCP boxes by instance name, not state-key slug
vrg-vm list rendered a healthy off-platform GCP VM as 'unknown (no gcp creds)' with a blank external IP, even with valid credentials and the VM RUNNING. The label was a misdiagnosis: OffPlatformVm.name holds the readable state-key slug, but three call sites used it as the gcloud instance name. GCP names the instance vrg-
Add an OffPlatformVm.cloud_name accessor (cloud_resource_name(name)) and route every cloud/IAP call through it: the list-status describe, the update --all IAP transport, and the session-listing IAP transport. All three previously addressed the box by the slug and silently failed.
Also stop conflating failure modes in _cloud_instance_info: a 'not found' describe now degrades to 'MISSING' (real drift) while auth/no-gcloud failures keep the '' placeholder, so a vanished VM is never reported as a credential problem.
- retry net/http transport failures (TLS handshake, DNS, EOF) (#1874) The retry layer already retried transient GitHub failures, but _RETRYABLE_PATTERNS only matched 'timed out' and missed the net/http transport errors gh emits when a request never reaches GitHub's application layer. The most common is 'net/http: TLS handshake timeout' (one-word 'timeout'), which slipped past the substring match and surfaced as a hard GitHubAPIError in release steps like close-finalize and consumer-refresh.
Broaden the pattern list to cover the full family of Go net/http transients: general 'timeout', 'tls handshake', 'connection refused', DNS 'no such host' and 'server misbehaving', and 'eof'. These failures occur before any server-side mutation, so retrying is safe for writes as well as reads (same reasoning already documented for HTTP 401). Update the retry.py and github.py docstrings and add is_retryable cases for each new pattern plus non-retryable guards (404/422/403/validation) so the broader matching does not over-match common gh errors.
Documentation¶
- cloud↔Mac PR handoff via GitHub relay design (#1865)
- docs(pr-workflow): design cloud↔Mac PR handoff via GitHub relay
Brainstormed design for unblocking the off-platform (cloud x86) PR handoff without a shared filesystem. The shared FS carried both the branch and the handoff metadata; the branch already rides GitHub, so only the metadata needs relaying. Adds a near-term cloud/Mac boundary (cloud = triage/runtime, dev on Mac) plus a GitHubTransport that relays .vergil/pr-workflow.json via a reserved git ref, with branch-sync-on-handoff in the oracle. Supersedes the parked NFS approach (#1796) for the live human↔agent need at zero recurring cost. Ref #1858
- docs(pr-workflow): fold paad:pushback resolutions into cloud handoff design
Six review findings resolved in the spec: (1) gating channel feasibility spike with an issue-comment fallback; (2) dirty-tree refusal on both handoff sides; (3) guarantee narrowed to the one-shot human handoff, polling audit loop deferred; (4) relay activation via explicit [pr-workflow] relay key only, no backend auto-detect; (5) drift-guard ordering pinned to run on acquire before rebase; (6) split into two implementation plans (A docs now, B gated on the spike). Ref #1858
- docs(pr-workflow): mark cloud handoff design implementation as parked
The approved design lands as documentation; implementing Deliverables A and B is deferred. #1858 stays open to track the parked implementation. Ref #1858
- document cloud/Mac PR-development boundary (Deliverable A) (#1871)