diff --git a/prod/docs/SPEC_UNIFIED_EXEC_LAYER_20260714.md b/prod/docs/SPEC_UNIFIED_EXEC_LAYER_20260714.md index d1a8077..988144c 100644 --- a/prod/docs/SPEC_UNIFIED_EXEC_LAYER_20260714.md +++ b/prod/docs/SPEC_UNIFIED_EXEC_LAYER_20260714.md @@ -365,6 +365,42 @@ cheaper or safer — never change WHAT (the §2.3 promises hold at every tier).* | T11–T12 | Unassigned | headroom — the ladder expects rungs we can't name yet | | | **T13** | Reserved | ASI. (If the market is still imperfect enough to need an executor, §0 still applies.) | reserved by operator | +## 15.2 The size axis — S-grades (operator bonus doctrine, 2026-07-14) + +Size that moves the book is a SECOND dimension, orthogonal to smartness. Every +`ExecutionRequest` gets an S-grade at intake, computed from Appendix E's power-law +model (`D(d)=A·d^(1-α)`, per-asset, stress-adjusted by fragility factor): + +| Grade | Definition | Today's reality | Handling | +|---|---|---|---| +| **S0** | size ≪ top-of-book depth (walk < 1 tick) | BLUE's ~$60K avg vs ~$212K BTC best bid — mostly S0 on majors, NOT on alts | any tier executes directly | +| **S1** | walks visible levels (expected walk ≥ spread) | alts at current sizing already here (enter-slip −24 bps says so) | T2+ prices the walk into give-up/cross decisions | +| **S2** | exceeds book capacity in the urgency window | future capital | must be SLICED — refused whole, loudly, below T14 | +| **S3** | size IS the market (footprint changes MM behavior) | the 1MM-era problem | MALKHUT/VIBRASS game-theoretic territory | + +**The composability ruling** (the operator asked; the contract answers): + +- **COMPOSABLE (sub-rung style, `T*.s`, available at any tier ≥ T1):** slicing/ + scheduling — TWAP/VWAP/participation-rate slicers are CALLERS: they decompose one + parent request into N child `ExecutionRequest`s over time, each child inheriting + urgency and S0/S1 grade. The agnostic contract makes this free — the layer cannot + tell a slicer from a brain, by design. Ships as a separate `sizer` module ABOVE + the contract; the layer itself gains only a `parent_request_id` journal field so + friction telemetry can aggregate families. (VIBRASS's "TWAP/VWAP at size" future, + per the dual-clock north star, lands exactly here.) +- **NOT composable (wholesale tiers, T14+):** size-aware tactics INSIDE a working + order — venue-native iceberg (dialect where supported), live-depth-adaptive child + sizing, queue-position games, stealth/anti-detection placement, cross-venue + liquidity seeking. These change the working-order state machine itself and each + carries its own weird-bug class (the very thing T1 exists to avoid), so they may + not ride in as sub-rungs. **T14 = size mechanics; T15+ = adversarial size games** + (MALKHUT-adjacent; distinct from T10's placement authority). + +**Pre-qualification gate (the pain-fence):** below T14, the layer REFUSES S2+ +requests whole — loudly, with the computed expected-walk in the refusal — forcing +the caller through a slicer or the operator through a tier decision. Nobody +discovers the large-size pain class by accident in production. + ## 15.1 Deployment rungs (per tier; each publishes friction delta before the next) `shadow` (log-only intents beside naive) → `maker_entry_only` → `maker_both` →