diff --git a/docs/design/INDEX.md b/docs/design/INDEX.md index 4147d8c..716f4c7 100644 --- a/docs/design/INDEX.md +++ b/docs/design/INDEX.md @@ -311,6 +311,22 @@ broker nodes then test real-world viability. Modelling brokers as nodes (not a bespoke subsystem) keeps them within the one Node/graph abstraction (C9). This supersedes the earlier "the strategy's output is the position-event table" framing (cycle 0007 reframe). +**Realization (cycle 0007).** The signal-quality half of this contract is now +realized at the substrate, as two `aura-std` nodes composed on the unchanged +engine (the engine stays domain-free — it routes only `f64` records, never +"exposure" or "equity"). The **exposure stream** is realized as `Exposure { scale +}`: the decision/sizing node, `clamp(signal / scale, -1, +1)`, one `f64` per fired +cycle (`None` until warmed up). The **sim-optimal broker** is realized as +`SimBroker { pip_size }`: a two-input node (exposure, price) that accumulates +`prev_exposure · (price − prev_price) / pip_size` and emits cumulative pip equity +— the exposure held *into* a cycle (decided at t-1) earns that cycle's return, so +the integration is causal (C2), and `pip_size` is held reference metadata +(C7/C15), never streamed. An end-to-end harness (SMA-cross → `Exposure` → +`SimBroker` → recording sink) produces a recorded pip-equity curve, bit-identical +across runs (C1). The **position-management half** — deriving the position-event +table (buy/sell/close, `position_id`, partial closes) from the exposure history, +and the realistic broker nodes that consume it — is deliberately **not** built +this cycle; it remains the decoupled, derived, deferred layer described above. ### C11 — Generalized sources; record-then-replay determinism boundary **Guarantee.** A source is anything that produces timestamped scalar streams —