Repository navigation
feat!: each adapter's version matches the upstream it adapts - #440
Conversation
Quest-Claim: 9d8e0c41edbd5eef
rind-ring 0.17.0, rind-rustls 0.23.0, rind-rcgen 0.14.0, rind-object-store 0.14.0, rind-dimpl 0.9.0, and rind-jsonwebtoken 11.0.0 begin with the breaking part of their upstream's version. sh/adapter-versions.sh, in `just ci`, fails when the two drift. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Your OpenCode Go account is out of credit. Top it up, then re-trigger Pullfrog. OpenCode Go's response
|
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 48 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed head 87dc8d2 against base 10d344f.
No actionable defects found for the current adapter manifests. All six new versions match their upstream breaking prefixes and lockfile entries. The metadata override handles rind-ring without introducing a ring dependency; normal dependency selection excludes dev-dependencies, and hyphen/underscore normalization handles object_store. The version module is included in check/ci, selected for adapter manifest changes and checker changes, and missing tools fail under CI_STRICT. Existing install examples now use the matching prefixes. No cryptographic implementation changes are included.
Direction: retain the documented distinction between enforcing the prefix in CI and preventing release-plz from proposing a bump. Before the next release lands, inspect its regenerated versions/changelogs rather than reusing the old #424 contents. Small metadata fixtures for matching/mismatching pre-1.0 and >=1.0 versions, the ring override, and publish=false would make the check's contract durable. If an adapter later restricts publication to a named registry or inherits its upstream requirement from the root workspace, extend package selection/change triggers to cover that case.
Limits: GitHub-only static review of the full diff, current adapter dependencies, dispatch implementation and release-plz configuration. I did not run cargo metadata, jq, CI, release-plz, registry publication, or quest validation, and did not independently reproduce the PR's release-plz source investigation. This COMMENT is not release or merge approval.

Problem
Each
rind-<consumer>adapter carried its own version (0.2.0, 0.1.14), so a reader couldn't tell fromrind-rustls 0.2which rustls it serves, and the launch post would quote versions unrelated to their upstreams.The maintainer decided on 2026-11-07 that each adapter's version begins with the breaking part of its upstream's.
Approach
sh/adapter-versions.shreadscargo metadataand fails when a published adapter's version doesn't begin with the breaking part (major.minor below 1.0, major from 1.0 on) of its requirement on the dependency named after it. rind-ring implements ring's API without depending on ring, so it declarespackage.metadata.rind.upstream = "0.17". A newversionsmodule insh/dispatch.shruns it injust ciwhenever an adapter'sCargo.tomlchanges, so a drifting release PR fails CI. rind-instant-acme ispublish = falseand is checked once it ships.rind-rustls = "0.23", andversion = "0.17"for rind-ring in its README, crate docs, MIGRATING.md, and MIGRATE.md (which said<latest>, now predictable).How release-plz treats the hand-set versions
Checked in release-plz 0.3.172's source (the dev shell's version, tag
release-plz-v0.3.172):get_package_diffincommand/update/updater.rs: when the local version is greater than the registry's, it logs "local version > registry version. Only changelog will be updated." and marks the version unpublished.Diff::should_update_versionis then false, sonext_from_diffreturns the local version unchanged: no semver-check or commit-based bump on top. Dependency-driven updates also keep it (patch_incrementonly whenis_version_published).release-plz releasethen publishes each local version absent from crates.io when that release PR lands (release_always = false).!commit, still makes it propose the next breaking version (0.23.0 -> 0.24.0). No.release-plz.tomlsetting prevents that (features_always_increment_minoralready defaults to false, so afeatstays a patch below 1.0), so this PR adds none; thejust cicheck fails such a release PR instead, and CONTRIBUTING.md says to hold or revert the breaking change.Impact
rind-ring = "0.2"and the like no longer pick up releases. Migrate by writing the adapter's new version, such asrind-rustls = "0.23"orring = { package = "rind-ring", version = "0.17" }.Alternatives
CARGO_PKG_VERSIONwith the manifest: six copies, and it needs the manifest parsed anyway. One script overcargo metadatacovers every adapter, including future ones.semver_checkfor adapters so release-plz never proposes a breaking bump: it would then ship an undetected API break as a patch. Kept on so drift fails loudly.Choices made without asking
!because dependents must edit their manifests to keep receiving releases.Follow-ups
None.
Validation
sh/adapter-versions.shon the base reports all six adapters (rind-ring for the missing upstream), and passes on this branch.just ci origin/main(every module, sincesh/dispatch.shchanged) passes on 87dc8d2.Models
Size: S
Implementer: Claude Code, claude-opus-5-5, high effort
🤖 Generated with Claude Code
Review
Rewritten by
quest reviewafter each round.01a1b456-b0b0-7811-84a0-1046a65821e2, round 1The specified diff aligns adapter versions and documentation, integrates the drift check into CI, and passes adapter-version and shell syntax validation without introducing actionable defects.(Written by Claude Opus 5.5 with high)