Date declared: 2026-07-25, before any computation. Split: Research only (SOLUSDT 2020-08→2022-12 · BNBUSDT 2017-11→2022-12 · XRPUSDT 2018-05→2022-12, all fetched/validated 2026-07-25). Layer 3, Edge Lab, one ledger row per instrument. Purpose: map the two established crypto effects across the asset class — turning "two instruments" into an honest universality picture for both the displacement event class (research object) and the streak candidate (live, look-2 pending). Signal mapping only: none of these venues has a sourced cost model, so nothing here can license an execution test — harvest viability is a separate, later question per Findings A1/E5.
Family 1 — displacement continuation (frozen displacement-repro definitions:
baseline ≥ 7bp, body ≥ 60%, compression ≤ baseline, range ≥ {4,5}× baseline; signed by
bar direction): disp4, disp5 × horizons 15/30/60 min = 6 hypotheses/instrument.
Family 2 — streak persistence (frozen rhythm-scan definitions: freshness ==
threshold, disjoint sets): up_ge5(+1), up_ge8(+1), down_ge5(−1), down_ge8(−1)
× horizons 15/30/60/240 min = 16 hypotheses/instrument.
22 hypotheses × 3 instruments = 66 (cumulative 137 → 203 of 2,000). Universe, four-null battery, engine defaults exactly as prior scans (shuffle degenerate for constant-direction variants, on record).
Prior: displacement replicates broadly (it did on ETH near-identically, and the mechanism — post-compression order-flow continuation — is not BTC-specific); streak replication is genuinely uncertain (thinner effect, asymmetric, possibly tied to BTC/ETH-style leverage microstructure; XRP's retail-heavy flow is the interesting test). Score-keeping declared up front: for each family, report the cross-instrument tally (N of 5 replicate, with BTC/ETH on record) — the deliverable is the map, not any single cell. A patchy streak map (≤2 of 5) materially weakens the look-2 case and will be reported as such in the decision memo before Richard answers.
cumulative 133→155→177→199/2000 — see Ledger-count ambiguity below)
Configs: engine/scans/configs/universality-{solusdt,bnbusdt,xrpusdt}.json (both frozen
families reused verbatim — displacement expressions byte-identical to
displacement-repro.json, streak expressions byte-identical to rhythm.json, engine
default nulls 1000/1000/1000, min_events 200). Runner: scripts/run_universality_scan.py
(one shared scan.run_scan() call for disp4/disp5, one per-variant call per streak
condition — same architecture as run_session_structure_scan.py + the streak scripts'
(expr)*0 + sign pattern). Full tables in
engine/scans/results/universality-{solusdt,bnbusdt,xrpusdt}.json; 22/22 dry-run
hypothesis counts confirmed on all three before the logged run. Loaded spans (verified
against the feature-store frames, not assumed): SOLUSDT 2020-08-11→2022-12-31 (~2.4y, 3
calendar-year blocks: 2020/21/22); BNBUSDT 2017-11-06→2022-12-31 (~6.1y, 6 blocks:
2017(partial)/18/19/20/21/22); XRPUSDT 2018-05-04→2022-12-31 (~4.7y, 5 blocks:
2018(partial)/19/20/21/22). 196 tests green throughout (no source changes, config+script
additions only).
engine/scans/results/displacement-repro-btcusd.json, reports/scan-displacement-events/results-ethusdt.json,
engine/scans/results/rhythm-btcusd.json, engine/scans/results/upstreak-eth.json — verified
against those files, not transcribed from prior status prose)
| Instrument | disp5 15m signed ATR [CI] | disp5 30m signed ATR [CI] | disp5 1h signed ATR [CI] | Displacement verdict | up_ge8 1h signed ATR [CI] | up_ge8 4h signed ATR [CI] | Streak verdict |
|---|---|---|---|---|---|---|---|
| BTC (n=282/498) | +0.500 [0.228, 0.781] | +0.685 [0.346, 1.033] | +0.670 [0.304, 1.054] | REPLICATES | +0.340 [0.088, 0.590] | +0.603 [0.155, 1.051] | REPLICATES |
| ETH (n=238/625) | +0.449 [0.116, 0.854] | +0.701 [0.278, 1.169] | +0.720 [0.262, 1.199] | REPLICATES | +0.228 [0.030, 0.443] | +0.536 [0.047, 0.987] | REPLICATES |
| SOL (n=65/354) | +0.065 [−0.429, 0.638] | +0.145 [−0.453, 0.765] | −0.007 [−0.743, 0.761] | UNDER-POWERED (not refuted) | +0.343 [0.102, 0.602] | +0.665 [0.033, 1.321] | REPLICATES (supporting, power-limited) |
| BNB (n=176/681) | +0.263 [−0.128, 0.675] | +0.656 [0.146, 1.184] | +0.820 [0.185, 1.472] | REPLICATES | +0.221 [0.055, 0.389] | +0.261 [−0.122, 0.661] | DOES NOT REPLICATE (narrow miss — CI crosses zero at 4h) |
| XRP (n=218/454) | +0.553 [0.143, 1.028] | +0.829 [0.330, 1.382] | +0.890 [0.290, 1.532] | REPLICATES | +0.119 [−0.152, 0.377] | −0.406 [−0.809, −0.012] | DOES NOT REPLICATE (sign inverts, clean at 4h) |
n columns are (disp5 events / up_ge8 events).
Displacement tally: 4/5 REPLICATE (BTC, ETH, BNB, XRP), 1/5 UNDER-POWERED-not-refuted (SOL). Streak tally: 2/5 decisively REPLICATE (BTC, ETH) + 1/5 REPLICATES-but-only- supporting (SOL, power-limited) + 2/5 DO NOT REPLICATE (BNB, XRP) — a patchy map exactly matching the pre-declared honest prior ("streak replication is genuinely uncertain... a patchy streak map (≤2 of 5) materially weakens the look-2 case").
("REPLICATES on an instrument iff disp5 signed > 0 at ≥2 of 3 horizons with block-bootstrap CI > 0, AND monotone disp4→disp5 at those horizons")
Displacement verdict: broad crypto-class replication holds (4/5, all instruments with
adequate power), consistent with the prior BTC→ETH replication and the pre-declared reading
("the mechanism — post-compression order-flow continuation — is not BTC-specific"). SOL's
miss is a power artifact of its short listing history, not evidence against the effect;
BNB's own disp5 count (176) is itself sub-threshold but its CI still clears at 2 of 3
horizons, so it counts as a pass under the declared rule as written (the rule conditions on
CI-clearing, not on the min_events power flag).
("REPLICATES iff up_ge8 positive with CI>0 at 1h AND 4h, monotone vs up_ge5, ≥4/6 year-blocks (SOL: ≥2/3) sign-stable, down-side shows no comparable clean effect")
Streak verdict: does not replicate cleanly across the asset class. Two instruments (BTC, ETH) show the clean continuation pattern; SOL supports it but is power-limited by declaration; BNB misses narrowly on one CI leg; XRP inverts outright with its own CI-clean, multi-year negative effect at the same cell (up_ge8 @ 4h) where BTC/ETH/SOL are positive. Per the pre-declared reading, this is exactly the "patchy... ≤2 of 5" outcome flagged in advance as materially weakening the look-2 case for the up-streak-≥8 lead.
137 → 159 → 181 → 203). The ledger's actual cumulative
immediately before this sweep was 133 (last row: upstreak-eth, cumulative 133/2000 —
verified via ledger.cumulative_count() and runs/experiments.db directly), a constant
4-hypothesis discrepancy that predates this sweep and is not something this scan can or
should correct after the fact (no ledger rows were edited, per the hard rules). Actual
observed sequence: 133 → 155 (sol) → 177 (bnb) → 199 (xrp) — each step still +22 as
declared; only the starting offset differs. Flagged here rather than silently reconciled.min_events=200 (flagged underpowered) even
though BNB is not the power-adjusted instrument. The declaration's mechanical
displacement rule conditions only on CI-clearing and monotonicity, not on the
min_events flag, so BNB's displacement pass stands as declared; this is noted for the
record since it means the map's "4/5 replicate" count includes one instrument whose event
count is itself thin (176 < 200), same caveat class as SOL's but far less severe (176 vs
65, and BNB's CI actually clears where SOL's does not).horizons: [15, 30, 60] exactly as in
displacement-repro.json (60min = the "1h" key in scan.run_scan's output), not a
separate 60m-vs-1h distinction — same convention as every prior displacement scan.run_rhythm_scan.py/run_upstreak_eth_scan.py — each streak counts once, at the bar
where it first reaches the threshold (up_streak == 5/== 8, not >=), disjoint event
sets per side; (expr)*0 + sign parenthesization used throughout to avoid the documented
operator-precedence bug.displacement-repro.json's own bespoke-reproduction values (200/200/1000) — the
declaration says "engine defaults exactly as prior scans," and every prior scan since
session-structure/rhythm (which itself reuses the exact disp4 event definition) uses
1000/1000/1000/200; the 200/200 values in displacement-repro.json were specific to
matching the retired bespoke script's null draws byte-for-byte and are not part of the
"frozen definitions" (the event/universe/direction expressions) being reused here.The cross-instrument map is asymmetric exactly as the declaration predicted it might be: displacement continuation is crypto-class structure (4/5 clean replications, 1 under-powered-not-refuted — no instrument shows a clean negative, unlike gold's outright inversion) while streak persistence is not (2/5 clean, 1 supporting-only, 2 non- replications including one outright sign inversion at the exact cell, up_ge8@4h, where the other three are positive). This narrows the mentor-adjacent up-streak-≥8 lead from "BTC+ETH replication, project's next-highest-priority lead" (per the 2026-07-24 ETH scan) to a BTC/ETH/SOL-only pattern that does not generalize to BNB or XRP — materially weakening the case for a look-2 pursuit of that lead, as pre-declared. Displacement's broader replication strengthens the case that Family 1 is the more universal crypto structure and the better candidate for any future execution-geometry work, subject to the same cost-sourcing caveats already on record (no venue here has a sourced cost model; this remains a signal-mapping exercise, not a license for an execution test).