Files
claude ba46350da9 fieldtest: measurement milestone — 3 studies, 8 findings
Milestone acceptance corpus for 'Measurement as a first-class citizen',
authored as a downstream consumer (public interface only): a gated
rate/mux/counter over the four new cells, a SessionFrankfurt anchor study,
and the origin first-candle-momentum study on real GER40 data — each a
hand-authored blueprint plus one recorded run, zero throwaway Rust. The
three capabilities compose end-to-end and record via declared taps.

Findings routed separately: two aura-run panics-where-refusal-expected
(bad tap wire; non-bias output) to debug; a tap-authoring friction and two
doc gaps to follow-ups.
2026-07-18 00:45:38 +02:00

58 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Fieldtest corpus — "Measurement as a first-class citizen" milestone
Downstream-consumer study blueprints authored from the public interface
(ledger C24/C26/C27, glossary, shipped example envelopes) to exercise the
milestone's three composing capabilities end to end:
1. **normalized-time bucketing** — coarse bars / session anchoring bucket by
the nominal minute despite jittered provider stamps;
2. **the four new std cells**`Sign`, `Select`, `CumSum`, `When`;
3. **declared taps** — named measurement points on interior wires, recorded
from one `aura run`.
Each scenario ships three files: `*.ops.json` (the role-6a op-script, the
canonical authoring input), `*.bp.json` (the `aura graph build` output), and
`*.json` (the final runnable envelope — the built blueprint **plus a
hand-added `taps` field**, since no op-script verb and no documented surface
declares a tap; see the fieldtest spec).
## Reproduce
Build the CLI (`cargo build --release -p aura-cli`), then, inside a scratch
project (`aura new lab && cd lab`), copy a scenario's `*.json` in and run it.
Declared taps persist under `runs/traces/<blueprint-name>/` only inside a
project; chart with `aura chart <name>`.
### 1 — `mfc_1_gated_rate` (cells + taps, synthetic)
```
aura run mfc_1_gated_rate.json
```
A gated-rate / mux / counter study over the synthetic close stream. `Gt`
drives a Bool gate; `Select` muxes it back to ±1 (the Bool→F64 bridge);
`Sign` reads the fastslow spread direction; `When(1.0, gate)` forwards a 1
only on gate-true cycles, and `CumSum` over it vs `CumSum` over the raw clock
gives the rate = qualifying/total. Verified: `dir_sign == sign(spread)`;
`mux_select == ±1` by the gate; `gated_when` records exactly the gate-true
subsequence; `count_above / count_all == 6 / 18`.
### 2 — `mfc_2_session_anchor` (session anchoring + taps)
```
aura run mfc_2_session_anchor.json --real GER40 --from 1725148800000 --to 1725321600000
```
`SessionFrankfurt` yields `bars_since_open`; `EqConst(·, 0)` flags the first
block of each session; `When` gates a momentum sign to it. Over real GER40 the
`isfirst_flag==1` set equals the `bars_since_open==0` set. On the synthetic
stream `bars_since_open` is a constant pre-open sentinel (toy timestamps), so
the anchoring is only meaningful over `--real`.
### 3 — `mfc_3_first_candle_momentum` (all three axes, real)
```
aura run mfc_3_first_candle_momentum.json --real GER40 --from 1725148800000 --to 1727740800000
```
The origin question — "is the first coarse candle after a session open a
momentum indicator?" `Resample` builds 15-minute bars (clean 15.0-min cadence
preserved across `:59.999` jittered stamps — the snap fix), `SessionFrankfurt`
anchors on the coarse close, and `When` gates `Sign(coarse close coarse
open)` to the first coarse candle of each session. Records exactly one
`firstmom` sample per session (21 over September 2024), zero throwaway Rust.