Phase-0 decisive offline gate: does the candidate edge survive when fills are capped to actually-recorded book depth? Verdict: SURVIVES. The prior t=4.61 result is not a top-of-book mirage.
Context
This run directly follows crypto-shortterm-phase0-depthprofile, which recorded real book depth in the candidate regime and weakened the unfillable-mirage hypothesis. The remaining skeptic question was: does the edge hold when we enforce a two-tier fill model capped to the recorded best_*_sz and 3¢ cumulative depth?
- Binary:
crates/analysis/src/bin/depthaware.rs - Report:
docs/superpowers/phase0-depthaware-report.md - Commit:
bba5739 - Windows tested: 524 candidate-depth windows (τ∈[60,150)s, |p_fair−0.5|≥0.30)
- Bonferroni significance bar: t ≥ 2.99
Fill Model (Two-Tier Depth Walk)
For Agents
This is the exact fill logic encoded in
depthaware.rs. Future analysis runs must use this same model for comparability.
- Fill
min(S, touch_sz)shares at the touch price. - Fill
min(S − q1, depth_3pct − touch_sz)shares at touch ± 3¢ (the sweep tier). - Any unfilled remainder earns nothing (zero credit).
A latency buffer sensitivity check (+0.5¢ penalty on each fill price) was also run — verdict is unchanged.
Decay Table
524 candidate-depth windows, Bonferroni bar t≥2.99:
| S (shares) | t-stat | ¢/share | fill_rate |
|---|---|---|---|
| 50 | 5.52 | 5.01¢ | 99.8% |
| 100 | 5.36 | 4.87¢ | 99.6% |
| 250 | 5.01 | 4.53¢ | 99.0% |
| 500 | 4.58 | 4.13¢ | 97.9% |
| 1000 | 4.01 | 3.55¢ | 94.8% |
| 2000 | 3.01 | 2.61¢ | 86.8% |
| ∞ uncapped | 5.67 | 5.15¢ | 100.0% |
Capacity ceiling: 2000 shares (t=3.01, ¢/share=2.61, fill_rate=86.8%). Beyond 2000 shares the fill rate and ¢/share drop below the Bonferroni bar.
Decay shape: SANE/DECLINING — ¢/share falls monotonically as S grows. This is exactly what a real liquidity-bounded edge looks like. A flat curve or uptick would signal a top-of-book artifact; no such anomaly is present.
Verdict: SURVIVES
T19 gate status: SURVIVES offline depth-cap test — not yet a GO
The prior t=4.61 result (from crypto-shortterm-phase0-selectivity) was NOT a top-of-book mirage. Edge clears t≥2.99 at all tested sizes up to 2000 shares under realistic fill caps.
Next gate: real-fill test on a funded account at tiny size to measure actual latency cost. Only after latency cost is bounded does it make sense to build live machinery.
The +0.5¢ latency buffer sensitivity test was computed and does not change the verdict.
What This Rules Out
- The unfillable-mirage hypothesis (books so thin the edge is fictitious) is rejected at all sizes ≤2000 shares.
- The top-of-book artifact risk (edge is flat at ∞ and only appears to decay because of fill capping) is not present — decay is monotonic and physically consistent.
What Remains Open
- Latency survival — recorded
best_*_szis a 1s snapshot. Real fills ~150ms after signal may see a degraded book. The latency cost is unknown until a funded real-fill test. - Capacity at scale — 2000 shares (~$2,000/trade) is the offline ceiling. Live capacity may be lower due to fill cancellations and partial fills not captured in the snapshot model.
- Live machinery — no execution infrastructure exists. Building it is the next engineering phase, but only justified after the latency cost is bounded.
Window Count Audit (commit a3e0468)
The report header showed “Candidate-depth windows: 524” while the n_win column in the decay table showed 770. These count different things — no double-counting bug.
Definitions
| Figure | Source | Calibration | Folds included |
|---|---|---|---|
| 524 | is_candidate() on raw p_fair | none (pre-walk-forward) | ALL data including fold 0 (train-only) |
| 770 | is_candidate() on calibrated p_cal | per-fold isotonic | OOS test folds 1–5 only (fold 0 excluded) |
No double-counting in the t-stat denominator
Test fold window slices are windows[fold_starts[i]..fold_ends[i]], which are strictly non-overlapping. Each window_id appears in at most one test fold. N=770 in the t-stat denominator is legitimate. T-stats are unchanged.
Why 770 > 524
Calibration sharpens an under-confident raw model, net-adding more windows past |p|≥0.30 than it removes, even though fold 0 (~1/6 of all windows) is entirely excluded from the OOS count. The ~47% increase in candidate windows (524→770) is a legitimate calibration effect, not an artifact.
For Agents
The 524 figure (header) and 770 figure (decay table) are both correct and measuring different populations. Do not flag this as a discrepancy in future audits — it is intentional and documented here.
Code fixes applied
n_candidate_windowssplit inton_raw_candidate_windows(524) andn_oos_candidate_windows(770); both printed in a “Window Counts” section of the report with precise definitions.- Hardcoded literal
"523"in thebuild_verdictMARGINALbranch replaced with the liven_windowsvariable. - Local magic number
31_536_000.0intau_secs()replaced with theSECS_PER_YEARconstant imported from thetypescrate (types::SECS_PER_YEAR = 31_536_000.0, 365 days). No numeric mismatch — consistency cleanup only. clippy,fmt, andbuildall clean post-fix.
Related
- crypto-shortterm-phase0-depthprofile — depth profile run that preceded this; established books are not empty in the candidate regime
- crypto-shortterm-phase0-selectivity — the original t=4.61 result this re-run was stress-testing
- crypto-shortterm-phase0-walkforward — the K=6 purged walk-forward underlying everything
- crypto-shortterm — project index and phase state machine
- crypto-shortterm-open-questions — remaining CONFIRM gates