a1cd7bc6f5
The mc arm bootstraps the stage's incoming R-evidence with one semantics, input-shaped by position (#200 decision 1): after a walk_forward it pools the wf family's per-window OOS trade_rs in roll order into ONE r_bootstrap (PooledOos); after sweep/gates it bootstraps each surviving member's fresh in-memory series (PerSurvivor, ordinals into the population family; a zero-trade member records the engine's defined all-zero degenerate). Seeded from the campaign doc's seed (C1). The wf family is read by reference from the cell's families vec — no clone. run_cell's Generalize arm is an explicit no-op naming the campaign scope. The generalize phase runs after the cell loop (#200 decision 2): nominees (last wf window's OOS report, else the sweep winner; None on gate truncation) grouped by (strategy, window) across instruments via a BTreeMap (deterministic order); >= 2 winners feed the shipped generalization(), fewer record the shortfall (generalization: None, missing named) — divergent per-instrument winners are exposed via their params, never averaged away. Gates: campaign 40/0 (4 execute_mc + 3 execute_generalize new), workspace build clean; the known-RED cli integration test flips in task 5. refs #200