audit: cycle 0048 — drift-clean (walk-forward param plane)
cycle 0048 tidy. Architect drift review (86746e3..9febdb9, against the design ledger C7/C1/C12/C20/C23) found the walk-forward param-plane cut drift-clean: - C7 made honest: WindowRun.chosen_params is now genuinely tag-free Vec<Cell>; the param kind lives once on WalkForwardResult.space. No residual per-value tag. The deleted scalar_as_f64's per-value unreachable! became a per-slot schema cost (the coerce builder map), correctly invoking C20 only on the timestamp arm. - C1 behaviour-preserving: the i64->f64 / f64 coercions are value-identical to the deleted helper; the migrated fixtures keep mean 2.5 / p50 2.5 / mean 1.5. The Bool->0/1 arm is the only new behaviour, pinned by param_stability_reduces_bool_slot_to_fraction_true (0.75). - SweepFamily symmetry is real: the (space + tag-free Vec<Cell> points + zip_params) idiom is mirrored while the two stay distinct types. The arity debug_assert reads space.len() against windows (not the moved-out runs) — correct. walkforward_family derives space from the same blueprint sweep_over uses, so the kinds genuinely match. - No stale references: the only "Vec<Scalar>" / "self-describing record" matches are in docs/plans/0048 (a historical plan quoting the BEFORE state by design) and ledger lines describing Scalar itself (still true). No live code or current-state doc carries the old Fork-A chosen_params rationale. Regression check: no regression script configured (project facts list only build/test/lint/doc) — no-op; architect is the gate. The four gates (build/test/clippy -D warnings/doc) and the acceptance greps were verified green before the close commit. Follow-on: the out-of-scope WalkForwardResult::named_params (closing the last asymmetry vs SweepFamily::named_params) was filed as a droppable idea (#76). Not actionable drift — no consumer is blocked (zip_params already serves it).
This commit is contained in: