af0191884d
Public-API field test of the random param-sweep surface, from a standalone downstream-consumer crate (path-deps only; the public interface = ledger + glossary + spec 0049 + cargo doc rustdoc; no crates/*/src read). Four bins, each built from HEAD and run: continuous tuning (200-point random tune ranked by total_pips), the typed validation gate (all five reachable SweepError variants pre-run), reproducibility + seed-sensitivity + the full i64::MIN..=MAX sampler edge, and Space-trait interchangeability (one tune_and_rank<S: Space> over both GridSpace and RandomSpace). Findings: 0 bugs, 4 working, 2 spec_gap, 1 friction. The four working findings confirm the cycle's acceptance criterion empirically — the headline tune reads as the code a researcher would write, the gate is precise and fires before any run, the C1 reproducibility promise is checkable in one line, and the Space trait delivers one-consumer/both-enumerations. Triage of the actionable findings: - friction (no named-axis builder for RandomSpace — positional Vec<ParamRange> must align with param_space() by hand, and a same-kind transposition passes validation silently): filed as a feature for a future cycle, refs #79 (a RandomBinder sibling to the grid's SweepBinder). - spec_gap (SweepError rustdoc summary named only GridSpace): fixed inline in a follow-up doc commit. - spec_gap (NonNumericRange / Bool-slot ranges unreachable with the shipped aura-std node roster — no node declares a Bool/Timestamp knob): RATIFIED as intentional. The variant is a forward-looking structural guard for the C16 "author your own node" path (a Bool/Timestamp param-slot a custom node may declare); its current untriggerability with the standard roster is expected, not drift. refs #79
19 lines
796 B
Plaintext
19 lines
796 B
Plaintext
numeric param-space:
|
|
slot 0: sma_cross.fast.length : I64
|
|
slot 1: sma_cross.slow.length : I64
|
|
slot 2: exposure.scale : F64
|
|
|
|
Arity (2 ranges, 3 slots) -> Err(Arity { expected: 3, got: 2 })
|
|
RangeKindMismatch (F64 range on I64 slot 0) -> Err(RangeKindMismatch { slot: 0, expected: I64, got: F64 })
|
|
EmptyRange I64 (lo=8 > hi=2 on slot 0) -> Err(EmptyRange { slot: 0 })
|
|
EmptyRange F64 (lo == hi == 1.5 on slot 2, half-open) -> Err(EmptyRange { slot: 2 })
|
|
|
|
VALID | I64 lo == hi == 5 single point accepted -> 7 points
|
|
|
|
bool param-space:
|
|
slot 0: gate.enabled : Bool
|
|
slot 1: exposure.scale : F64
|
|
range on Bool slot 0 -> Err(NonNumericRange { slot: 0, kind: Bool })
|
|
|
|
OK: every fault was caught by RandomSpace::new before any run.
|