refactor: split aura-analysis into statistics and backtest metrics
C28 phase 5 (Stratification): the backtest reductions - RunMetrics, RMetrics, summarize_r, r_metrics_from_rs, and the position-event table - move verbatim into aura-backtest::metrics, beside the position_management producer whose record layout they read (the r_col/cost_col lockstep contract is now intra-crate; its stale "aura-std" comment corrected). aura-analysis is reduced to the domain-free half: the multiple-comparison hurdle math (inv_norm_cdf, expected_max_of_normals) and the selection-provenance types (FamilySelection/SelectionMode - kept beside the statistics so RunManifest.selection embeds a foundation-grade type), [dependencies] = serde only. The engine re-export surface is name-unchanged (report.rs re-imports from both crates), so no indirect consumer needed a source edit; aura-backtest moves from aura-engine's dev-dependencies into [dependencies] as a commented TRANSIENT widening of the C28 violation, removed by the phase-2 edge cut on this branch. The campaign drift guard imports its pinned types from their new source crates. Behaviour-preserving: 1448/0 tests, clippy -D warnings clean, serde shapes byte-identical (C18), moved code traceable via git copy detection. closes #291
This commit is contained in:
@@ -28,3 +28,9 @@ serde_json = { workspace = true }
|
||||
# work-stealing pool the engine's run_indexed already uses — parallelism across
|
||||
# sims, never within one. Direct versioned dep, mirroring aura-engine.
|
||||
rayon = "1"
|
||||
|
||||
[dev-dependencies]
|
||||
# aura-backtest supplies RunMetrics/summarize_r for the metric-vocabulary drift
|
||||
# guard's direct-source import (tests/metric_vocabulary_e2e.rs). Production
|
||||
# code reaches these types via the aura-engine re-export instead.
|
||||
aura-backtest = { path = "../aura-backtest" }
|
||||
|
||||
@@ -1,15 +1,17 @@
|
||||
//! Cross-crate guard for #190: pins `aura_research::metric_vocabulary()` (the
|
||||
//! hand-written 17-name declared metric roster) against the ACTUAL scalar
|
||||
//! fields the three metric-bearing `aura-analysis` types serialize — not a
|
||||
//! second hand-list that could independently drift. `aura-campaign` is the
|
||||
//! one crate that already depends on both `aura-analysis` (the types) and
|
||||
//! `aura-research` (the vocabulary), so it is the only place this pin can be
|
||||
//! written today (`aura-research` deliberately has no `aura-analysis` dep —
|
||||
//! fields the three metric-bearing types serialize — `RunMetrics`/`RMetrics`
|
||||
//! from `aura-backtest` (via `summarize_r`), `FamilySelection` from
|
||||
//! `aura-analysis` — not a second hand-list that could independently drift.
|
||||
//! `aura-campaign` is the one crate that already depends on the type sources
|
||||
//! and `aura-research` (the vocabulary), so this pin lives here
|
||||
//! (`aura-research` deliberately has no dep on either type crate —
|
||||
//! `metric_vocabulary`'s own doc comment names this as an accepted residual).
|
||||
|
||||
use std::collections::BTreeSet;
|
||||
|
||||
use aura_analysis::{summarize_r, FamilySelection, RunMetrics, SelectionMode};
|
||||
use aura_analysis::{FamilySelection, SelectionMode};
|
||||
use aura_backtest::{summarize_r, RunMetrics};
|
||||
|
||||
/// The names of every field of a serialized sample whose JSON value is a
|
||||
/// `Number` — i.e. a scalar metric readout, not a string/enum tag, a nested
|
||||
|
||||
Reference in New Issue
Block a user