Skip to content

chore(ci): weekly renovation 2026-08-23 - #3880

Open
worktrunk-bot wants to merge 5 commits into
mainfrom
chore/weekly-renovation-2026-08-23
Open

chore(ci): weekly renovation 2026-08-23#3880
worktrunk-bot wants to merge 5 commits into
mainfrom
chore/weekly-renovation-2026-08-23

Conversation

@worktrunk-bot

@worktrunk-bot worktrunk-bot commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

Summary

Weekly CI renovation. Rust stable moved to 1.98.0 on 2026-08-20, so MSRV and the development toolchain go to 1.97 (latest stable − 1); one cargo-install pin had drifted. Everything else is already current.

  • MSRV + toolchain: 1.96 → 1.97Cargo.toml, tests/helpers/wt-perf/Cargo.toml, rust-toolchain.toml (1.97.0), plus the flake.lock refresh the channel bump requires.
  • cargo-llvm-cov: 0.8.7 → 0.9.0coverage.yaml. MSRV 1.87, well under the pinned toolchain.

Toolchain compatibility for every other pinned crate against 1.97.0: cargo-affected 0.4.0 (1.94), cargo-insta 1.48.0 (1.66.0), cargo-nextest 0.9.143 (1.91), cargo-llvm-cov 0.9.0 (1.87), cargo-msrv 0.19.3 (1.91.1), lychee 0.24.2 (1.88.0), worktrunk 0.74.0 (1.96), cargo-udeps 0.1.61 (unspecified). All build under 1.97.0.

  • Pinned nightly: nightly-2026-03-01nightly-2026-08-01nightly.yaml ×2. Not drift: the MSRV bump broke these two jobs, see below.

The remaining commits are fallout from the same sweep: cargo-llvm-cov 0.9.0 changes the shape of the --show-missing-lines column tests/CLAUDE.md sends you to during a codecov investigation, and the weekly statusline cache-check has been reporting two duplicates that are artifacts of its own -vv flag.

The MSRV bump broke two nightly jobs; that is fixed here

check-unused-dependencies and minimal-versions each pin their own toolchain, and nightly-2026-03-01 is 1.96.0-nightly — so raising rust-version to 1.97 made cargo refuse the workspace outright, before either job ran its actual check:

error: rustc 1.96.0-nightly is not supported by the following packages:
  worktrunk@0.74.0 requires rustc 1.97

Both are now on nightly-2026-08-01 (1.99.0-nightly), which clears the new MSRV with headroom rather than landing on it. Reproduced locally in both directions: cargo +nightly-2026-03-01 check fails with the error above, cargo +nightly-2026-08-01 check passes. The coupling is easy to miss because neither failure mentions udeps or minimal versions, so the constraint is now stated on both lines and in the weekly MSRV file table.

The flake.lock bump was computed by hand — please let nix-flake confirm it

rust-toolchain.toml moving to 1.97.0 forces a lock refresh: the locked rust-overlay (4a408e1f, 2026-06-02) carries stable manifests only up to 1.96.0, so nix flake check cannot resolve the new channel. rust-overlay is bumped to f60c1b57 (2026-08-23), which has 1.97.0.nix. nixpkgs and crane are left alone — only rust-overlay has to know about the new channel, and a full nix flake update is a wider change than this PR needs.

This session could not run nix flake update: the weekly runner has no Nix and no passwordless sudo, so neither the Determinate installer (which escalates via sudo) nor nix-portable (which fails its build self-test) works here. The lock entry was therefore computed directly from the NAR serialisation, and the method was validated first by recomputing the existing rust-overlay entry from its own revision and getting sha256-7mDa7OBAaf7MU6ZovT9ENfD62kH911SsSazBb4KTDF0= back byte-for-byte — the value already in flake.lock. The same script then produced the new entry.

That is a strong check but not the real one. nightly's nix-flake job runs nix flake check and fires on this PR (the paths filter matches rust-toolchain.toml, Cargo.toml, and flake.lock), so it is the gate that actually proves the lock evaluates. It has now run on this head and passed, so the computed lock resolves the 1.97.0 channel and the flake's checks build under it. Flagging the provenance anyway, since a hand-written lock entry deserves a second look on review.

How the hash was computed

Nix serialises the unpacked flake input as a NAR and reports SHA-256 of that stream in SRI form. The format is length-prefixed strings padded to 8 bytes, with directory entries in bytewise-sorted order; a ~90-line Python script reproduces it from the GitHub tarball with the top-level <repo>-<rev> directory stripped, which is the same tree Nix hashes.

rust-overlay 4a408e1fc99ad517b4cb402fd0de7464f40c05e1 (currently locked)
  computed  sha256-7mDa7OBAaf7MU6ZovT9ENfD62kH911SsSazBb4KTDF0=
  in lock   sha256-7mDa7OBAaf7MU6ZovT9ENfD62kH911SsSazBb4KTDF0=   ✓

rust-overlay f60c1b57ff805a46b5175c76fc981fb4f81efbcc (new)
  computed  sha256-r4LDUF+zmJnkftvCVkCrUhSJazsf6EVJF+V2l4/MYbI=
  lastModified 1787454509 (committer date 2026-08-23T03:08:29Z)

Already up to date

  • cargo-affected 0.4.0, cargo-insta 1.48.0, cargo-nextest 0.9.143, cargo-msrv 0.19.3, cargo-udeps 0.1.61, lychee 0.24.2, worktrunk 0.74.0 (matches the newest crates.io release)
  • Nushell 0.115.0 — all four call sites, and dev/codex.sh
  • Codex Cloud pins in dev/codex.sh: pre-commit 4.6.2, cargo-insta 1.48.0, cargo-nextest 0.9.143, PowerShell 7.6.5; setup-web's own Nushell and PowerShell pins agree
  • Runner images ubuntu-24.04 and windows-2022 (the latter deliberately pinned — Windows-latest workflows will use Windows Server 2025 image in GH actions/runner-images#12677)

Found, not bumped: macos-15 is no longer what macos-latest resolves to

ci.yaml's header comment says ubuntu-24.04, macos-15 are "pinned to current -latest equivalents". That is still true of Ubuntu but no longer of macOS: macos-latest now resolves to macOS 26 arm64, and macos-15 has become the older of the two GA images — which, under the runner-images deprecation policy ("deprecation of the oldest image label begins once the newest OS image label has been released to GA"), is the one that starts aging out next. macos-14 already carries the deprecated badge.

Not bumped here, because it is an OS upgrade rather than a version pin, and this repo drives PTY and shell-integration snapshots on macOS that a new image and Xcode can move. There is also nothing this session can do to check it — the only macOS available to it is the test (macos) job on a PR, and a red macOS matrix would have blocked the MSRV bump alongside it. Flagging rather than guessing at the timing: whether to take macOS 26 now or wait for the deprecation announcement is a call about this repo's snapshot surface. Happy to open it as its own PR if you want the signal.

CI

Green, including nix-flake, msrv, minimal-versions, check-unused-dependencies, all three test legs, and codecov/patch.

Two jobs are red and neither is from this PR: check-docs and link-check both fail in their shared npm ci step with ERESOLVE against typescript@7.0.2. Both fail the same way on main's head (be2c088a), and #3877 is the open fix.

Weekly checks that produced no change

  • LLM model pins — no drift. gpt-5.6-luna is still how OpenAI's models page positions the "fast and affordable … lowest cost in the family" 5.6 variant; gpt-5.3-codex-spark is a Pro-only research preview, not a default. haiku / claude-haiku-4.5 is still the smallest current Anthropic model.
  • Statusline cache-check — clean. command_count was 27, which includes the three calls the -vv diagnostic collector makes after the render, so the render itself is ~24 against a ~29 baseline measured before the recipe used -vv. The two duplicates the report flagged (gh --version, git worktree list --porcelain) are that same collector, not the render. Both the baseline arithmetic and the trap are now written down in the skill.
  • Agent app integration surfaces — nothing that changes what Worktrunk consumes. Claude Code 2.1.239 fixed metadata.pluginRoot resolution, but .claude-plugin/marketplace.json names an explicit ./plugins/worktrunk source rather than a bare name, so it is unaffected; the WorktreeCreate/WorktreeRemove hooks and the statusline stdin schema are unchanged (workspace.git_worktree and workspace.repo exist but predate this window by several hundred releases). Codex, Gemini CLI, and OpenCode shipped only routine releases.
  • README month — already "August 2026".
  • Dependency PRs — none open.
Verification
  • rustup resolves the new channel: cargo 1.97.0 (c980f4866 2026-06-30), rustc 1.97.0 (2d8144b78 2026-07-07), clippy 0.1.97.
  • cargo clippy --all-targets --all-features -- -D warnings passes on 1.97.0 — the check that matters most for a toolchain bump, since it compiles every target and feature under the new rustc and holds the new clippy to zero warnings. Doctests passed too.
  • Unit tests pass on 1.97.0: 979 + 11 + 1, zero failures.
  • Integration tests: 2000 passed, 1 failed — test_copy_ignored_preserves_file_executable_permissions, which expects 0644 and got 0664. That is this sandbox's umask 0002, not the toolchain; the test (linux|macos|windows) matrix is the real gate.
  • cargo run -- hook pre-merge --yes is not a clean local signal on this runner: it ends on pre-commit: exit status: 127 because pre-commit isn't installed in the tend sandbox, unrelated to the bump.
  • cargo msrv verify was not run locally (it rebuilds the graph per candidate); ci.yaml's msrv job covers it.
  • Every version above was read from its upstream source of truth: cargo info / crates.io for the cargo tools, static.rust-lang.org/dist/channel-rust-stable.toml for Rust stable (1.98.0, 2026-08-20), the nushell/nushell and PowerShell/PowerShell release APIs, PyPI for pre-commit, actions/runner-images README for the image labels, and the vendors' own model pages for the LLM pins.
  • rust-overlay at the currently-locked revision was confirmed to stop at 1.96.0.nix, and at the new revision to contain 1.97.0.nix — this is why the lock has to move at all.

Rust stable reached 1.98.0 on 2026-08-20, so MSRV and the development
toolchain move to 1.97 (latest stable - 1). The channel bump forces a
flake.lock refresh: the locked rust-overlay (4a408e1f, 2026-06-02) carries
stable manifests only up to 1.96.0, so nix flake check cannot resolve
1.97.0 without it. Only rust-overlay moves -- nixpkgs and crane do not need
to know about the new channel.

Also bumps cargo-llvm-cov 0.8.7 -> 0.9.0, the one cargo-install pin that
had drifted. Every other pinned crate, the Nushell and PowerShell pins, and
the Codex Cloud tools in dev/codex.sh are already current.
0.9.0 collapses consecutive misses into ranges, so the column the coverage
investigation recipe sends you to no longer lists one line per miss. Say so
where the recipe compares it against a codecov line list.
The statusline cache-check reads a trace that only exists because of -vv,
and the diagnostic collector that writes the bundle runs its own
git --version, git worktree list --porcelain, and gh --version after the
render. Those land in the same trace, so the .cache report flags two
same-context duplicates on an otherwise clean render -- which costs a fresh
investigation every week. Name them, and say where in trace.log to confirm.

@worktrunk-bot worktrunk-bot left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the whole sweep against upstream: stable is 1.98.0 (2026-08-20), so 1.97 is the right MSRV; cargo-llvm-cov 0.9.0 is the only drifted pin and it is the only cargo-llvm-cov pin site in the repo; every other pinned crate matches its newest crates.io release and every rust-version clears 1.97.0. The rust-overlay entry checks out on everything reachable without Nix — f60c1b57 exists, lastModified 1787454509 is its committer date to the second, manifests/stable/1.97.0.nix is present there and 404s at the currently-locked revision. The nix-flake job does fire on this PR (the gate paths filter matches Cargo.toml, rust-toolchain.toml, and flake.lock), so the narHash gets the real check.

Three findings — I've pushed fixes for all three rather than leaving inline suggestions, since this is a bot-authored PR with no human author to apply them.

Two nightly jobs are red because of this PR, and it isn't a flake

nightly.yaml pins its own toolchain twice — minimal-versions and check-unused-dependencies both do rustup override set nightly-2026-03-01, which resolves to 1.96.0-nightly. With rust-version now 1.97, cargo refuses before either check runs:

error: rustc 1.96.0-nightly is not supported by the following packages:
  worktrunk@0.74.0 requires rustc 1.97
  wt-perf@0.1.0 requires rustc 1.97

Both jobs failed with that identical error. This is deterministic and PR-caused: the last two nightly runs on main failed only on link-check, with both of these green. It would also follow the PR onto main — nightly's push trigger lists **/Cargo.toml, so the post-merge run fails the same way.

The pin is stale rather than newly wrong. It was set on 2026-05-07 in #2636 and never moved; the previous MSRV of 1.96 was the last one it could satisfy, so this bump is where it runs out. The reason nothing caught it is that the weekly MSRV task's file table lists only Cargo.toml, tests/helpers/wt-perf/Cargo.toml, and rust-toolchain.toml — a fourth place in the repo pins a toolchain and isn't on the list.

Pushed as 7d1b466: both pins move to nightly-2026-08-01 (1.99.0-nightly), which clears the MSRV with two release cycles of headroom instead of landing exactly on it, plus a comment stating the constraint on each and a row in the skill's MSRV table so the weekly pass owns them from here.

command_count counts the collector's calls, against a baseline that predates them

The new bullet is right that the -vv collector's git worktree list --porcelain, gh --version, and git --version land in the same trace — but the sentence added just below it points at command_count as "the number to read" against the ~29 baseline, and command_count is every subprocess record in the trace, so it includes those same three calls.

The baseline is collector-free. It was measured in #2211 with RUST_LOG=debug … | grep wt-trace | wt-perf cache-check — no -vv, no bundle. #3825 switched the recipe to -vv plus config state logs profile without re-measuring it. So command_count runs about three high against 29, which is the entire width of the ~32 investigate threshold. Nothing was misread this week (27 is under it either way), but a render that genuinely drifted to 30 would read as 33 and draw an investigation, and one at 32 reads as clean at 29.

Pushed: the sentence now says command_count includes the collector's three calls and that the baseline predates them, so a comparison subtracts them first.

.git/wt/logs/trace.log is the path shape this skill warns about

The confirmation step sends you to .git/wt/logs/trace.log, and the recipe above it says "Run from any worktree of this repo." In a linked worktree .git is a gitdir file, so that read fails with ENOTDIR — which is exactly what the Issue Triage section of this same file already tells us not to hand people, with $(git rev-parse --git-common-dir)/wt/logs/ as the form that resolves from anywhere. Pushed the same substitution here.

Not blocking

cargo-llvm-cov 0.9.0 also stops emitting build scripts under Cargo's new build-dir layout. coverage.yaml uses --cobertura, not --show-missing-lines, and build.rs sits outside the src/-only report, so I don't expect movement — but this PR's own code-coverage run is the first one on the new version, so it's the place to notice if the project number shifts.

On the macos-15 note: agreed it's a separate PR, and worth taking before the deprecation lands rather than after, given how much of the snapshot surface is macOS-specific.


After the fix — where CI landed

The nightly run on bc35d51 (which carries 7d1b466) has minimal-versions and check-unused-dependencies both green, so the pin bump is confirmed rather than assumed. nix-flake also passed there — that is the real check on the hand-computed narHash, so the one part of this PR that couldn't be verified without Nix now has been. Required checks, msrv, codecov/patch and codecov/project are all green.

Two reds remain, and neither is this PR's: check-docs and link-check both die in npm ci with the @astrojs/check peer conflict against typescript@7.0.2, before either reaches its actual work. That is already red on this PR's merge base (be2c088a) and is what #3877 fixes. Worth knowing that my push is why they are visible here at all — .github/workflows/nightly.yaml is in ci.yaml's docs paths filter, so touching it flipped check-docs from skipped to running. Merging #3877 first should clear both.

The MSRV bump to 1.97 in this PR fails both nightly jobs that pin their own
toolchain: `rustup override set nightly-2026-03-01` resolves to
1.96.0-nightly, and cargo refuses a workspace whose `rust-version` exceeds the
toolchain, so `minimal-versions` and `check-unused-dependencies` both die with
"rustc 1.96.0-nightly is not supported" before running their checks. It would
follow the merge onto main too -- nightly's push trigger lists `**/Cargo.toml`.

The pin was set in #2636 and never moved; 1.96 was the last MSRV it could
satisfy. Move both to nightly-2026-08-01 (1.99.0-nightly), which clears the
new MSRV with two release cycles of headroom instead of landing on it, and
say so on the line so the constraint isn't rediscovered.

Add the pins to the weekly MSRV file table, which listed only the three
manifests -- the reason nothing caught this before the bump landed.

Also fixes two things in the statusline cache-check the previous commit
touched: `command_count` includes the -vv collector's three calls, against a
baseline measured in #2211 before the recipe used -vv (#3825 switched it
without re-measuring), so it reads ~3 high against a threshold only 3 wide;
and `.git/wt/logs/trace.log` is the gitdir-file path shape this same skill
warns about, since the recipe says to run from any worktree.
The MSRV section assumes the Determinate installer works, but it escalates
via sudo and the weekly runner has none, so this week's bump hit a dead end
with the lock refresh non-optional: nix flake check can't resolve a channel
the locked rust-overlay predates. Write down the fallback that worked --
compute the narHash from the NAR serialisation, and validate the script
against the entry already in the lock before trusting it on a new revision.
@worktrunk-bot

Copy link
Copy Markdown
Collaborator Author

All three review findings were pushed before the review was submitted, so there's nothing outstanding to apply — but none of them had actually been verified by CI at that point, and one of the checks that matters most had never run. It has now.

The nightly-pin fix is confirmed. minimal-versions and check-unused-dependencies — the two jobs that failed on f9292b41 with rustc 1.96.0-nightly is not supported — both pass on bc35d518 with the nightly-2026-08-01 pin.

nix-flake passed, and this run is the first time it actually completed here. It was cancelled on both earlier heads: nightly sets cancel-in-progress for PR events, so each push killed the run mid-job. Reading back through the earlier runs shows nix-flake: cancelled twice, which would leave the hand-computed narHash looking unchecked — it isn't any more. nix flake check resolved the 1.97.0 channel against the hand-written rust-overlay entry, which is the gate the description asked to watch before merging.

check-docs and link-check are red for a cause outside this PR. Both die at the same npm ci step with ERESOLVE: docs/package.json carries typescript@^7.0.2 (from #3870) while @astrojs/check@0.9.10 peers on typescript@^5.0.0 || ^6.0.0. link-check never reaches lychee — it fails in 🕷️ Check and build docs with Install lychee and 🔗 Check links skipped. That file is byte-identical to main on this branch and the PR touches nothing under docs/; main's own ci has been red on check-docs since #3870 merged, including at this PR's merge base be2c088a. #3877 already fixes it, and #3879 is the same root cause.

Also clears the not-blocking note from the review: code-coverage passed on cargo-llvm-cov 0.9.0 and both codecov/patch and codecov/project are green, so the version bump didn't move the project number.

Full check state on bc35d518

Green: test (linux), test (macos), test (windows), msrv, lint, fast-checks, feature-check, changes, gate, code-coverage, codecov/patch, codecov/project, crate-build, nix-flake, minimal-versions, check-unused-dependencies, full-tests on all three platforms, release-target for both musl triples.

Red: check-docs, link-check — both #3870, fix in flight at #3877.

Still running when this was written: feature-powerset, release-target (x86_64-apple-darwin).

Nightly history on this branch, showing why nix-flake had no result until now:

head nix-flake minimal-versions check-unused-dependencies
f9292b41 (pre-fix) cancelled failure failure
7d1b466c (fix) cancelled cancelled cancelled
bc35d518 (current) success success success

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