[package] name = "foxhunt" version.workspace = true edition.workspace = true rust-version.workspace = true authors.workspace = true license.workspace = true repository.workspace = true homepage.workspace = true documentation.workspace = true publish.workspace = true keywords.workspace = true categories.workspace = true description = "Foxhunt HFT Trading System - High-frequency trading with ML and comprehensive monitoring" [dependencies] # Core dependencies for the root package tokio.workspace = true serde = { workspace = true, features = ["derive"] } serde_json.workspace = true tracing.workspace = true tracing-subscriber.workspace = true # Database dependencies for binaries redis.workspace = true sqlx.workspace = true # gRPC dependencies for service binaries tonic.workspace = true tokio-stream.workspace = true prost.workspace = true chrono.workspace = true thiserror.workspace = true prometheus.workspace = true lazy_static.workspace = true axum.workspace = true rand.workspace = true # Core trading infrastructure trading_engine.workspace = true # Risk management risk.workspace = true # Core backtesting and data modules (ML dependencies REMOVED to eliminate cascade) backtesting.workspace = true data.workspace = true # Benchmarking criterion = { workspace = true } fastrand = { workspace = true } async-trait = { workspace = true } futures = { workspace = true } uuid = { workspace = true } bincode = { workspace = true } flate2 = { workspace = true } http = { workspace = true } # ALL ML dependencies removed from root - GPU/ML tests moved to ML training service anyhow.workspace = true # Performance benchmarks removed - benchmarks moved to individual crates # Comprehensive benchmark suite for performance regression detection # Performance regression testing suite (primary) [[bench]] name = "performance_regression" harness = false path = "benches/performance_regression.rs" [[bench]] name = "trading_latency" harness = false path = "benches/comprehensive/trading_latency.rs" [[bench]] name = "database_performance" harness = false path = "benches/comprehensive/database_performance.rs" [[bench]] name = "streaming_throughput" harness = false path = "benches/comprehensive/streaming_throughput.rs" [[bench]] name = "metrics_overhead" harness = false path = "benches/comprehensive/metrics_overhead.rs" [[bench]] name = "end_to_end" harness = false path = "benches/comprehensive/end_to_end.rs" [[bench]] name = "full_trading_cycle" harness = false path = "benches/comprehensive/full_trading_cycle.rs" [workspace] resolver = "2" members = [ # Library crates "crates/trading_engine", "crates/risk", "crates/risk-data", "crates/trading-data", "crates/ml", "crates/ml-core", "crates/ml-ensemble", "crates/ml-dqn", "crates/ml-ppo", "crates/ml-supervised", "crates/ml-alpha", "crates/ml-data", "crates/ml-hyperopt", "crates/ml-features", "crates/ml-labeling", "crates/ml-regime", "crates/ml-regime-detection", "crates/ml-checkpoint", "crates/ml-data-validation", "crates/ml-validation", "crates/ml-risk", "crates/ml-security", "crates/ml-backtesting", "crates/ml-asset-selection", "crates/ml-universe", "crates/ml-observability", "crates/ml-stress-testing", "crates/ml-explainability", "crates/ml-paper-trading", "crates/data", "crates/backtesting", "crates/common", "crates/storage", "crates/model_loader", "crates/market-data", "crates/database", "crates/config", "crates/ctrader-openapi", # Training sidecar "crates/training_uploader", # CLI binary "bin/fxt", "bin/fxt-backtest", # Services "services/backtesting_service", "services/broker_gateway_service", "services/trading_service", "services/ml_training_service", "services/data_acquisition_service", "services/trading_agent_service", "services/api", # Testing "testing/integration", "testing/e2e", "testing/load", "testing/service-load", "testing/stress", "testing/service-integration", "testing/api-load", ] exclude = [ "testing/vault-integration", ] [workspace.package] version = "1.0.0" edition = "2021" rust-version = "1.85" authors = ["Foxhunt HFT Trading System"] license = "MIT OR Apache-2.0" repository = "https://github.com/user/foxhunt" homepage = "https://github.com/user/foxhunt" documentation = "https://docs.rs/foxhunt" 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"] } tokio-util = { version = "0.7", features = ["codec", "io", "rt"] } tokio-stream = { version = "0.1", features = ["sync"] } tokio-test = "0.4" tokio-retry = "0.3" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde_yaml = "0.9" toml = "0.8" uuid = { version = "1.10", features = ["v4", "serde", "fast-rng"] } thiserror = "1.0" anyhow = "1.0" futures = { version = "0.3", features = ["std", "alloc", "async-await"] } futures-util = "0.3" futures-test = "0.3" async-trait = "0.1" once_cell = "1.20" # Time handling chrono = { version = "0.4.38", features = ["serde"] } # Financial and numerical types rust_decimal = { version = "1.0", features = ["serde", "macros", "maths"] } rust_decimal_macros = "1.36" bigdecimal = { version = "0.4", features = ["serde"] } num-bigint = "0.4" num-traits = "0.2" num = "0.4" # Random number generation rand = { version = "0.8.5", features = ["small_rng"] } fastrand = "2.0" rand_chacha = "0.3.1" rand_distr = "0.4" # Logging and tracing log = "0.4" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter", "json"] } tracing-appender = "0.2" # Serialization bincode = "1.3" semver = { version = "1.0", features = ["serde"] } # High-performance data structures rustc-hash = "1.1" ahash = "0.8" indexmap = { version = "2.0", features = ["serde"] } crossbeam = "0.8" crossbeam-queue = "0.3" crossbeam-channel = "0.5" crossbeam-utils = "0.8" parking_lot = { version = "0.12", features = ["deadlock_detection"] } arrayvec = { version = "0.7", features = ["serde"] } lazy_static = "1.4" memmap2 = "0.9" libc = "0.2" num_cpus = "1.16" dashmap = { version = "6.1", features = ["serde"] } bytes = "1.5" smallvec = { version = "1.11", features = ["serde", "const_generics"] } prometheus = "0.14" questdb-rs = { version = "4", default-features = false } # MINIMAL numerical libraries only - ALL ML/GPU frameworks REMOVED from workspace nalgebra = { version = "0.33", features = ["serde", "rand"] } ndarray = { version = "0.15", features = ["serde"] } # ALL HEAVY ML/GPU DEPENDENCIES COMPLETELY REMOVED FROM WORKSPACE: # candle-core, candle-nn, candle-transformers, candle-optimisers - MOVED TO ml_training_service # ort, wgpu, cudarc - MOVED TO ml_training_service # tch, torch-sys (PyTorch) - MOVED TO ml_training_service # linfa, linfa-clustering, linfa-linear - MOVED TO ml_training_service # smartcore, gymnasium, rerun - MOVED TO ml_training_service # Network and HTTP reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "gzip"] } # trading_engine needs gzip, data needs json http = "1.0" # Security and cryptography argon2 = "0.5" sha2 = "0.10" jsonwebtoken = "9.3" # Secure secret handling secrecy = { version = "0.8", features = ["serde"] } zeroize = { version = "1.8", features = ["std", "zeroize_derive"] } # HashiCorp Vault integration vaultrs = "0.7" # 0.8 introduces reqwest 0.13 dup (vs workspace 0.12) — net loss # Broker connectivity tokio-tungstenite = { version = "0.24" } xml-rs = "0.8" time = { version = "0.3", features = ["serde"] } ibapi = "1.2" native-tls = "0.2" tokio-native-tls = "0.3" # databento = "0.34.0" # REMOVED - too heavy, use direct data feeds instead # Configuration and file handling csv = "1.3" base64 = "0.22" regex = "1.0" url = "2.4" hex = "0.4" md5 = "0.7" # Database redis = { version = "0.27", features = ["tokio-comp", "json", "connection-manager"] } 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.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 # smartcore - MOVED TO ml_training_service # candle-core, candle-nn, candle-optimisers, candle-transformers - MOVED TO ml_training_service # cudarc, tch, torch-sys - MOVED TO ml_training_service # polars - REMOVED (not used in codebase, replaced with minimal CSV parsing) # orderbook = "0.1" # REMOVED - unmaintained crate with failure dependency (RUSTSEC-2020-0036) # Performance and utilities rayon = "1.0" wide = { version = "0.7", features = ["serde"] } bytemuck = { version = "1.14", features = ["derive"] } autocfg = "1.1" core_affinity = "0.8" nix = "0.27" bumpalo = { version = "3.14", features = ["collections"] } fs2 = "0.4" flate2 = "1.0" # Web framework for monitoring (minimal) 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) # NOTE: 0.14 replaced 'tls' with 'tls-ring'/'tls-aws-lc' + 'tls-native-roots'/'tls-webpki-roots' # NOTE: 0.14 moved prost build functionality to 'tonic-prost-build' crate # NOTE: 0.14 requires 'tonic-prost' for generated code runtime # NOTE: tonic-prost 0.14 requires prost 0.14 (upgraded from 0.13) tonic = { version = "0.14", features = ["server", "transport", "tls-ring", "tls-webpki-roots"] } tonic-prost = "0.14" tonic-prost-build = "0.14" tonic-reflection = "0.14" tonic-health = "0.14" prost = "0.14" prost-build = "0.14" prost-types = "0.14" hyper = { version = "1.0", features = ["server"] } # MINIMAL features only http-body = "1.0" # Required for generic body types in Tonic 0.14 http-body-util = "0.1" # Required for hyper 1.0 body utilities hyper-util = { version = "0.1", features = ["tokio", "server"] } # Utilities for hyper 1.0 tower = { version = "0.4", features = ["timeout", "limit", "util"] } tower-http = { version = "0.5", features = ["trace", "cors"] } tower-layer = "0.3" tower-service = "0.3" # Testing dependencies - MINIMAL ONLY (heavy testing libs removed) proptest = "1.5" # Restored - needed by many crates quickcheck = "1.0" # Restored - needed by trading_engine and tests rstest = "0.22" # Restored - needed by trading_engine test-case = "3.3" # Restored - needed by config crate tempfile = "3.12" serial_test = "3.1" # REMOVED HEAVY TEST DEPS: wiremock, insta, testcontainers, fake, httpmock, tracing-test, mockall (0 usages in codebase) # Performance testing - CONSOLIDATED criterion = { version = "0.5", features = ["html_reports", "async_tokio"] } hdrhistogram = "7.5" # Database clients for integration testing influxdb2 = { version = "0.5", default-features = false, features = ["native-tls"] } # OpenTelemetry for production monitoring and extensive logging # NOTE: otel-otlp 0.31 uses tonic 0.14 (matching workspace), fixing the tonic version mismatch # that prevented with_channel() for explicit plaintext gRPC channels. tracing-opentelemetry = "0.32" opentelemetry = { version = "0.31", features = ["trace", "metrics", "logs"] } opentelemetry-otlp = { version = "0.31", default-features = false, features = ["grpc-tonic", "metrics", "trace", "logs"] } opentelemetry_sdk = { version = "0.31", features = ["rt-tokio", "metrics", "trace", "logs"] } # Additional commonly used dependencies - CONSOLIDATED # Build dependencies already defined above with tonic dependencies # Async utilities async-stream = "0.3" # Data processing and compression zstd = "0.13" lz4 = "1.24" # Object storage for S3 integration 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.16" # 0.16 dedupes with indexmap 2.x's transitive hashbrown lru = "0.12" backoff = "0.4" # Development and configuration - OPTIMIZED dotenvy = "0.15" clap = { version = "4.5", features = ["derive", "env"] } env_logger = "0.11" color-eyre = "0.6" # Network and protocols - OPTIMIZED # Specialized dependencies metrics = "0.23" metrics-exporter-prometheus = "0.15" # Additional test dependencies arc-swap = "1.6" # Local workspace crates (for inter-crate dependencies) trading_engine = { path = "crates/trading_engine" } data = { path = "crates/data" } fxt = { path = "bin/fxt" } risk = { path = "crates/risk" } risk-data = { path = "crates/risk-data" } backtesting = { path = "crates/backtesting" } ml = { path = "crates/ml" } ml-core = { path = "crates/ml-core" } ml-ensemble = { path = "crates/ml-ensemble" } ml-dqn = { path = "crates/ml-dqn" } ml-ppo = { path = "crates/ml-ppo" } ml-supervised = { path = "crates/ml-supervised" } ml-hyperopt = { path = "crates/ml-hyperopt" } ml-features = { path = "crates/ml-features" } ml-alpha = { path = "crates/ml-alpha" } ml-labeling = { path = "crates/ml-labeling" } ml-regime = { path = "crates/ml-regime" } ml-regime-detection = { path = "crates/ml-regime-detection" } ml-checkpoint = { path = "crates/ml-checkpoint" } ml-data-validation = { path = "crates/ml-data-validation" } ml-validation = { path = "crates/ml-validation" } ml-risk = { path = "crates/ml-risk" } ml-security = { path = "crates/ml-security" } ml-backtesting = { path = "crates/ml-backtesting" } ml-asset-selection = { path = "crates/ml-asset-selection" } ml-universe = { path = "crates/ml-universe" } ml-observability = { path = "crates/ml-observability" } ml-stress-testing = { path = "crates/ml-stress-testing" } ml-explainability = { path = "crates/ml-explainability" } ml-paper-trading = { path = "crates/ml-paper-trading" } common = { path = "crates/common" } storage = { path = "crates/storage" } market-data = { path = "crates/market-data" } config = { path = "crates/config" } database = { path = "crates/database" } ctrader-openapi = { path = "crates/ctrader-openapi" } [features] default = [] cpu-only = [] integration-tests = [] [profile.release] opt-level = 3 debug = false debug-assertions = false overflow-checks = false lto = "fat" panic = 'abort' codegen-units = 1 strip = true # Fast release builds for CI iteration — skip fat LTO, parallelize codegen. # Usage: cargo build --profile dev-release -p # ~3-5x faster compile than full release, ~10-15% slower runtime. [profile.dev-release] inherits = "release" opt-level = 2 lto = "thin" codegen-units = 16 strip = true # HFT production profile — identical to release but preserves frame pointers # for perf profiling. Used by deploy scripts. [profile.hft] inherits = "release" opt-level = 3 lto = "fat" codegen-units = 1 strip = false # Fast release for local GPU testing — parallel codegen, thin LTO. # Usage: cargo test --profile release-test -p ml --lib -- test_name --ignored # ~4x faster compile than full release, ~5% slower runtime. Good enough for GPU tests. [profile.release-test] inherits = "release" opt-level = 3 lto = "thin" codegen-units = 16 strip = true panic = 'unwind' # Tests need unwinding for panic capture [profile.bench] inherits = "release" debug = false [profile.test] opt-level = 0 # Disable optimizations for faster test compilation debug = 0 # Remove debug info completely for faster linking debug-assertions = false # Disabled for faster test compilation overflow-checks = false # Disabled for faster test compilation lto = false incremental = true codegen-units = 256 # Maximum parallelism for test builds 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 common.workspace = true config.workspace = true futures.workspace = true proptest = "1.4" rust_decimal.workspace = true rust_decimal_macros.workspace = true rand_distr.workspace = true serde_json.workspace = true sqlx.workspace = true tempfile = "3.13" fxt.workspace = true # Required by tests/fixtures/mod.rs tokio.workspace = true trading_engine.workspace = true uuid.workspace = true # Comprehensive clippy configuration for production-ready HFT system [workspace.lints.clippy] # Module structure - allow mod.rs files for complex modules with subdirectories mod_module_files = "allow" self_named_module_files = "allow" # Critical safety lints - KEEP AS DENY (safety-critical for HFT) panic = "deny" unimplemented = "deny" todo = "deny" out_of_bounds_indexing = "deny" unchecked_duration_subtraction = "deny" unreachable = "deny" exit = "deny" mem_forget = "deny" infinite_loop = "deny" get_unwrap = "deny" unwrap_in_result = "deny" use_debug = "deny" # Safety lints - WARN (fix incrementally, not blocking for HFT compatibility) unwrap_used = "warn" expect_used = "warn" indexing_slicing = "warn" # TIER 3: HFT Requirements - Permanently ALLOW # These operations are fundamental to trading systems and are NOT safety issues. # Industry standard: QuantLib, ta-rs, polars, ndarray all allow these operations. float_arithmetic = "allow" # Required for price * quantity, PnL calculations default_numeric_fallback = "allow" # Rust idiom, safe type inference (e.g., let x = 0.25;) as_conversions = "allow" # Performance-critical conversions (f64 ↔ i64) cast_possible_truncation = "allow" # Controlled by domain constraints (prices, quantities) cast_precision_loss = "allow" # Acceptable for price normalization cast_sign_loss = "allow" # Quantity conversions (always positive) cast_lossless = "allow" # Let Rust infer safe casts arithmetic_side_effects = "allow" # Core business logic for trading calculations # High-priority restriction lints for HFT safety assertions_on_result_states = "deny" clone_on_ref_ptr = "allow" # Arc::clone() is intentional for shared state create_dir = "deny" dbg_macro = "deny" decimal_literal_representation = "deny" deref_by_slicing = "deny" disallowed_script_idents = "deny" else_if_without_else = "deny" empty_drop = "deny" empty_structs_with_brackets = "deny" error_impl_error = "deny" filetype_is_file = "deny" float_cmp_const = "deny" fn_to_numeric_cast_any = "deny" format_push_string = "deny" host_endian_bytes = "deny" if_then_some_else_none = "deny" impl_trait_in_params = "deny" inline_asm_x86_att_syntax = "deny" inline_asm_x86_intel_syntax = "deny" integer_division = "warn" large_include_file = "deny" let_underscore_must_use = "deny" lossy_float_literal = "deny" map_err_ignore = "warn" missing_enforced_import_renames = "deny" mixed_read_write_in_expression = "deny" modulo_arithmetic = "deny" multiple_inherent_impl = "deny" multiple_unsafe_ops_per_block = "warn" mutex_atomic = "deny" needless_raw_strings = "deny" non_ascii_literal = "deny" partial_pub_fields = "deny" # Observability - TIER 3: Required for CLI, debugging, and error reporting print_stderr = "allow" # Error reporting before logger initialization print_stdout = "allow" # CLI output, debugging, benchmarks (criterion) pub_use = "allow" rc_buffer = "deny" rc_mutex = "deny" rest_pat_in_fully_bound_structs = "deny" same_name_method = "deny" semicolon_inside_block = "deny" shadow_reuse = "deny" shadow_same = "deny" shadow_unrelated = "deny" str_to_string = "deny" string_add = "deny" string_slice = "deny" string_to_string = "deny" suspicious_xor_used_as_pow = "deny" tests_outside_test_module = "deny" try_err = "deny" undocumented_unsafe_blocks = "warn" unnecessary_safety_comment = "deny" unnecessary_safety_doc = "deny" unseparated_literal_suffix = "deny" verbose_file_reads = "deny" wildcard_enum_match_arm = "deny" # Performance lints for HFT systems missing_const_for_fn = "warn" trivially_copy_pass_by_ref = "warn" large_types_passed_by_value = "warn" redundant_clone = "warn" unnecessary_wraps = "warn" single_char_lifetime_names = "warn" doc_markdown = "warn" manual_let_else = "warn" # Readability and maintainability lints cognitive_complexity = "warn" too_many_arguments = "warn" too_many_lines = "warn" type_complexity = "warn" large_enum_variant = "warn" enum_variant_names = "warn" module_name_repetitions = "warn" similar_names = "warn" single_match_else = "warn" unnecessary_cast = "warn" used_underscore_binding = "warn" wildcard_imports = "warn" # Pedantic lints that are noise in HFT/ML code — permanently allow # These are intentional domain patterns, not safety issues needless_pass_by_value = "allow" # Trait signatures require owned values return_self_not_must_use = "allow" # Builder patterns don't need must_use redundant_closure_for_method_calls = "allow" # Explicit closures preferred for clarity map_unwrap_or = "allow" # map().unwrap_or() is idiomatic in many contexts unreadable_literal = "allow" # Large numeric literals in financial code cloned_instead_of_copied = "allow" # Explicit .cloned() for clarity unnecessary_literal_bound = "allow" # Literal bounds for API clarity ignored_unit_patterns = "allow" # Unit patterns in match arms explicit_iter_loop = "allow" # Explicit .iter() preferred for clarity unnecessary_debug_formatting = "allow" # Debug formatting in error messages missing_panics_doc = "allow" # Panics documented at usage site struct_excessive_bools = "allow" # Boolean flags efficient for HFT state struct_field_names = "allow" # Domain-specific field naming redundant_else = "allow" # Explicit else for clarity assigning_clones = "allow" # Clone assignment patterns unnested_or_patterns = "allow" # Explicit or-patterns for clarity manual_string_new = "allow" # String::new() vs String::from("") is stylistic comparison_chain = "allow" # Explicit comparisons preferred range_plus_one = "allow" # Explicit range bounds case_sensitive_file_extension_comparisons = "allow" # File extensions handled correctly needless_for_each = "allow" # for_each preferred in some contexts inefficient_to_string = "allow" # ToString implementations bool_to_int_with_if = "allow" # Explicit bool-to-int conversion match_wildcard_for_single_variants = "allow" # Explicit wildcard in single-variant matches semicolon_if_nothing_returned = "allow" # Semicolons for consistency default_trait_access = "allow" # Default::default() for clarity needless_continue = "allow" # Explicit continue for control flow clarity many_single_char_names = "allow" # Math variable names (x, y, z, w, etc.) missing_errors_doc = "allow" # Internal APIs don't need full error documentation missing_safety_doc = "allow" # Safety documented at usage site inline_always = "allow" # Performance-critical inlining hints unused_async = "allow" # Async needed for trait implementations unused_self = "allow" # Self parameter needed for trait consistency must_use_candidate = "allow" # Not all functions need must_use should_implement_trait = "allow" # Custom method names over std traits match_same_arms = "allow" # Explicit match arms for clarity needless_borrows_for_generic_args = "allow" # Explicit borrows for API clarity manual_clamp = "allow" # Explicit min/max chains for clarity implicit_hasher = "allow" # HashMap/HashSet in public APIs no_effect_underscore_binding = "allow" # Underscore bindings for side effects mixed_attributes_style = "allow" # Mix of inner/outer attributes acceptable cargo_common_metadata = "allow" # Not all crates need full metadata multiple_crate_versions = "allow" # Dependency tree allows multiple versions [workspace.lints.rust] unsafe_code = "warn" missing_docs = "allow" unreachable_pub = "warn" unused_crate_dependencies = "allow" # Allow in tests/examples where not all deps are used unused_extern_crates = "allow" # Allow in tests/examples where not all deps are used unused_import_braces = "warn" unused_lifetimes = "warn" unused_qualifications = "allow" # Allow std:: prefixes for clarity variant_size_differences = "warn" [patch.crates-io] # Local cudarc fork: adds load_cubin() without nvrtc feature gate cudarc = { path = "vendor/cudarc" }