Repository navigation
ci: exact-pin the internal path dependencies so publish verification resolves locally - #105
Merged
Merged
Conversation
…resolves locally cargo publish --workspace --dry-run has been red since 2026-08-20 on every branch. The packaged ruff_graph builds against two versions of ruff_cache at once: our locally packaged 0.0.9, and 0.0.10 pulled from crates.io. The second one arrives through ruff_linter. Its requirement is a caret range, version = 0.16.3, which admits the 0.16.4 that upstream published on 2026-08-20 18:00 UTC, and that release depends on ruff_cache 0.0.10. The last green run on main was 2026-08-18, so the job went red with no commit in between and will keep going red on every upstream release. Pin all 36 internal path dependencies exactly. During a workspace publish cargo packages the members into a temporary local registry and prefers it for co-published crates, which the failing log itself shows: the imported ruff_python_parser 0.0.9 comes from that local registry even though upstream also has a 0.0.9 on crates.io. An exact requirement leaves the local copy as the only candidate, so no upstream release can be substituted into the verification build. A version bump was tried first and measured worse: relabelling the 0.0.x set to 0.0.10 makes upstream ruff_linter 0.16.4 win the resolution and ruff_linter fails to compile with 3881 errors instead of ruff_graph with 5. Version labels chase a moving target; the requirement shape is the actual defect.
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_c91446d5-7059-471f-ba0f-97ada26c53d8) |
AdaWorldAPI
marked this pull request as ready for review
August 21, 2026 11:03
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.
The failure
cargo publish --workspace --dry-runhas been red on every branch since 2026-08-20. The packagedruff_graphbuilds against two copies ofruff_cacheand cannot callcache_key:The last green run on
mainwas 2026-08-18, with no commit in between.It is a duplicate-crate error, not an unmigrated API
The two paths in that note point at the same file and the same line. That is the tell, and the bytes confirm it:
ruff_cache 0.0.10differs from0.0.9by two version lines in its manifest. Upstream re-releases the whole internal crate set on every ruff release whether or not a crate changed. There is no 0.0.10 API and nothing to migrate — rustc simply treats two copies of one identical trait as two distinct types.Where the second copy comes from
ruff_linter = { version = "0.16.3", path = "crates/ruff_linter" }is a caret range. It admits upstream's0.16.4, published 2026-08-20 18:00:49 UTC — the same release wave asruff_cache 0.0.10at 18:00:34 — and that release depends onruff_cache 0.0.10. So verification pulls a secondruff_cachein behind our own.The two registry sources in the log are worth naming:
index.crates.io-…is crates.io, and-9cf9d774767a10c8is the temporary local registrycargo publish --workspacebuilds from the freshly packaged members. Local resolution already works — the importedruff_python_parser 0.0.9comes from there despite an upstream0.0.9existing. Only the caret range lets an upstream release back in.The change
Exact-pin all 36 internal path dependencies (
version = "=X"), leaving the locally packaged copy as the only candidate. RootCargo.tomlonly; no crate version changes, no lockfile change, no source change.Measured, on the pinned toolchain (1.97.1, per
rust-toolchain.toml)cargo publish --workspace --dry-run, the exact CI command:ruff_graphverifies clean — the crate that failed with 5 errors.ruff_linterverifies clean.index.crates.io/ruff_*substitutions anywhere in the compile.No space left on deviceon this sandbox (target/at 12 G against a 511 M remainder) atty_python_semantic. That is the local disk allowance, not a build failure; a CI runner has the headroom. Stated rather than rounded up to "green".A rejected alternative, recorded because it measured worse
Bumping the 0.0.9 set to 0.0.10 first looked obvious. It is worse: upstream
ruff_linter 0.16.4then wins resolution and fails with 3881 errors (RuleGroup not found,group is not a member of ViolationMetadata) instead ofruff_graph's 5. Version labels chase a moving target — upstream keeps releasing. The requirement shape is the defect.🤖 Generated with Claude Code
https://claude.ai/code/session_01AGVLyRZNEKKBSfBDJfbY3V
Generated by Claude Code