Files
Aura/fieldtests/cycle-300-document-first/df_1_closed_loop.md
T
claude 63711a1d3a fieldtest: document-first — 4 examples, 7 findings
Downstream-author fieldtest of the #300 surface, public interface only,
real GER40 archive. All four axes hold: the closed
generate -> show -> hand-extend -> re-register -> run loop (2-cell
extended campaign), the typed stop grammar's clap rejections, bare
plateau's content-id identity with plateau:mean, and the show read-back
(byte-identical, no framing) with a clean unknown-id refusal.

Findings routed: 1 bug (show outside a project blames the id instead of
the missing Aura.toml — RED-first fix follows), 2 friction items filed
to the tracker (opaque process-document select refusal; no prefix-id
hint on show), 4 working (carry-on). The fieldtest spec survives
git-ignored as the next planning cycle's reference input.

refs #300
2026-07-21 13:16:59 +02:00

3.2 KiB

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 <bp> --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.