# Fieldtest transcript — cycle #328 (axis-namespace reconciliation) Per-cycle field test of the one-raw-namespace axis surface: the raw `.` 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 `..` 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 `.` form, bound params carrying `default=`. `--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 --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 --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 --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).