Record the BTC DCA rule as live in the deployment manifest - #162
Merged
Conversation
Rule 6 (`dca`, BTC-USD, `budget_usd: 25`, weekly) was promoted candidate -> paper -> live on 2026-08-03, with `--force` at both steps: a DCA rule has no stop and no target, so `backtest()` opens a position that never closes and the promotion gate only ever sees `n_trades=0` against `min_trades: 100`. It can never clear the floor on its own. This is keel's first live rule that fires on a schedule rather than on a market setup -- the five turtles have been live since go-live and have never once signalled, because price has sat 3-27% under the 40-day Donchian entry on every product. Manifest regenerated from keel-live.db, not hand-edited. The `budget_usd: "25"` this records is the whole point of the file: `keel init` on a fresh box would seed the constructor default of 50 instead. Rail 17 (withdrawal capability) was attested `--enabled` the same day, which is what actually unblocked BUYs -- it had been failing closed since go-live and would have vetoed a turtle breakout too, not just this. That attestation expires after 7 days and is deliberately not automatable, so it does not live in this file. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
One-line manifest change, regenerated from
keel-live.dbrather than hand-edited:Rule 6 (
dca, BTC-USD,budget_usd: 25, weekly cadence) was promotedcandidate -> paper -> liveon 2026-08-03.Why it needed
--force, twiceA DCA rule has no stop and no target.
backtest()opens a position that never closes, so every trade staysopen, the aggregates exclude it, and the promotion gate seesn_trades=0againstmin_trades: 100. It cannot clear the floor — not with more history, not ever. That is the structural casepromote --forcedocuments, now also written down in the go-live runbook.(It also needs
--granularity ONE_DAYon the gated path, becauseDcanever setsself.granularitythe wayTurtleBreakoutdoes. Moot under--force, which skips the backtest.)Why this file matters
budget_usd: "25"is the entire point of the manifest.keel initon a rebuilt box seeds from constructor defaults and would bring the rule back at50, unpromoted — twice the money, on a machine that otherwise looks correctly provisioned.Context
This is keel's first live rule that fires on a schedule rather than on a market setup. The five turtles have been live since go-live and have never signalled once: price has sat 3–27% below the 40-day Donchian entry on every product, closest being PAXG at 3.09%.
Rail 17 (withdrawal capability) was attested
--enabledthe same day, and that is what actually unblocked BUYs. It had been failing closed since go-live and would have vetoed the first turtle breakout too — the rails had simply never been exercised against a real signal. That attestation expires after 7 days and is deliberately not automatable, so it is account state, not repo state, and does not belong in this file.First order fires on the next cadence boundary, Thu 2026-08-06, and only at a terminal — the launchd job runs headless in confirm mode and fails closed without a TTY.
🤖 Generated with Claude Code