Summary
CI has been red on main for 6+ days (since the last pushes on 2026-04-26). The failure is isolated to the 1.85 (MSRV floor) matrix job; stable, beta, and wasm32 compilation check all pass. I re-ran the failed job today (2026-06-06) — it failed again, so this is reproducible, not a flake.
| Job |
Result |
| 1.85 |
❌ failure (reproduced on re-run) |
| stable |
✅ |
| beta |
✅ |
| wasm32 compilation check |
✅ |
Run: https://github.com/cachekit-io/cachekit-rs/actions/runs/26684715852
The code is NOT the cause
The 1.85 job runs cargo test --features "cachekitio,redis,encryption,l1,macros". I reproduced the exact command locally on rustc 1.85.1 (same toolchain CI installs) — everything is green:
cargo +1.85 test --features "…" → all suites ok, 0 failed
cargo +1.85 test --no-run --features "…" → compiles clean
cargo +1.85 test --doc --features "…" → doctests pass
The committed Cargo.lock compiles fine on 1.85 — this is not a transitive-dependency MSRV bump (my first hypothesis, now ruled out).
The real blocker: the runner isn't persisting logs
I cannot read why CI failed because the cachekit-lean (self-hosted ARC) runner is not persisting job logs:
GET /actions/jobs/{id}/logs → BlobNotFound (immediately after completion, both the 6-day-old run and today's fresh re-run)
gh run view --json jobs → the 1.85 job's steps[] / failed-steps array is empty
So the GitHub UI/API has no step breakdown and no log blob for this job. That's an observability defect on the ARC runners independent of the test failure, and it's what makes this undiagnosable remotely.
Impact
The Release workflow installs stable only, so 0.3.0 published despite red CI — the breakage is fully masked. A real regression that only trips the MSRV floor would ship unnoticed.
Hypothesis (unverified — needs runner-side logs)
Code passes locally on 1.85 + only the 1.85 job fails + no step logs ⇒ the failure is environmental on the runner pod, before/around test execution rather than in the tests. Most likely the toolchain-install step (rustup toolchain install 1.85 --profile minimal --component rustfmt,clippy) or a pod-level resource/network issue. Note the 1.85 job installs rustfmt+clippy it never uses (both run steps are gated if: matrix.rust != '1.85').
Recommended next steps (ranked)
- Make CI logs survive — the ARC blob-upload is broken; until it's fixed nothing here is diagnosable. Quick mitigation:
tee the test output to a file and actions/upload-artifact it, so failures are inspectable even when blob upload fails.
- Re-run with logs captured, read the actual error.
- Cheap candidate fix to test in the same pass: drop
--component rustfmt,clippy from the 1.85 toolchain install (it's unused on that job) — removes a download/failure surface and speeds the job.
- Consider gating
Release/publish on CI green (or at least alerting on red main), so a red MSRV job can't ship silently again.
Filed from the 2026-06-06 fleet review. Local repro: cargo 1.85.1 (d73d2caf9) / rustc 1.85.1 (4eb161250).
Summary
CIhas been red onmainfor 6+ days (since the last pushes on 2026-04-26). The failure is isolated to the1.85(MSRV floor) matrix job;stable,beta, andwasm32 compilation checkall pass. I re-ran the failed job today (2026-06-06) — it failed again, so this is reproducible, not a flake.Run: https://github.com/cachekit-io/cachekit-rs/actions/runs/26684715852
The code is NOT the cause
The 1.85 job runs
cargo test --features "cachekitio,redis,encryption,l1,macros". I reproduced the exact command locally onrustc 1.85.1(same toolchain CI installs) — everything is green:cargo +1.85 test --features "…"→ all suitesok, 0 failedcargo +1.85 test --no-run --features "…"→ compiles cleancargo +1.85 test --doc --features "…"→ doctests passThe committed
Cargo.lockcompiles fine on 1.85 — this is not a transitive-dependency MSRV bump (my first hypothesis, now ruled out).The real blocker: the runner isn't persisting logs
I cannot read why CI failed because the
cachekit-lean(self-hosted ARC) runner is not persisting job logs:GET /actions/jobs/{id}/logs→BlobNotFound(immediately after completion, both the 6-day-old run and today's fresh re-run)gh run view --json jobs→ the 1.85 job'ssteps[]/ failed-steps array is emptySo the GitHub UI/API has no step breakdown and no log blob for this job. That's an observability defect on the ARC runners independent of the test failure, and it's what makes this undiagnosable remotely.
Impact
The
Releaseworkflow installsstableonly, so 0.3.0 published despite red CI — the breakage is fully masked. A real regression that only trips the MSRV floor would ship unnoticed.Hypothesis (unverified — needs runner-side logs)
Code passes locally on 1.85 + only the 1.85 job fails + no step logs ⇒ the failure is environmental on the runner pod, before/around test execution rather than in the tests. Most likely the toolchain-install step (
rustup toolchain install 1.85 --profile minimal --component rustfmt,clippy) or a pod-level resource/network issue. Note the 1.85 job installsrustfmt+clippyit never uses (both run steps are gatedif: matrix.rust != '1.85').Recommended next steps (ranked)
teethe test output to a file andactions/upload-artifactit, so failures are inspectable even when blob upload fails.--component rustfmt,clippyfrom the 1.85 toolchain install (it's unused on that job) — removes a download/failure surface and speeds the job.Release/publish on CI green (or at least alerting on redmain), so a red MSRV job can't ship silently again.Filed from the 2026-06-06 fleet review. Local repro:
cargo 1.85.1 (d73d2caf9)/rustc 1.85.1 (4eb161250).