d7874e2569
Per-cycle fieldtest over the #246 surface, consumer-perspective, public interface only: the scaffold quickstart end to end (aura new -> run -> --list-axes -> override sweep), --list-axes on a partially-open blueprint, an override family reproduced bit-identically (3/3 members), and the error surface (wrong axis name, kind-mismatched value — both exit 2). Corpus under fieldtests/cycle-246-bound-override/. Dispositions: the one bug (F6) is fixed in this commit — authoring-guide §1 still asserted a bound param 'never shows up in --list-axes' and 'no aura sweep --axis can reopen it', contradicting the shipped #246 semantics and the C12 amendment; the three-states paragraph now reads open = must-bind, bound = overridable default. The friction finding (F5, KindMismatch/MissingKnob printed as raw Debug structs beside polished prose) is filed as #247. refs #246
86 lines
5.4 KiB
Plaintext
86 lines
5.4 KiB
Plaintext
Field test — cycle-246-bound-override — verbatim transcript
|
|
Binary: target/debug/aura (built from HEAD 9d4e4c7, `cargo build -p aura-cli`)
|
|
All runs synthetic (no --real). Project = the scaffolded signal-lab/.
|
|
|
|
=====================================================================
|
|
EXAMPLE 1 — quickstart end to end (axis 1), exactly as scaffolded CLAUDE.md
|
|
=====================================================================
|
|
|
|
$ aura new signal-lab
|
|
created project "signal-lab" (data-only; attach native nodes later with `aura nodes new`)
|
|
# scaffold ships ONE blueprint: signal-lab/blueprints/signal.json (all params bound)
|
|
|
|
# CLAUDE.md quickstart advertises, verbatim:
|
|
# Run: aura run blueprints/signal.json
|
|
# Sweep: aura sweep blueprints/signal.json --axis signal_lab_signal.fast.length=2,4,8
|
|
# (aura sweep <bp> --list-axes lists open + bound-overridable axes)
|
|
|
|
$ aura run blueprints/signal.json # [exit 0]
|
|
{"manifest":{...,"params":[],...},"metrics":{"total_pips":0.3418...,"r":{"expectancy_r":1.271...,"n_trades":3,...}}}
|
|
|
|
$ aura sweep blueprints/signal.json --list-axes # [exit 0]
|
|
signal_lab_signal.fast.length:I64 default=2
|
|
signal_lab_signal.slow.length:I64 default=4
|
|
signal_lab_signal.bias.scale:F64 default=0.5
|
|
|
|
$ aura sweep blueprints/signal.json --axis signal_lab_signal.fast.length=2,4,8 # [exit 0]
|
|
{"family_id":"sweep-0","report":{"manifest":{"params":[["signal_lab_signal.fast.length",{"I64":2}],["stop_length",{"I64":3}],["stop_k",{"F64":2.0}]],...}}}
|
|
{"family_id":"sweep-0","report":{"manifest":{"params":[["signal_lab_signal.fast.length",{"I64":4}],...]}}}
|
|
{"family_id":"sweep-0","report":{"manifest":{"params":[["signal_lab_signal.fast.length",{"I64":8}],...]}}}
|
|
# bound fast.length overridden per member; slow.length + bias.scale stay at their bound defaults.
|
|
|
|
=====================================================================
|
|
EXAMPLE 2 — --list-axes on a partially-open blueprint (axis 2)
|
|
=====================================================================
|
|
# op-script bo_2_partial_open_opscript.json binds slow.length=4, leaves fast.length + bias.scale open.
|
|
|
|
$ aura graph build < bo_2_partial_open_opscript.json > bo_2_partial_open.json # [exit 0] (name = "graph")
|
|
|
|
$ aura graph introspect --params bo_2_partial_open.json # [exit 0] (raw namespace, OPEN only)
|
|
fast.length:I64
|
|
bias.scale:F64
|
|
|
|
$ aura sweep bo_2_partial_open.json --list-axes # [exit 0]
|
|
graph.fast.length:I64 # open knobs first, NO default=
|
|
graph.bias.scale:F64
|
|
graph.slow.length:I64 default=4 # bound param last, WITH default=
|
|
|
|
# bound is optional (uses default); open is still required:
|
|
$ aura sweep blueprints/partial.json --axis graph.fast.length=2,4 --axis graph.bias.scale=0.5 --name bo2d # [exit 0]
|
|
# 2 members run; slow.length omitted -> stays at default 4 (absent from manifest params).
|
|
$ aura sweep blueprints/partial.json --axis graph.fast.length=2,4 # [exit 2]
|
|
aura: MissingKnob("graph.bias.scale") # <-- raw Debug enum print (see finding F5)
|
|
|
|
=====================================================================
|
|
EXAMPLE 3 — override sweep + reproduce (axis 3)
|
|
=====================================================================
|
|
$ aura sweep blueprints/signal.json --axis signal_lab_signal.fast.length=2,4,8 --name bo3-override # [exit 0]
|
|
$ aura runs families # [exit 0]
|
|
{"family_id":"sweep-0","kind":"Sweep","members":3}
|
|
{"family_id":"bo2d-0","kind":"Sweep","members":2}
|
|
{"family_id":"bo3-override-0","kind":"Sweep","members":3}
|
|
|
|
$ aura reproduce bo3-override-0 # [exit 0] (help says "content id"; the name works too)
|
|
bo3-override-0 member signal_lab_signal.fast.length=2, stop_length=3, stop_k=2 reproduced: bit-identical
|
|
bo3-override-0 member signal_lab_signal.fast.length=4, stop_length=3, stop_k=2 reproduced: bit-identical
|
|
bo3-override-0 member signal_lab_signal.fast.length=8, stop_length=3, stop_k=2 reproduced: bit-identical
|
|
reproduced 3/3 members bit-identically
|
|
|
|
=====================================================================
|
|
EXAMPLE 4 — error surface (axis 4)
|
|
=====================================================================
|
|
$ aura sweep blueprints/signal.json --axis signal_lab_signal.nonexistent=1,2 # [exit 2] CLEAN
|
|
aura: axis signal_lab_signal.nonexistent: names no param of this blueprint (open or bound) — see `aura sweep <bp> --list-axes`
|
|
|
|
$ aura sweep blueprints/signal.json --axis totally.bogus=1 # [exit 2] CLEAN (retired "nothing to sweep" gone)
|
|
aura: axis totally.bogus: names no param of this blueprint (open or bound) — see `aura sweep <bp> --list-axes`
|
|
|
|
$ aura sweep blueprints/signal.json --axis signal_lab_signal.fast.length=1.5,2.5 # [exit 2] RAW DEBUG (finding F5)
|
|
aura: KindMismatch { knob: "signal_lab_signal.fast.length", expected: I64, got: F64 }
|
|
|
|
# run/mc still refuse open blueprints:
|
|
$ aura run blueprints/partial.json # [exit 2]
|
|
aura: run requires a closed blueprint (no free parameters); 2 free knob(s) — bind them or use `aura sweep --axis`
|
|
$ aura mc blueprints/partial.json # [exit 2] (generic usage error, not the open-param prose)
|
|
$ aura run blueprints/signal.json # [exit 0] (all bound = closed)
|