Skip to content

Move version drift check into a new binary - #18

Merged
wfchandler merged 7 commits into
mainfrom
wc/tokio-drift
Oct 11, 2026
Merged

wfchandler merged 7 commits into
mainfrom
wc/tokio-drift

Conversation

@wfchandler

Copy link
Copy Markdown
Collaborator

Remove the python from the CI job and create a small new binary for this logic.

wfchandler and others added 7 commits October 9, 2026 23:41
A bare `cargo build` at the root builds every workspace member, genfix
included, and a second tool binary is about to join it. Someone who
wants hansei should get hansei and nothing else.

Set `default-members` to hansei alone. That default applies to every
cargo command run without a package selection, `cargo nextest run`,
`cargo clippy` and `cargo mutants` among them, and a run that covers
hansei alone still passes. So every whole-tree invocation in CI,
buildomat and the docs now says `--workspace`. CI's builds need it
for the fixture example too: hansei-runtime is not a default member,
so a bare build no longer compiles build_fixtures.

With `--workspace`, nextest lists the same 1,902 tests a bare run
listed before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`hansei tokio-info reviewed` holds a project's Cargo.lock and
toolchain file to the reviews, and the code that does it lives in
hansei's bundle_cmd.rs. hansei has no library target, so nothing else
can call it, and the next users, a test over the fixtures' own
lockfiles and a drift report run in CI, would each need a copy.

Move it, with its tests, to exegesis's detect::reviewed::project,
beside the reviews it reads. The command's output is unchanged.
exegesis now depends on toml; hansei no longer does, and uses semver
only in a test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nothing checks that the fixtures build releases the reviews cover.
test-programs' version requirements are minimums, so a `cargo update`
there moves a crate as far as its requirement admits: today it would
take tokio-util to 0.7.20, past the newest reviewed 0.7.19. Fixtures
built from that exercise a release no detector was checked against,
and every suite reading them still passes. tokio's and rustc's matrix
versions are already held to their reviews; no other crate's is.

Add a test running the review check over test-programs/Cargo.lock and
every per-version lockfile under locks/. It builds nothing, so it runs
in every test run on every platform.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The lockfile and toolchain checks return each finding as the line
`hansei tokio-info reviewed` prints, so a caller wanting part of one,
the crate or the release, has to cut the line apart, as
review-drift.sh does today at the first colon.

Return a Finding naming the subject, what was found and each range
with the reviews covering it, which prints as the same line. Expose
the steps beneath the text-taking functions too, reading a lockfile's
packages and a toolchain file's channel and checking each, so a
caller parsing a lockfile once can both check it and read its
versions. The command's output is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
review-drift.sh holds omicron to the reviews through `hansei
tokio-info reviewed` and does the rest in inline Python: whether
omicron's toolchain is one the matrix builds, and whether its tokio
or rustc minor has passed the matrix's primary pin. Nothing compares
omicron with what the fixtures lock. omicron runs reqwest 0.13.5,
rustls 0.23.45 and tracing 0.1.44, all reviewed, while the fixtures
build 0.13.2, 0.23.41 and 0.1.40, and no finding says so.

Add review-drift, a repository tool making all of those findings and
a fourth for a reviewed crate a project locks newer than the fixtures
do. It prints a line per finding, or one JSON document with --json,
and exits 1 with findings but 2 when the check itself fails, which
the script needs to tell apart. It reads test-programs/matrix.toml
through testrun, which is no longer only a dev-dependency, and it is
not a default member: outside a checkout it means nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The weekly drift job builds all of hansei to run `tokio-info
reviewed`, finds the primary-pin lags with three inline Python
programs over omicron's toolchain file and the fixture matrix, and
cuts each unreviewed release's title out of its line at the first
colon. Exit status 1 means findings and failure alike.

Build and run review-drift instead and read its JSON. Every title the
job opened before is made the same way, so nothing is reported twice,
and the fixture lags review-drift adds get issues of their own. A lag
issue, primary or fixture, now closes when a run no longer finds it
rather than when a minor parsed back out of its title is reached;
unreviewed and unmatrixed issues still never close themselves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The fixtures pin reqwest 0.13.2, rustls 0.23.41 and tracing 0.1.40,
while omicron runs 0.13.5, 0.23.45 and 0.1.44, so no fixture
exercises the releases its targets carry. All three are inside their
reviews.

Raise the three pins and move every fixture lockfile to them. reqwest
0.13.5 brings base64 0.23 with it, and nothing else moves. The
assertions naming the fixtures' releases follow, as do the goldens
that print them.

Some goldens move further. Three http-conns tasks share a spawn site
and future type, so the canonical renaming orders them by their poll
symbols, whose crate hashes the new reqwest changes: task ids 2001-2003
trade places on illumos and linux-floor. reqwest's DNS resolver gains
an async block, which binds, and the lists ordered by type id reorder
around it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@wfchandler
wfchandler merged commit 7680472 into main Oct 11, 2026
5 checks passed
@wfchandler
wfchandler deleted the wc/tokio-drift branch October 11, 2026 03:47
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