# Milestone fieldtest — Research artifacts — process & campaign documents (cycles 0106–0109) — 2026-07-04 **Role:** downstream consumer (methodology + campaign designer), public interface only (ledger C18/C22/C25, glossary, CLI --help + introspection, the fieldtests/ corpora as shape hints). No `crates/` source read. Build: `cargo build --release -p aura-cli` (HEAD `01925e06`); project dylib built in the scaffolded `mrp_lab/`. Real data: local Pepperstone archive (GER40 + FRA40, 2024-09). **Milestone Verdict: GREEN** — nameable, diffable, auditable research intent executes reproducibly into recorded, chartable evidence, end to end. Both findings are doc-gaps, neither a bug nor a broken contract; no bug/friction/spec_gap in the milestone's own surface. ## The one continuous scenario - `mra_1_strategy_smacross.json` (+`_built.json`) — op-script → `graph build` → register, content id `597d71…` (stable across sessions). - `mra_2_process_full_v2.json` — sweep(deflate) → gate → walk_forward → monte_carlo → generalize, authored from introspection alone; registered `cd9127…`. - `mra_3_campaign_full_v2.json` — GER40+FRA40, persist_taps [equity, r_equity], both emit kinds; validated through all three tiers, registered `42edeb…`, run by content id. ## Findings ### F1 [working] Full v2 pipeline closes end to end over two instruments `campaign run ` (exit 0) runs sweep(deflate)→gate→walk_forward→ monte_carlo per cell + campaign-scope generalize. Records: sweep `selection` (deflated_score/overfit_probability/n_trials), gate `survivor_ordinals: [0,1,2]`, wf `family_id`, mc `pooled_oos` (GER40 `n_trades:1843, prob_le_zero:0.274`; FRA40 `1272, 0.412`), `generalizations` (`worst_case:0.04367…, sign_agreement:2`, per-instrument breakdown + `winners` params). → carry-on. ### F2 [working] Bare-{} envelope + block/metric introspection bootstrap authoring `process|campaign introspect --unwired mra_bare.json` enumerates every required slot (campaign names the closed tap vocabulary inline: `persist_taps (equity | exposure | r_equity | net_r_equity)`); `--vocabulary`/`--block`/`--metrics` (tags `rankable|gate|generalize| annotation`) suffice to author both docs. The 0108-F8 R-expectancy tagging is correct. → carry-on. ### F3 [working] Three tiers, legible degradation Inside a project: intrinsic + referential + `valid (executable): pipeline shape and static guards pass`. Outside: intrinsic only + `referential checks skipped (no Aura.toml found up from /tmp)` (exit 0). → carry-on. ### F4 [working] C1 reproducibility + content-id stability Two runs byte-identical after normalizing only the campaign-run counter (`42edebd2-`) and the family-store per-name run index (`…-s0-`, both mint-fresh per ledger); the R-metric/bootstrap number stream hashes identically (`cd9ad25…`). Op-script re-hashes to `597d71…`. → carry-on. ### F5 [working] Auditable / navigable / chartable realization `campaign runs` → `run 0 — 2 cell(s), std::sweep -> std::gate -> std::walk_forward -> std::monte_carlo`; `campaign runs ` dumps the BARE store line, byte-identical to `campaign_runs.jsonl` (not the `{"campaign_run":…}` wrapper). `trace_name:"42edebd2-0"` → on-disk `runs/traces/42edebd2-0/597d719b-{GER40,FRA40}-w0/{equity,r_equity}.json` (exactly the ledger layout); `aura chart 42edebd2-0/597d719b-GER40-w0` renders a self-contained page. → carry-on. ### F6 [working] Refuse-don't-guess + no-compile diffability Bogus process ref → `process 0000… not found in the project store` (referential, exit 1). Unknown tap → `presentation.persist_taps[1]: unknown tap "pnl" (taps: equity | exposure | r_equity | net_r_equity)` (exit 1). Process doc validated as campaign → `the "kind" key must be "campaign"` (the #193 exact-key prose, exit 1). One-value axis edit (`slow.length` 16→32) → new content id `ce0de8…`, still `valid (executable)`, no compile/run. → carry-on. ### F7 [doc-gap] The documented Aura.toml data-archive root is not honored (as documented) Glossary (`Aura.toml`: "paths only: the data archive root and the runs dir") + `docs/project-layout.md` claim the archive root is an `Aura.toml` path, but neither names the KEY — and a guessed `[paths] archive = …` has no effect (every real-data path then resolves the built-in default). The real key is `[paths] data` (honored end-to-end incl. the campaign path). A consumer whose archive lives elsewhere cannot configure it from the public surface without the key name. → tighten docs (RESOLVED same-session: project-layout + glossary now name `[paths] data`, and the `aura new` Aura.toml template advertises the commented-out key). ### F8 [doc-gap] Role-6a op-script grammar not CLI-discoverable `graph introspect` surfaces node vocabulary (`--vocabulary`) + ports (`--node`) but NOT the op-list verbs (`source/add/feed/connect/expose`) or their JSON shape; `graph build --help` and `project-layout.md` omit them too. Authored the op-script only via the fieldtest-corpus shape hint. Orthogonal to this milestone (role 6a shipped cycle 0088); does not block roles 5/6b (strategy content ids arrive via C25's id interface), but breaks "author from introspection alone" for the upstream input. → document the op grammar (filed; docwriter territory with the #197 docs half). Counts: working 6 (F1–F6), doc-gap 2 (F7 resolved same-session, F8 filed), friction 0, spec_gap 0, bugs 0.