By default actions/cache@v4 only saves the cache when the job completes
successfully. Runs 71 / 74 failed at the Lint / Install Go tools step
before reaching the post-step cache upload, so the Go tool binaries
cache (govulncheck + golangci-lint) was never persisted and every
subsequent run paid the ~3 min "go install @latest" cost again.
Add `save-always: true` to:
- Cache Go tool binaries (ci.yml)
- Cache rustup toolchain (ci.yml)
- Cache Cargo deps and target (ci.yml)
- Cache govulncheck binary (backend-ci.yml)
so the next run benefits from whatever the previous job managed to
install, even if a downstream step later fails.