Files
Aura/Cargo.toml
T
claude b39fd63396 refactor: split the aura-std roster into C28 layer crates
Phase 4 of the Stratification milestone. aura-std held four C28 ladder
layers in one roster; this cuts them into layer-aligned, aura-core-only
node crates so the import direction is enforced by the crate graph:

- aura-std        — engine nodes only (arithmetic/logic/rolling + sinks)
- aura-market     — session, resample
- aura-strategy   — bias, stops, sizer, cost-model machinery
- aura-backtest   — sim_broker, position_management
- aura-vocabulary — the relocated closed std_vocabulary roster

Node modules move verbatim (byte-identical renames); consumers are
rewired by import path only. A new structural test
(aura-vocabulary/tests/c28_layering.rs) asserts each node crate's
[dependencies] stay within its C28-permitted inner set, catching the
acyclic-but-outward violation the compiler misses.

Behaviour byte-identical: full workspace suite green (1448 tests), no
golden edited, clippy -D warnings clean. C28 Status block updated.

closes #288
2026-07-19 20:28:20 +02:00

53 lines
2.1 KiB
TOML

# 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