# aura — a "game engine for traders": a Rust framework + playground to author # trading nodes, backtest them deterministically and in parallel, compose them # fractally, and freeze a validated strategy into a standalone bot. # # Workspace split is driven by the cdylib hot-reload boundary: `aura-core` is the # shared contract that BOTH the engine and every hot-reloadable signal/node # cdylib link against. Add crates only when a boundary proves real. [workspace] resolver = "3" members = [ "crates/aura-core", "crates/aura-std", "crates/aura-vocabulary", "crates/aura-market", "crates/aura-strategy", "crates/aura-backtest", "crates/aura-engine", "crates/aura-analysis", "crates/aura-composites", "crates/aura-cli", "crates/aura-ingest", "crates/aura-registry", "crates/aura-research", "crates/aura-campaign", "crates/aura-bench", ] [workspace.package] edition = "2024" version = "0.1.0" license = "proprietary" publish = false [workspace.dependencies] serde = { version = "1", features = ["derive"] } # float_roundtrip is load-bearing for bit-identical reproduction (`aura reproduce`, # #158): an f64 blueprint param (e.g. a Bias `scale`) is round-tripped through the # content-addressed store as JSON, and the DEFAULT serde_json parser can be 1 ULP off, # which would re-derive a member as DIVERGED. This feature guarantees the exact f64 is # parsed back. Exercised (with a 1-ULP canary value) by aura-cli's # `f64_blueprint_param_survives_store_round_trip_bit_identically`. serde_json = { version = "1", features = ["float_roundtrip"] } # Dependencies at opt-level 2, workspace crates at the dev default (0): the E2E # suite spawns the debug `aura` binary whose wall-clock is dominated by dependency # code (zip inflate, sha2 dylib hashing, serde) — optimizing deps is multiplicative # there, while workspace crates stay fast-to-rebuild and debuggable. Float pins are # unaffected: every pinned float is computed by workspace code (IEEE semantics are # opt-level-independent in Rust regardless). [profile.dev.package."*"] opt-level = 2