WI-168: nzb-* version floor + crate sync tooling and drift gate - #139
Merged
Merged
Conversation
PR #138 committed the in-flight bumps to nzb-core 0.2.17, nzb-postproc 0.2.7 and nzb-web 0.4.21 — numbers crates.io already holds with the July 2026 sync's content. The other four crates sat below their crates.io versions. Publishing from a synced tag would collide. Raise every nzb-* crate strictly above its crates.io maximum so the monorepo owns version numbers and a synced publish lands on a fresh number, keeping internal path-dependency requirements in lockstep: nzb-core 0.2.17 -> 0.2.18 nzb-nntp 0.2.22 -> 0.2.24 nzb-decode 0.1.2 -> 0.1.4 nzb-news 0.1.12 -> 0.1.14 nzb-dispatch 0.2.6 -> 0.2.8 nzb-postproc 0.2.7 -> 0.2.8 nzb-web 0.4.21 -> 0.4.22 Refresh the workspace and desktop lockfiles. No code changes; cargo check --workspace --all-targets is clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TpoFnScdkRq7qxQLQZe1we
The seven nzb-* crates publish to crates.io from standalone repos, kept in sync from this monorepo by hand. The last sync was 2026-07-29; four crates fell behind crates.io and three (nzb-core, nzb-postproc, nzb-web) drifted by hundreds to thousands of source lines, invisibly, because nothing gated it. Add the missing automation, with the monorepo as the head that owns version numbers: - ci/nzb-crates.txt: the synced crate list, one source of truth. - ci/tasks/sync-crate <name>: export crates/<name> at HEAD and open a PR on that crate's standalone repo. Never publishes, never pushes to the monorepo; publishing stays a post-merge tag step. - ci/tasks/crate-drift: clone each standalone repo and fail when its src/ or package version differs from the monorepo, naming the fix. - quality-schedule.yml: run crate-drift on the weekly schedule. - docs/RELEASING.md: document the ownership and sync rule. The drift gate will report the existing lag until the crates are re-synced and published from a tag (the outward WI-168 step). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TpoFnScdkRq7qxQLQZe1we
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resolves the crate-sync problem the parity-in-flight audit (WI-142) surfaced and sets up the tooling to keep it from recurring. Vogt: WI-168.
Why
The seven
nzb-*crates publish to crates.io from standalone repos, synced from this monorepo by hand. The last sync was 2026-07-29. Since then:What
Version floor (
0c5c7c6) — raise every nzb-* crate strictly above its crates.io max, requirements in lockstep:Both lockfiles refreshed (workspace + desktop).
cargo check --workspace --all-targetsclean.Tooling + drift gate (
4e560e5):ci/nzb-crates.txt— synced crate list, single source of truth.ci/tasks/sync-crate <name>— exportcrates/<name>at HEAD, open a PR on that crate's standalone repo. Never publishes, never pushes to the monorepo.ci/tasks/crate-drift— clone each standalone repo, fail onsrc/or version divergence. Ran live: correctly flagged all current drift.quality-schedule.yml— weeklycrate-driftjob.docs/RELEASING.md— monorepo owns nzb-* versions; standalone repos are sync targets; publish only from a synced tag.Note for reviewers
The scheduled
crate-driftjob will report red until the crates are re-synced and published from a tag (the outward step — done with a crates.io token, not in CI here). That red is the gate reporting the real lag it exists to catch.🤖 Generated with Claude Code
https://claude.ai/code/session_01TpoFnScdkRq7qxQLQZe1we