Files
Aura/fieldtests/cycle-328-axis-namespace/TRANSCRIPT.md
T
claude 5e32f3ccdf fieldtest: axis-namespace — 4 examples, 0 bugs / 0 friction / 1 spec-gap / 4 working
Source-blind consumer fieldtest against the release binary at 4474814:
discovery-surface identity (--params vs --list-axes byte-identical,
raw + default= on bound), the document-first loop with two
bound-override axes (validate + run e2e, manifest raw), the translation
seams (all three verbs refuse wrapped identically exit 2; campaign
validate did-you-mean exit 1), and manifests raw in params AND defaults
on all routes with reproduce 4/4 bit-identical. One spec-gap: the guide
transcript abbreviated the strategy content-id (ratified in the
follow-up doc commit). Not exercisable source-blind: replay of a
pre-#328 wrapped-name on-disk family (noted in TRANSCRIPT).

refs #328
2026-07-25 02:10:16 +02:00

5.4 KiB

Fieldtest transcript — cycle #328 (axis-namespace reconciliation)

Per-cycle field test of the one-raw-namespace axis surface: the raw <node>.<param> form as the only user-facing sweep-axis name across every surface (discovery, intake on all three verbs, run manifests, campaign documents), with the wrapped <blueprint>.<node>.<param> form retired behind translation refusals.

Binary: target/release/aura, built from HEAD 4474814 via cargo build --release -p aura-cli (Finished in 5.45s — HEAD builds clean). Scratch project aura new ax_lab in /tmp/axwork/ax_lab; real data from the built-in archive (US500). Public interface only (README, authoring-guide, glossary, design ledger, aura … --help) — no crate source read.

Base blueprint cycle328_crossover: an SMA-crossover → bias signal with a deliberate mix — fast.length open, slow.length bound (default=6), bias.scale bound (default=0.5) — so both discovery line shapes and the bound-override contract are exercised. Content id f5fdf729d0333f0286c19d57143fb7933137f27a6128e72489c508096c7a2240.


Example 1 — discovery-surface identity (--params vs --list-axes)

$ aura graph introspect --params cycle328_crossover.bp.json
fast.length:I64
slow.length:I64 default=6
bias.scale:F64 default=0.5
$ aura sweep cycle328_crossover.bp.json --list-axes
fast.length:I64
slow.length:I64 default=6
bias.scale:F64 default=0.5
$ diff params.txt listaxes.txt      # → IDENTICAL (no diff)

Byte-identical, raw <node>.<param> form, bound params carrying default=<v>. --params discovers bound params too. (Finding W1.)

Example 2 — document-first loop (paste verbatim, incl. bound-override)

Axes pasted verbatim from --params into a hand-written campaign document (cycle328_2_campaign.json), including two bound-override axes (slow.length, bias.scale — bound defaults re-opened by name, #246 coincidence contract):

$ aura campaign validate cycle328_2_campaign.json      # inside project, refs registered
campaign document valid (intrinsic): 1 strategy(ies), 3 axes (4 points), 1 instrument(s), 1 window(s), 1 regime(s) (default) — 1 cell(s)
campaign document valid (referential): all references resolve, axes are in the param space
campaign document valid (executable): pipeline shape and static guards pass
$ aura campaign run cycle328_2_campaign.json           # exit 0
aura: campaign run 0 recorded: 1 cells
# manifest.params (raw): fast.length, slow.length, bias.scale (+ stop knobs)

All three tiers pass; the bound-override axes validate; the run manifest records raw names. (Finding W2.)

Example 3 — translation seams (wrapped form on every intake)

$ aura sweep      cycle328_crossover.bp.json --axis graph.fast.length=2,4 ...   (exit 2)
$ aura sweep      cycle328_crossover.bp.json --real US500 --axis graph.fast.length=... (exit 2)
$ aura walkforward cycle328_crossover.bp.json --real US500 --axis graph.fast.length=... (exit 2)
aura: axis "graph.fast.length": axis names are raw node.param paths — use "fast.length" (the wrapped --list-axes form was retired, #328)

$ aura campaign validate cycle328_3d_wrapped_campaign.json                      (exit 1)
aura: campaign references do not resolve:
  strategy f5fdf729d0333f0286c19d57143fb7933137f27a6128e72489c508096c7a2240: axis "graph.fast.length" is not in the param space; axis names are raw node.param paths — did you mean "fast.length"?

All three verbs refuse identically, naming the raw candidate; campaign validate appends a did-you-mean. Note the campaign-validate strategy identifier is the FULL 64-hex content id, where the authoring guide's transcript shows a 4-hex strategy 9f3a: placeholder (Finding SG1). Edge probes:

$ aura sweep ... --axis fastt.length=2,4                # typo
aura: axis fastt.length: names no param of this blueprint (open or bound) — see `aura sweep <bp> --list-axes`
$ aura sweep ... --axis graph.fast.bogus=1              # wrapped, tail not a param
aura: axis graph.fast.bogus: names no param of this blueprint (open or bound) — see `aura sweep <bp> --list-axes`
$ aura sweep ... --axis project.graph.fast.length=2     # two leading segments (> one)
aura: axis project.graph.fast.length: names no param of this blueprint (open or bound) — see `aura sweep <bp> --list-axes`

Typos and >1-segment wrappings fall to a clean generic error — consistent with the documented "one leading segment strips to a hit" contract. (Finding W3.)

Example 4 — manifest raw names + reproduce

$ aura sweep cycle328_crossover.bp.json --axis fast.length=2,4 --axis slow.length=8,16 --name cycle328-sweep-bo
# each member manifest:
#   params:   [["fast.length",..],["slow.length",..],["stop_length",..],["stop_k",..]]   (raw)
#   defaults: [["bias.scale",{"F64":0.5}]]                                                (raw)
$ aura reproduce cycle328-sweep-bo-0                                             (exit 0)
cycle328-sweep-bo-0  member fast.length=2, slow.length=8, stop_length=3, stop_k=2  reproduced: bit-identical
... reproduced 4/4 members bit-identically

Positive real/walkforward routes also record raw (params AND defaults) and run clean (exit 0): cycle328_6a_sweep_real.*, cycle328_6b_walkforward.*. No wrapped name appears on any surface. (Finding W4.)


Not exercised: the "old wrapped-name manifests remain reproducible" backward- compat claim (no pre-#328 on-disk family is reachable through the public interface to a source-blind consumer).