DashboardThree-Axis ProbesCrypto Shared Data PoolThe 441-cell robustness map

finding · findings/evolution/shared_data/slicing-robustness-findings.md

The 441-cell robustness map — does our test grid actually hold enough data?

Before running any feature experiment, we measured every box in our 441-box grid of market data to confirm each one has enough bars to trust — and built guardrails so the thin boxes can't quietly corrupt the results.

In plain English. Think of our research grid as a giant spreadsheet: 21 time-windows down the side, 21 (coin, sensitivity) settings across the top — 441 cells in total. Each cell is supposed to contain a pile of "bars" (summarized price events) to study. We checked all 441 cells to see how full each one is. Most are healthy and packed; a handful are thin or completely empty. The win here isn't just the count — it's that the analysis tool now knows which cells are too thin and automatically sets them aside, so a near-empty cell can never sneak a bad number into the final verdict.

What is this?

This is a one-time validation pass — a dress rehearsal, not the real experiment. On 2026-05-30 the operator ran read-only checks (look-but-never-touch queries) against the production database on bigblack (the team's GPU server). The data lives in ClickHouse, a fast analytics database. The goal was to answer three questions before committing to the full study:

A few terms, in plain words

Key numbers

441
Total cells checked (21×21)
414
Healthy — clear the 1000-bar floor
24
Thin — flagged & excluded
3
Empty — skipped entirely
0
Below the 200-bar minimum (where a cell exists)
0.999999
Canary duplicate-pair ρ (caught)

The robustness map (all 441 cells)

Every cell falls into one of four buckets. The headline: 414 of 441 are healthy, and the remaining 27 are explicitly handled rather than ignored.

Cell classCountWhat it means & what happens to it
Healthy clears the 1000-bar floor414Gets the full verdict: the duplicate-check score (Spearman), a redundancy measure (h_norm), and candidate features evaluated.
Empty bar_count = 03ETHUSDT@100 in slices 01/02/03 — SKIPPED. The data simply ends 2025-06-17, so these windows are blank.
Sub-floor 200–999 bars24Mostly the 750 dbps cells. Flagged meets_floor_1000=false and excluded from the combined tally so they can't skew it.
Below 200-bar floor0None. Wherever a cell has any data at all, it has enough to compute candidates.
The binding constraint is bar density at 750 dbps. Because 750 dbps needs a 0.75% move to close a bar, those cells produce the fewest bars — and they're the ones that fall short. BTCUSDT@750 misses the 1000-bar floor in 10 of 21 slices; BNBUSDT@750 misses in 9. This is exactly what the design doc (slicing-methodology.md) predicted: "bar density at 750 dbps becomes risky."

Bars per (coin, dbps) setting — min / median / max across the 21 slices

This shows the spread. Where the minimum dips under 1000, the offending slices are named in the last column.

CellMinMedianMaxSlices under 1000 bars
BTCUSDT@10014,08257,246354,751
BTCUSDT@2502,6189,11976,680
BTCUSDT@5007112,55820,957s03, s11
BTCUSDT@7502421,1039,188s01, s03, s04, s05, s08, s09, s10, s11, s12, s13
ETHUSDT@100084,602501,183s01, s02, s03 (empty — ends 2025-06-17)
ETHUSDT@2502,92218,25797,593
BNBUSDT@7503121,15615,301s01, s03, s04, s06, s09, s10, s11, s12, s13
LTCUSDT@2507,63516,089116,841(LTC@100 dropped: only 26 bars)
XRPUSDT@10051,714132,3151,058,962

The 500/750 settings for ADA and XRP clear the floor in all but the noted slices.

The smoke test — proof the safeguards actually fire

Beyond counting, the team ran the full probe end-to-end (still read-only) to confirm each safety behavior triggers in real life. A "smoke test" just means: turn it on and check nothing catches fire.

What we decided — the new grid rules

The validation drove a set of design changes. The first three are scope decisions; #1–#4 are the new mechanics that keep results honest.

#DecisionWhy (in plain terms)
Crypto-only (forex removed)Operator directive of 2026-05-30. Forex isn't deleted — it's parked for possible later reintroduction.
2021+ only (drop 3 of the 2020 windows)BTC/ETH bars only begin 2021-01-01, so 2020 windows were empty or ragged. This drops the count from 24 to 21 windows and makes the grid a clean rectangle across 6 coins.
Drop LTCUSDT@100Only 26 bars exist in the whole database — effectively broken, so it's out.
#1Threshold tiers: 750 = "Spearman only"; 100/250/500 = "full"Because 750 dbps falls below the 1000-bar floor in about half the slices, its deeper metrics aren't reliable there. So 750 cells only get the basic duplicate-check, not the fancier ones. This keeps every cell on the same tidy 2-month grid (an alternative — a special 3-month window just for 750 — was rejected).
#2Effective-sample-size honestySlices from the same quarter live in the same market mood, so 21 windows aren't 21 independent tests — really about 7. The summary now reports the worst-case pass rate across these 7 moods, not just a flattering pooled count.
#3Regime stratificationEach candidate's pass rate is broken out by market era — bull_2021 / bear_2022 / stress_2022 / recovery_2023 / bull_2024 / range_2025 / current_2026 — so we catch features that look unique in calm times but turn into duplicates under stress.
#4--subsample N optionCells range from 242 to over a million bars. This optional, seed-fixed trimming makes cells comparable and faster. It's safe because the duplicate-check (Spearman) ignores row order, so trimming after the ordered computation changes nothing.

A fifth suggestion from the earlier assessment ("wire in EURUSD@5 / forex") is superseded by the crypto-only directive and intentionally not applied.

How a thin cell can never poison a verdict

The core design invariant: fragile cells are never silently mixed into a conclusion. Four guardrails enforce it:

What's still open

Bottom line. The crypto-only grid is solid — 414 of 441 cells are richly populated, the only weak spot is the sparse 750-dbps setting (exactly as predicted), and the probe now provably quarantines every empty or thin cell so the upcoming experiment can't be corrupted by data it doesn't actually have.