From eb3f0bd09b56c8489a4d5690938482f6600b15fb Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 26 Aug 2026 12:57:15 -0500 Subject: [PATCH] docs(ci): say what the nightly step actually buys today MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The step's comment claimed nightly was not optional. CI's own first green run falsified that: 1.100.0-nightly accepts -Z checksum-freshness and resolves freshness by mtime regardless, so the suite's probe reports it and skips the scenario either way. The step stays — twenty seconds, and the coverage returns by itself the day upstream restores the behaviour — but the comment now says that rather than the opposite. The open question about what upstream actually did is daniel/gitdan#62. --- .gitea/workflows/ci.yaml | 17 ++++++++++------- README.md | 8 ++++---- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 4bb9ea8..a0a70c4 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -69,13 +69,16 @@ jobs: # Nightly first, stable second, so stable ends up the default and # nightly is only reachable through an explicit `+nightly`. # - # Nightly is not optional here. `hardlink-clone-selftest.sh` gates its - # two strongest assertions on `-Z checksum-freshness` — the mode where - # Cargo's dep-info file carries per-source checksums and is rewritten in - # place, which is the mutation that turns a hardlink clone into SILENT - # stale-artifact reuse rather than a slow build. Without a nightly the - # suite still runs, and skips exactly the hazard this whole scheme exists - # to close. + # `hardlink-clone-selftest.sh`'s last scenario needs a Cargo that + # resolves freshness by CONTENT — the mode where the dep-info file + # carries per-source checksums, which is the mutation that turns a + # hardlink clone into silent stale-artifact reuse rather than a slow + # build. As of 1.100.0-nightly (2026-08-25) no nightly provides it: + # `-Z checksum-freshness` is still accepted and freshness is still + # resolved by mtime, so the suite's probe reports that by name and skips + # the scenario. This step therefore buys nothing today and is kept + # anyway — it costs about twenty seconds, and the day upstream restores + # the behaviour the coverage comes back with no edit here. See daniel/gitdan#62. - name: Install Rust nightly uses: dtolnay/rust-toolchain@nightly - name: Install Rust toolchain diff --git a/README.md b/README.md index 96fd1b1..039802f 100644 --- a/README.md +++ b/README.md @@ -544,10 +544,10 @@ bash scripts/selftest.sh --fast # fixture-only suites, no compiler Both run in CI — `.gitea/workflows/ci.yaml`, one job, on pushes to `main` and on PRs that were non-draft when the run was created. It installs shellcheck -and both a stable and a nightly Rust toolchain (nightly for -`-Z checksum-freshness`, without which `hardlink-clone-selftest.sh` skips the -scenario that covers the silent-stale-reuse hazard) and references no -credentials; the scratch +and both a stable and a nightly Rust toolchain (nightly so +`hardlink-clone-selftest.sh` can run its content-freshness scenario — which no +nightly currently enables, so it is skipped and the step is kept only against +the day upstream restores it) and references no credentials; the scratch workspaces the compiler-backed suites build use path dependencies only, so nothing reaches crates.io. It runs the full suite rather than `--fast`, because the two compiler-backed suites are the ones that check this scheme