18060cb9dc
Cycle 3 of the verb-dissolution milestone (96dc783..a047af6). Architect drift review over the range returned clean. What holds: - Pure sugar confirmed: `git diff 3a03617..a047af6 -- crates/aura-campaign crates/aura-engine crates/aura-research` is EMPTY. All walkforward-specific logic is confined to aura-cli. Invariant 10 (no verb-special engine logic) and invariant 12 (one campaign path, via run_campaign_returning) preserved. - No new campaign vocabulary: reuses StageBlock::WalkForward / WfMode::Rolling / RiskRegime::Vol — the #160 3-copy vocab guard needs no update. C18: content-addressed process + campaign + run recorded, e2e-verified. - C10/C20: the stop binds as a single RiskRegime::Vol (structural, not a swept param axis), consistent with the prior risk-regime cycle; Fork A refuses a multi-value stop rather than silently re-semanticizing it. - The two documented inline deviations are sound: full_window == wf_full_span on the Real arm (both delegate to probe_window); raw_matches_wrapped correctly matches wrapped fast/slow and the unwrapped stop. Deferred debt (all [low], tracked, carry-on): - Fork A narrows the surface: the inline path swept the stop as an IS-refit grid axis (RGrid.stop_* are Vec); the dissolved path refuses a multi-value stop. The byte-anchor covers the single-stop grade — "byte-for-byte" is scoped, not total. Design-ratified on #210 (Fork A / the risk-regime model: the stop defines R and is compared, never argmax-swept). - The reducer's .expect()/unreachable! on report shape mirrors the inline reducer's posture; anchor-guarded for today. - The #214 arg-bundle is now at its third instance (rule-of-three trip point); deferral to after the mc dissolution is deliberate (noted on #214). Full workspace suite green; clippy --all-targets -D warnings clean; the equivalence anchor walkforward_real_e2e_pins_the_exact_current_grade green through the dissolution. Spec + plan removed (git rm) per the cycle lifecycle. refs #210