Protective ruling card
- Card
- prot-371beffa30151e5cbab1c0840b8b98db
- At
- 2026-10-02 19:47 UTC
- Decision id
- —
- Ruling id
- 371beffa30151e5cbab1c0840b8b98db0cb4131adb1f964ad627c58605e0092e
- Outcome
- —
- Raw JSON
- prot-371beffa30151e5cbab1c0840b8b98db.json
What the risk kernel ruled
It can only shrink, refuse or close.
- Ruling
- 371beffa30151e5cbab1c0840b8b98db0cb4131adb1f964ad627c58605e0092e
- At
- 2026-10-02 19:47 UTC
- Answers
- protective: weekend_freeze
- Breaker
- reduce_only → reduce_only
- Guards applied
- G1_venue_integrity, G2_weekend_freeze, G5_daily_kill, G10_breaker
| instrument | held | asked | approved | set by |
|---|---|---|---|---|
| COINUSDT | -2.36% | hold | 0 (flat) | G2_weekend_freeze |
| HOODUSDT | -2.44% | hold | 0 (flat) | G2_weekend_freeze |
Book-level guards
| guard | status | ceiling | reason |
|---|---|---|---|
| G5 daily kill | passed | — | day return within the -1.5% kill basis and inputsEnvelope simulation uses a -1.5% daily kill (envelope_clean.py) {
"day_open_equity": "50009.39148830000000000000000",
"day_return": -0.0006784611030957654,
"equity": "49975.46206138570000000000000",
"kill_at": -0.015
} |
| G10 breaker | fired | — | no new exposure anywhere: breaker reduce-only (losing_streak) basis and inputs2.5% is past the worst no-edge 72h drawdown (-2.48%, envelope_clean.json); losing-streak and staleness rules ported from ARGUS risk/circuit.py (MIT); a model outage never leads to a deterministic trade (DESIGN.md §9.5); policy v2 (run2-a5): the losing-streak trip lapses, since a flat book in reduce-only could never close the winner that clears it; policy v2 (run2-a6): a flatten is itself a taker trade on every leg {
"book_demands": "reduce_only",
"book_trips": "losing_streak",
"breaker_state": "reduce_only",
"breaker_trips": "losing_streak",
"consecutive_losses": 5.0,
"drawdown": -0.0022233928560908803,
"effective": "reduce_only",
"llm_outage": false
} |
COINUSDT: every guard
| guard | status | ceiling | reason |
|---|---|---|---|
| G1 venue integrity | passed | — | Demo mark within the index limit, Demo-live gap within p99, Demo index moving basis and inputsDemo flash prints (BTCUSDT Demo mark 65.6% from its index, 2026-06-29 00:00 UTC); excursion counts and p99 gaps in demo_integrity.json and fade_demo.json; weekend Demo index moves 0.1-1.5 bps/h vs 18-66 bps/h on weekdays (weekend_vol.json) {
"demo_index": "183.2416284593253515",
"demo_index_move_bps_3h": 32.81690127423594,
"demo_last": "183.01",
"demo_live_gap_bps": 14.731558271497162,
"demo_live_p99_bps": 165.0,
"demo_mark": "183.23",
"live_last": "183.28",
"mark_index_gap": 6.345970303321497e-05,
"mark_index_limit": 0.03,
"session_open": true,
"stale_index_min_move_bps_3h": 2.0
} |
| G2 weekend freeze | fired | exit | exit: pre-flatten: within 15 minutes of the weekend freeze basis and inputsUTA Demo does not track these perps on weekends. Mostly it freezes: weekend mean |1H move| of the Demo index 0.1-1.5 bps against 5.6-29.1 bps live (weekend_vol.json); MSTR +204 bps live vs +5 bps Demo from Saturday 00:00 to 12:00 UTC on 2026-09-19. Sometimes it jumps on its own: AAPL +80 bps Demo vs +17 bps live on 2026-09-12 (fade_demo2.txt); policy v2 (run2-a4): a trade still open when the record is scored has no result, so the window closes them all {
"asset_class": "us_equity",
"phase": "preflatten"
} |
| G5 daily kill | passed | — | day return within the -1.5% kill basis and inputsEnvelope simulation uses a -1.5% daily kill (envelope_clean.py) {
"day_open_equity": "50009.39148830000000000000000",
"day_return": -0.0006784611030957654,
"equity": "49975.46206138570000000000000",
"kill_at": -0.015
} |
| G10 breaker | passed | 2.36% | breaker reduce-only (losing_streak); this would refuse an increase, and none was requested basis and inputs2.5% is past the worst no-edge 72h drawdown (-2.48%, envelope_clean.json); losing-streak and staleness rules ported from ARGUS risk/circuit.py (MIT); a model outage never leads to a deterministic trade (DESIGN.md §9.5); policy v2 (run2-a5): the losing-streak trip lapses, since a flat book in reduce-only could never close the winner that clears it; policy v2 (run2-a6): a flatten is itself a taker trade on every leg {
"book_demands": "reduce_only",
"book_trips": "losing_streak",
"breaker_state": "reduce_only",
"breaker_trips": "losing_streak",
"consecutive_losses": 5.0,
"drawdown": -0.0022233928560908803,
"effective": "reduce_only",
"llm_outage": false,
"quote_age_seconds": 10.842597,
"snapshot_age_seconds": 222.233293
} |
HOODUSDT: every guard
| guard | status | ceiling | reason |
|---|---|---|---|
| G1 venue integrity | passed | — | Demo mark within the index limit, Demo-live gap within p99, Demo index moving basis and inputsDemo flash prints (BTCUSDT Demo mark 65.6% from its index, 2026-06-29 00:00 UTC); excursion counts and p99 gaps in demo_integrity.json and fade_demo.json; weekend Demo index moves 0.1-1.5 bps/h vs 18-66 bps/h on weekdays (weekend_vol.json) {
"demo_index": "112.5826262060977345",
"demo_index_move_bps_3h": 74.75862458836653,
"demo_last": "112.61",
"demo_live_gap_bps": 6.212282570110046,
"demo_live_p99_bps": 383.0,
"demo_mark": "112.58",
"live_last": "112.68",
"mark_index_gap": 2.3326921624006837e-05,
"mark_index_limit": 0.03,
"session_open": true,
"stale_index_min_move_bps_3h": 2.0
} |
| G2 weekend freeze | fired | exit | exit: pre-flatten: within 15 minutes of the weekend freeze basis and inputsUTA Demo does not track these perps on weekends. Mostly it freezes: weekend mean |1H move| of the Demo index 0.1-1.5 bps against 5.6-29.1 bps live (weekend_vol.json); MSTR +204 bps live vs +5 bps Demo from Saturday 00:00 to 12:00 UTC on 2026-09-19. Sometimes it jumps on its own: AAPL +80 bps Demo vs +17 bps live on 2026-09-12 (fade_demo2.txt); policy v2 (run2-a4): a trade still open when the record is scored has no result, so the window closes them all {
"asset_class": "us_equity",
"phase": "preflatten"
} |
| G5 daily kill | passed | — | day return within the -1.5% kill basis and inputsEnvelope simulation uses a -1.5% daily kill (envelope_clean.py) {
"day_open_equity": "50009.39148830000000000000000",
"day_return": -0.0006784611030957654,
"equity": "49975.46206138570000000000000",
"kill_at": -0.015
} |
| G10 breaker | passed | 2.44% | breaker reduce-only (losing_streak); this would refuse an increase, and none was requested basis and inputs2.5% is past the worst no-edge 72h drawdown (-2.48%, envelope_clean.json); losing-streak and staleness rules ported from ARGUS risk/circuit.py (MIT); a model outage never leads to a deterministic trade (DESIGN.md §9.5); policy v2 (run2-a5): the losing-streak trip lapses, since a flat book in reduce-only could never close the winner that clears it; policy v2 (run2-a6): a flatten is itself a taker trade on every leg {
"book_demands": "reduce_only",
"book_trips": "losing_streak",
"breaker_state": "reduce_only",
"breaker_trips": "losing_streak",
"consecutive_losses": 5.0,
"drawdown": -0.0022233928560908803,
"effective": "reduce_only",
"llm_outage": false,
"quote_age_seconds": 10.842597,
"snapshot_age_seconds": 222.233293
} |
What was sent and what came back
- clientOid
- sa15288dfa7a4fbdfd1f5d1769a16548
- Venue orderId
- 1490003701307691008
- Stop
- —
- Net P&L realised
- +64.88 USDT
Dry-run preview (what Agent Hub would send)
order --action place --category USDT-FUTURES --symbol COINUSDT --side buy --orderType market --qty 6.45 --clientOid sa15288dfa7a4fbdfd1f5d1769a16548 --posSide short --paper-trading --dry-run
{
"category": "USDT-FUTURES",
"clientOid": "sa15288dfa7a4fbdfd1f5d1769a16548",
"orderType": "market",
"posSide": "short",
"qty": "6.45",
"side": "buy",
"symbol": "COINUSDT"
}| exec id | side | qty | price | fee | open/close | at |
|---|---|---|---|---|---|---|
| 1490003701310664704 | buy | 6.45 | 183.02 | 0.7082874 | — | 2026-10-02 19:48 UTC |
- clientOid
- sa8a4bde99f1e5a016c2f62e79577392
- Venue orderId
- 1490003852822728704
- Stop
- —
- Net P&L realised
- +59.81 USDT
Dry-run preview (what Agent Hub would send)
order --action place --category USDT-FUTURES --symbol HOODUSDT --side buy --orderType market --qty 10.83 --clientOid sa8a4bde99f1e5a016c2f62e79577392 --posSide short --paper-trading --dry-run
{
"category": "USDT-FUTURES",
"clientOid": "sa8a4bde99f1e5a016c2f62e79577392",
"orderType": "market",
"posSide": "short",
"qty": "10.83",
"side": "buy",
"symbol": "HOODUSDT"
}| exec id | side | qty | price | fee | open/close | at |
|---|---|---|---|---|---|---|
| 1490003852825702400 | buy | 10.83 | 112.61 | 0.73173978 | — | 2026-10-02 19:48 UTC |
Proof
Read from ledger rows 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, 3558, 3559, 3560, 3561, 3562, 3563, 3564, 3565 of ledger.jsonl; every blob those rows commit to is below, named by its SHA-256.
| blob | media type | bytes |
|---|---|---|
| 85156bb03400faf2d2169a7694092a8272190420942d3c8a8cc921a17502a6b9 | application/vnd.t2sa.ruling-context+json | 17553 |
| cc8cb12cf3a2deab662fb9a33399b2a10380272b103e94bfd363fee99b5af2fa | application/json | 728 |
| f4940cd95ede45f784ab5ad6b83dc8e1c7f05de2ed0ca81a1c9a8dccf9c335aa | application/json | 511 |
| 9bd3824b9d0c8e660af9eaa00a9fb1efb7d26d2fbe31fc2d0ded291d963e3bed | application/json | 912 |
| fd1529b35bc8b4437c37ba9f2c840305359deee9e960f0eda6471b18d82d2362 | application/json | 730 |
| 3236d9bbdb76c75057c7895fb602101b025a27b1e6da69692d404a15a686cb32 | application/json | 512 |
| b534a4be20f28c9ef4b3c92d5ef2740c0e3476dfc824cffd220699ac1d75ce64 | application/json | 1416 |