Skip to content

build: bump nightly to 2026-07-06 and migrate chunks_exact to as_chunks#537

Merged
githubrobbi merged 5 commits into
mainfrom
refactor/as-chunks-migration
Jul 7, 2026
Merged

build: bump nightly to 2026-07-06 and migrate chunks_exact to as_chunks#537
githubrobbi merged 5 commits into
mainfrom
refactor/as-chunks-migration

Conversation

@githubrobbi

Copy link
Copy Markdown
Collaborator

Summary

Five commits, all validated on the new pinned nightly (host + windows-msvc clippy -D warnings, rustdoc, doctests, tests — the full pre-push gate is green):

  • refactor(uffs-mft) — migrate all 35 chunks_exact(2) sites to as_chunks::<2>(); net −7 lint suppressions (each &[u8] chunk becomes &[u8; 2], dropping fallible try_into().ok() and [c[0], c[1]] reindexing). Handles the chunks_exact-lint half of 🐤 Nightly Canary: upcoming-toolchain regression — f6aab89 #492.
  • build(deps) — bump rustc-hash 2.1.3 + crossbeam-channel 0.5.16, each with a proper cargo-vet delta audit (Vet-Reviewed-Diff: trailers; cargo vet + discipline gate pass).
  • docs(crates) — fix uffs-time/uffs-text README install snippet "0.5""0.6".
  • ci(release) — publish crates.io on v* release tags via OIDC, so the ship pipeline's release tag carries the uffs-time/uffs-text publish (no long-lived token; the release-plz.yml + crates.io-publish trusted-publisher registration is unchanged).
  • build(toolchain) — bump pinned nightly 2026-06-26 → 2026-07-06. Clears the ring half of 🐤 Nightly Canary: upcoming-toolchain regression — f6aab89 #492 (ring 0.17.14 compiles clean for aarch64-apple and x86_64-pc-windows-msvc). The new nightly feature-gated core::io::Error/ErrorKind, so std::io::* re-exports from the incomplete core::io — removed 10 now-dead #[expect(std_instead_of_core)] and qualified 17 io:: intra-doc links to std::io:: (the one unresolvable ::other method link → code span). No #[allow], no skips — every fix removes a suppression or corrects a path.

Release

Version bump + crates.io publish are intentionally not in this PR — they ride the normal just ship flow from main after merge (version branch → just release-tagrelease.yml binaries + the re-wired OIDC crates publish at 0.6.24).

Closes #492.

🤖 Generated with Claude Code

githubrobbi and others added 5 commits July 7, 2026 09:45
…rop dead index suppressions

Migrate all 35 `chunks_exact(2)` call sites in the NTFS parser to
`as_chunks::<2>()`, ahead of the upcoming-nightly `chunks_exact`-with-
constant-size clippy lint (nightly-canary #492, item 2). Verified on the
pinned toolchain, not blind: the floating nightly can't build locally
(ring 0.17.14 aarch64-apple const-eval, #492 item 1), but `as_chunks`
is stable on our pin and clears the lint by construction.

This is a net reduction in unsafe-shaped code, not just lint churn:
each `&[u8]` chunk becomes a `&[u8; 2]` array, so the mapping closures
drop their fallible `try_into().ok()` / `map_or(0, ..)` paths and their
`[c[0], c[1]]` reindexing in favour of `u16::from_le_bytes(*c)`.

As a result 7 lint suppressions become unnecessary and are removed:
  * 2× `#[expect(missing_asserts_for_indexing)]` whose reason cited
    `chunks_exact(2)` (attribute_helpers)
  * 5× now-unfulfilled `missing_asserts_for_indexing` expectations
    (module-level in direct_index/direct_index_extension; trimmed from
    the combined `indexing_slicing` attrs in io/parser index/
    index_extension/fragment, keeping the still-live indexing_slicing).

Verified: native clippy + xwin (windows-msvc) clippy clean with zero
unfulfilled expectations, `cargo nextest run -p uffs-mft` 264 pass,
rustdoc -D warnings clean. Addresses the lint half of #492.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…udited)

Two dependency bumps, each with a proper cargo-vet delta audit anchored
on the previously-trusted version (no blanket exemption bump).

* rustc-hash 2.1.2 -> 2.1.3: pure-safe Default-impl refactor
  (macro -> derive(Default)/derive_const(Default), upstream #77); the
  rand 0.8 -> 0.9 change is confined to the optional random_state
  feature, which this workspace does not enable, so it never enters the
  build. Zero unsafe delta.

* crossbeam-channel 0.5.15 -> 0.5.16: constify never()/Channel::new()
  (#1250), a select! matcher tweak for rust-analyzer completion (#1240,
  semantically equivalent), and an internal std::sync::Mutex ->
  crate::utils::Mutex swap. Zero unsafe delta, no dependency or build
  script changes.

Both audits recorded in supply-chain/audits.toml as safe-to-deploy;
`cargo vet` passes.

Vet-Reviewed-Diff: rustc-hash@2.1.2->2.1.3
Vet-Reviewed-Diff: crossbeam-channel@0.5.15->0.5.16
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The install examples still said `= "0.5"`, a caret range (>=0.5.0,<0.6.0)
that resolves to the old 0.5.120 — not the 0.6.x we're about to publish.
Copy-pasting off crates.io would pull a stale version. Bump both to "0.6".
The crates.io OIDC publish job was wired to release-plz's own release
detection (`needs: release-plz-release` + `releases_created`), and
release-plz.yml only ran on workflow_dispatch. But releases here are cut
by the ship pipeline (`just ship` → `just release-tag` pushes a signed
`v*` tag), which release-plz never claims — so the publish job was never
reached, leaving crates.io stuck at 0.5.120 while the workspace shipped
0.6.x.

Re-wire so the publish carries along with every ship release:
  * add a `push: tags: ['v*']` trigger (the same tags release.yml builds
    binaries for; `just release-tag` pushes them with a real credential,
    so the trigger fires — GITHUB_TOKEN anti-loop doesn't apply);
  * gate the crates-io-publish job on the tag ref + ENABLE_CRATES_IO_PUBLISH,
    dropping the release-plz `releases_created` dependency (its checkout
    resolves to the tag, so cargo publishes the released version);
  * keep release-pr / release jobs workflow_dispatch-only so a tag push
    runs only the publish job.

The job stays in release-plz.yml with the `crates.io-publish` environment,
so the existing crates.io trusted-publisher registration is unchanged.
Verified: actionlint clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Both blockers tracked in #492 are cleared on this nightly:
  * ring 0.17.14 const-eval assertion no longer fires — verified: ring
    compiles clean for BOTH aarch64-apple host and x86_64-pc-windows-msvc
    (the Windows-msvc ring breakage from the 06-27..30 nightly window is
    gone);
  * the new `chunks_exact` clippy lint is handled by the earlier
    `as_chunks::<2>()` migration in this branch.

The new nightly feature-gated `core::io::Error` / `ErrorKind`
(rust-lang/rust#103765, #154046), so `std::io::*` is re-exported from the
still-incomplete `core::io`. Two consequences, both fixed here:
  * clippy's `std_instead_of_core` no longer fires on `std::io::*` —
    removed 10 now-unfulfilled `#[expect(std_instead_of_core)]` (security,
    client, daemon, mft). No `#[allow]`, no downgrade: the code correctly
    stays on `std::io::*` (only stable spelling; `core::io::Error` needs
    the unstable `error_in_core` feature).
  * rustdoc intra-doc links: qualified 17 `io::{Error,ErrorKind,Result}`
    links to explicit `std::io::` and degraded the one unresolvable
    `std::io::Error::other` method link to a plain code span (the std-only
    `::other` fn isn't resolvable through the core::io re-export yet).

All 8 pinned components (rustc, cargo, rustfmt, clippy, rust-src,
rust-analyzer, llvm-tools, miri) are available for the new date.

Verified on nightly-2026-07-06: host + xwin(windows-msvc) clippy
--workspace --all-targets --all-features -D warnings clean, rustdoc
-D warnings clean, affected-crate tests 853 pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@githubrobbi githubrobbi enabled auto-merge July 7, 2026 18:58
@githubrobbi githubrobbi added this pull request to the merge queue Jul 7, 2026
Merged via the queue into main with commit ce60774 Jul 7, 2026
23 checks passed
@githubrobbi githubrobbi deleted the refactor/as-chunks-migration branch July 7, 2026 19:18
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.

🐤 Nightly Canary: upcoming-toolchain regression — f6aab89

1 participant