13941a24d5
Milestone-close fieldtest for "Runway — real-data ergonomics & honesty hardening". Four curated end-to-end scenarios derived top-down from the milestone promise, run as a downstream consumer against real GER40/EURUSD M1 bars (public interface only; no crates/*/src read): 1. per-instrument pip honesty (#22) — GER40 index pip 1.0 AND EURUSD forex pip 0.0001 both honest end-to-end; AAPL.US/FOOBAR un-vetted refused exit 2, no stdout leak 2. real GER40 M1 open via open_ohlc from aura-ingest ALONE (#80/#81/#92) — no data-server dep, 53173 real bars, C4 O/H/L/C order, ts-window inverse 3. multi-tap ts-join (#93) — two taps at different cadences, 27744 rows, 0 by-ts mismatches; warm-up None rows where a positional zip would corrupt 4. run-registry coherence (#73/#82) — list/rank retired exit 2, families/ family live, two-store Registry read-back + rustdoc Findings: 4 working, 1 friction, 1 spec_gap. - friction: Cell exposes only from_i64/from_f64/... while the side-by-side Scalar is a tagged enum with public I64(..)/F64(..) variants. The natural param-authoring entry point is Scalar (Cell is the hot-path buffer carrier), so the wrong reach is a self-correcting compile snag — ergonomic only. Filed as a follow-up idea. - spec_gap: unknown family id exits 0 empty — ratified into the C18 note in the preceding commit (treat-as-empty contract). Gate verdict: GREEN. All seven axes mapped to a covering scenario and exercised on real bars; both finding classifications and the one material coverage gap were adversarially re-verified. That gap — #22's FX-vetted pip face, untested by the original scenario set — was probed (EURUSD -> sim-optimal(pip_size=0.0001), FX-scaled, not index-mis-scaled) and folded into scenario 1, so the pip promise is demonstrated on both positive faces. Every scenario re-run independently on HEAD before commit.
16 lines
980 B
Plaintext
16 lines
980 B
Plaintext
two taps, DIFFERENT cadences: exposure fired 27725 times, equity fired 27744 times
|
|
-> lengths differ by 19 rows; zip-by-index would silently misalign every row past the first divergence
|
|
|
|
join_on_ts: spine(equity)=27744 rows -> 27744 JoinedRows (exactly one per spine entry)
|
|
exposure side: present(Some)=27725, absent(None)=19, by-ts cross-check mismatches=0
|
|
|
|
first 6 joined rows (equity spine | exposure side):
|
|
ts=1420156800000 equity=0.0000 exposure=None (had not fired at this ts)
|
|
ts=1420156919999 equity=0.0000 exposure=None (had not fired at this ts)
|
|
ts=1420156980000 equity=0.0000 exposure=None (had not fired at this ts)
|
|
ts=1420157040000 equity=0.0000 exposure=None (had not fired at this ts)
|
|
ts=1420157099999 equity=0.0000 exposure=None (had not fired at this ts)
|
|
ts=1420157160000 equity=0.0000 exposure=None (had not fired at this ts)
|
|
|
|
OK: two real-data taps at different cadences fused HONESTLY on timestamp (27725 aligned, 19 side-absent), never by index.
|