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:
@@ -350,6 +350,7 @@ std::gate filter survivors by a conjunction of typed metric predicates
|
||||
std::walk_forward rolling in-sample optimize + out-of-sample test
|
||||
std::monte_carlo R-bootstrap over realised R (terminal annotator): ...
|
||||
std::generalize cross-instrument worst-case floor (terminal annotator): ...
|
||||
std::grid enumerate the axis grid as parameter points for the next stage (enumerate-only leading stage): ...
|
||||
$ aura process introspect --block std::sweep
|
||||
std::sweep — evaluate the campaign's axes-space; reduce members to R metrics; optionally select a winner (the selection group metric+select is all-or-nothing; omitted = selection-free, terminal-stage-only)
|
||||
metric optional, metric name (see metric_vocabulary)
|
||||
|
||||
@@ -2551,6 +2551,19 @@ plan so the two halves cannot drift (C1/C4 determinism).
|
||||
(0 bugs; behaviour preservation, campaign-substrate reach-through, and the risk-regime axis
|
||||
all confirmed); residual findings are discoverability/ergonomics follow-ups (#216 risk-axis
|
||||
discoverability, #217 verb knob asymmetry, #218 no-project store litter).
|
||||
**Amendment (2026-07-14, #256 fork B):** the dissolved walkforward/mc
|
||||
translations' leading sweep became the enumerate-only **`std::grid`** stage —
|
||||
a fieldless vocabulary block, legal only as the first stage and immediately
|
||||
before `std::walk_forward`. Only the grid's parameter points ever crossed the
|
||||
stage seam (the wf stage re-sweeps them per IS window itself), so the leading
|
||||
stage no longer executes members or persists a `Sweep` registry family:
|
||||
persisted dissolved-walkforward/mc campaign documents lose that family, while
|
||||
the visible grades are byte-identical (the exact-grade E2E pins are
|
||||
unchanged). The executor's inter-stage seam is now a typed two-armed flow
|
||||
(points-only vs executed members); report-consuming stages are fenced by
|
||||
preflight. `translate_generalize` keeps its executed `std::sweep(argmax)`
|
||||
leading stage — its generalize stage consumes the argmax winner report as the
|
||||
cell nominee.
|
||||
- **Inferential honesty of the World — family-selection without false-discovery
|
||||
control (tracked: milestone "Inferential validation (defend against false
|
||||
discovery at sweep scale)", #144 / #145 / #146; adjacent #139).** The World's
|
||||
|
||||
Reference in New Issue
Block a user