build: per-package CGU + dep dedup — workspace builds ~30% faster
Two complementary changes to reduce clean workspace build time from
~13min to ~8:43:
1. Per-package codegen-units overrides
Default for all release builds: codegen-units = 16 (parallel LLVM).
Numerical-sensitive crates (ml-* family, ndarray, nalgebra, cudarc,
simba, etc.) override back to 1 to preserve bit-exact LLVM
optimization decisions for the DQN regression suite.
Non-numerical plumbing (arrow, sqlx, tokio, parquet, ...) compiles
in parallel via 16 CGUs, no numerical impact.
2. Dependency deduplication
- axum 0.7 → 0.8 (workspace + services/api): dedupes vs tonic 0.14's
transitive axum 0.8. Eliminates a full duplicate compile of axum
and axum-core.
- statrs 0.17 → 0.18: dedupes nalgebra 0.32 vs 0.33. Also closes a
numerical concern (two nalgebra versions linked simultaneously).
- governor 0.6 → 0.10 (services/api + crates/data): dedupes dashmap
5 vs 6. dashmap is heavy; eliminating one full compile is a real
win.
- hashbrown 0.14 → 0.16 (workspace): partial dedupe (dashmap 6.1
still pulls 0.14 transitively).
- Workspace Cargo.toml documents residual unfixable duplicates with
reasons (base64, chacha20, phf, darling, itertools, getrandom,
hashbrown, syn, thiserror — all blocked by third-party crates we
can't bump without breakage).
Verified: cargo check --workspace passes. Numerical crates remain
at codegen-units = 1 — DQN bit-exact reproducibility preserved.
This commit is contained in:
216
Cargo.lock
generated
216
Cargo.lock
generated
@@ -187,35 +187,26 @@ version = "1.0.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
"async-trait",
|
||||
"axum 0.7.9",
|
||||
"axum",
|
||||
"base32",
|
||||
"base64 0.22.1",
|
||||
"bytes",
|
||||
"chrono",
|
||||
"clap",
|
||||
"common",
|
||||
"config",
|
||||
"const-oid",
|
||||
"criterion",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"futures",
|
||||
"fxt",
|
||||
"governor",
|
||||
"hdrhistogram",
|
||||
"hex",
|
||||
"hmac",
|
||||
"http 1.4.0",
|
||||
"http-body 1.0.1",
|
||||
"http-body-util",
|
||||
"hyper 1.8.1",
|
||||
"hyper-util",
|
||||
"image 0.25.10",
|
||||
"jsonwebtoken",
|
||||
"k8s-openapi 0.27.1",
|
||||
"kube 3.1.0",
|
||||
"lru",
|
||||
"num-traits",
|
||||
"ocsp",
|
||||
"once_cell",
|
||||
"prometheus",
|
||||
@@ -226,7 +217,6 @@ dependencies = [
|
||||
"redis",
|
||||
"regex",
|
||||
"reqwest 0.12.28",
|
||||
"rust_decimal",
|
||||
"rustls 0.23.37",
|
||||
"secrecy 0.8.0",
|
||||
"serde",
|
||||
@@ -236,7 +226,6 @@ dependencies = [
|
||||
"sqlx",
|
||||
"thiserror 1.0.69",
|
||||
"tokio",
|
||||
"tokio-stream",
|
||||
"tokio-test",
|
||||
"tonic 0.14.5",
|
||||
"tonic-health",
|
||||
@@ -247,15 +236,10 @@ dependencies = [
|
||||
"totp-rs",
|
||||
"tower 0.4.13",
|
||||
"tower-http 0.5.2",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
"tracing-subscriber",
|
||||
"trading_engine",
|
||||
"urlencoding",
|
||||
"uuid",
|
||||
"x509-parser",
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -267,7 +251,7 @@ dependencies = [
|
||||
"chrono",
|
||||
"clap",
|
||||
"common",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"futures",
|
||||
"hdrhistogram",
|
||||
"jsonwebtoken",
|
||||
@@ -1437,13 +1421,13 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "axum"
|
||||
version = "0.7.9"
|
||||
version = "0.8.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f"
|
||||
checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"axum-core 0.4.5",
|
||||
"axum-core",
|
||||
"bytes",
|
||||
"form_urlencoded",
|
||||
"futures-util",
|
||||
"http 1.4.0",
|
||||
"http-body 1.0.1",
|
||||
@@ -1451,13 +1435,12 @@ dependencies = [
|
||||
"hyper 1.8.1",
|
||||
"hyper-util",
|
||||
"itoa",
|
||||
"matchit 0.7.3",
|
||||
"matchit",
|
||||
"memchr",
|
||||
"mime",
|
||||
"percent-encoding",
|
||||
"pin-project-lite",
|
||||
"rustversion",
|
||||
"serde",
|
||||
"serde_core",
|
||||
"serde_json",
|
||||
"serde_path_to_error",
|
||||
"serde_urlencoded",
|
||||
@@ -1469,52 +1452,6 @@ dependencies = [
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum"
|
||||
version = "0.8.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8"
|
||||
dependencies = [
|
||||
"axum-core 0.5.6",
|
||||
"bytes",
|
||||
"futures-util",
|
||||
"http 1.4.0",
|
||||
"http-body 1.0.1",
|
||||
"http-body-util",
|
||||
"itoa",
|
||||
"matchit 0.8.4",
|
||||
"memchr",
|
||||
"mime",
|
||||
"percent-encoding",
|
||||
"pin-project-lite",
|
||||
"serde_core",
|
||||
"sync_wrapper 1.0.2",
|
||||
"tower 0.5.3",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum-core"
|
||||
version = "0.4.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"bytes",
|
||||
"futures-util",
|
||||
"http 1.4.0",
|
||||
"http-body 1.0.1",
|
||||
"http-body-util",
|
||||
"mime",
|
||||
"pin-project-lite",
|
||||
"rustversion",
|
||||
"sync_wrapper 1.0.2",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum-core"
|
||||
version = "0.5.6"
|
||||
@@ -1531,6 +1468,7 @@ dependencies = [
|
||||
"sync_wrapper 1.0.2",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1568,7 +1506,7 @@ dependencies = [
|
||||
"crossbeam",
|
||||
"crossbeam-channel",
|
||||
"csv",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"data",
|
||||
"fastrand",
|
||||
"futures",
|
||||
@@ -1599,7 +1537,7 @@ dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
"async-trait",
|
||||
"axum 0.7.9",
|
||||
"axum",
|
||||
"base64 0.22.1",
|
||||
"chrono",
|
||||
"clap",
|
||||
@@ -1607,7 +1545,7 @@ dependencies = [
|
||||
"config",
|
||||
"criterion",
|
||||
"crossbeam",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"data",
|
||||
"dbn 0.42.0",
|
||||
"dotenvy",
|
||||
@@ -1844,7 +1782,7 @@ dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
"async-trait",
|
||||
"axum 0.7.9",
|
||||
"axum",
|
||||
"base64 0.22.1",
|
||||
"bytes",
|
||||
"chrono",
|
||||
@@ -2886,19 +2824,6 @@ dependencies = [
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dashmap"
|
||||
version = "5.5.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"hashbrown 0.14.5",
|
||||
"lock_api",
|
||||
"once_cell",
|
||||
"parking_lot_core 0.9.12",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dashmap"
|
||||
version = "6.1.0"
|
||||
@@ -2930,7 +2855,7 @@ dependencies = [
|
||||
"criterion",
|
||||
"crossbeam",
|
||||
"crossbeam-channel",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"dbn 0.42.0",
|
||||
"fastrand",
|
||||
"flate2",
|
||||
@@ -2938,7 +2863,7 @@ dependencies = [
|
||||
"futures-core",
|
||||
"futures-util",
|
||||
"governor",
|
||||
"hashbrown 0.14.5",
|
||||
"hashbrown 0.16.1",
|
||||
"hdrhistogram",
|
||||
"hex",
|
||||
"lz4",
|
||||
@@ -2989,7 +2914,7 @@ dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
"async-trait",
|
||||
"axum 0.7.9",
|
||||
"axum",
|
||||
"bytes",
|
||||
"chrono",
|
||||
"clap",
|
||||
@@ -3836,7 +3761,7 @@ version = "1.0.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
"axum 0.7.9",
|
||||
"axum",
|
||||
"backtesting",
|
||||
"bincode",
|
||||
"chrono",
|
||||
@@ -4239,22 +4164,25 @@ checksum = "558b88954871f5e5b2af0e62e2e176c8bde7a6c2c4ed41b13d138d96da2e2cbd"
|
||||
|
||||
[[package]]
|
||||
name = "governor"
|
||||
version = "0.6.3"
|
||||
version = "0.10.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "68a7f542ee6b35af73b06abc0dad1c1bae89964e4e253bc4b587b91c9637867b"
|
||||
checksum = "9efcab3c1958580ff1f25a2a41be1668f7603d849bb63af523b208a3cc1223b8"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"dashmap 5.5.3",
|
||||
"futures",
|
||||
"dashmap",
|
||||
"futures-sink",
|
||||
"futures-timer",
|
||||
"no-std-compat",
|
||||
"futures-util",
|
||||
"getrandom 0.3.4",
|
||||
"hashbrown 0.16.1",
|
||||
"nonzero_ext",
|
||||
"parking_lot 0.12.5",
|
||||
"portable-atomic",
|
||||
"quanta",
|
||||
"rand 0.8.5",
|
||||
"rand 0.9.2",
|
||||
"smallvec",
|
||||
"spinning_top",
|
||||
"web-time",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -4336,7 +4264,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
|
||||
dependencies = [
|
||||
"ahash 0.8.12",
|
||||
"allocator-api2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -5890,12 +5817,6 @@ dependencies = [
|
||||
"regex-automata",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "matchit"
|
||||
version = "0.7.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
|
||||
|
||||
[[package]]
|
||||
name = "matchit"
|
||||
version = "0.8.4"
|
||||
@@ -6074,7 +5995,7 @@ dependencies = [
|
||||
"crossbeam",
|
||||
"csv",
|
||||
"cudarc",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"data",
|
||||
"databento",
|
||||
"dbn 0.42.0",
|
||||
@@ -6114,7 +6035,7 @@ dependencies = [
|
||||
"ml-supervised",
|
||||
"ml-universe",
|
||||
"ml-validation",
|
||||
"nalgebra 0.33.2",
|
||||
"nalgebra",
|
||||
"ndarray",
|
||||
"num",
|
||||
"num-traits",
|
||||
@@ -6191,7 +6112,7 @@ dependencies = [
|
||||
"aws-sdk-s3",
|
||||
"aws-types",
|
||||
"chrono",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"flate2",
|
||||
"fs2",
|
||||
"hex",
|
||||
@@ -6222,7 +6143,7 @@ dependencies = [
|
||||
"common",
|
||||
"config",
|
||||
"cudarc",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"futures",
|
||||
"libc",
|
||||
"mimalloc",
|
||||
@@ -6326,7 +6247,7 @@ dependencies = [
|
||||
"common",
|
||||
"crossbeam",
|
||||
"cudarc",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"ml-core",
|
||||
"ndarray",
|
||||
"once_cell",
|
||||
@@ -6410,7 +6331,7 @@ dependencies = [
|
||||
name = "ml-labeling"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"ml-core",
|
||||
"serde",
|
||||
"tokio",
|
||||
@@ -6547,12 +6468,12 @@ dependencies = [
|
||||
"common",
|
||||
"config",
|
||||
"cudarc",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"data",
|
||||
"libc",
|
||||
"lru",
|
||||
"ml-core",
|
||||
"nalgebra 0.33.2",
|
||||
"nalgebra",
|
||||
"ndarray",
|
||||
"num_cpus",
|
||||
"parking_lot 0.12.5",
|
||||
@@ -6578,7 +6499,7 @@ dependencies = [
|
||||
"arrow 56.2.0",
|
||||
"async-stream",
|
||||
"async-trait",
|
||||
"axum 0.7.9",
|
||||
"axum",
|
||||
"base64 0.22.1",
|
||||
"bytes",
|
||||
"chacha20poly1305",
|
||||
@@ -6726,24 +6647,6 @@ version = "0.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084"
|
||||
|
||||
[[package]]
|
||||
name = "nalgebra"
|
||||
version = "0.32.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4"
|
||||
dependencies = [
|
||||
"approx",
|
||||
"matrixmultiply",
|
||||
"nalgebra-macros",
|
||||
"num-complex",
|
||||
"num-rational",
|
||||
"num-traits",
|
||||
"rand 0.8.5",
|
||||
"rand_distr 0.4.3",
|
||||
"simba 0.8.1",
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nalgebra"
|
||||
version = "0.33.2"
|
||||
@@ -6759,7 +6662,7 @@ dependencies = [
|
||||
"rand 0.8.5",
|
||||
"rand_distr 0.4.3",
|
||||
"serde",
|
||||
"simba 0.9.1",
|
||||
"simba",
|
||||
"typenum",
|
||||
]
|
||||
|
||||
@@ -6824,12 +6727,6 @@ dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "no-std-compat"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c"
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "7.1.3"
|
||||
@@ -8865,11 +8762,11 @@ dependencies = [
|
||||
"common",
|
||||
"config",
|
||||
"criterion",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"fastrand",
|
||||
"futures",
|
||||
"hdrhistogram",
|
||||
"nalgebra 0.33.2",
|
||||
"nalgebra",
|
||||
"ndarray",
|
||||
"num",
|
||||
"num-traits",
|
||||
@@ -9787,19 +9684,6 @@ dependencies = [
|
||||
"rand_core 0.6.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "simba"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae"
|
||||
dependencies = [
|
||||
"approx",
|
||||
"num-complex",
|
||||
"num-traits",
|
||||
"paste",
|
||||
"wide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "simba"
|
||||
version = "0.9.1"
|
||||
@@ -10263,12 +10147,12 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
||||
|
||||
[[package]]
|
||||
name = "statrs"
|
||||
version = "0.17.1"
|
||||
version = "0.18.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f697a07e4606a0a25c044de247e583a330dbb1731d11bc7350b81f48ad567255"
|
||||
checksum = "2a3fe7c28c6512e766b0874335db33c94ad7b8f9054228ae1c2abd47ce7d335e"
|
||||
dependencies = [
|
||||
"approx",
|
||||
"nalgebra 0.32.6",
|
||||
"nalgebra",
|
||||
"num-traits",
|
||||
"rand 0.8.5",
|
||||
]
|
||||
@@ -10286,7 +10170,7 @@ dependencies = [
|
||||
"clap",
|
||||
"common",
|
||||
"config",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"flate2",
|
||||
"fs2",
|
||||
"futures",
|
||||
@@ -10318,7 +10202,7 @@ dependencies = [
|
||||
"chrono",
|
||||
"common",
|
||||
"config",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"futures",
|
||||
"hdrhistogram",
|
||||
"num_cpus",
|
||||
@@ -11113,7 +10997,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fec7c61a0695dc1887c1b53952990f3ad2e3a31453e1f49f10e75424943a93ec"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"axum 0.8.8",
|
||||
"axum",
|
||||
"base64 0.22.1",
|
||||
"bytes",
|
||||
"h2 0.4.13",
|
||||
@@ -11460,7 +11344,7 @@ dependencies = [
|
||||
"approx",
|
||||
"async-stream",
|
||||
"async-trait",
|
||||
"axum 0.7.9",
|
||||
"axum",
|
||||
"bigdecimal",
|
||||
"bytes",
|
||||
"chrono",
|
||||
@@ -11474,7 +11358,7 @@ dependencies = [
|
||||
"hyper-util",
|
||||
"ml",
|
||||
"ml-features",
|
||||
"nalgebra 0.33.2",
|
||||
"nalgebra",
|
||||
"num-traits",
|
||||
"once_cell",
|
||||
"prometheus",
|
||||
@@ -11532,7 +11416,7 @@ dependencies = [
|
||||
"api",
|
||||
"async-stream",
|
||||
"async-trait",
|
||||
"axum 0.7.9",
|
||||
"axum",
|
||||
"base32",
|
||||
"base64 0.22.1",
|
||||
"bytes",
|
||||
@@ -11614,7 +11498,7 @@ dependencies = [
|
||||
"crossbeam-queue",
|
||||
"crossbeam-utils",
|
||||
"ctrader-openapi",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"flate2",
|
||||
"futures",
|
||||
"hdrhistogram",
|
||||
@@ -11664,7 +11548,7 @@ dependencies = [
|
||||
"chrono",
|
||||
"clap",
|
||||
"common",
|
||||
"dashmap 6.1.0",
|
||||
"dashmap",
|
||||
"futures",
|
||||
"hdrhistogram",
|
||||
"jsonwebtoken",
|
||||
|
||||
129
Cargo.toml
129
Cargo.toml
@@ -179,6 +179,33 @@ publish = false
|
||||
keywords = ["trading", "hft", "ml", "rust", "finance"]
|
||||
categories = ["finance", "algorithms", "science"]
|
||||
|
||||
# Known unfixable duplicates (cargo tree -d), as of 2026-04-30:
|
||||
#
|
||||
# Transitive in third-party crates we cannot bump without API breakage or forks:
|
||||
# - base64 v0.21 (hdrhistogram 7.5 — no newer version released)
|
||||
# - chacha20 v0.9 (chacha20poly1305 0.10; v0.11 still RC)
|
||||
# - phf v0.11 (time-tz, transitively via ibapi 1.2 — bumping to ibapi 2.x is a major break)
|
||||
# - phf v0.12 (chrono-tz 0.10 — both versions held by orthogonal crates)
|
||||
# - darling v0.14 (vaultrs 0.7 → derive_builder 0.12; vaultrs 0.8 introduces reqwest 0.13 dup, net loss)
|
||||
# - darling v0.23 (ratatui 0.29 → instability 0.3)
|
||||
# - itertools v0.10 (criterion 0.5 dev-dep; bumping criterion across 10 bench dirs is high-risk)
|
||||
# - itertools v0.13 (object_store 0.11; object_store 0.13 has put/get/head/delete API breakage)
|
||||
# - itertools v0.14 (prost-build 0.14 — already latest)
|
||||
# - getrandom v0.2/0.3/0.4 (3-way: rand_core 0.6, ahash 0.8, rand 0.10; orthogonal leaves)
|
||||
# - hashbrown v0.14 (dashmap 6.1 transitive — hashbrown 0.16 in workspace + indexmap)
|
||||
# - syn v1 / v2 (residual proc-macros pinned to syn 1)
|
||||
# - thiserror v1 / v2 (some deps still on v1)
|
||||
#
|
||||
# Other cargo-tree-d entries are version-suffixes attached to feature splits
|
||||
# rather than separate compiles (entries with " (*)" markers).
|
||||
#
|
||||
# Things we DID dedupe in this pass (2026-04-30):
|
||||
# - axum 0.7 → 0.8 (workspace + services/api) — dedupes vs tonic 0.14's transitive axum 0.8
|
||||
# - statrs 0.17 → 0.18 — dedupes nalgebra 0.32 vs 0.33
|
||||
# - governor 0.6 → 0.10 (services/api + crates/data) — dedupes dashmap 5 vs 6
|
||||
# - dashmap = workspace (services/api) — same as above
|
||||
# - hashbrown 0.14 → 0.16 (workspace) — partial dedupe (dashmap 6.1 still pulls 0.14)
|
||||
|
||||
[workspace.dependencies]
|
||||
# Core async and utilities - OPTIMIZED VERSIONS
|
||||
tokio = { version = "1.40", features = ["rt-multi-thread", "macros", "net", "sync", "time", "fs", "signal", "io-util", "test-util"] }
|
||||
@@ -270,7 +297,7 @@ secrecy = { version = "0.8", features = ["serde"] }
|
||||
zeroize = { version = "1.8", features = ["std", "zeroize_derive"] }
|
||||
|
||||
# HashiCorp Vault integration
|
||||
vaultrs = "0.7"
|
||||
vaultrs = "0.7" # 0.8 introduces reqwest 0.13 dup (vs workspace 0.12) — net loss
|
||||
|
||||
# Broker connectivity
|
||||
tokio-tungstenite = { version = "0.24" }
|
||||
@@ -292,7 +319,7 @@ redis = { version = "0.27", features = ["tokio-comp", "json", "connection-manage
|
||||
sqlx = { version = "0.8.6", default-features = false, features = ["runtime-tokio-rustls", "postgres", "chrono", "uuid", "rust_decimal", "migrate", "derive"] } # derive feature required for compile-time query verification, postgres-only usage with rustls (no MySQL)
|
||||
|
||||
# MINIMAL statistics only - ALL HEAVY ML DEPENDENCIES REMOVED FROM WORKSPACE
|
||||
statrs = "0.17" # Basic statistics only
|
||||
statrs = "0.18" # Basic statistics only — 0.18 uses nalgebra 0.33 (dedupes vs ml-* crates)
|
||||
approx = "0.5" # Floating point approximations only
|
||||
# ALL ML DEPENDENCIES COMPLETELY REMOVED FROM WORKSPACE:
|
||||
# linfa, linfa-linear, linfa-clustering - MOVED TO ml_training_service
|
||||
@@ -314,7 +341,7 @@ fs2 = "0.4"
|
||||
flate2 = "1.0"
|
||||
|
||||
# Web framework for monitoring (minimal)
|
||||
axum = { version = "0.7", features = ["json"] }
|
||||
axum = { version = "0.8", features = ["json"] } # 0.8 dedupes with tonic 0.14's transitive axum 0.8
|
||||
|
||||
# gRPC and protocol buffers - CONSOLIDATED VERSIONS
|
||||
# Upgraded to 0.14 for Sync BoxBody support (enables HTTP-layer auth middleware)
|
||||
@@ -373,14 +400,14 @@ async-stream = "0.3"
|
||||
zstd = "0.13"
|
||||
lz4 = "1.24"
|
||||
# Object storage for S3 integration
|
||||
object_store = { version = "0.11", features = ["aws"] }
|
||||
object_store = { version = "0.11", features = ["aws"] } # 0.13 has API breakage (put/get/head/delete moved); skipping
|
||||
# Parquet/Arrow REQUIRED for market data persistence and replay in backtesting
|
||||
parquet = { version = "56", default-features = false, features = ["arrow", "snap"] } # Minimal for RecordBatch + SNAPPY compression
|
||||
arrow = { version = "56", default-features = false, features = [] } # Minimal for arrays/schema only
|
||||
arrow-array = "56"
|
||||
arrow-schema = "56"
|
||||
dbn = "0.42" # Databento Binary format for real market data
|
||||
hashbrown = "0.14"
|
||||
hashbrown = "0.16" # 0.16 dedupes with indexmap 2.x's transitive hashbrown
|
||||
lru = "0.12"
|
||||
backoff = "0.4"
|
||||
|
||||
@@ -498,6 +525,98 @@ split-debuginfo = "unpacked" # Faster linking on Linux
|
||||
[profile.dev]
|
||||
split-debuginfo = "unpacked" # Faster linking for dev builds
|
||||
|
||||
# ── Per-package codegen-units overrides ───────────────────────────────────────
|
||||
# Default for all release builds: codegen-units = 16 → parallel LLVM, faster
|
||||
# compile. Numerical-sensitive crates (anything whose fp output the DQN
|
||||
# regression suite depends on bit-for-bit) override back to 1 to preserve the
|
||||
# exact optimization decisions LLVM makes today.
|
||||
#
|
||||
# DO NOT remove an override without running the numerical regression suite.
|
||||
[profile.release.package."*"]
|
||||
codegen-units = 16
|
||||
|
||||
# Workspace numerical crates — must keep CGU=1 for bit-exact reproducibility
|
||||
[profile.release.package.ml]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-core]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-dqn]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-ppo]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-supervised]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-ensemble]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-features]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-labeling]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-explainability]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-hyperopt]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-checkpoint]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-data]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-data-validation]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-validation]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-asset-selection]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-backtesting]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-regime]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-regime-detection]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-risk]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-stress-testing]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-universe]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-paper-trading]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-observability]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ml-security]
|
||||
codegen-units = 1
|
||||
[profile.release.package.model_loader]
|
||||
codegen-units = 1
|
||||
[profile.release.package.training_uploader]
|
||||
codegen-units = 1
|
||||
[profile.release.package.risk]
|
||||
codegen-units = 1
|
||||
[profile.release.package.trading_engine]
|
||||
codegen-units = 1
|
||||
|
||||
# External numerical/statistical crates
|
||||
[profile.release.package.ndarray]
|
||||
codegen-units = 1
|
||||
[profile.release.package.nalgebra]
|
||||
codegen-units = 1
|
||||
[profile.release.package.simba]
|
||||
codegen-units = 1
|
||||
[profile.release.package.num-traits]
|
||||
codegen-units = 1
|
||||
[profile.release.package.num-complex]
|
||||
codegen-units = 1
|
||||
[profile.release.package.libm]
|
||||
codegen-units = 1
|
||||
[profile.release.package.statrs]
|
||||
codegen-units = 1
|
||||
[profile.release.package.rand_distr]
|
||||
codegen-units = 1
|
||||
[profile.release.package.rust_decimal]
|
||||
codegen-units = 1
|
||||
[profile.release.package.ordered-float]
|
||||
codegen-units = 1
|
||||
[profile.release.package.cudarc]
|
||||
codegen-units = 1
|
||||
|
||||
[dev-dependencies]
|
||||
anyhow.workspace = true
|
||||
chrono.workspace = true
|
||||
|
||||
@@ -96,8 +96,8 @@ arrow.workspace = true
|
||||
dashmap.workspace = true
|
||||
parking_lot.workspace = true
|
||||
|
||||
# Rate limiting and caching
|
||||
governor = "0.6"
|
||||
# Rate limiting and caching (governor 0.10 dedupes dashmap to v6)
|
||||
governor = "0.10"
|
||||
nonzero = "0.2"
|
||||
redis = { workspace = true, optional = true }
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ path = "src/main.rs"
|
||||
tokio = { workspace = true, features = ["sync", "time"] }
|
||||
anyhow.workspace = true
|
||||
tracing.workspace = true
|
||||
tracing-subscriber.workspace = true
|
||||
serde.workspace = true
|
||||
serde_json.workspace = true
|
||||
once_cell.workspace = true
|
||||
@@ -24,40 +23,31 @@ clap.workspace = true
|
||||
|
||||
# gRPC and networking (Tonic 0.14)
|
||||
tonic = { workspace = true, features = ["transport", "server", "tls-ring", "tls-webpki-roots"] }
|
||||
# Used by generated proto code: tonic_prost::ProstCodec
|
||||
tonic-prost.workspace = true
|
||||
tonic-reflection.workspace = true
|
||||
tonic-health.workspace = true
|
||||
# Used by generated proto code: ::prost::Message derive
|
||||
prost.workspace = true
|
||||
tower = { workspace = true, features = ["util"] }
|
||||
tower-layer.workspace = true
|
||||
tower-service.workspace = true
|
||||
hyper.workspace = true
|
||||
http-body.workspace = true
|
||||
http-body-util.workspace = true
|
||||
hyper-util.workspace = true
|
||||
bytes.workspace = true
|
||||
|
||||
# Async streams and futures
|
||||
tokio-stream.workspace = true
|
||||
async-stream.workspace = true
|
||||
futures.workspace = true
|
||||
async-trait.workspace = true
|
||||
|
||||
# Performance monitoring
|
||||
hdrhistogram.workspace = true
|
||||
prometheus = { workspace = true, features = ["process"] }
|
||||
|
||||
# Cryptography and security
|
||||
sha2.workspace = true
|
||||
x509-parser = { version = "0.16", features = ["verify"] }
|
||||
reqwest = { version = "0.12", features = ["rustls-tls"], default-features = false }
|
||||
reqwest = { version = "0.12", features = ["rustls-tls", "json"], default-features = false }
|
||||
base64.workspace = true
|
||||
jsonwebtoken.workspace = true
|
||||
chrono.workspace = true
|
||||
ocsp = "0.4"
|
||||
lru = "0.12"
|
||||
hex = "0.4"
|
||||
const-oid = "0.9"
|
||||
|
||||
# MFA/TOTP dependencies (optional, enabled by default via "mfa" feature)
|
||||
totp-rs = { version = "5.6", optional = true }
|
||||
@@ -68,18 +58,14 @@ hmac = { version = "0.12", optional = true }
|
||||
sha1 = "0.10"
|
||||
urlencoding = { version = "2.1", optional = true }
|
||||
secrecy = { version = "0.8", features = ["serde"] }
|
||||
zeroize.workspace = true
|
||||
|
||||
thiserror.workspace = true
|
||||
uuid.workspace = true
|
||||
sqlx = { workspace = true, features = ["postgres", "chrono", "uuid", "json", "macros"] }
|
||||
|
||||
num-traits.workspace = true
|
||||
rust_decimal.workspace = true
|
||||
rand.workspace = true
|
||||
|
||||
# Internal workspace crates
|
||||
trading_engine.workspace = true
|
||||
common = { workspace = true, features = ["database"] }
|
||||
config = { workspace = true, features = ["postgres"] }
|
||||
|
||||
@@ -90,9 +76,9 @@ redis = { workspace = true, features = ["tokio-comp", "connection-manager"] }
|
||||
kube = { version = "3.0", features = ["client", "runtime", "derive"] }
|
||||
k8s-openapi = { version = "0.27", features = ["latest"] }
|
||||
|
||||
# Rate limiting
|
||||
governor = "0.6"
|
||||
dashmap = "6.0"
|
||||
# Rate limiting (governor 0.10 dedupes dashmap to v6)
|
||||
governor = "0.10"
|
||||
dashmap = { workspace = true }
|
||||
|
||||
# HTTP and networking
|
||||
http = "1.1"
|
||||
@@ -106,8 +92,8 @@ regex = "1.11"
|
||||
# TLS crypto provider for kube-rs in-cluster client
|
||||
rustls = { version = "0.23", default-features = false, features = ["ring"] }
|
||||
|
||||
# HTTP server for Prometheus metrics endpoint
|
||||
axum = "0.7"
|
||||
# HTTP server for Prometheus metrics endpoint (workspace pinned to 0.8 to dedupe with tonic)
|
||||
axum.workspace = true
|
||||
|
||||
# gRPC-Web support for browser access
|
||||
tonic-web = "0.13"
|
||||
|
||||
Reference in New Issue
Block a user