Skip to content

WI-168: nzb-* version floor + crate sync tooling and drift gate - #139

Merged
thedancingdeveloper merged 2 commits into
mainfrom
chore/wi-168-crate-version-floor
Sep 10, 2026
Merged

thedancingdeveloper merged 2 commits into
mainfrom
chore/wi-168-crate-version-floor

Conversation

@thedancingdeveloper

Copy link
Copy Markdown
Collaborator

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:

  • PR feat: complete compatibility and hardening backlog #138 committed in-flight bumps to nzb-core 0.2.17, nzb-postproc 0.2.7, nzb-web 0.4.21 — numbers crates.io already holds with July content. Publishing from a synced tag would collide.
  • Four other crates sat below their crates.io versions.
  • Three crates drifted by 234 / 357 / 3078 source lines, invisibly, because nothing gated it.

What

Version floor (0c5c7c6) — raise every nzb-* crate strictly above its crates.io max, requirements in lockstep:

crate crate
nzb-core 0.2.18 nzb-dispatch 0.2.8
nzb-nntp 0.2.24 nzb-postproc 0.2.8
nzb-decode 0.1.4 nzb-web 0.4.22
nzb-news 0.1.14

Both lockfiles refreshed (workspace + desktop). cargo check --workspace --all-targets clean.

Tooling + drift gate (4e560e5):

  • ci/nzb-crates.txt — synced crate list, single source of truth.
  • ci/tasks/sync-crate <name> — export crates/<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 on src/ or version divergence. Ran live: correctly flagged all current drift.
  • quality-schedule.yml — weekly crate-drift job.
  • docs/RELEASING.md — monorepo owns nzb-* versions; standalone repos are sync targets; publish only from a synced tag.

Note for reviewers

The scheduled crate-drift job 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

thedancingdeveloper and others added 2 commits September 10, 2026 01:40
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
@thedancingdeveloper
thedancingdeveloper merged commit 6c9cfb9 into main Sep 10, 2026
10 of 11 checks passed
@thedancingdeveloper
thedancingdeveloper deleted the chore/wi-168-crate-version-floor branch September 10, 2026 03:40
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