audit: cycle 0108 tidy (drift resolved by ledger/glossary lift)
Architect verdict: drift_found — the expected pre-audit doc lag; the code holds (C1: doc-seeded bootstrap + BTreeMap-ordered generalize; C14/C23 sparse widening pinned by the pre-0108-line parse test; terminal-annotator dataflow confirmed — nothing flows out, no new emit kind, no content-id movement). All items resolved here: - C18: 0107's 'refuse loudly at preflight' points forward; new cycle-0108 realization paragraph records the v2 shape, the dual-input stage bootstrap, campaign-scope generalize, the tier boundary (test-pinned on both sides), the record widenings, and the stringly wf-detection debt. - Glossary: campaign document -> v2 shape; bootstrap and Monte-Carlo entries disambiguate the three senses (construction vs statistical r_bootstrap vs seed axis — the std::monte_carlo stage IS the trade-sequence bootstrap, named for r_bootstrap's arguments); generalize gains the campaign-scope realization. Regression: cargo test --workspace 1025/0; clippy -D warnings clean; cargo doc 0 warnings. Spec + plan removed at close per convention. closes #200
This commit is contained in:
+30
-2
@@ -1399,8 +1399,9 @@ evidence), and the v1 executor shipped the next cycle (below).
|
||||
`aura campaign run <file|content-id>` executes a campaign (a file is register-then-run
|
||||
sugar; the content id is canonical): zero-fault referential gate, then the process
|
||||
pipeline — v1 executable shape `std::sweep [std::gate]* [std::walk_forward]?`
|
||||
(`std::monte_carlo`/`std::generalize` refuse loudly at preflight, as does every other
|
||||
shape) — runs once per (strategy, instrument, window) cell in doc order. Execution
|
||||
(`std::monte_carlo`/`std::generalize` refused loudly at preflight in this cycle; they
|
||||
execute since cycle 0108, below) — runs once per (strategy, instrument, window) cell in
|
||||
doc order. Execution
|
||||
*semantics* live in the **`aura-campaign` library crate** (#198 home decision: reachable
|
||||
beyond the CLI; NOT C21's project-side World): grid odometer over the campaign axes,
|
||||
members through the engine `sweep` over a **`ListSpace`** (explicit point set beside
|
||||
@@ -1428,6 +1429,33 @@ both `RollMode`s; the shipped `folds` slot mapped to nothing the machinery accep
|
||||
a new `ZeroWalkForwardLength` intrinsic fault; wf-bearing process docs get new content ids
|
||||
by design (the 0106 fieldtest corpus stays as the historical record). Known debt:
|
||||
metric-roster triplication (#190), deflation-constant duplication (#199).
|
||||
**Realization (cycle 0108, #200 — the annotator stages execute).** The v2 executable
|
||||
shape is `std::sweep [std::gate]* [std::walk_forward]? [std::monte_carlo]?
|
||||
[std::generalize]?` — an ordered optional annotator suffix, each at most once,
|
||||
`std::generalize` strictly last; the executor preflight refuses what the intrinsic tier
|
||||
deliberately admits (`[sweep, mc, walk_forward]` is intrinsically valid — the tier
|
||||
boundary is test-pinned on both sides), plus three new static guards
|
||||
(single-instrument generalize, non-R generalize metric via the registry's
|
||||
`check_r_metric`, zero mc `resamples`/`block_len`). **Both annotators are terminal**
|
||||
(unanimous #200 triage): nothing flows out of them; filtering stays the gate's monopoly.
|
||||
`std::monte_carlo` bootstraps the stage's *incoming R-evidence* with one semantics,
|
||||
input-shaped by position — after a walk_forward, ONE `r_bootstrap` over the wf family's
|
||||
pooled per-window OOS `trade_rs` in roll order (`PooledOos`); after sweep/gates, one
|
||||
`r_bootstrap` per surviving member's fresh in-memory series (`PerSurvivor`, ordinals into
|
||||
the population family; a zero-trade member records the engine's defined all-zero
|
||||
degenerate) — seeded from the campaign doc's `seed` (C1; `trade_rs` is `#[serde(skip)]`,
|
||||
so annotators run in-executor or not at all). `std::generalize` executes at **campaign
|
||||
scope**: after all cells, per (strategy, window) the per-cell *nominees* (last wf
|
||||
window's OOS report, else the sweep winner; none on gate truncation) across instruments
|
||||
feed the shipped `generalization()` when ≥ 2 exist — divergent per-instrument winners
|
||||
are exposed via their params, never averaged away; a shortfall is recorded, not computed
|
||||
around. Realization: `StageRealization.bootstrap` (`StageBootstrap::PerSurvivor |
|
||||
PooledOos`) and `CampaignRunRecord.generalizations` (`CampaignGeneralization` keyed
|
||||
strategy × window with `winners`/`missing`), both serde-default sparse — pre-0108
|
||||
`campaign_runs.jsonl` lines parse unchanged (C14/C23). No document content id moved
|
||||
(introspection doc-strings dropped "in v1" only). Noted debt: the mc arm detects the wf
|
||||
family by the stringly `block == "std::walk_forward"` literal (a pre-existing lockstep
|
||||
pattern with the realization's block strings).
|
||||
**Guarantee.** Construction is a distinct phase, recursive at every level. Each
|
||||
node type has a **factory** `params → sized concrete node` (e.g. `SMA(length)`
|
||||
sizes its ring buffer). A **blueprint** is the param-generic, input-role-generic
|
||||
|
||||
Reference in New Issue
Block a user