refactor(aura-cli): retire the dead-end runs list/rank CLI surface
Since cycle 0045 the flat runs.jsonl store has had no producer (sweep/mc/ walkforward persist to the family store; `aura run` does not persist), so `aura runs list` / `runs rank` read a store nothing populates — a live dead-end surface, the honesty gap the Runway milestone closes. Resolve the C18 deferred fork (INDEX.md) as (b) RETIRE: drop the two CLI commands + their dispatch arms, usage fragments, and the now-unused load_runs_or_exit. Families (sweep/mc/walkforward, C21) subsume standalone over-time comparison. The aura-registry flat lib API (append/load/rank_by/optimize) is RETAINED — optimize backs walk-forward's in-sample step, rank_by backs `runs family ... rank`. `runs families` / `runs family` are untouched. Decision recorded on #73 (user-directed (b), 2026-06-18). Cosmetic sub-item (json! family-wrapper -> to_json() stdout key-order unification) deferred to a follow-up: json! routes the embedded report through serde_json::Value, which re-alphabetizes keys, so it needs manual JSON construction, not a trivial swap. RED-first: the retire test asserted `runs list`/`rank` now exit 2 (was exit 0). Verified: cargo build --workspace, clippy --all-targets -D warnings, and cargo test --workspace all green. closes #73
This commit is contained in:
@@ -683,28 +683,6 @@ fn mc_report() -> String {
|
||||
out
|
||||
}
|
||||
|
||||
/// `aura runs list`: print every stored run record, in store (over-time) order.
|
||||
fn runs_list() {
|
||||
for report in &load_runs_or_exit() {
|
||||
println!("{}", report.to_json());
|
||||
}
|
||||
}
|
||||
|
||||
/// `aura runs rank <metric>`: print the stored runs best-first by `metric`.
|
||||
fn runs_rank(metric: &str) {
|
||||
match rank_by(load_runs_or_exit(), metric) {
|
||||
Ok(ranked) => {
|
||||
for report in &ranked {
|
||||
println!("{}", report.to_json());
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
eprintln!("aura: {e}");
|
||||
std::process::exit(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// `aura runs families`: one header line per stored family (id, kind, member
|
||||
/// count), in first-seen store order.
|
||||
fn runs_families() {
|
||||
@@ -726,8 +704,7 @@ fn runs_families() {
|
||||
|
||||
/// `aura runs family <id> [rank <metric>]`: list one family's member reports in
|
||||
/// ordinal order, or best-first by `metric`. An unknown id is an empty family
|
||||
/// (prints nothing, exit 0, consistent with `runs list` over an empty store); an
|
||||
/// unknown metric is a usage error (stderr + exit 2).
|
||||
/// (prints nothing, exit 0); an unknown metric is a usage error (stderr + exit 2).
|
||||
fn runs_family(id: &str, rank: Option<&str>) {
|
||||
let reg = default_registry();
|
||||
let members = match reg.load_family_members() {
|
||||
@@ -756,14 +733,6 @@ fn runs_family(id: &str, rank: Option<&str>) {
|
||||
}
|
||||
}
|
||||
|
||||
/// Load the registry or exit 2 with the error. A missing registry loads empty.
|
||||
fn load_runs_or_exit() -> Vec<RunReport> {
|
||||
default_registry().load().unwrap_or_else(|e| {
|
||||
eprintln!("aura: {e}");
|
||||
std::process::exit(2);
|
||||
})
|
||||
}
|
||||
|
||||
// --- MACD proof-of-concept (a richer, nested indicator + strategy) -----------
|
||||
|
||||
/// The MACD signal as a named composite: price → fast/slow `Ema` → the MACD line
|
||||
@@ -887,7 +856,7 @@ fn run_macd() -> RunReport {
|
||||
}
|
||||
|
||||
const USAGE: &str =
|
||||
"usage: aura run [--macd] | aura run --real <SYMBOL> [--from <ms>] [--to <ms>] | aura graph | aura sweep [--name <n>] | aura mc [--name <n>] | aura walkforward [--name <n>] | aura runs list | aura runs rank <metric> | aura runs families | aura runs family <id> [rank <metric>]";
|
||||
"usage: aura run [--macd] | aura run --real <SYMBOL> [--from <ms>] [--to <ms>] | aura graph | aura sweep [--name <n>] | aura mc [--name <n>] | aura walkforward [--name <n>] | aura runs families | aura runs family <id> [rank <metric>]";
|
||||
|
||||
fn main() {
|
||||
// Collect argv and match the whole vector: every accepted form is exhaustive,
|
||||
@@ -911,8 +880,6 @@ fn main() {
|
||||
["walkforward", "--name", n] => run_walkforward(n),
|
||||
["mc"] => run_mc("mc"),
|
||||
["mc", "--name", n] => run_mc(n),
|
||||
["runs", "list"] => runs_list(),
|
||||
["runs", "rank", metric] => runs_rank(metric),
|
||||
["runs", "families"] => runs_families(),
|
||||
["runs", "family", id] => runs_family(id, None),
|
||||
["runs", "family", id, "rank", metric] => runs_family(id, Some(metric)),
|
||||
|
||||
Reference in New Issue
Block a user