A per-window depth-aware sizing policy clamp(DEPTH_FRACTION × side_best_ask_sz, 5, EMIT_MAX_SHARES) does NOT beat fixed 1× (S=5) sizing on BTC in an offline paired edge-gate. The best candidate misses the multiple-testing bar, and every candidate that does out-earn 1× only does so by sizing exposure up 1.9×–4.7× (offense, not de-risk) with no per-share improvement. Shelve it — and, per this session’s loss investigation, it targets a non-problem (depth-reach) rather than the real loss drivers.

Provenance — single-session, read-only, un-peer-reviewed

This is a single-session offline study by the main agent (2026-07-10) on an isolated worktree. All numbers come from a read-only backtest bin over recorded book depth + ACTUAL CLOB resolution labels; no live code changed, nothing merged or pushed (branch worktree-agent-a4946f9b9c75fafd9, commit 663b8af). Not peer-reviewed, no teammate cross-check. Two material caveats (date coverage + fill-rate hazard, see Caveats — both material) bound the strength of the null; treat the direction (NO-GO) as well-evidenced and the exact t-stats as this-session estimates.

For Agents — the verdict and the numbers

VERDICT: NO-GO — shelve depth-aware dynamic sizing. Fixed 1× (S=5) stands.

  • Policy tested: per-window shares = clamp(DEPTH_FRACTION × side_best_ask_sz, 5, EMIT_MAX_SHARES) — scale the clip to the side’s touch depth, floored at the current 5, capped at EMIT_MAX_SHARES.
  • Best candidate vs current 1× (S=5): DEPTH_FRACTION=1.0, EMIT_MAX_SHARES=10ΔPnL/window +0.141, delta t=2.60 (d_z=2.24, 3/5 folds) — BELOW the Bonferroni t≥3.08 bar (24 candidate×baseline trials).
  • vs the retired 2× (S=10): 1.0 / 15+0.139, t=2.54 — also below the bar.
  • Decisive strategic point: every candidate that out-earns 1× raises per-window exposure 1.9×–4.7× (best-t config ~1.97×, ~4.1/window). It is an offensive size-up, not a de-risk. And ¢/share is 2.32–2.83 vs baseline 2.74NO per-share improvement (bigger size is if anything worse per share).
  • Why it wouldn’t have helped the bleed anyway: depth-reach is a non-problem at 1× (~5–10 sh vs median book ~25+); the real loss drivers are adverse fill + the ~10pt on-chain label mask + a razor-thin edge. This policy targets depth-reach, so even a passing gate would not have stopped the slide.
  • Supersedes the repo HANDOVER.md pending item 5 “build depth-aware sizing post-canary.”
  • Memory pointers: this note is the canonical depth-aware-sizing-nogo anchor; related durable rules onchain-label-overstates-traded-winrate and cross-asset-join-trap.

Why depth-aware sizing fails twice — the decision funnel

flowchart TD
    P["<b>Policy</b><br/>shares = clamp(<br/>FRAC × side_best_ask_sz,<br/>5, MAX)"] --> G{"Beats fixed 1×<br/>at the corrected bar?"}
    G -->|"best t=2.60<br/>&lt; t≥3.08"| N1["<b>NO</b> — misses the<br/>multiple-testing bar<br/>(24 trials)"]
    N1 --> S{"Do the winners<br/>de-risk?"}
    S -->|"exposure 1.9×–4.7×;<br/>¢/share 2.32–2.83<br/>vs 2.74 baseline"| N2["<b>NO</b> — it's an<br/>offensive size-up,<br/>no per-share edge"]
    N2 --> W{"Would a pass have<br/>stopped the bleed?"}
    W -->|"loss = adverse fill +<br/>~10pt label mask +<br/>thin edge; depth-reach<br/>fine at 1×"| N3["<b>NO</b> — targets<br/>a non-problem"]
    N3 --> SHELVE["<b>SHELVE</b><br/>supersedes HANDOVER item 5"]
    style P fill:#264653,stroke:#2a9d8f,color:#fff
    style N1 fill:#3d2020,stroke:#c1666b,color:#fff
    style N2 fill:#3d2020,stroke:#c1666b,color:#fff
    style N3 fill:#3d2020,stroke:#c1666b,color:#fff
    style SHELVE fill:#3d2020,stroke:#c1666b,color:#fff

Verdict

NO-GO. A per-window depth-aware sizing policy does not beat the current fixed 1× (S=5) clip on BTC at the multiple-testing-corrected bar, and the only configurations that out-earn 1× do so by taking on 1.9×–4.7× more exposure per window — i.e. they are a size-up, not the de-risk the idea was reached for. There is no per-share edge to the dynamic clip (¢/share is flat-to-worse). Shelve depth-aware sizing; keep fixed 1×.

What was tested — the policy

Scale the per-window share clip to the side’s recorded touch depth:

shares = clamp(DEPTH_FRACTION × side_best_ask_sz, 5, EMIT_MAX_SHARES)
  • side_best_ask_sz = the take-side best-ask size on the token we buy (Up-book ask for Up; Down-book ask for Down).
  • Floor 5 = the current live 1× clip (so the policy can never size below today).
  • Cap EMIT_MAX_SHARES = the swept ceiling.
  • Grid: DEPTH_FRACTION ∈ {0.5, 1.0, 1.5, …} × EMIT_MAX_SHARES ∈ {10, 15, 20, …}24 candidate configs vs the two baselines (current 1× = S=5 and retired 2× = S=10).

Method

For Agents — reproducible study design

Higher-level design spec: docs/superpowers/specs/2026-07-10-depth-aware-sizing-study-design.md.

  • Bin: crates/analysis/src/bin/depthsizing.rs (new).
  • Paired per-window study — each config and the baseline are scored on the same windows, so the comparison is a within-window difference (paired d_z), not two independent means.
  • ACTUAL CLOB resolution labels (the market’s realized winner) — NOT resolved_up. This is deliberate: resolved_up overstates the traded win ~10pt on the filled subset, so any sizing study on the on-chain label would be scoring against an optimistic ghost.
  • K=6 purged/embargoed walk-forward (the same anti-leakage rig as crypto-shortterm-phase0-walkforward).
  • Clustered UTC-day bootstrap — 2000 resamples, seed 42, deterministic; days are the resample unit (windows within a day are correlated — the window-is-the-risk-unit discipline).
  • Down side modeled as a symmetric down-book BUY — buy the Down token at the Down-book ask, size to down_best_ask_sz (the correct mirror of the live both-sides rule; not the synthetic Up complement).
  • DRY: the fill logic was lifted from depthaware.rs into a new shared module crates/analysis/src/depthlib.rs, and the refactor was verified byte-identical on depthaware.rs’s report output — so the depth-cap fill model this study reuses is provably the same one that passed the Phase-0 gate.

Results

Best candidate vs current 1× (S=5)

Config (FRAC / MAX)ΔPnL/windowdelta td_zfolds+Bar (t≥)Pass?
1.0 / 10 (best-t)+0.1412.602.243/53.08NO

The Bonferroni bar is t≥3.08 for 24 candidate×baseline trials. The best config clears none of {the t bar, a 5/5-fold majority}. It is a directionally positive but statistically unconvincing result — exactly the shape the “market prices every overlay” lesson predicts for a bolt-on to the frozen regime.

vs the retired 2× (S=10)

Config (FRAC / MAX)ΔPnL/windowdelta tBar (t≥)Pass?
1.0 / 15 (best vs 2×)+0.1392.543.08NO

Against the retired 2× baseline it is the same story — best delta t=2.54, below the bar.

The decisive strategic point — it’s a size-up, not a de-risk

This is the finding that makes the NO-GO robust to the exact t-stat:

  • Every candidate that out-earns 1× raises per-window exposure 1.9×–4.7×. The best-t config (1.0 / 10) sits at ~1.97× — roughly 4.1 per window. The “edge” is bought with capital, not skill.
  • ¢/share is 2.32–2.83 across the candidates vs 2.74 for the baseline — i.e. no per-share improvement; larger clips are flat-to-worse per share. A genuine depth edge would show rising ¢/share when you concentrate size where the book is deep; this shows the opposite.

The idea was reached for as a de-risk — it is the opposite

Depth-aware sizing was on the roadmap as a way to shrink clips where the book is thin. In the data, the configs that beat fixed 1× are the ones that size UP (deeper books → bigger clips → more exposure), and they add PnL only in proportion to that extra exposure — with no better ¢/share. So even reading the sub-bar +0.14/window at face value, it buys P&L by taking more risk per window, which collides head-on with the no-circuit-breaker reality. That is the opposite of what a de-risking lever should do.

Independent confirmation — the live depthwatch analyzer

Built the same session, an observe-only analyzer (crates/observe/src/bin/depthwatch.rs) replayed the policy against live fires (no execution — a shadow read):

  • ~90% of live fires would size UP under the policy.
  • Average depth-aware clip 15.3 shares vs fixed 5~3× exposure — at frac=1.0 / MAX=20.

So the “it’s a size-up” conclusion is not a backtest artifact: on the actual live fire stream the policy overwhelmingly increases the clip. The offline gate and the live shadow agree.

Why it wouldn’t have helped anyway

Even a passing gate would not have addressed the current bleed, because depth-aware sizing targets depth-reach, and depth-reach is not the problem at live size. From this session’s loss investigation:

  • At 1× (~5–10 shares) the clip is far inside the book — median touch depth ~25+ shares. We are not exhausting the touch; there is no depth-reach loss to recover. (Consistent with Phase-0’s 2000-share capacity ceiling — the live clip is ~400× below where depth capping even begins to bind.)
  • The real loss drivers are (a) side-specific intraday adverse fill, (b) the ~10pt on-chain label mask (resolved_up overstates realized win ~10pt on the traded subset, verified vs CLOB), and (c) a razor-thin edge (~1–3pt over breakeven).
  • None of those is a sizing-shape problem. Depth-aware sizing addresses a bottleneck we don’t have and leaves all three real drivers untouched.

Caveats — both material

1. Power / date-coverage caveat (the reopener)

The statistically-correct down-buy pass has 934 windows but only 5 UTC days — because down_best_ask_sz is only populated from ~06-28 onward (that is the binding constraint on power, not window count). Five day-clusters is a thin bootstrap base.

The null is not merely a 5-day artifact

A full-range up-book robustness pass2325 windows / 13 days, modeling Down as a sell-up (so it can use the longer up-book depth history) — ALSO fails (best t=1.55). So the failure survives ~2.5× the windows and ~2.6× the days; it is not an artifact of the short down-book history.

Reopener: backfill down-book depth before ~06-28 and re-run the correct down-buy pass at full power before treating this as permanently closed.

2. Fill-model caveat (what the harness does and does not model)

depth_capped_fill models the depth PRICE-penalty (fills walk ~3¢ behind touch as the clip eats the book) but NOT the reprice/miss hazard (the no-match failure). So:

  • The modeled fill-RATE is optimistic (it assumes the shares clear).
  • But the price-penalty this policy specifically targets IS modeled — and even with the price-penalty correctly priced, the policy does not clear the bar. If anything, adding the real miss-hazard would make the larger clips worse (more shares to reprice out from under), so the optimistic fill-rate biases against the NO-GO — it does not threaten it.

Deliverables & state

For Agents — artifacts (nothing merged)

  • Branch: worktree-agent-a4946f9b9c75fafd9
  • Commit: 663b8afNOT pushed, NOT merged (isolated worktree).
  • Report: .claude/worktrees/agent-a4946f9b9c75fafd9/docs/superpowers/depthsizing-report-btc.md
  • Design spec: docs/superpowers/specs/2026-07-10-depth-aware-sizing-study-design.md
  • New code: crates/analysis/src/bin/depthsizing.rs, crates/analysis/src/depthlib.rs (DRY lift from depthaware.rs), crates/observe/src/bin/depthwatch.rs (observe-only live shadow).
  • Gates: all green — 127 tests (incl. 11 new depthlib tests), build/clippy/fmt clean.

Recommendation

Shelve depth-aware dynamic sizing. Keep fixed 1× (S=5). This supersedes the repo HANDOVER.md pending item 5 (“build depth-aware sizing post-canary”) — that item should be marked closed/shelved, with the reopener condition noted (backfill pre-06-28 down-book depth → re-run the down-buy pass at full power). Risk effort should stay on the drivers the loss investigation actually found: entry/fill selection, re-basing the health gauges on realized_pnl_usd, and a real daily-loss circuit breaker — not on the clip-shape.