Skip to content

docs: record the live-seeded rules as a deliberate, bounded standing exception - #187

Merged
eaitbrahim merged 1 commit into
mainfrom
docs/record-live-seed-exception
Aug 8, 2026
Merged

docs: record the live-seeded rules as a deliberate, bounded standing exception#187
eaitbrahim merged 1 commit into
mainfrom
docs/record-live-seed-exception

Conversation

@eaitbrahim

Copy link
Copy Markdown
Contributor

What

keel-live.db rules 1–5 (turtle_breakout on BTC/ETH/PAXG/ADA/XLM) have carried status = live with promoted_at IS NULL since 2026-07-24 — against rules seed's own printed instruction:

⚠️ seeded at LIVE status, bypassing the promotion gate … Do not leave live-seeded rules in place afterwards.

Reviewed 2026-08-08. Kept deliberately. Now recorded rather than silent.

This applies the standard the project already set for PAXG in docs/experiments/2026-07-20-allowlist-screen-first-run.md:

The one thing not to do is leave it silently exempt because it was already there.

The exception was already load-bearing — it just wasn't written down anywhere.

Why keep them

min_trades is 100 per rule, and this strategy cannot reach it. Measured by backtesting each rule over ~5.02 years of daily bars:

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, since the gate didn't

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. Not a claim these rules are validated — no walk-forward or PBO run has ever covered ADA or XLM, and none of the five clears any promotion axis (see #185).

Revisit triggers

Named, rather than an open-ended pass: caps rising above this sandbox's few-dollars-of-damage scale; the rule set changing; a rule trading materially more often than the table above; or the sandbox being treated as evidence for anything beyond itself.

Where it's recorded

Two places an operator actually reads:

  • config.live-sandbox.yaml — a block beside the allowlist it applies to.
  • docs/go-live-runbook.md §3 — a new "Standing exception" subsection. §3 previously documented the act of short-circuiting the gate but not the ongoing state.

Verification

  • load_config yields an identical allowlist, caps and weights; comment-stripped diff against main is empty.
  • python -m pytest tests/ -q2078 passed.
  • No database written, no rule status changed, no config value altered.

🤖 Generated with Claude Code

…exception

keel-live.db rules 1-5 (turtle_breakout on BTC/ETH/PAXG/ADA/XLM) have carried status=live with
promoted_at NULL since 2026-07-24, against `rules seed`'s own printed instruction: "Do not leave
live-seeded rules in place afterwards." Reviewed 2026-08-08; kept deliberately; recorded here
rather than left silent.

This applies the standard the project already set for PAXG in
docs/experiments/2026-07-20-allowlist-screen-first-run.md -- "The one thing not to do is leave it
silently exempt because it was already there." The exception was already load-bearing; it just
wasn't written down anywhere.

WHY KEEP THEM. min_trades is 100 PER RULE and this strategy cannot reach it. Measured by
backtesting each rule over ~5.02 years of daily bars:

    BTC  13 trades = 2.59/yr -> ~39 years to 100
    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 that experiment without substituting anything for it.

WHAT BOUNDS THE RISK, since the gate did not: 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.

Explicitly NOT a precedent for admitting assets, not a reason to raise caps, and not a claim these
rules are validated -- no walk-forward or PBO run has ever covered ADA or XLM, and none of the
five clears any promotion axis.

Named revisit triggers rather than an open-ended pass: caps rising above this sandbox's
few-dollars-of-damage scale, the rule set changing, a rule trading materially more often than the
table above, or the sandbox being treated as evidence for anything beyond itself.

Recorded in two places an operator actually reads: a block in config.live-sandbox.yaml beside the
allowlist it applies to, and a new "Standing exception" subsection under go-live-runbook.md's §3,
which previously documented the ACT of short-circuiting the gate but not the ongoing STATE.

Comment/docs only. load_config yields an identical allowlist, caps and weights; comment-stripped
diff against main is empty; 2078 tests pass. No database written, no rule status changed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@eaitbrahim
eaitbrahim merged commit 3da8f6a into main Aug 8, 2026
1 check passed
@eaitbrahim
eaitbrahim deleted the docs/record-live-seed-exception branch August 8, 2026 05:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant