Skip to content

Release 2.1.89 (2026-06-30)

Bug fixes

  • report the real pull error instead of guessing '(offline?)' (#1985) When the base-image pull fails during the staleness probe, resolve_base_digest now surfaces the pull's actual cause (the last non-empty stderr line — denied, unauthorized, manifest unknown, a network error — or a timeout) instead of the static '(offline?)' guess. The misleading text sent a real incident toward a stale-cache / publishing theory when the cause was a stale ghcr.io credential. Behavior is unchanged; only the diagnostic improves. Ref #1981.

  • fail hard on base-pull failure instead of silent stale fallback (#1986) When the base-image pull failed during the staleness probe, resolve_base_digest fell back to the local base's digest and continued with only a soft '(offline?)' warning (added in #1973). In practice this let a host validate against a stale local base for an unknown length of time — the exact ansible-lint failure that motivated #1973 — a silent failure that surfaces later as a confusing wrong result.

A failed base pull is now a hard error by default: resolve_base_digest raises a RuntimeError naming the real pull error (stderr / timeout / exit code) and the stale-cache risk. The local-base degradation is retained as an explicit opt-in via VRG_ALLOW_STALE_BASE (or allow_stale=True), which warns and returns verified=False. The no-local-copy and pull-succeeds paths are unchanged.

The hard-error and no-image messages now report the actual pull failure cause instead of guessing '(offline?)'.

Amends the #1973 staleness design spec with a superseding note.

Chores

  • point plugin marketplace at main (single released channel, #45) (#1983)