restore-keys were checked with exact object existence, so prefix
fallbacks (e.g. `nx-` matching `nx-<sha>`) never hit on GCS — they
only worked via the GitHub cache fallback, which is empty when saves
go to GCS. Rolling caches keyed on unique values (sha/run) were
therefore never restored.
Primary key stays exact-match to keep `cache-hit` semantics. Restore
keys now list objects by prefix and pick the newest, mirroring the
upstream actions/cache contract.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PkmyS2WfCHHdaQQRpfqvNi