Random param-sweep enumeration (C12.1 other half): ranges + sample-count + seeded RNG #52
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Cycle 0028 (#32) shipped the grid axis of the param-sweep (
GridSpacecartesian enumeration over per-slot discrete value-lists, in
crates/aura-engine/src/sweep.rs). C12.1 names grid and random enumeration;random was deferred at the 0028 brainstorm as a deliberate scope cut.
Random needs machinery grid does not: per-slot continuous ranges (min/max)
rather than discrete value-lists, a sample-count, and a deterministic
seeded RNG (C1 seed-as-input; zero-dependency C16 -> hand-rolled, no
randcrate). The valid search-range belongs to the run (C20) and is still
undeclared — random is where range declaration first becomes load-bearing.
Shape (none chosen): a
RandomSpacesibling toGridSpaceproducing N seededpoints over declared ranges, fed to the same
sweep()execution layer —the disjoint
std::thread::scopecore is enumeration-agnostic and alreadyshipped.
context: deferred follow-up from cycle 0028; not blocking.
Pairs with #57 (named sweep-point view), which is the prerequisite: random enumeration needs a named per-point view to report readable params. Sequence #57 first, then this. Both are the named↔positional half of the same sweep-ergonomics surface in sweep.rs.
Design constraint (World-II eager-agnostic firewall — refs #71)
Keep the random-sweep contract param-only:
RandomSpace::points() -> Vec<Vec<Scalar>>and the unchangedrun_one: Fn(&[Scalar]) -> RunReport. Do NOT widen the sweep-layer signature to name a stream or producer type (e.g. noFn(&[Scalar], &[impl Source])). Stream provision stays wholly inside the closure body, so a later lazyHarness::runis invisible toRandomSpaceandsweep. The #52 param-sampling RNG and the Fork-B data-edge seed are distinct concerns that merely share theu64manifest field; keep them code-path-disjoint.Design reconciliation (specify, in-context entry)
Spec:
0049-random-param-sweep. The fork(s) below are still listed open on thisissue ("Shape (none chosen)" in the body); they were resolved in an in-context
design discussion with the user on 2026-06-17. The orchestrator laid out the
forks with recommendations and the user ratified.
Spacetrait (
points() -> Vec<Vec<Cell>>,param_specs() -> &[ParamSpec])implemented by both
GridSpaceandRandomSpace;sweepbecomes generic overimpl Space, behaviour-preserving (C1) for the existing grid path.Provenance: presented as "A — Space trait" vs "B — sibling
sweep_random"; theuser chose A, verbatim "A und passt" (2026-06-17).
ParamRange { lo, hi }carriedpositional-parallel to the param-space (not bare
(Cell, Cell)tuples),validated in
RandomSpace::new, with thelo <= hiinvariant as a newSweepErrorvariant.Provenance: recommended
ParamRangeover the tuple alternative; the useraccepted it in the same "A und passt" (2026-06-17).
I64inclusive[lo, hi],F64half-open
[lo, hi);Bool/Timestamprejected innewwith a kind error(Timestamp is a structural axis, C20); no dedup of sampled points. The
param-sampling RNG reuses the existing dependency-free
SplitMix64, keptcode-path-disjoint from the data-edge seed instance (this issue's World-II
firewall comment).
Provenance: recommended "uniform-only" resolution; the user accepted it in the
same "A und passt" (2026-06-17).