rename: retire the stage1-* family for the r-family (r-sma / r-breakout / r-meanrev)
The stage1 ordinal has been dead vocabulary since the C10 reframe dropped the two-stage research model: a 1 structurally implies a 2 that no longer exists. The family is renamed by its live discriminator - the R yardstick - with members named by their signal, uniform with their signal-named siblings (sma, macd, momentum): - selectors: stage1-r -> r-sma, stage1-breakout -> r-breakout, stage1-meanrev -> r-meanrev (old tokens are usage errors, exit 2 - no silent alias) - identifiers: Strategy::RSma/RBreakout/RMeanRev, HarnessKind::RSma, r_sma_*/r_breakout_*/r_meanrev_*, wrap_r, run_signal_r, RGrid, R_SMA_* - persisted identity: the sma_signal composite (param prefix sma_signal.fast.length / .slow.length; fixtures regenerated; content-ids shift - no test pins a literal hash, the registry parses no record names) - e2e test files git-mv'd to r_sma_e2e / r_breakout_e2e / r_meanrev_e2e - dead Stage-1/Stage-2 prose reworded to post-C10 vocabulary across rustdoc, Cargo.tomls, ledger live lines, and the glossary (historical entries stay; fieldtests corpus untouched) - CLAUDE.md invariant 7 rewritten to record the ratified C10 reframe faithfully (the token-swap alone would have laundered the retired gated-currency/realistic-broker design into unmarked live prose); the unbacked account-mode clause dropped Verification: cargo build/test --workspace green (51 targets), clippy -D warnings clean, doc build clean, acceptance grep gate leaves exactly the one resampling-stage false positive (harness.rs), smoke: --harness r-sma runs, --harness stage1-r exits 2 with the new usage line. Decision log: forks and rationale recorded on the issue (reconciliation + implementation-phase comments). closes #174
This commit is contained in:
+17
-17
@@ -614,7 +614,7 @@ the ground truth**. The cost model *approximates*; it **never claims realism**.
|
||||
`SimBroker` (the pip-equity, unsized-exposure node) is the **pre-reframe pip
|
||||
ancestor** — with the net-R cost model it is **redundant as a quality measure** (R
|
||||
supersedes pips). It is retained as a **legacy / simple optional pip yardstick**
|
||||
(still wired in the `stage1-r` harness for an honest dual readout), **not part of
|
||||
(still wired in the `r-sma` harness for an honest dual readout), **not part of
|
||||
the new model and not to be expanded**.
|
||||
|
||||
**Forbids.** Putting **sizing or the stop in the strategy** (bias is unsized; the
|
||||
@@ -737,7 +737,7 @@ co-temporal cost stream (positional 1:1 join — `cost[i]` is `record[i]`'s cycl
|
||||
cost = 0 baseline on an empty stream. The headline sink is **`net_r_equity`** =
|
||||
`LinComb(4)[cum_realized_r, unrealized_r, −cum_cost_in_r, −open_cost_in_r]` → Recorder
|
||||
(C8/C18), a sibling of `r_equity`, emitted only when a cost is authored. Wired on the
|
||||
**run path** via `--cost-per-trade` (`stage1_r_graph`); sweep / walk-forward / mc pass
|
||||
**run path** via `--cost-per-trade` (`r_sma_graph`); sweep / walk-forward / mc pass
|
||||
`None` (cost on the reduce-mode sweep path and cost in OOS pooling deferred — the
|
||||
positional join holds only while one cost node fires in lockstep with PM). Deferred to
|
||||
later milestone cycles: the general `CostNode` trait + multi-node cost-graph
|
||||
@@ -928,8 +928,8 @@ composite-builder (`risk_executor(StopRule, risk_budget)`) with a
|
||||
`StopRule{Fixed,Vol}` **structural axis** (C20); per the 2026-06-28 reframe its
|
||||
Sizer interior and `risk_budget` arg are dropped / vestigial, the **Veto** stays a
|
||||
documented seam, not a runtime node. The layer is operable from the CLI: `aura run
|
||||
--harness <sma|macd|stage1-r>` — a compile-time selector over Rust-authored
|
||||
harnesses (C9/C17) — folds `summarize_r` into `RunMetrics.r`, the `stage1-r`
|
||||
--harness <sma|macd|r-sma>` — a compile-time selector over Rust-authored
|
||||
harnesses (C9/C17) — folds `summarize_r` into `RunMetrics.r`, the `r-sma`
|
||||
harness fanning one bias into both `SimBroker` (legacy pip) and the RiskExecutor
|
||||
(R); an `r_equity` tap charts the by-trade R-equity. Composites live in the
|
||||
dedicated `aura-composites` crate, so `aura-engine`'s runtime dependency stays
|
||||
@@ -937,10 +937,10 @@ dedicated `aura-composites` crate, so `aura-engine`'s runtime dependency stays
|
||||
stays acyclic).
|
||||
|
||||
**Realization (cycle 0066).** SQN is the operational single-number objective for
|
||||
ranking a Stage-1 sweep family by signal quality — C12 **axis-2 (argmax-metric)**
|
||||
ranking an r-sma sweep family by signal quality — C12 **axis-2 (argmax-metric)**
|
||||
over the C18 family store. `metric_cmp` (`aura-registry`) learns the
|
||||
higher-is-better R metrics `sqn`, `expectancy_r`, `net_expectancy_r`; a member
|
||||
with no `r` block sorts last (`NEG_INFINITY`). `aura sweep --strategy stage1-r`
|
||||
with no `r` block sorts last (`NEG_INFINITY`). `aura sweep --strategy r-sma`
|
||||
produces the rankable R family, each member folding `summarize_r` into
|
||||
`RunMetrics.r`. The default grid varies **only the signal** (`fast` / `slow` SMA
|
||||
lengths), holding the stop and sizing fixed: `risk_budget` is R-invariant and
|
||||
@@ -954,8 +954,8 @@ beside the floated knobs (reproducible from its own manifest, C18).
|
||||
(`SQN_CAP = 100`), turnover-robust where raw `sqn` rewards trade count. It is an
|
||||
**opt-in** rank key (`Metric::SqnNormalized`); raw `sqn` and the default ranker
|
||||
stay byte-unchanged, and the field carries `#[serde(default)]` (C18). Below the cap
|
||||
(`n ≤ 100`) it equals raw `sqn` exactly. **#135 (stage1-r `--trace`):**
|
||||
`stage1_r_sweep_family` persists each member's equity / exposure / r_equity under
|
||||
(`n ≤ 100`) it equals raw `sqn` exactly. **#135 (r-sma `--trace`):**
|
||||
`r_sma_sweep_family` persists each member's equity / exposure / r_equity under
|
||||
`runs/traces/<n>/<member_key>/` via the same `persist_traces_r` the single run uses;
|
||||
per-member `--trace` is symmetric across all three sweep strategies.
|
||||
|
||||
@@ -1327,7 +1327,7 @@ one `content_id` primitive `topology_hash` also uses (acc 1); a Tier-1 optional
|
||||
blueprint does not use leaves the id byte-stable (acc 3, composing #156/#164).
|
||||
`serde_json/float_roundtrip` is enabled so stored f64 metrics round-trip exactly through
|
||||
`families.jsonl` — the precondition for a bit-identical compare (C1). **Signal-only this
|
||||
cycle**: the id covers the signal blueprint; the fixed Stage-1-R scaffolding stays
|
||||
cycle**: the id covers the signal blueprint; the fixed r-sma scaffolding stays
|
||||
commit-identified (it is not yet blueprint-data, C24). Whole-harness / structural-axis
|
||||
content-addressing, and whether the id should exclude the composite **debug-name** (a
|
||||
non-load-bearing symbol, invariant 11 — an op-script and the Rust builder produce
|
||||
@@ -1887,7 +1887,7 @@ Tier-2 section to validate it; recorded on #156).
|
||||
**Realization (2026-06-30, cycle 0092 — runs are built FROM blueprint-data, #165).**
|
||||
`aura run <blueprint.json>` now loads a serialized **signal** blueprint
|
||||
(`blueprint_from_json` → the closed `std_vocabulary`; an unknown type fails clean as
|
||||
`UnknownNodeType`, the data-plane face of invariant 9), wraps it in the Stage-1-R run
|
||||
`UnknownNodeType`, the data-plane face of invariant 9), wraps it in the r-sma run
|
||||
scaffolding (sinks / broker / data supplied **at run**, not serialized — C24's deferred
|
||||
set), runs it, and emits a `RunReport` **bit-identical** (C1) to its Rust-built twin —
|
||||
proven by `loaded_signal_runs_bit_identical_to_rust_built`. The `RunManifest` now carries
|
||||
@@ -1895,8 +1895,8 @@ a **`topology_hash`**: SHA256 of the canonical (#164) `blueprint_to_json`, the #
|
||||
reproducibility anchor, a Tier-1 optional field (#156). The hash + helper live
|
||||
research-side (`aura-cli` + `sha2`), off the frozen engine (invariant 8). This is the
|
||||
**keystone of the World/C21 milestone**: topology-as-data is now *runnable*, not only
|
||||
serializable. The harness wrap was made shareable — `stage1_r_graph()` =
|
||||
`wrap_stage1r(stage1_signal(...))`, so the Rust path and the data path are the same seam
|
||||
serializable. The harness wrap was made shareable — `r_sma_graph()` =
|
||||
`wrap_r(sma_signal(...))`, so the Rust path and the data path are the same seam
|
||||
over the same signal (a behaviour-preserving C19/C23 restructure). Scope note: the hash
|
||||
covers the **signal** only (the fixed scaffolding is identified by `commit`); a content-id
|
||||
distinguishing harness-structural variants is a #158/#166 concern once scaffolding varies.
|
||||
@@ -1904,7 +1904,7 @@ distinguishing harness-structural variants is a #158/#166 concern once scaffoldi
|
||||
**Realization (2026-07-01, cycle 0093 — the World orchestrates FAMILIES from blueprint-data,
|
||||
#166).** `aura sweep <blueprint.json> --axis <name>=<csv>` loads an **open** signal blueprint,
|
||||
grids the by-name axes against its `param_space()`, builds each member through cycle-1's
|
||||
`wrap_stage1r` seam, and aggregates to a `FamilyKind::Sweep` family — byte-identical in shape
|
||||
`wrap_r` seam, and aggregates to a `FamilyKind::Sweep` family — byte-identical in shape
|
||||
to the hard-wired sweep (`append_family` / `sweep_member_reports` reused verbatim). This is the
|
||||
C21 step beyond a single run: the World now constructs and orchestrates **families** of
|
||||
harnesses from topology-data, not just one. Each member manifest carries the **shared**
|
||||
@@ -1928,7 +1928,7 @@ the loaded blueprint's params over the user `--axis` grid (the #169 prefixed nam
|
||||
`select_winner` reused verbatim), runs it out-of-sample, and aggregates to a
|
||||
`FamilyKind::WalkForward` family — persisted + content-addressed + `aura reproduce` bit-identical
|
||||
(the read-side WalkForward branch rebuilds each OOS window from `manifest.window`). One
|
||||
substitution deep from the hard-wired stage1-r WF arm (the loaded blueprint via
|
||||
substitution deep from the hard-wired r-sma WF arm (the loaded blueprint via
|
||||
`blueprint_axis_probe` replaces the built-in strategy); a bad `--axis` is a clean in-closure
|
||||
exit 2, never a panic. This is Arm A (the settled direction): the loaded IS-optimizing form
|
||||
honestly carries the `walkforward` name. Reduce-mode members are R-measured (`oos_r` the
|
||||
@@ -1942,11 +1942,11 @@ prints are exactly what `--axis` binds. Every listed name is **mandatory** on a
|
||||
`walkforward`: the blueprint must be fully bound before it runs, so a subset grid is refused with
|
||||
the missing knob named (`BindError::MissingKnob`) and there is no default — pin a knob you do not
|
||||
want to vary with a single-value axis (`--axis <name>=<one-value>`). A single `blueprint_axis_probe` helper now single-sources
|
||||
the wrapped probe (`wrap_stage1r(loaded_signal).param_space()`) for the sweep terminal, the MC
|
||||
the wrapped probe (`wrap_r(loaded_signal).param_space()`) for the sweep terminal, the MC
|
||||
closed-check, AND the listing (three former inline copies → one), so **listed == swept by
|
||||
construction** (and stays so across #159's harness retirement — the listing tracks whatever the
|
||||
sweep actually resolves, never a second source of truth). The names are prefixed by the current
|
||||
stage1-r wrapping (`stage1_signal.fast.length`, the nested-composite prefix), not the raw
|
||||
r-sma wrapping (`sma_signal.fast.length`, the nested-composite prefix), not the raw
|
||||
`param_space` — which is why the discovery lives on the sweep verb (it owns the wrapping), not
|
||||
`graph introspect`. Per-member trace-writing on `--trace` (#168) remains tracked debt.
|
||||
|
||||
@@ -1956,7 +1956,7 @@ content-addressed blueprint store (`aura reproduce`) shipped cycle 0094 (see C18
|
||||
Realization). What **remains** is a content-id that covers **structural-axis / whole-harness
|
||||
variants** (the scaffolding is not yet blueprint-data) and the debug-name-in-id question
|
||||
(#171/#170). Still deferred: retiring the pre-C24
|
||||
hard-wired `aura-cli` harnesses (`HarnessKind`, `run_stage1_r`, `*_sweep_family`) once
|
||||
hard-wired `aura-cli` harnesses (`HarnessKind`, `run_r_sma`, `*_sweep_family`) once
|
||||
the project-as-crate layer lands (#159, paired with #157's data-authoring surface). **Out of the first cut's round-trippable set**
|
||||
(deliberate; fails clean as `UnknownNodeType`, never a silent wrong graph): recording
|
||||
sinks (capture an `mpsc::Sender` — runtime identity, not param-generic data, C19) and
|
||||
|
||||
+2
-2
@@ -93,7 +93,7 @@ The set of harness instances produced by varying the structural axes (strategy
|
||||
|
||||
### exposure stream
|
||||
**Avoid:** — (superseded)
|
||||
**Superseded by `bias` (2026-06 R-reframe).** The pre-reframe primary output: a signed, bounded `f64 ∈ [-1,+1]` per cycle read as the desired fractional *position* (conflating direction + conviction + size). Reframed to `bias` (unsized direction + conviction), sizing moved downstream to the `Sizer`/`RiskExecutor`; the term and the `Exposure` node persist in pre-reframe code until the Stage-1 rename.
|
||||
**Superseded by `bias` (2026-06 R-reframe).** The pre-reframe primary output: a signed, bounded `f64 ∈ [-1,+1]` per cycle read as the desired fractional *position* (conflating direction + conviction + size). Reframed to `bias` (unsized direction + conviction), sizing moved downstream to the `Sizer`/`RiskExecutor`; the term and the `Exposure` node persisted in pre-reframe code until the r-family rename (#174).
|
||||
|
||||
### firing policy
|
||||
**Avoid:** —
|
||||
@@ -249,7 +249,7 @@ System Quality Number — `√n · mean_R / stdev_R`: the dispersion- and trade-
|
||||
|
||||
### Stage 1 / Stage 2
|
||||
**Avoid:** — (superseded)
|
||||
**Superseded (2026-06-28 C10 reframe): there is no Stage-2 currency/compounding gate.** Research is one pure feed-forward R loop — gross R → net R via the `cost model` — with money, compounding, and a real broker living only at a separate later **live / deploy edge** (compounding is a post-hoc money-management transform of the net-R sequence, not an in-loop axis). The pre-reframe cleave gated a Stage-2 currency / fixed-fractional / realistic-broker layer behind `E[R] > 0`; **"Stage-1"** now survives only as a historical cycle / identifier name for the shipped feed-forward R chain, not one half of a two-stage gate.
|
||||
**Superseded (2026-06-28 C10 reframe): there is no Stage-2 currency/compounding gate.** Research is one pure feed-forward R loop — gross R → net R via the `cost model` — with money, compounding, and a real broker living only at a separate later **live / deploy edge** (compounding is a post-hoc money-management transform of the net-R sequence, not an in-loop axis). The pre-reframe cleave gated a Stage-2 currency / fixed-fractional / realistic-broker layer behind `E[R] > 0`; **"Stage-1"** now survives only as a historical cycle name — the shipped feed-forward R chain's identifier family was renamed to the r-family (`r-sma` / `r-breakout` / `r-meanrev`, #174) — not one half of a two-stage gate.
|
||||
|
||||
### strategy
|
||||
**Avoid:** —
|
||||
|
||||
Reference in New Issue
Block a user