=== Milestone-18 fieldtest scenario 4 — family-lineage CLI surface, end to end ===
    (driven against the repo runs/ store; sweep family mw-grid-0 already persisted above)

$ cargo run -q -p aura-cli -- mc --name mw-robust 2>&1 | tail -4
{"family_id":"mw-robust-0","report":{"manifest":{"broker":"sim-optimal(pip_size=0.0001)","commit":"8b22fa6c7307e266bc31a2d997d23d19720c8971","params":[["sma_fast",{"I64":2}],["sma_slow",{"I64":4}],["exposure_scale",{"F64":0.5}]],"seed":1,"window":[1,32]},"metrics":{"exposure_sign_flips":6,"max_drawdown":0.05492042518617829,"total_pips":0.033219795137322934}},"seed":1}
{"family_id":"mw-robust-0","report":{"manifest":{"broker":"sim-optimal(pip_size=0.0001)","commit":"8b22fa6c7307e266bc31a2d997d23d19720c8971","params":[["sma_fast",{"I64":2}],["sma_slow",{"I64":4}],["exposure_scale",{"F64":0.5}]],"seed":2,"window":[1,32]},"metrics":{"exposure_sign_flips":10,"max_drawdown":0.050384043775853884,"total_pips":-0.025017958181714973}},"seed":2}
{"family_id":"mw-robust-0","report":{"manifest":{"broker":"sim-optimal(pip_size=0.0001)","commit":"8b22fa6c7307e266bc31a2d997d23d19720c8971","params":[["sma_fast",{"I64":2}],["sma_slow",{"I64":4}],["exposure_scale",{"F64":0.5}]],"seed":3,"window":[1,32]},"metrics":{"exposure_sign_flips":9,"max_drawdown":0.13931444672911716,"total_pips":-0.07233362336360569}},"seed":3}
{"mc_aggregate":{"exposure_sign_flips":{"mean":8.333333333333334,"p25":7.5,"p5":6.3,"p50":9.0,"p75":9.5,"p95":9.9},"max_drawdown":{"mean":0.08153963856371645,"p25":0.05265223448101609,"p5":0.050837681916886326,"p50":0.05492042518617829,"p75":0.09711743595764773,"p95":0.13087504457482327},"total_pips":{"mean":-0.021377262135999237,"p25":-0.04867579077266033,"p5":-0.06760205684541662,"p50":-0.025017958181714973,"p75":0.004100918477803982,"p95":0.027396019805419138}}}
(exit 0)

$ cargo run -q -p aura-cli -- runs families
{"family_id":"mw-grid-0","kind":"Sweep","members":4}
{"family_id":"mw-robust-0","kind":"MonteCarlo","members":3}
(exit 0)

$ cargo run -q -p aura-cli -- runs family mw-grid-0 2>&1 | head -2
{"manifest":{"commit":"8b22fa6c7307e266bc31a2d997d23d19720c8971","params":[["signals.trend.fast.length",{"I64":2}],["signals.trend.slow.length",{"I64":4}],["signals.momentum.fast.length",{"I64":2}],["signals.momentum.slow.length",{"I64":4}],["signals.momentum.signal.length",{"I64":3}],["signals.blend.weights[0]",{"F64":1.0}],["signals.blend.weights[1]",{"F64":1.0}],["exposure.scale",{"F64":0.5}]],"window":[1,18],"seed":0,"broker":"sim-optimal(pip_size=0.0001)"},"metrics":{"total_pips":0.26428361277333234,"max_drawdown":0.15423679012344482,"exposure_sign_flips":2}}
{"manifest":{"commit":"8b22fa6c7307e266bc31a2d997d23d19720c8971","params":[["signals.trend.fast.length",{"I64":2}],["signals.trend.slow.length",{"I64":5}],["signals.momentum.fast.length",{"I64":2}],["signals.momentum.slow.length",{"I64":4}],["signals.momentum.signal.length",{"I64":3}],["signals.blend.weights[0]",{"F64":1.0}],["signals.blend.weights[1]",{"F64":1.0}],["exposure.scale",{"F64":0.5}]],"window":[1,18],"seed":0,"broker":"sim-optimal(pip_size=0.0001)"},"metrics":{"total_pips":0.1605136127733241,"max_drawdown":0.22647145679012357,"exposure_sign_flips":2}}
(exit 0)

$ cargo run -q -p aura-cli -- runs family mw-grid-0 rank total_pips 2>&1 | head -4
{"manifest":{"commit":"8b22fa6c7307e266bc31a2d997d23d19720c8971","params":[["signals.trend.fast.length",{"I64":2}],["signals.trend.slow.length",{"I64":4}],["signals.momentum.fast.length",{"I64":2}],["signals.momentum.slow.length",{"I64":4}],["signals.momentum.signal.length",{"I64":3}],["signals.blend.weights[0]",{"F64":1.0}],["signals.blend.weights[1]",{"F64":1.0}],["exposure.scale",{"F64":0.5}]],"window":[1,18],"seed":0,"broker":"sim-optimal(pip_size=0.0001)"},"metrics":{"total_pips":0.26428361277333234,"max_drawdown":0.15423679012344482,"exposure_sign_flips":2}}
{"manifest":{"commit":"8b22fa6c7307e266bc31a2d997d23d19720c8971","params":[["signals.trend.fast.length",{"I64":2}],["signals.trend.slow.length",{"I64":5}],["signals.momentum.fast.length",{"I64":2}],["signals.momentum.slow.length",{"I64":4}],["signals.momentum.signal.length",{"I64":3}],["signals.blend.weights[0]",{"F64":1.0}],["signals.blend.weights[1]",{"F64":1.0}],["exposure.scale",{"F64":0.5}]],"window":[1,18],"seed":0,"broker":"sim-optimal(pip_size=0.0001)"},"metrics":{"total_pips":0.1605136127733241,"max_drawdown":0.22647145679012357,"exposure_sign_flips":2}}
{"manifest":{"commit":"8b22fa6c7307e266bc31a2d997d23d19720c8971","params":[["signals.trend.fast.length",{"I64":3}],["signals.trend.slow.length",{"I64":4}],["signals.momentum.fast.length",{"I64":2}],["signals.momentum.slow.length",{"I64":4}],["signals.momentum.signal.length",{"I64":3}],["signals.blend.weights[0]",{"F64":1.0}],["signals.blend.weights[1]",{"F64":1.0}],["exposure.scale",{"F64":0.5}]],"window":[1,18],"seed":0,"broker":"sim-optimal(pip_size=0.0001)"},"metrics":{"total_pips":0.10228361277332589,"max_drawdown":0.11347145679010996,"exposure_sign_flips":2}}
{"manifest":{"commit":"8b22fa6c7307e266bc31a2d997d23d19720c8971","params":[["signals.trend.fast.length",{"I64":3}],["signals.trend.slow.length",{"I64":5}],["signals.momentum.fast.length",{"I64":2}],["signals.momentum.slow.length",{"I64":4}],["signals.momentum.signal.length",{"I64":3}],["signals.blend.weights[0]",{"F64":1.0}],["signals.blend.weights[1]",{"F64":1.0}],["exposure.scale",{"F64":0.5}]],"window":[1,18],"seed":0,"broker":"sim-optimal(pip_size=0.0001)"},"metrics":{"total_pips":-0.0014863872266822969,"max_drawdown":0.20567145679011695,"exposure_sign_flips":2}}
(exit 0)

$ cargo run -q -p aura-cli -- runs family no-such-family-99
(exit 0)

$ cargo run -q -p aura-cli -- runs list 2>&1 | head -2
aura: registry parse error at line 1: expected value at line 1 column 94
(exit 0)

$ cargo run -q -p aura-cli -- runs rank total_pips   # also load()s runs.jsonl
aura: registry parse error at line 1: expected value at line 1 column 94
(exit 0)

=== FINDING (bug): aura runs list / runs rank cannot read the pre-existing runs/runs.jsonl ===
runs.jsonl line 1 col 94 is the bare-float 2.0 in ["sma_cross.fast",2.0]; the manifest
params field was migrated to typed Scalar ({"I64":2}/{"F64":2.0}) in cycle 0047 (commit
86746e3, inside the milestone range), but the persisted store was not migrated, so load()
now fails to deserialize any pre-0047 line. The lineage path (families.jsonl, written fresh
in the new format) is unaffected — runs families / runs family both succeeded above.
Also: the parse error prints to stderr but the process exits 0.
