diff --git a/config.live-sandbox.yaml b/config.live-sandbox.yaml index 5b69871b..e5ee8326 100644 --- a/config.live-sandbox.yaml +++ b/config.live-sandbox.yaml @@ -58,6 +58,41 @@ allowlist: - ADA - XLM +# --------------------------------------------------------------------------------------------- +# STANDING EXCEPTION: the five live rules bypassed the promotion gate, deliberately, and stay. +# +# keel-live.db rules 1-5 were seeded straight to `status=live` on 2026-07-24 with promoted_at +# NULL. `keel rules seed` printed "Do not leave live-seeded rules in place afterwards." They have +# been left in place. That is a decision, reviewed 2026-08-08 and recorded here rather than left +# silent -- the same standard docs/experiments/2026-07-20-allowlist-screen-first-run.md set for +# PAXG: "The one thing not to do is leave it silently exempt because it was already there." +# +# WHY KEEP THEM. The promotion floor is min_trades=100 PER RULE. This strategy cannot reach it. +# Measured 2026-08-08 by backtesting each rule over ~5.02 years of daily bars: +# BTC 13 trades = 2.59/yr -> 100 trades in ~39 years +# ETH 13 trades = 2.59/yr -> ~39 years +# XLM 8 trades = 1.59/yr -> ~63 years +# ADA 6 trades = 1.19/yr -> ~84 years +# PAXG 4 trades = 3.20/yr -> ~31 years +# Waiting for the gate is not a slower path to the same place; it is no path. The sandbox exists +# to accumulate the live evidence the gate demands and cannot itself produce. Demoting these +# rules would end the experiment without substituting anything for it. +# +# WHAT BOUNDS THE RISK. Not the promotion gate -- it never ran. Instead: the caps below +# (max_exposure_usd 200 total at once, max_per_order_usd 100), the 18 un-overridable guards.py +# rails, rail 1's allowlist above, and rail 14's monthly subscription allowance. The bypass is of +# the EVIDENCE gate, not of the SAFETY rails, and those are separate mechanisms. +# +# WHAT THIS IS NOT. Not a precedent for adding assets (see the allowlist note above), not a +# reason to raise caps, and not a claim these rules are validated -- they are not, and neither +# `promoted_at` nor any backtest here says otherwise. +# +# REVISIT IF: caps are raised above this sandbox's few-dollars-of-damage scale; the rule set +# changes; a rule starts trading materially more often than the table above; or this sandbox is +# treated as evidence for anything beyond itself. Full working: +# docs/experiments/2026-08-07-unvalidated-skip-set-reassessment.md and docs/go-live-runbook.md §3. +# --------------------------------------------------------------------------------------------- + target_weights: BTC: 0.30 ETH: 0.20 diff --git a/docs/go-live-runbook.md b/docs/go-live-runbook.md index e1dbb3b1..763a8966 100644 --- a/docs/go-live-runbook.md +++ b/docs/go-live-runbook.md @@ -76,6 +76,46 @@ Once promoted, record the change: `python scripts/rule_manifest.py export --db < `deploy/live-rules.json`. A fresh deployment re-seeds from constructor defaults and will otherwise bring back a differently-sized rule (see `docs/RELEASING.md`). +### Standing exception: the sandbox's five live-seeded rules + +This section covers the *act* of short-circuiting the gate. The supervised-live sandbox has been +running in that state since **2026-07-24**, and that ongoing state is recorded here so it is a +decision on the record rather than an oversight nobody re-examined. + +`keel-live.db` rules 1–5 (`turtle_breakout` on BTC/ETH/PAXG/ADA/XLM) carry `status = live` with +**`promoted_at IS NULL`** — seeded directly, never promoted. `rules seed` printed *"Do not leave +live-seeded rules in place afterwards."* They were left in place. **Reviewed 2026-08-08; kept +deliberately.** + +**Why they are kept.** `min_trades` is 100 *per rule*, and this strategy cannot reach it. +Backtesting each rule over ~5.02 years of daily bars on 2026-08-08: + +| rule | trades | rate | years to 100 trades | +|---|---:|---:|---:| +| BTC | 13 | 2.59/yr | ~39 | +| ETH | 13 | 2.59/yr | ~39 | +| XLM | 8 | 1.59/yr | ~63 | +| ADA | 6 | 1.19/yr | ~84 | +| PAXG | 4 | 3.20/yr | ~31 | + +Waiting for the gate is not a slower route to the same destination — it is no route. The sandbox +exists to accumulate the live evidence the promotion gate demands and cannot itself generate. +Demoting these rules would end that experiment without putting anything in its place. + +**What bounds the risk instead.** Not the promotion gate, which never ran. The caps +(`max_exposure_usd` 200 total at once, `max_per_order_usd` 100), the eighteen un-overridable +`guards.py` rails, rail 1's allowlist, and rail 14's monthly allowance. **The bypass is of the +evidence gate, not the safety rails** — separate mechanisms, and only the first was skipped. + +**What it is not.** Not a precedent for admitting assets, not a reason to raise caps, and not a +claim that these five rules are validated. They are not: no walk-forward or PBO run has ever +covered ADA or XLM, and none of the five clears any promotion axis. See +`docs/experiments/2026-08-07-unvalidated-skip-set-reassessment.md`. + +**Revisit if** caps rise above this sandbox's few-dollars-of-damage scale; the rule set changes; a +rule begins trading materially more often than the table above; or this sandbox starts being +treated as evidence for anything beyond itself. + ## 4. Run one cycle, in confirm mode, and watch ```bash