Skip to content

Release 2.1.33 (2026-06-12)

Features

  • rebuild creates the VM when it doesn't exist instead of aborting (#1631) (#1632) vrg-vm rebuild aborted with 'VM does not exist — run vrg-vm create first' when the target VM was absent, forcing the user to notice the error and re-run a different command. Rebuild is now idempotent: when vm_status is empty it prints a note and delegates to _cmd_create(args).

An absent VM has nothing to destroy, so the create lifecycle — not a destroy-skipped rebuild — is the correct pipeline. _cmd_create re-confirms absence, runs the create stages, and labels the run as a create. rebuild on an existing VM still runs the destroy-first rebuild pipeline.

Replaced test_rebuild_fails_if_not_created with test_rebuild_creates_if_not_created (asserts create_vm runs, delete_vm does not); test_rebuild_destroys_and_creates still covers the existing-VM path. Ref #1631.

  • resumable releases via vrg-release --resume (#1633)
  • docs(release): design for resumable releases via tracking-issue state

Design spec for #1612: vrg-release --resume adopts an open release: X.Y.Z tracking issue and continues from the first incomplete stage. The issue body holds a generated stage checklist (the resume cursor), comments hold the log, and the issue is the lock. Stages tick their box at the end and probe reality where cheap; the issue is created before any other durable artifact so post-creation failures are resumable. Ref #1612.

  • docs(release): apply pushback revisions to resumable-release spec

Five design fixes from the spec pushback review: (1) skip = hydrate ctx from reality, not no-op; (2) close-finalize closes the issue only when no fail-defer stage has a pending error; (3) prepare is sub-step idempotent; (4) version-skew guard gets an actionable off-ramp; (5) issue creation lands after read-only validation, before the first durable artifact (splitting preflight). Ref #1612.

  • docs(release): implementation plan for resumable releases (phase 1)

Phased implementation plan for #1612 with file structure and a 3-phase roadmap. Phase 1 (the checklist module: render/parse/upsert/first_unchecked/tick + version-skew guard) is specified in full bite-sized TDD detail; Phases 2 (idempotency/hydrate) and 3 (resume orchestration/CLI) are roadmapped and get their own plans authored against then-current code. Ref #1612.

  • docs(release): apply alignment fixes to resumable-release spec and plan

Two alignment-review fixes: soften the version-skew guard in the spec to drop a reference to a recovery doc that does not exist, and add an explicit refactor task to the Phase 1 plan (extract the shared names/checked helper used by first_unchecked and tick). The phased plan structure (Phase 1 tasked, Phases 2-3 roadmapped) is accepted as-is. Ref #1612.

  • feat(release): add checklist module skeleton

Markers and ChecklistError for the resumable-release progress block. Ref #1612.

  • feat(release): render checklist block