β€ΊNavigation

Iteration 03 Β· 2026-06-09 Β· driver: native Claude Code /loop (laptop run)

Feature #2 β€” edge_spread_bps (PR #92)

← Dashboard Β· PR terrylica/mql5#92 Β· card 52 Β· cut off bootstrap #90

Done. The second ΞΎ-confirmed candidate is a REAL continuous-float production column on fxview_cache.forex_bars β€” bit-exact Rust verified against a pinned Python SSoT, populated through the wired producer, with batch≑streaming parity and an independent FOSS corroboration. PR #92 open (base main; diff auto-cleans once #90 + #91 land).

What it computes

EDGE effective bid-ask spread (basis points) over the raw 200-bar strictly-trailing OHLC window β€” the EDGE estimator of Ardia-Guidotti-Kroencke (JFE 2024). Causal: the window is the 200 bars BEFORE bar i (current bar excluded). None on warmup (<200 bars) / degenerate (<2 price-change periods) window. Substrate distinction from #1: edge consumes raw open/high/low/close DIRECTLY β€” NO log-return, NO 8 h gap-NULL; edge's internal cross-bar terms span weekend/Ouroboros gaps unmodified, exactly as the discovery probe's ohlc_win substrate.

The chain β€” one SSoT, bit-exact to the column

LayerArtifactResult
Python SSoToracle_edge_spread_bps.py β€” bidask.edge(o,h,l,c)*1e4 (eguidotti/bidask 2.1.0 MIT), bit-faithful to the probe's k_edgesha-pinned jsonl (12000 rows, 11200 finite) + .sha256 sidecar
Rust kernelorthogonal_extension_kernels::edge_spread_bps β€” libm::log + IEEE-754 sqrt/abs + NumPy-EXACT nanmean/nansum (NaN-as-0 over NumPy's pairwise summation)clippy clean
Differential parityvs the pinned oracle on the frozen fixture11200 == oracle, 12000 bars == rows, max|dev| 9.78e-11 β‰ͺ 1e-9
Producer columnBarOrthogonalExtV1 { edge_spread_bps } + BarRow + schema.sql Nullable(Float64) CODEC(Gorilla(8),ZSTD(1)) + feature_metadata.yamltest_schema_contract 4/4
Producer populateEdgeSpreadBpsRollingState (200-bar OHLC ring, read-before-push, NO gap-NULL, persists across gaps) @ finalizeβ€”
batch≑streamingstreaming observe() over the fixture per partition11200 == oracle, max|dev| 9.78e-11 (identical to batch)
3-way FOSSedge vs independent edge_rollingPASS β€” max|dev| 3.54e-14 (11200)

3-way FOSS finding (it earned its keep)

bidask.edge_rolling is a genuinely INDEPENDENT implementation of the SAME estimator β€” it does not call edge() (verified); it uses a rolling moment-matrix algebra vs edge()'s per-window de-meaning. Alignment empirically pinned: edge_rolling(df,window=200).iloc[i-1] == edge(O[i-200:i]). The two agree to 3.54e-14 over 11200 windows β€” the summation floor, with NO convention gap (contrast feature #1's statsmodels ddof difference). No second mainstream Python EDGE port exists (frds 2.4.1 lacks it; only cross-language R bidask::EDGE otherwise). Triangulates with Rust==edge() at 9.78e-11.

Challenge-and-Held (inline; sub-agent dispatch skipped per the tick-3 signal)

Gates / scope

Next

Feature #3 β€” hvg_clustering (card 54, networkx.average_clustering, EXACT+Ξ΅). Same chain: oracle β†’ bit-exact kernel β†’ producer column (now BarOrthogonalExtV1 exists on this branch's pattern, still re-introduced per branch off bootstrap) β†’ parity β†’ 3-way FOSS β†’ PR.

Presentation only β€” never the SSoT.