a54f53e4eda68bfe800f16144e9bc5cb56d7287a
Closes out Wave 4.1 (Phase 1.5.b consumer migration). Wave 4.1a (a8da1cb9c) landed bn_tanh_concat_dd_kernel that fuses dd_pct into the trunk input; Wave 4.1b (eb9515e41) wired s1_input_dim 102→103 through GRN reshape + 4 forward + 3 backward call sites. Wave 4.1c proves the wiring actually changes the policy: a synthetic GPU forward composing launch_sp15_bn_concat_dd with cublasSgemm_v2 against random Xavier-init weights W[proj_h=4, 103] yields measurably different action distributions when ISV[DD_PCT]=0.0 vs 0.10 — observed mean KL=1.158e-4 (max=3.005e-4) vs threshold 1e-6 (~100× headroom). Why a synthetic projection vs the real GRN trunk: the seeded forward_trunk_for_test helper from Wave 4.1a noted (lines 2304-2319) that exposing the trainer's trunk forward for tests would require either (a) a public surface change on DQNTrainer exposing internal cuBLAS handles + GRN scratch + weights (the trainer's fused_ctx is pub(crate) and only initialised inside the training loop at training_loop.rs:547 — DQNTrainer::new returns with fused_ctx: None), or (b) duplicating the trunk's cuBLAS setup in a test (≥200 lines of buffer plumbing). Both options are architecturally heavier than the test's purpose justifies. Per the spec dispatch ("the test's purpose is 'non-zero KL proves the wire is connected' not 'verifies trained behavior'"), the synthetic single-layer projection is the right scope: it exercises the new column-102 weights on the dd_pct value — exactly the path the real GRN's Linear_a first GEMM takes for w_a_h_s1[:, 102] (the dd_pct column added by Wave 4.1b's reshape). Test contract: - Two passes through launch_sp15_bn_concat_dd + cublasSgemm_v2 differ ONLY in ISV[DD_PCT_INDEX=406] (0.0 at-ATH vs 0.10 in-DD). - Inputs (bn_hidden, states) deterministic; weights deterministic via LCG seed=42 with Xavier-uniform bound = sqrt(6 / (103+4)) ≈ 0.237. - KL > 1e-6 (set 100× below the observed magnitude so a real wiring break fires this test, not silently passing). What this test does NOT verify: the full GRN composition (ELU/GLU/LN/residual) propagating dd_pct through h_s2 + the branch advantage heads. That end-to-end behavior is exercised by the L40S smoke + production training runs. Phase 1.5.b orphan launcher chain fully eliminated per feedback_wire_everything_up: kernel landed (4.1a) → consumer migration (4.1b) → behavioral verification (4.1c) — three atomic commits, the 3a/3b/3c split-pattern matching Wave 3's a/b decomposition. The Wave 4.1a transient orphan window opened ina8da1cb9c→ closed ineb9515e41→ behavioral coverage added here. Wave 4.1a's seeded helpers consumed: kl_divergence (used) and minimal_trainer_for_tests (retained but unused — the seeded comment correctly identified that exposing the trunk forward via the trainer surface is non-trivial, so the helper waits for a future cargo-cult test that needs trainer construction without GPU forward, e.g. weight-shape introspection). Touched: crates/ml/tests/sp15_phase1_oracle_tests.rs (+1 module sp15_wave_4_1c_behavioral with 1 ignored test, 2 helper fns, 1 assertion block — purely additive, no kernel or production-code changes), docs/dqn-wire-up-audit.md (Wave 4.1c entry at top of audit doc). Verified: - SQLX_OFFLINE=true cargo check -p ml --features cuda --tests clean (18 pre-existing unrelated warnings, no new warnings). - CUDA_COMPUTE_CAP=86 cargo test -p ml --test sp15_phase1_oracle_tests --features cuda -- --ignored bn_concat dd_pct --nocapture: 2 of 2 oracle tests green (Wave 4.1a bn_tanh_concat_dd_kernel_writes_dd_pct_column + Wave 4.1c dd_pct_trunk_input_shifts_policy_distribution). - cargo test -p ml --features cuda --lib: 947 passed / 12 failed — exactly matches Wave 4.1b baseline (test addition is in the --test integration target, not lib target). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…
…
…
…
…
…
…
Foxhunt
Production HFT trading system in Rust.
Architecture
The workspace contains 32 crates organized as follows:
Core Libraries (16)
| Crate | Purpose |
|---|---|
trading_engine |
Order processing, FIX 4.4, IB TWS, SIMD, RDTSC timing |
risk |
VaR, Kelly, circuit breakers, kill switches, compliance |
risk-data |
Risk data types and shared structures |
trading-data |
Trading data types |
ml |
DQN Rainbow, PPO, TFT, Mamba2, ensemble inference |
ml-data |
ML data types and feature definitions |
data |
Market data ingestion and storage |
backtesting |
Replay engine, strategy tester |
adaptive-strategy |
Ensemble execution, microstructure analysis |
common |
Shared types, resilience, error handling |
storage |
S3 and local model storage |
model_loader |
Model serialization and loading |
market-data |
Market data feed handlers |
database |
PostgreSQL access layer (SQLx) |
config |
Configuration management |
tli |
CLI commands and tooling |
Services (8)
| Service | Purpose |
|---|---|
backtesting_service |
gRPC backtesting service |
broker_gateway_service |
FIX routing, broker connectivity |
trading_service |
Core trading operations |
ml_training_service |
Model training orchestration |
data_acquisition_service |
Market data acquisition |
trading_agent_service |
Autonomous trading agents |
api_gateway |
gRPC API gateway with auth |
web-gateway |
Axum REST + WebSocket gateway |
Frontend
web-dashboard/ -- React 19 + TypeScript + Vite + TradingView charts.
Building
# Check compilation (no PostgreSQL required)
SQLX_OFFLINE=true cargo check --workspace
# Run tests for a specific crate
SQLX_OFFLINE=true cargo test -p <crate> --lib
# Clippy
SQLX_OFFLINE=true cargo clippy --workspace
ML Models
Four production model architectures on Candle v0.9.1 with CUDA:
- DQN Rainbow -- Deep Q-Network with prioritized replay, dueling heads, noisy nets
- PPO -- Proximal Policy Optimization with GAE and LSTM policies
- TFT -- Temporal Fusion Transformer for multi-horizon forecasting
- Mamba2 -- State space model for sequence prediction
Each model has a standalone trainer and a UnifiedTrainable adapter for the hyperopt pipeline.
Infrastructure
- Git: Gitea at
git.fxhnt.ai(Tailscale-only), Scaleway DEV1-S - Observability: OpenTelemetry OTLP (env
OTEL_EXPORTER_OTLP_ENDPOINT) - Database: PostgreSQL with SQLx offline mode for CI
License
Proprietary. All rights reserved.
Description
Languages
Rust
88.2%
Cuda
7.7%
Python
1.3%
Shell
1.1%
PLpgSQL
0.8%
Other
0.8%