Skip to content

Release 2.1.91 (2026-07-01)

Bug fixes

  • cloud session self-seeds Claude config; idempotent volume linking (#2000) The off-platform cloud session path never seeded Claude config, so create/rebuild was the only delivery and nothing repaired a box that came up unseeded. Diagnosed live: a box rebuilt the prior day had no settings.json/CLAUDE.md and projects/todos were not symlinked onto the volume, so it prompted for every action (no bypassPermissions) and wrote history off the persistent volume.

  • _cloud_session now copies the operator's ~/.claude config and relinks the volume dirs before the process-replacing exec_session, mirroring the Lima session path. Idempotent -> self-heals on the next session.

  • link_cloud_claude_dirs is now merge-safe: an existing real ~/.claude/ directory is merged onto the volume then replaced by a symlink, instead of the old 'ln -sfn' that creates a nested broken symlink over a real dir.

Part of epic vergil-project/.github#69.

  • confirm-main accepts an inline release job (leaf-match) (#2002) The confirm-main hard gate exact-matched the CD release job name against "release / release" (#1853). That name is the reusable-workflow leaf form and holds for every consumer repo, whose cd.yml calls the reusable cd-release workflow. vergil-actions defines that workflow and cannot call itself, so its cd.yml runs an inline job named "cd / release" — which failed the exact match, so a fully-successful release (tag + GitHub Release + boundary/rolling tags) was reported as "Release job not found" and vrg-release aborted at confirm-main.

Identify the release job by its leaf segment (the part after the last ' / ') being exactly "release" instead of the full name. This accepts both "release / release" (consumers) and "cd / release" (vergil-actions) while still rejecting a decoy like "release-notes / build" (leaf "build"), preserving the #1853 guard against loose substring matches. The same predicate now gates the deferred-publish sweep.