From 3fca7810d07e624c1130e52a89f53a7aefe0c37a Mon Sep 17 00:00:00 2001 From: Brummel Date: Wed, 17 Jun 2026 13:28:07 +0200 Subject: [PATCH] =?UTF-8?q?audit:=20cycle=200049=20=E2=80=94=20drift-clean?= =?UTF-8?q?=20(random=20param-sweep)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Architect drift review over 3de00e2..HEAD (the 0049 spec/plan/feat plus the two intervening refactors that had not been audited: aura-ingest M1 transpose 6390093, aura-std SMA perf 67c1f51). Verdict: feature clean — C1 determinism preserved (RandomSpace points seed-determined before any run; grid path behaviour-preserving via trait-forwards-to-inherent), the #52/#71 source-seam firewall honoured in code (sweep stays &S: Space + Fn(&[Cell]) -> RunReport, no Source type enters the sweep layer; SplitMix64 a code-path-disjoint instance), and both intervening refactors behaviour-preserving (pinned by incremental_matches_full_resum_within_tolerance and chunked_accumulation_equals_single_transpose). Two low-grade doc-debt items found and fixed inline (doc-only, behaviour- preserving): - sweep.rs module doc named only the grid axis; refreshed to name RandomSpace + the Space trait the module now also owns. - C12 ledger had no realization note for axis-1 (param-sweep); added one recording the grid (0028) + random (0049) landing and the Space-trait unification. Regression gate: the project configures no regression scripts, so the test suite + lint are the gate. Independently verified: cargo test --workspace green (incl. the 17 new engine tests + 6 public-API E2E), cargo clippy --workspace --all-targets -- -D warnings clean. Drift-clean, not a milestone close (no milestone fieldtest run this cycle). --- crates/aura-engine/src/sweep.rs | 13 ++++++++----- docs/design/INDEX.md | 10 ++++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/crates/aura-engine/src/sweep.rs b/crates/aura-engine/src/sweep.rs index f23c1ec..b419627 100644 --- a/crates/aura-engine/src/sweep.rs +++ b/crates/aura-engine/src/sweep.rs @@ -1,8 +1,11 @@ -//! Grid param-sweep (C12.1): enumerate a cartesian grid over a blueprint's -//! param-space and run each point disjointly (C1). This module owns enumeration -//! (`GridSpace`), execution (`sweep`), and collection (`SweepFamily`); the -//! per-point run-to-metrics closure is the author's (harness-specific sink glue -//! the engine cannot generically own — C8/C18). +//! Param-sweep (C12.1): enumerate a blueprint's param-space — either a cartesian +//! `GridSpace` (a discrete per-slot lattice) or a seeded `RandomSpace` (`N` draws +//! over typed continuous ranges) — and run each point disjointly (C1). Both +//! enumerations implement the `Space` trait that `sweep` is generic over, so +//! either runs through one execution path. This module owns enumeration +//! (`GridSpace` / `RandomSpace` / the `Space` trait), execution (`sweep`), and +//! collection (`SweepFamily`); the per-point run-to-metrics closure is the +//! author's (harness-specific sink glue the engine cannot generically own — C8/C18). use aura_core::{zip_params, Cell, ParamSpec, Scalar, ScalarKind}; use crate::RunReport; diff --git a/docs/design/INDEX.md b/docs/design/INDEX.md index 8f3bcfe..c8e989c 100644 --- a/docs/design/INDEX.md +++ b/docs/design/INDEX.md @@ -568,6 +568,16 @@ a streaming path *existing*, not by deleting the eager one). **Still open:** cross-*sim* `Arc<[T]>` sharing — one window shared zero-copy across many disjoint sweep sims — has no consumer until the orchestration families (axes 2–4 above: #66/#68/#69) are built, and remains the target for those cycles. +**Realization (cycles 0028, 0049).** Axis 1 (param-sweep) is built. `GridSpace` +(0028) enumerates a cartesian lattice over discrete per-slot value-lists; +`RandomSpace` (0049) draws `N` seeded points over typed continuous `ParamRange`s +(I64 inclusive `[lo,hi]`, F64 half-open `[lo,hi)`), validated against the +param-space before any run. Both implement the `Space` trait the disjoint +`sweep` / `run_indexed` core is generic over, so either enumeration runs through +one execution path (C1: results in enumeration order, not completion order). The +seeded sampler reuses the bit-stable `SplitMix64` as a **code-path-disjoint** +instance from the data-edge seed RNG (the source-seam firewall, #52/#71: they +share only the `u64` type, never a path). **Forbids.** Baking a specific search strategy (Bayesian/genetic) into the primitive — those are pluggable policies atop the atomic unit; recompiling on a param change.