63711a1d3a
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
3.2 KiB
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.