[package] name = "aura-engine" edition.workspace = true version.workspace = true license.workspace = true publish.workspace = true [dependencies] aura-core = { path = "../aura-core" } # aura-analysis holds the domain-free post-run statistics and the # selection-provenance types the engine's `RunManifest.selection` embeds # (#136, reduced to the domain-free half by #291). Re-exported via `report::` # so callers resolve the types through aura-engine unchanged (C18). aura-analysis = { path = "../aura-analysis" } # serde is admitted under the amended C16 per-case dependency policy (INDEX.md): # it gives the run-report types a typed (de)serialization path for the run # registry (cycle 0029). serde's output is deterministic (C1-safe). serde = { workspace = true } # serde_json renders RunReport JSON for both the registry (disk) and stdout # (RunReport::to_json) — one shape, no hand-rolled writer (amended C16). serde_json = { workspace = true } # rayon is admitted under the amended C16 per-case dependency policy (INDEX.md): # it backs `run_indexed`'s work-stealing pool for the sweep/campaign executor. # It stays within C1 (parallelism across sims, never within one) — each sim # still runs its own deterministic, synchronous event loop on one thread; rayon # only fans the *disjoint* sims of a family out across threads, replacing # `std::thread::scope`. No dep on a workspace precedent (chrono's pattern: # direct versioned dep). rayon = "1" [dev-dependencies] # aura-backtest is TEST-ONLY (back to its pre-#291 home, C28 phase 2 D3): the # engine's own tests instantiate `RunReport` with `M = RunMetrics` # (SimBroker fixtures, summarize/RunMetrics literals) via aura-backtest's # concrete aliases. The library code stays metric-agnostic — `RunReport` # names no concrete metric type — so aura-backtest is out of [dependencies]. aura-backtest = { path = "../aura-backtest" } # aura-std is a TEST-ONLY dependency: the engine's own integration tests # (r_sma_e2e, random_sweep_e2e, ger40_breakout) drive real standard nodes through # a bootstrapped Harness. The engine's library code never names a concrete node — it # routes type-erased Scalar records (summarize_r reads the PositionManagement record # positionally, by index), so aura-std stays out of [dependencies] and the engine is # `-> aura-core` only. The node-naming composite-builders live in `aura-composites`. aura-std = { path = "../aura-std" } aura-market = { path = "../aura-market" } aura-strategy = { path = "../aura-strategy" } aura-vocabulary = { path = "../aura-vocabulary" } # chrono / chrono-tz build the Berlin-local-wall-clock epoch-ns timestamps the # GER40 session-breakout E2E fixture (tests/ger40_breakout.rs) feeds the engine, # exactly as `Session`'s own unit test does. Pinned to aura-std's versions (the # same DST-aware wall-clock math), test-only — never on the engine's hot path. chrono = { version = "0.4", default-features = false, features = ["clock"] } chrono-tz = { version = "0.10", default-features = false }