# df — example 1 — the document-first closed loop (Axis 1) Task: as a headless author, generate a campaign via the walkforward sugar over real GER40, read it back with `campaign show`, hand-extend it (add a second data window), re-register, and run the extended doc. Binary: `target/debug/aura` @ a12617bb (fresh HEAD build). ## generate (walkforward sugar registers a process + campaign, runs it) $ aura walkforward blueprints/r_sma.json --real GER40 \ --from 1704067200000 --to 1719792000000 \ --axis fast.length=2,4 --name df-wf aura: axis "fast.length" is not one of this blueprint's sweepable axes — run 'aura sweep --list-axes' to see them [exit 2] The raw op-script param name is rejected by the CLI `--axis`; the error points at `--list-axes`, which prints the wrapped form: $ aura sweep blueprints/r_sma.json --list-axes sma_signal.fast.length:I64 default=2 sma_signal.slow.length:I64 default=4 sma_signal.bias.scale:F64 default=0.5 $ aura walkforward blueprints/r_sma.json --real GER40 \ --from 1704067200000 --to 1719792000000 \ --axis sma_signal.fast.length=2,4 --name df-wf [exit 0] {"family_id":"248c2d71-0-GER40-w0-r0-s1-0","report":{...}} ... (all-zero R metrics: SMA crossover + vol stop takes 0 trades in this window — a strategy/data artifact, not the cycle surface) ## read back with `campaign show` $ aura campaign runs 248c2d71199bc83ea6d40cf5ba13c7c91915d6e07c14464dd4103c065ac4a4a2 run 0 — 1 cell(s), std::grid -> std::walk_forward $ aura campaign show 248c2d71...a4a2 {"format_version":1,"kind":"campaign","name":"df-wf","data":{"instruments": ["GER40"],"windows":[{"from_ms":1704154499999,"to_ms":1719604380000}]}, "risk":[{"vol":{"length":3,"k":2.0}}],"strategies":[{"ref":{"content_id": "884b1ba0..."},"axes":{"fast.length":{"kind":"I64","values":[2,4]}}}], "process":{"ref":{"content_id":"752d6cca..."}},"seed":0,"presentation": {"persist_taps":[],"emit":["family_table"]}} [exit 0] - byte-identical to runs/campaigns/248c2d71...a4a2.json (diff clean) - no trailing newline / no framing (print!, #164) - axes stored in RAW form `fast.length` (not wrapped) — confirms #210 ## hand-extend (add a second window) -> campaigns/df_wf_extended.json $ aura campaign validate campaigns/df_wf_extended.json ... valid (intrinsic): 1 strategy(ies), 1 axes (2 points), 1 instrument(s), 2 window(s), 1 regime(s) — 2 cell(s) ... valid (referential): all references resolve, axes are in the param space ... valid (executable): pipeline shape and static guards pass [exit 0] $ aura campaign register campaigns/df_wf_extended.json registered campaign a72028e8b18ab...f4a1 (...) [exit 0] ## run the extended document $ aura campaign run a72028e8b18ab...f4a1 [exit 0] cell window_ms=[1704154499999, 1719604380000] stages=[std::grid, std::walk_forward] cell window_ms=[1719792000000, 1735689600000] stages=[std::grid, std::walk_forward] Outcome: full loop generate -> show -> extend -> re-register -> run completed, exit 0, both windows exercised. WORKING.