feat(research,campaign,cli): std::grid — the enumerate-only leading stage
closes #256
Fork B (owner decision 2026-07-14): the dissolved walkforward/mc
translations' leading sweep executed the full grid over the whole campaign
window and persisted a Sweep family, yet only the enumerated parameter
points ever crossed the stage seam (the wf stage re-sweeps them per IS
window itself). The leading stage is now the fieldless vocabulary block
std::grid: it enumerates, executes nothing, persists nothing.
- aura-research: StageBlock::Grid ({"block":"std::grid"}), schema-strict
parse arm (empty slot list: every key but "block" is refused by the
generic unknown-slot check), PROCESS_BLOCKS entry, intrinsic-tier no-op
arm; the vocabulary test's non-empty-slots guard carries a pinned
std::grid-only exception (a nominal slot would misdescribe the
vocabulary to describe_block consumers).
- aura-campaign: the inter-stage seam is a typed two-armed StageFlow
(points-only vs executed members); gate / mc-per-survivor fence the
points-only arm with defensive PipelineShape faults; preflight admits
std::grid only as the first stage and only immediately before
std::walk_forward (every other neighbor consumes executed reports).
- aura-cli: translate_walkforward / translate_mc lead with
StageBlock::Grid; the two family-shape E2E pins flip to zero Sweep
families; translate_generalize keeps its executed sweep(argmax) — its
generalize stage consumes the argmax winner report as the cell nominee.
- docs: dated #256 amendment in the ledger's verb-dissolution narrative;
the authoring-guide vocabulary transcript gains the std::grid line.
Behaviour preservation: the exact-grade real-data pins
(walkforward_real_e2e_pins_the_exact_current_grade,
mc_r_bootstrap_real_e2e_pins_the_exact_current_grade) pass unmodified —
survivor points reach the wf stage in the same odometer order as before.
Measured (the #256 acceptance measurement; debug build, real GER40 2025,
2x2 grid, `aura walkforward --real`, 3 runs each):
before (a55e4cf): 6.27 / 6.18 / 6.18 s
after: 4.52 / 4.49 / 4.45 s (~ -27% wall clock)
Suite: cargo test --workspace green (0 failed); clippy clean.
Decision log: #256 comments (fork rationale incl. the StageFlow seam and
the slot-guard exception).
This commit is contained in:
@@ -3293,8 +3293,8 @@ fn walkforward_dissolved_refuses_name_and_trace_together() {
|
||||
/// generated campaign document (carrying the `--name` handle and the stop as a
|
||||
/// non-empty single risk regime), and one campaign-run record — mirroring the
|
||||
/// generalize dissolution's audit trail. The persisted family set is exactly one
|
||||
/// `Sweep` family (the pipeline's leading `std::sweep(argmax)` stage) plus one
|
||||
/// `WalkForward` family (the per-window OOS reports) — the observable proof that
|
||||
/// `WalkForward` family (the per-window OOS reports) and NO `Sweep` family —
|
||||
/// the leading `std::grid` stage only enumerates (#256) — the observable proof that
|
||||
/// `dispatch_walkforward`'s real-data path runs through the one campaign
|
||||
/// executor rather than the deleted inline roller. Gated on the shared GER40
|
||||
/// archive; skips cleanly on a data refusal.
|
||||
@@ -3363,8 +3363,8 @@ fn walkforward_dissolves_through_the_campaign_path() {
|
||||
let fams_out = String::from_utf8_lossy(&fams.stdout).into_owned();
|
||||
assert_eq!(
|
||||
fams_out.lines().filter(|l| l.contains("\"kind\":\"Sweep\"")).count(),
|
||||
1,
|
||||
"one Sweep family from the pipeline's leading argmax stage: {fams_out}"
|
||||
0,
|
||||
"the enumerate-only std::grid leading stage persists no Sweep family: {fams_out}"
|
||||
);
|
||||
assert_eq!(
|
||||
fams_out.lines().filter(|l| l.contains("\"kind\":\"WalkForward\"")).count(),
|
||||
@@ -5312,9 +5312,10 @@ fn mc_dissolves_a_non_r_sma_blueprint() {
|
||||
/// path — a successful run durably auto-registers exactly one generated process
|
||||
/// document, one generated campaign document (carrying the constant "mc" name and the
|
||||
/// stop as a non-empty single risk regime), and one campaign-run record, and emits the
|
||||
/// single `mc_r_bootstrap` grade line. The pipeline's leading argmax sweep and its
|
||||
/// walk_forward stage each persist one family; the terminal monte_carlo stage is an
|
||||
/// annotator and adds NO family. This is the observable proof the inline path is gone
|
||||
/// single `mc_r_bootstrap` grade line. The pipeline's walk_forward stage persists
|
||||
/// the one family; the leading `std::grid` stage only enumerates (#256) and the
|
||||
/// terminal monte_carlo stage is an annotator — neither adds a family. This is
|
||||
/// the observable proof the inline path is gone
|
||||
/// and the dissolution runs through the executor. Gated on the GER40 2025 archive;
|
||||
/// skips cleanly on a data refusal.
|
||||
#[test]
|
||||
@@ -5391,8 +5392,8 @@ fn mc_dissolves_through_the_campaign_path() {
|
||||
let fams_out = String::from_utf8_lossy(&fams.stdout).into_owned();
|
||||
assert_eq!(
|
||||
fams_out.lines().filter(|l| l.contains("\"kind\":\"Sweep\"")).count(),
|
||||
1,
|
||||
"one Sweep family from the pipeline's leading argmax stage: {fams_out}"
|
||||
0,
|
||||
"the enumerate-only std::grid leading stage persists no Sweep family: {fams_out}"
|
||||
);
|
||||
assert_eq!(
|
||||
fams_out.lines().filter(|l| l.contains("\"kind\":\"WalkForward\"")).count(),
|
||||
@@ -5416,9 +5417,9 @@ fn mc_dissolves_through_the_campaign_path() {
|
||||
/// data-carrying window far shorter than the roller", which a fixed recent window
|
||||
/// satisfies without the full-archive probe sweep a live-span derivation costs —
|
||||
/// the archive only grows forward, so the window never falls off its end. The
|
||||
/// leading sweep stage runs first over the short window; the refusal today fires at
|
||||
/// stage 1 (the walk_forward roller), so this bites only when the window genuinely has
|
||||
/// data. Gated on the GER40 archive; skips cleanly on a data-less host.
|
||||
/// leading std::grid stage only enumerates (nothing runs over the short window); the
|
||||
/// refusal fires at stage 1 (the walk_forward roller), so this bites only when the
|
||||
/// window genuinely has data. Gated on the GER40 archive; skips cleanly on a data-less host.
|
||||
#[test]
|
||||
fn mc_real_fits_the_injected_roller_to_a_short_window() {
|
||||
if !local_data_present() {
|
||||
|
||||
Reference in New Issue
Block a user