The sprint where I removed a gate
The sprint where I removed a gate
Yesterday I shipped a sprint that did something the previous 131 sprints had never done. It removed a gate.
For twenty hours the system had opened zero trades. Four tradeable assets. Sixty-five signals from the LLM. Not a single one survived. I'd traced through every cycle looking for the bug. There was no bug. Every gate was doing exactly what I'd told it to do.
That was the problem.
The sixteen
Trader-7 has sixteen independent gates that every signal passes through before a trade opens. Signal generation. Confidence threshold. Counter-trend confidence. Regime boundary penalty. Trend deceleration. Pre-ATR risk-reward. Post-ATR per-strategy risk-reward. Per-symbol limit. Sector limit. Correlation cap. Position limit. Funding fee. Capital preservation. Loss streak. Regime cooldown. And a binary ETH/SOL correlation check from Sprint 107.
I added them one at a time, each in response to a specific failure. Each justified on its own. None of them wrong individually.
At 80% pass rate per gate — generous — sixteen gates compound to a 3.5% survival rate. If the real pass rate is 70% per gate, survival drops to 0.3%. That is the arithmetic I was not doing when I shipped the fifteenth.
How the deadlock formed
BTC flipped from WEAK_BEAR to WEAK_BULL at 14:49 UTC. Two SHORT positions held, correct direction for the old regime, counter-regime now. The watchdog was counting opposing cycles at 5x leverage, which meant four hours before it would force-close. ETH signals started coming through, but the binary ETH/SOL check blocked them because SOL was still held. The strategist had returned "defensive" stance on every one of the last twenty cycles. Defensive sets the confidence threshold to 82%. The best ETH signals came in at 70%.
So: BTC slot held by a counter-regime position the watchdog had not cleared. SOL slot the same. ETH blocked by binary correlation. XRP signals coming in at 1.00:1 risk-reward, useless. The confidence floor was twelve points above the ceiling of actual signal quality. Every door was locked, and each lock had its own key that did not fit any other door.
Every one of those gates was added to prevent a specific historical loss. Every one of them had prevented specific losses. The cumulative effect was a system that could not trade.
What Sprint 132 actually did
Five fixes. Only two of them added anything.
Fix 1 loosened the watchdog. Thresholds cut by 40%, Stage 2 at 5x leverage went from four cycles to two.
Fix 2 overrode the strategist's stance. The LLM returned "defensive" 100% of the time. I replaced its judgment with a deterministic regime-based floor. The confidence threshold drops from 82% to 72% in non-bear regimes. The LLM's stance stays logged for diagnostics but no longer sets the gate.
Fix 3 deleted the Sprint 107 binary ETH/SOL check entirely. Sprint 130's notional-based correlation cap already does the job properly. The old gate was duplicative and blunt.
Fix 4 added a daily 5% drawdown circuit breaker. Fix 5 added a 0.3% hysteresis zone around SMA50 so the regime classifier stops flipping on small oscillations. Both were safety nets for the loosening, added at the expert panel's insistence.
Three subtractions. Two additions. Net: one fewer gate.
The pattern I kept missing
When something breaks, the instinct is to add a guard. It is visible and specific. It tells a story in the git log. "Fixed X by adding a check for Y." Pull request. Done.
The cost does not show up in the same commit. It shows up three sprints later, when the gate you added for edge case X starts quietly rejecting case Z you were not thinking about. Or six sprints later, when case Z compounds with the gate you added for edge case W, and suddenly the system's conversion rate is half what it was.
For the last two months I have watched Trader-7 hover around profit without breaking out. All-time it is up 24.6% over a hundred trades. Since the Sprint 120 baseline it is down 7.5% over thirty-five trades. The maths says current win rate needs a 3.0:1 reward ratio to break even. Most trades that make it through cluster at 1.6 to 2.0. The trades that would have been 2.5:1 keep getting rejected by some gate or other. The gates are working. They are just working on the wrong trades.
The shape of the drag is subtle. You are not losing money on bad trades, those are blocked. You are losing opportunity on good trades, also blocked. What is left is the average of the mediocre middle, which is approximately flat.
What I will do differently
Three rules I am writing down so I remember them next sprint.
Before adding a gate, try removing one. Maybe the existing gate is mistuned rather than missing. Maybe two gates are doing the same job and neither is doing it well. Maybe a threshold set two years ago in different conditions is the real problem.
For every gate, name its dual. What class of correct signals will this gate reject? If you cannot answer that, you have not thought about it enough.
Watch rejection rates, not rejection counts. A gate that rejects nothing is probably mistuned, like the correlation cap Sprint 130 fixed, set at $50,000 on a $3,700 account. A gate that rejects 80% of signals is probably replacing the other gates above it in the stack. Both are bugs.
None of this is new. Kelly Johnson's KISS principle is from 1960. Chesterton's fence is from 1929. I am not learning a new idea. I am learning the specific shape of an old idea in my specific system, which is what every engineer ends up doing sooner or later.
What is actually happening now
Sprint 132 deployed at 21:52 UTC. First two cycles clean. All four trading slots open. The strategist returned "moderate" on cycle one directly, which has not happened in weeks. No overrides needed, no gates blocked, just no actionable signals yet because DeepSeek is not finding setups in the current regime. The system is doing nothing, but it is doing nothing for reasons that are not structural, for the first time in a while.
I will know in 48 hours whether removing the gate was the right call.
Trader-7 is an autonomous LLM-powered trading system paper trading perpetual futures. Sprint 132 deployed April 13, 2026.
Follow the build: jamiewatters.work