Skip to content

chore: Wave 21 - Cargo.toml metadata consolidation for crates.io#46

Merged
EffortlessSteven merged 1 commit intomainfrom
wave-21/cargo-metadata
Mar 1, 2026
Merged

chore: Wave 21 - Cargo.toml metadata consolidation for crates.io#46
EffortlessSteven merged 1 commit intomainfrom
wave-21/cargo-metadata

Conversation

@EffortlessSteven
Copy link
Copy Markdown
Member

Consolidates homepage and categories into workspace-level inheritance, eliminating duplication across 37 Cargo.toml files. Publish preflight metadata check passes.

Determinism impact: None
Policy impact: None

Copilot AI review requested due to automatic review settings March 1, 2026 19:10
@gemini-code-assist
Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@chatgpt-codex-connector
Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@qodo-free-for-open-source-projects
Copy link
Copy Markdown

Review Summary by Qodo

Consolidate Cargo.toml metadata to workspace-level inheritance

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Consolidate homepage and categories metadata to workspace-level inheritance
• Eliminate duplication across 37 publishable crates in the workspace
• Replace hardcoded values with .workspace = true references in all child crates
• Ensure crates.io publication readiness with standardized metadata
Diagram
flowchart LR
  WS["Workspace Cargo.toml<br/>homepage + categories"]
  CHILD1["Child Crate 1<br/>.workspace = true"]
  CHILD2["Child Crate 2<br/>.workspace = true"]
  CHILDN["Child Crate N<br/>.workspace = true"]
  WS -- "inherits" --> CHILD1
  WS -- "inherits" --> CHILD2
  WS -- "inherits" --> CHILDN
Loading

Grey Divider

File Changes

1. Cargo.toml ⚙️ Configuration changes +2/-0

Add workspace-level homepage and categories

Cargo.toml


2. crates/uselesskey-aws-lc-rs/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-aws-lc-rs/Cargo.toml


3. crates/uselesskey-core-cache/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-cache/Cargo.toml


View more (35)
4. crates/uselesskey-core-factory/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-factory/Cargo.toml


5. crates/uselesskey-core-hash/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-hash/Cargo.toml


6. crates/uselesskey-core-id/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-id/Cargo.toml


7. crates/uselesskey-core-jwk-builder/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-jwk-builder/Cargo.toml


8. crates/uselesskey-core-jwk-shape/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-jwk-shape/Cargo.toml


9. crates/uselesskey-core-jwk/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-jwk/Cargo.toml


10. crates/uselesskey-core-jwks-order/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-jwks-order/Cargo.toml


11. crates/uselesskey-core-keypair-material/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-keypair-material/Cargo.toml


12. crates/uselesskey-core-keypair/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-keypair/Cargo.toml


13. crates/uselesskey-core-kid/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-kid/Cargo.toml


14. crates/uselesskey-core-negative-pem/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-negative-pem/Cargo.toml


15. crates/uselesskey-core-negative/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-negative/Cargo.toml


16. crates/uselesskey-core-seed/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-seed/Cargo.toml


17. crates/uselesskey-core-sink/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-sink/Cargo.toml


18. crates/uselesskey-core-token-shape/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-token-shape/Cargo.toml


19. crates/uselesskey-core-token/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-token/Cargo.toml


20. crates/uselesskey-core-x509-derive/Cargo.toml ⚙️ Configuration changes +2/-2

Replace hardcoded with workspace inheritance

crates/uselesskey-core-x509-derive/Cargo.toml


21. crates/uselesskey-core-x509-negative/Cargo.toml Additional files +2/-2

...

crates/uselesskey-core-x509-negative/Cargo.toml


22. crates/uselesskey-core-x509-spec/Cargo.toml Additional files +2/-2

...

crates/uselesskey-core-x509-spec/Cargo.toml


23. crates/uselesskey-core-x509/Cargo.toml Additional files +2/-2

...

crates/uselesskey-core-x509/Cargo.toml


24. crates/uselesskey-core/Cargo.toml Additional files +2/-2

...

crates/uselesskey-core/Cargo.toml


25. crates/uselesskey-ecdsa/Cargo.toml Additional files +2/-2

...

crates/uselesskey-ecdsa/Cargo.toml


26. crates/uselesskey-ed25519/Cargo.toml Additional files +2/-2

...

crates/uselesskey-ed25519/Cargo.toml


27. crates/uselesskey-hmac/Cargo.toml Additional files +2/-2

...

crates/uselesskey-hmac/Cargo.toml


28. crates/uselesskey-jsonwebtoken/Cargo.toml Additional files +2/-2

...

crates/uselesskey-jsonwebtoken/Cargo.toml


29. crates/uselesskey-jwk/Cargo.toml Additional files +2/-2

...

crates/uselesskey-jwk/Cargo.toml


30. crates/uselesskey-pgp/Cargo.toml Additional files +2/-2

...

crates/uselesskey-pgp/Cargo.toml


31. crates/uselesskey-ring/Cargo.toml Additional files +2/-2

...

crates/uselesskey-ring/Cargo.toml


32. crates/uselesskey-rsa/Cargo.toml Additional files +2/-2

...

crates/uselesskey-rsa/Cargo.toml


33. crates/uselesskey-rustcrypto/Cargo.toml Additional files +2/-2

...

crates/uselesskey-rustcrypto/Cargo.toml


34. crates/uselesskey-rustls/Cargo.toml Additional files +2/-2

...

crates/uselesskey-rustls/Cargo.toml


35. crates/uselesskey-token/Cargo.toml Additional files +2/-2

...

crates/uselesskey-token/Cargo.toml


36. crates/uselesskey-tonic/Cargo.toml Additional files +2/-2

...

crates/uselesskey-tonic/Cargo.toml


37. crates/uselesskey-x509/Cargo.toml Additional files +2/-2

...

crates/uselesskey-x509/Cargo.toml


38. crates/uselesskey/Cargo.toml Additional files +2/-2

...

crates/uselesskey/Cargo.toml


Grey Divider

Qodo Logo

@qodo-free-for-open-source-projects
Copy link
Copy Markdown

qodo-free-for-open-source-projects bot commented Mar 1, 2026

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Remediation recommended

1. Homepage not preflight-validated 🐞 Bug ⛯ Reliability
Description
This PR makes publishable crates rely on workspace-inherited homepage, but `cargo xtask
publish-preflight does not validate homepage` is present/non-empty. A future regression (e.g.,
removing [workspace.package].homepage or forgetting homepage.workspace = true in a new
publishable crate) could silently publish crates without homepage metadata.
Code

crates/uselesskey-core-cache/Cargo.toml[12]

+homepage.workspace = true
Evidence
Workspace-level homepage is now defined and crates inherit it via homepage.workspace = true, but
the publish-preflight metadata checker only enforces
license/description/repository/readme/categories/keywords and does not check homepage, so it won’t
catch missing/empty homepage metadata.

Cargo.toml[51-58]
crates/uselesskey-core-cache/Cargo.toml[1-14]
xtask/src/main.rs[470-497]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`cargo xtask publish-preflight` validates several required crates.io metadata fields, but it does not validate `homepage`. After this PR, publishable crates depend on workspace-level `homepage` via `homepage.workspace = true`, so a missing/empty workspace homepage (or missed inheritance in a new crate) could regress without being detected.

### Issue Context
The preflight currently checks `license`, `description`, `repository`, `readme`, `categories`, and `keywords` for crates listed in `PUBLISH_CRATES`, but not `homepage`.

### Fix Focus Areas
- xtask/src/main.rs[460-498]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 1, 2026

Warning

Rate limit exceeded

@EffortlessSteven has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 18 minutes and 29 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 3f8ed52 and 9783979.

📒 Files selected for processing (38)
  • Cargo.toml
  • crates/uselesskey-aws-lc-rs/Cargo.toml
  • crates/uselesskey-core-cache/Cargo.toml
  • crates/uselesskey-core-factory/Cargo.toml
  • crates/uselesskey-core-hash/Cargo.toml
  • crates/uselesskey-core-id/Cargo.toml
  • crates/uselesskey-core-jwk-builder/Cargo.toml
  • crates/uselesskey-core-jwk-shape/Cargo.toml
  • crates/uselesskey-core-jwk/Cargo.toml
  • crates/uselesskey-core-jwks-order/Cargo.toml
  • crates/uselesskey-core-keypair-material/Cargo.toml
  • crates/uselesskey-core-keypair/Cargo.toml
  • crates/uselesskey-core-kid/Cargo.toml
  • crates/uselesskey-core-negative-pem/Cargo.toml
  • crates/uselesskey-core-negative/Cargo.toml
  • crates/uselesskey-core-seed/Cargo.toml
  • crates/uselesskey-core-sink/Cargo.toml
  • crates/uselesskey-core-token-shape/Cargo.toml
  • crates/uselesskey-core-token/Cargo.toml
  • crates/uselesskey-core-x509-derive/Cargo.toml
  • crates/uselesskey-core-x509-negative/Cargo.toml
  • crates/uselesskey-core-x509-spec/Cargo.toml
  • crates/uselesskey-core-x509/Cargo.toml
  • crates/uselesskey-core/Cargo.toml
  • crates/uselesskey-ecdsa/Cargo.toml
  • crates/uselesskey-ed25519/Cargo.toml
  • crates/uselesskey-hmac/Cargo.toml
  • crates/uselesskey-jsonwebtoken/Cargo.toml
  • crates/uselesskey-jwk/Cargo.toml
  • crates/uselesskey-pgp/Cargo.toml
  • crates/uselesskey-ring/Cargo.toml
  • crates/uselesskey-rsa/Cargo.toml
  • crates/uselesskey-rustcrypto/Cargo.toml
  • crates/uselesskey-rustls/Cargo.toml
  • crates/uselesskey-token/Cargo.toml
  • crates/uselesskey-tonic/Cargo.toml
  • crates/uselesskey-x509/Cargo.toml
  • crates/uselesskey/Cargo.toml
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch wave-21/cargo-metadata

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Consolidates crates.io metadata by moving repeated homepage and categories values into workspace-level package metadata and switching individual crates to inherit those fields.

Changes:

  • Added workspace-level homepage and categories metadata in the root Cargo.toml
  • Updated all affected crate Cargo.toml files to use homepage.workspace = true and categories.workspace = true instead of duplicating values

Reviewed changes

Copilot reviewed 38 out of 38 changed files in this pull request and generated no comments.

Show a summary per file
File Description
Cargo.toml Defines workspace-level homepage and categories for inheritance
crates/uselesskey/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-x509/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-tonic/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-token/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-rustls/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-rustcrypto/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-rsa/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-ring/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-pgp/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-jwk/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-jsonwebtoken/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-hmac/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-ed25519/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-ecdsa/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-x509/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-x509-spec/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-x509-negative/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-x509-derive/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-token/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-token-shape/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-sink/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-seed/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-negative/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-negative-pem/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-kid/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-keypair/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-keypair-material/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-jwks-order/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-jwk/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-jwk-shape/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-jwk-builder/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-id/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-hash/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-factory/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-core-cache/Cargo.toml Inherits homepage and categories from workspace metadata
crates/uselesskey-aws-lc-rs/Cargo.toml Inherits homepage and categories from workspace metadata

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Ensures all publishable crates have description, keywords, categories,
and documentation fields for crates.io publication.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@EffortlessSteven EffortlessSteven force-pushed the wave-21/cargo-metadata branch from 44c7dd9 to 9783979 Compare March 1, 2026 21:52
@EffortlessSteven EffortlessSteven merged commit ad46db9 into main Mar 1, 2026
4 checks passed
@EffortlessSteven EffortlessSteven deleted the wave-21/cargo-metadata branch March 5, 2026 15:27
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.

2 participants