Skip to content

ci: add non-blocking nightly-canary for early toolchain-regression warning#317

Merged
githubrobbi merged 3 commits into
mainfrom
feat/nightly-canary
May 29, 2026
Merged

ci: add non-blocking nightly-canary for early toolchain-regression warning#317
githubrobbi merged 3 commits into
mainfrom
feat/nightly-canary

Conversation

@githubrobbi
Copy link
Copy Markdown
Collaborator

Summary

Implements the "pin the gate, float the canary" idea from the uffs-products OSS sync report (§4). Adds a weekly + on-demand canary that builds & clippies the workspace against the latest floating nightly — deliberately deviating from the pin in rust-toolchain.toml — so an upcoming-nightly regression is caught before a just toolchain-sync pin bump runs into it, not during one.

This is the automation the now-corrected rust-toolchain.toml comment (PR #316) used to track manually.

Design choices

Non-blocking by construction (not by swallowing failures):

  • Trigger is schedule (Mon 02:00 UTC) + workflow_dispatch only — never on the PR path, never added to the main-protection required checks. A red canary cannot block a merge.
  • It does not use continue-on-error. The job fails honestly so the existing ci-failure-notify.yml (which fires only on conclusion == 'failure') catches it and files a tracking issue. Non-blocking comes from not being a required check — the same model tier-2.yml uses.

Linux + Windows matrix (fail-fast: false):

  • Both run so #[cfg(target_os = "…")]-gated code is probed on each platform (the gap §6 of the report flagged).
  • macOS omitted — local dev is macOS, so maintainers exercise the newest nightly there organically.

Flag parity with the PR gate: cargo +nightly clippy --workspace --all-targets --all-features --locked --no-deps -- -D warnings, plus a cargo check. --locked isolates compiler/std regressions from dependency drift.

Notify hook: ci-failure-notify.yml now watches 🐤 Nightly Canary and maps it to label ci-failure-nightly-canary with an early-warning issue body (advisory — main still builds on the pin; the fix is usually a dep bump à la ethnum 1.5.2→1.5.3, not a toolchain downgrade).

Validation

  • Both YAML files parse cleanly.
  • gen-workflow --check (validates pr-fast.yml only — canary is out of scope) passes.
  • gates-drift passes (27 gates, unchanged).
  • New files only; no change to any existing required check.

Note

Independent of PR #316 (the rust-toolchain.toml comment fix). Both came from the same OSS sync report; this one addresses §4, that one §1.

🤖 Generated with Claude Code

…rning

Adds a weekly (Mon 02:00 UTC) + on-demand canary that builds and
clippies the workspace against the LATEST floating nightly on both
Linux and Windows — deliberately deviating from the pinned toolchain in
rust-toolchain.toml. "Pin the gate; float the canary": it surfaces an
upcoming-nightly regression *before* a `just toolchain-sync` pin bump
hits it, rather than during one (the pain that produced the ethnum
1.5.2 E0512 episode).

Design:
- Non-blocking by construction: schedule/workflow_dispatch only, never
  in the main-protection required checks, so a red canary cannot block
  a merge. It does NOT use continue-on-error — the job fails honestly so
  ci-failure-notify.yml (which fires only on conclusion == failure)
  catches it. Same model tier-2 uses.
- Linux + Windows matrix (fail-fast: false) so cfg(target_os)-gated code
  is probed on both; macOS omitted (local dev already exercises newest
  nightly there). Mirrors the PR-path clippy flag stack
  (--workspace --all-targets --all-features --locked --no-deps -D warnings)
  plus cargo check, with --locked so it isolates compiler/std
  regressions from dependency drift.
- Hook into ci-failure-notify.yml: watch "🐤 Nightly Canary" and map it
  to label ci-failure-nightly-canary with an early-warning issue body
  (advisory, not a broken main; fix is usually a dep bump not a
  toolchain downgrade).

Outside gen-workflow's scope (it validates pr-fast.yml only); gates-drift
and workflow-drift both pass unchanged.

Addresses uffs-products OSS sync report §4 ("confirm a nightly canary
exists").

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@githubrobbi githubrobbi enabled auto-merge (squash) May 29, 2026 11:46
githubrobbi and others added 2 commits May 29, 2026 04:46
Close the macOS gap: maintainers' Macs run the *pinned* toolchain, not
the floating nightly, so local dev does not actually exercise tomorrow's
compiler on Darwin — and macOS-gated paths (e.g. the ~/Library/Logs/uffs
log-dir branch) would otherwise escape the probe. Add a macos-14
(Apple Silicon) leg running the same cargo check + strict clippy as the
Linux/Windows legs. The Linux-only disk-cleanup step is already gated by
`if: matrix.os == 'linux'`, so macOS skips it.

Now all three target OSes get an early-warning floating-nightly probe,
matching the §6 "lint every platform" principle symmetrically.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@githubrobbi githubrobbi merged commit e41148a into main May 29, 2026
25 checks passed
@githubrobbi githubrobbi deleted the feat/nightly-canary branch May 29, 2026 12:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant