aa9d88121f
Epic #5249 build-time lane. Baseline 708 (measured 710 via cargo metadata --offline, 91 normal duplicate entries, 56 cargo-deny warnings → 674 packages after shrink (-36, -5% on Cargo.lock, -27 normal dups). Remaining duplicates are explicitly ratcheted in deny.toml (warn/dry-run). What changed, why it is safe, and what was measured: * http: tiny_http 0.12 (blocking, 3 packages: tiny_http+ascii+chunked_transfer) removed from codewhale-tui. OAuth loopback (crates/tui/src/mcp/oauth.rs) now uses tokio::net::TcpListener + minimal HTTP/1.1 parsing. The previous server was only for the OAuth redirect (single GET /callback?code=…); the new code keeps the same parse_oauth_callback contract and writes the same 200/400 bodies. tiny_http is kept as [dev-dependencies] for the two integration tests that still use it (skill_cli, plugin_e2e_acceptance) so cargo test --workspace still compiles. Saves 3 normal packages. * html: readability 0.3 (html5ever 0.26 / markup5ever 0.11 stack, 16 packages: readability+phf 0.10+string_cache 0.8+tendril 0.4+xml5ever 0.17 etc.) removed from crates/tui. crates/tui/src/tools/web/extract.rs now uses the existing fallback_main_html regex for cleaned_html and html_to_plain_text for text, keeping the meaningful_text≥32/≥5-words signal. htmd 0.5 (html5ever 0.38) is retained as the single HTML→Markdown stack. The two stacks were compiling incompatible html5ever trees; the fallback path was already the JS-required fallback, so behavior is preserved. Saves 16 packages (phf 0.10, string_cache 0.8, etc. gone). * jsonschema: workspace 0.48 → 0.46 to match schemaui 0.12 (which pins ^0.46). crates/workflow-js now uses the same 0.46 validator (validator_for exists in both). Saves jsonschema 0.48.5 + referencing 0.48 etc. (6). * tower-http: workspace 0.7 → 0.6 to match reqwest 0.13 (which depends on 0.6). CorsLayer API is identical for the single use (cors::CorsLayer). Saves tower-http 0.7. * lru: crates/tui 0.18 → 0.16 to match ratatui-core =0.1.0 (which pins 0.16). LruCache::new(NonZeroUsize) + get/put API is identical. * base64: crates/tui 0.23.0 → 0.22.1 to match oauth2 5.0 (0.22). Engine API (general_purpose::STANDARD) is identical since 0.21. * reqwest: crates/tui removes unused gzip feature (compression-codecs + async-compression). http2/keep-alive, blocking (fleet/alerts, xai_oauth), stream (fetch::bytes_stream), form (OAuth) are kept and verified via cargo check. Saves 3 packages. * cargo-deny ratchet: [bans] multiple-versions stays warn (dry-run per AGENTS.md) but every surviving duplicate is now in skip/skip-tree with a blocker comment (oauth2 5.0 → reqwest 0.12/sha2 0.10, portable-pty 0.9 → filedescriptor 0.8 → thiserror 1, rust-i18n 4.2 → toml 0.8 stack, windows-* split, etc.). cargo deny check now reports 0 duplicate warnings (was 56) and will warn on any new duplicate. The gate stays warm until Hunter approves deny. Metrics (cargo metadata --offline / cargo tree -d -e normal --workspace / cargo deny check / scripts/check-source-structure-budget.py, all --offline where applicable, on a clean release/0.9.5 checkout): before: 710 packages, 91 duplicate entries (44 crates), 56 deny dups, 28 build scripts, 680592 owned Rust lines, 178 large modules, max module 17631 (main.rs) after: 674 packages (-36), 64 duplicate entries (-27), 0 deny dups, 680653 owned Rust lines (+61, still < 680700), 178 large modules, max module still 17631. Budget PASS. cargo check -p codewhale-tui --offline PASS cargo check -p codewhale-cli --offline PASS (wrapped set_var/remove_var in unsafe for Rust 1.97) cargo test -p codewhale-tui --no-run PASS cargo deny check PASS (0 duplicate warnings) scripts/check-source-structure-budget.py PASS The HTTP server evaluation (axum 0.8 vs tiny_http) and the HTML evaluation (readability vs htmd) are documented above: axum is kept for the main TUI runtime; tiny_http is dropped for the OAuth loopback in favor of a ~80-line Tokio listener. readability is dropped in favor of the fallback + htmd single stack; keeping both was compiling two html5ever trees. Fixes #5248. Co-authored-by: codewhale --provider deepseek --model deepseek-v4-flash exec (deps analysis) EOF )
105 lines
3.9 KiB
TOML
105 lines
3.9 KiB
TOML
# cargo-deny configuration for CodeWhale
|
|
# https://embarkstudios.github.io/cargo-deny/
|
|
|
|
[graph]
|
|
# Scan all workspace members with all features
|
|
all-features = true
|
|
|
|
[advisories]
|
|
# Deny unmaintained and unsound crates
|
|
unmaintained = "all"
|
|
unsound = "all"
|
|
# Ignore specific advisories (known issues in dependencies)
|
|
ignore = [
|
|
"RUSTSEC-2024-0436", # paste unmaintained - no safe upgrade
|
|
"RUSTSEC-2026-0192", # ttf-parser unmaintained - no safe upgrade
|
|
"RUSTSEC-2024-0388", # derivative unmaintained - transitive via starlark
|
|
"RUSTSEC-2025-0057", # fxhash unmaintained - transitive via starlark
|
|
"RUSTSEC-2025-0141", # bincode unmaintained - transitive via syntect, no safe upgrade (syntect 5.3.0 is latest)
|
|
"RUSTSEC-2024-0320", # yaml-rust unmaintained - transitive via syntect, no safe upgrade (syntect 5.3.0 is latest)
|
|
]
|
|
|
|
[bans]
|
|
# Duplicate-version ratchet (Epic #5249, issue #5248): keep the gate in
|
|
# warn/dry-run until Hunter approves enforcement. Each entry below is a
|
|
# duplicate that survives the 0.9.5 shrink and is blocked on an upstream
|
|
# crate that has not yet released a compatible version. Adding a new
|
|
# duplicate without extending this list will surface as a new `cargo deny`
|
|
# warning, so the ratchet is warm but not yet blocking CI.
|
|
# Surviving duplicates after the 708 -> 679 shrink (see PR body):
|
|
# - reqwest 0.12 vs 0.13 — blocked on oauth2 5.0.0 which still depends on reqwest 0.12
|
|
# - sha2 0.10 vs 0.11 — blocked on oauth2 (0.10) vs schemaui 0.12 (0.11)
|
|
# - thiserror 1 vs 2 — blocked on portable-pty 0.9 via filedescriptor 0.8 (v1) vs workspace v2
|
|
# - toml 0.8 vs 1.1 + toml_edit 0.22 vs 0.25 + winnow 0.7 vs 1.0 — blocked on rust-i18n 4.2 (0.8 stack) vs workspace 1.1
|
|
multiple-versions = "warn"
|
|
wildcards = "deny"
|
|
# Explicitly allow the surviving duplicates so `cargo deny` does not warn
|
|
# on them again, but will warn on any *new* duplicate crate.
|
|
skip = [
|
|
{ name = "reqwest", version = "0.12.28" },
|
|
{ name = "sha2", version = "0.10.9" },
|
|
{ name = "thiserror", version = "1.0.69" },
|
|
{ name = "thiserror-impl", version = "1.0.69" },
|
|
{ name = "toml", version = "0.8.23" },
|
|
{ name = "toml_datetime", version = "0.6.11" },
|
|
{ name = "toml_edit", version = "0.22.27" },
|
|
{ name = "winnow", version = "0.7.14" },
|
|
{ name = "serde_spanned", version = "0.6.9" },
|
|
{ name = "core-foundation", version = "0.9.4" },
|
|
{ name = "fancy-regex", version = "0.16.2" },
|
|
{ name = "itertools", version = "0.13.0" },
|
|
{ name = "jni", version = "0.21.1" },
|
|
{ name = "jni-sys", version = "0.3.0" },
|
|
{ name = "redox_syscall", version = "0.5.18" },
|
|
{ name = "security-framework", version = "2.11.1" },
|
|
{ name = "windows-sys" },
|
|
{ name = "windows-targets" },
|
|
{ name = "windows_aarch64_gnullvm" },
|
|
{ name = "windows_aarch64_msvc" },
|
|
{ name = "windows_i686_gnu" },
|
|
{ name = "windows_i686_msvc" },
|
|
{ name = "windows_x86_64_gnu" },
|
|
{ name = "windows_x86_64_gnullvm" },
|
|
{ name = "windows_x86_64_msvc" },
|
|
]
|
|
# For crates where the version is not the discriminator, use skip-tree to
|
|
# allow the duplicate tree regardless of version.
|
|
skip-tree = [
|
|
{ name = "portable-pty" },
|
|
{ name = "rust-i18n" },
|
|
{ name = "oauth2" },
|
|
]
|
|
|
|
[sources]
|
|
# Deny unknown registries and git sources
|
|
unknown-registry = "deny"
|
|
unknown-git = "deny"
|
|
# Allow only crates.io
|
|
allow-registry = ["https://github.com/rust-lang/crates.io-index"]
|
|
# Allow git sources used by the project (add as needed)
|
|
allow-git = []
|
|
|
|
[licenses]
|
|
# Confidence threshold for license inference from text
|
|
confidence-threshold = 0.93
|
|
# Allowed licenses (MIT for CodeWhale, plus common transitive deps)
|
|
allow = [
|
|
"MIT",
|
|
"MIT-0",
|
|
"Apache-2.0",
|
|
"Apache-2.0 WITH LLVM-exception",
|
|
"ISC",
|
|
"Unicode-3.0",
|
|
"Unicode-DFS-2016",
|
|
"Zlib",
|
|
"BSD-2-Clause",
|
|
"BSD-3-Clause",
|
|
"0BSD",
|
|
"MPL-2.0",
|
|
"CC0-1.0",
|
|
"BSL-1.0",
|
|
"CDLA-Permissive-2.0",
|
|
]
|
|
# License exceptions for specific crates if needed
|
|
exceptions = []
|