Non-blocking follow-ups from the prebuilt Caddy/CrowdSec toolchain image work (PR #1300). None blocks that PR; grouped here for tracking.
1. Enroll the freshness guard as a required check
verify-toolchain-pin and the Toolchain key / freshness-guard scripts (bats) job are wired to run on every PR but are only load-bearing as merge gates if they are required status checks in branch protection for main (and development). Add them.
2. Pin caddy-geoip2 to a real upstream tag
github.com/zhangjiayin/caddy-geoip2 publishes no semver tags, so CADDY_GEOIP2_VERSION currently carries a Go pseudo-version (v0.0.0-20260623062220-3675c6e7e63d) and Renovate cannot track it. It is in the toolchain content-hash key, so a manual bump is guard-caught — but pin to a real tag once upstream cuts one, and restore the # renovate: datasource=go tracking.
3. Widen the freshness-guard bats matrix
scripts/tests/verify-toolchain-pin.bats asserts five failure-closed modes. Add cases for the two currently-uncovered branches (:$KEY unresolvable in the registry; empty CHARON_TOOLCHAIN_DIGEST) and add tonistiigi/xx + ALPINE_IMAGE per-input sensitivity tests to toolchain-key.bats.
4. Pin the regctl release version
iarekylew00t/regctl-installer@… in .github/workflows/quality-checks.yml installs regctl-release: latest. Pin it to an exact version for reproducibility.
5. Periodic CI coverage of make build-offline
The fork/offline whole-app inline build path (CADDY_BUILDER_SRC=caddy-inline) is only exercised on fork PRs today. Add a scheduled or label-gated CI job that runs make build-offline so same-repo changes can't silently break it. (The inline stage bodies themselves are compiled daily by toolchain-image.yml.)
Refs: PR #1300, docs/plans/current_spec.md, docs/reports/qa_report.md.
Non-blocking follow-ups from the prebuilt Caddy/CrowdSec toolchain image work (PR #1300). None blocks that PR; grouped here for tracking.
1. Enroll the freshness guard as a required check
verify-toolchain-pinand theToolchain key / freshness-guard scripts (bats)job are wired to run on every PR but are only load-bearing as merge gates if they are required status checks in branch protection formain(anddevelopment). Add them.2. Pin
caddy-geoip2to a real upstream taggithub.com/zhangjiayin/caddy-geoip2publishes no semver tags, soCADDY_GEOIP2_VERSIONcurrently carries a Go pseudo-version (v0.0.0-20260623062220-3675c6e7e63d) and Renovate cannot track it. It is in the toolchain content-hash key, so a manual bump is guard-caught — but pin to a real tag once upstream cuts one, and restore the# renovate: datasource=gotracking.3. Widen the freshness-guard bats matrix
scripts/tests/verify-toolchain-pin.batsasserts five failure-closed modes. Add cases for the two currently-uncovered branches (:$KEYunresolvable in the registry; emptyCHARON_TOOLCHAIN_DIGEST) and addtonistiigi/xx+ALPINE_IMAGEper-input sensitivity tests totoolchain-key.bats.4. Pin the
regctlrelease versioniarekylew00t/regctl-installer@…in.github/workflows/quality-checks.ymlinstallsregctl-release: latest. Pin it to an exact version for reproducibility.5. Periodic CI coverage of
make build-offlineThe fork/offline whole-app inline build path (
CADDY_BUILDER_SRC=caddy-inline) is only exercised on fork PRs today. Add a scheduled or label-gated CI job that runsmake build-offlineso same-repo changes can't silently break it. (The inline stage bodies themselves are compiled daily bytoolchain-image.yml.)Refs: PR #1300,
docs/plans/current_spec.md,docs/reports/qa_report.md.