1a6eafa056
Dissolve the aura-engine -> aura-std dependency by moving the vol_stop /
risk_executor composite-builders out of aura-engine into a new aura-composites
crate. This restores the engine's domain-free layering, which the
composites-in-engine placement (cycle 0065) had inverted.
Why: the engine routes type-erased Scalar records and never names a concrete
node -- summarize_r reads the PositionManagement record positionally, by column
index, without linking aura-std (which is exactly why aura-std was a dev-only
dependency before 0065). Parking the node-naming composite-builders inside
aura-engine forced the engine's production code to reference the node library
for the first time (aura-engine -> aura-std), an upside-down layering: the
engine is the foundation the node library builds upon, not the reverse.
The clean home is a dedicated crate that depends on BOTH the engine's
GraphBuilder and the std nodes, leaving each lower crate untouched:
aura-composites -> { aura-engine, aura-std } -> aura-core (acyclic)
aura-engine -> aura-core only (domain-free again)
aura-std -> aura-core only (lean node library)
aura-std reverts to a [dev-dependency] of aura-engine (the engine's own E2E
tests -- stage1_r_e2e, random_sweep_e2e, ger40_breakout -- still drive real
std nodes through a bootstrapped Harness; that test-only edge creates no cycle).
Moved with history (git mv):
- crates/aura-engine/src/composites.rs -> crates/aura-composites/src/lib.rs
- crates/aura-engine/tests/risk_executor.rs -> crates/aura-composites/tests/
- crates/aura-engine/tests/vol_stop_composite.rs -> crates/aura-composites/tests/
Consumers rewired: aura-cli imports risk_executor / StopRule from aura_composites;
the moved tests import the builders from the crate under test. The intra-doc link
to RollMode and the module rationale doc are updated for the new home.
Behaviour-preserving: workspace build clean; clippy --all-targets -D warnings
clean; full suite 513 passed / 0 failed, identical to baseline (the two moved
test files run unchanged under aura-composites); cargo doc --no-deps clean (no
broken intra-doc links).
32 lines
1.6 KiB
TOML
32 lines
1.6 KiB
TOML
[package]
|
|
name = "aura-engine"
|
|
edition.workspace = true
|
|
version.workspace = true
|
|
license.workspace = true
|
|
publish.workspace = true
|
|
|
|
[dependencies]
|
|
aura-core = { path = "../aura-core" }
|
|
# 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 }
|
|
|
|
[dev-dependencies]
|
|
# aura-std is a TEST-ONLY dependency: the engine's own integration tests
|
|
# (stage1_r_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" }
|
|
# 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 }
|