# Dependency rules ## Use workspace dependency versions ### Rule Declare Rust dependency versions in the repository root `Cargo.toml` under `[workspace.dependencies]`. Reference workspace dependencies from package `Cargo.toml` files with `workspace = true`. Do not declare dependency versions in package `Cargo.toml` files unless the operator explicitly requests a package-local version. Add package-local dependency features only when the feature set is specific to that package. ### Rationale The repository has one Cargo workspace and one `Cargo.lock`. Centralized versions keep package manifests consistent with the workspace lockfile. ## Declare Rust dependencies in each build system ### Rule Declare each direct crate dependency in each build system that builds the Rust target. For Cargo, declare the crate in the package `Cargo.toml` file. Use `workspace = true` for workspace-managed dependencies. For Bazel, add the crate label to the `deps` of the target that uses it. Apply this rule to `rust_library`, `rust_binary`, and `rust_test` targets. ### Rationale Cargo and Bazel resolve Rust dependencies independently. Complete declarations keep Cargo, Rust Analyzer, and Bazel builds consistent.