BotPit
← Pitlog
recap4 June 2026

The scale-out fired. The week didn't.

Crab Week 4 settled without a champion. The Stuber's 25%-at-1R scale-out fired live for the first time on Tuesday — the partial banked at 1R, the runner ran another $400 to a profitable exit at $75,549, the platform's partial-close mechanism proven end-to-end. Then the strategy kept firing pullback shorts into a regime that wouldn't honour them, and the week bled out at −13.12%. His only peer was idle; the settle code then wrongly relegated Stuber on a 0-eligible field. The error was caught, the rule made symmetric, Stuber restored to Crab before noon. Three things broke. One worked.

recap
4 June 2026

The scale-out fired. The week didn't.

Crab Week 4 settled without a champion. The Stuber's 25%-at-1R scale-out fired live for the first time on Tuesday — the partial banked at 1R, the runner ran another $400 to a profitable exit at $75,549, the platform's partial-close mechanism proven end-to-end. Then the strategy kept firing pullback shorts into a regime that wouldn't honour them, and the week bled out at −13.12%. His only peer was idle; the settle code then wrongly relegated Stuber on a 0-eligible field. The error was caught, the rule made symmetric, Stuber restored to Crab before noon. Three things broke. One worked.

The headline

Crab Week 4 settled at 2026-06-01 00:00 UTC without a champion. Not because the field was thin — though it was — and not because the platform had a bug that misread it — though it did. Both are part of the record and both are fixed. The honest headline is simpler: The Stuber had a losing week, his only peer never qualified, and the rules governing a field like that require the belt to sit vacant. That is the first fact of Crab Week 4.

The second fact is more interesting. On Tuesday 27 May, at ~01:18 UTC, the platform fired its first-ever live 25%-at-1R scale-out — partially closed a position at the one-risk mark, moved the stop to breakeven on the runner, both in the same tick. It worked correctly, end-to-end. A week that ends in a loss can still be a milestone week, and this one was.

What follows is the full account: the scale-out, the reversal, the leaderboard artifact that inflated the opponent's mid-week return, the settle bug that tried to relegate Stuber on a 0-eligible field, and the same-morning fix that made the rule symmetric. The number is real; so is the story behind it.

The week — by the numbers

Week-open equity (carried from Wk3)
$127,894.59
Closing equity (banked)
$111,117.94
Crab Week 4 return
−13.12%
Crab Week 4 champion
— (no_qualifiers)
Eligible bots at settle
0 of 2
The Unknown Man — clean return
+1.78%
The Unknown Man — board (artifact)
+11.35% (distorted)
First live partial-close at 1R
✓ Tue 27 May ~01:18 UTC

All figures are confirmed against the settled DB record and the fills tape. The week opened at the banked Wk3 close ($127,894.59) under Phase 1.4 lifetime-additive carry and closed at $111,117.94 banked — a delta of −$16,776.65, or −13.12%. Settle recorded no_winner_reason = no_qualifiers: bots competed, but none cleared the activity-plus-positive-return floor (Stuber failed returnPct > 0; TUM failed the minimum round-trip count).

The trade that proved the platform

The Stuber entered Week 4 with two new behaviours in production for the first time: the 1R breakeven trail (wired as a conformance fix at 2026-05-25 04:59 UTC, five hours into the week, restoring the code to match what STRATEGY.md had declared since the beginning) and the 25%-at-1R partial close, held through the Wk3 settle to avoid a mid-tournament strategy change, then deployed 2026-05-26 via the platform's new close_pct signal field.

On Tuesday 27 May at 01:15 UTC The Stuber opened a short of 32.36 BTC @ $76,026.44. Three minutes later, at 01:18 UTC, mark hit the 1R level — roughly $75,925 per the bot's own logs, a stop distance of about $100 / ~0.13% from the recorded fill. The matching engine processed two signals in the same tick: a breakeven trail moving the stop to entry, and a close_pct partial-close exiting 8.09 BTC at $75,942.60 — exactly 25.00% of the position. The runner of 24.27 BTC continued with its stop now at breakeven.

This is the milestone of the week, independent of what came next. The platform's partial-close mechanism had never been exercised on a live tournament position under real competitive conditions. The position-size arithmetic was correct, the fill was recorded, the runner carried forward with the breakeven stop installed — all in one tick. The close_pct field is proven in production. That proof stands regardless of the week's final return.

What happened after the scale-out

The Tuesday trade itself was a winner. The runner kept going in the bot's favour — BTC drained another ~$400 — and the position exited at $75,548.88 at 04:18 UTC, three hours after the partial close. Banked gross on the runner alone was roughly +$11,600; with the 25% partial at 1R, the whole trade cleared about +$12,300 gross. The breakeven trail never had to fire — the price never came back to entry. The scale-out wasn't a damage-control mechanism that salvaged a winner; it was a profit-locking mechanism on a winner that kept winning.

The Stuber was up on the day. The week was lost across the days that followed. Wednesday was flat. Thursday produced four round-trips on alternating sides, the 1R management banking small partial profits each time a setup made it to 1R while the runners gave the gains back at breakeven when the price reversed. Friday brought two more stop-outs as BTC chopped through both directions. Saturday — settle day — included a dramatic 30.63 BTC short @ $73,978.87 at maximum leverage (~20×, 96.4% of equity, twelve consecutive entry rejections in the two minutes before it filled — the bot waiting for a stop wide enough to legally fit the position). That trade partial-closed for a small profit at 1R, and the runner exited at breakeven plus a few dollars of slippage. No blow-up; no recovery either.

The 1R management plan performed as designed every time it fired. The partial closes banked profit; the breakeven trail protected every runner that needed it. What didn't work was the strategy's setup detector in a regime that wouldn't honour pullback entries. STRATEGY.md is honest about this: “trend continuation that doesn't pull back is missed entirely.” The corollary is the one this week proved: when pullbacks fire and then reverse instead of resolving, you bleed through 1R management. The mechanism is proven. The strategy needs a regime filter the mechanism can't supply.

The leaderboard artifact: TUM at +11.35%

For part of Crab Week 4 the public leaderboard showed The Unknown Man — an external TradingView-webhook bot — at +11.35%, ranked above Stuber's mid-week reading. That number was not real.

TUM had carried a PAXG position across the Wk3→Wk4 boundary — a position that opened approximately 8 seconds after the 00:00:00 boundary, slipping past the opening snapshot-write gate. With no clean opening snapshot, the leaderboard's return resolver reached for the first available snapshot, which was TUM's underwater trough at $97,009.75 — and measured the week's return off that distorted base instead of his real Wk3-close carry. A position that had lost value became the apparent starting point; subsequent recovery registered as extraordinary gain.

The fix was a targeted backfill: insert a synthetic opening snapshot at the tournament boundary equal to TUM's clean carry value (scripts/fix-tum-wk4-snapshot.ts, shipped in commit ac3c267). After the fix, TUM's Wk4 return recomputed to +1.78%, which put him behind Stuber's mid-week reading and accurately reflected the week. The script is in the repository; the before/after is in the code comments. We'd rather show you the correction than quietly fix the number.

One note: even with TUM's display corrected, neither bot qualified at settle. TUM's qualifying round-trip count for Wk4 was zero — its only round-trip closed on 28 May and never opened another in time to make the floor. He was idle by the eligibility definition. The TUM fix mattered for display honesty; it had no bearing on the settle outcome.

The settle bug: a one-way rule made symmetric

When Crab Week 4 settled, the eligible-bot count was zero: fullyEligible.length === 0. Stuber's return was negative (failing the returnPct > 0 threshold); TUM's round-trip count was zero (failing the closeCounts >= minRoundTrips threshold). The correct outcome under the championship rules is no_winner_reason = 'no_qualifiers': no champion crowned, no relegation fired, both bots hold their tier slots.

What actually happened was different. The settle code's thin-field promotion gate (isUncontested) only fires when fullyEligible.length > 0 — it was written to catch the “one qualified bot, uncontested” case. A field with zero eligible bots fell straight through it and into the relegation logic, which relegated the bottom of the table. The same field shape that correctly blocked Stuber's uncontested championship in Wk1 and Wk3 did not protect him from an uncontested relegation in Wk4. One-way punitive.

The same morning — 2026-06-01 — the argument was filed: the same field shape that withholds the upside reward should withhold the downside punishment. The platform agreed. Commit 5e328a1 landed two fixes:

  • Symmetric thin-field gate in lib/league/settle.ts. A new isThinFieldForRelegation variable captures both the 0-eligible and 1-eligible cases. The relegation slice guards on it. A thin field that cannot earn a promotion cannot trigger a relegation — the protection runs both directions.
  • /docs/championship-rules updated. The symmetric-relegation rule is documented alongside the existing thin-field promotion gate, with Stuber Wk1 (championship withheld) and Wk4 (relegation blocked) named as the two trigger cases.

An operational SQL restore moved Stuber back to Crab ahead of the code commit. A third fix in the same commit wired the missing middle tier in /api/v1/tv/state: the route's 2-tier fallback (snapshot → starting equity) was missing the Phase 1.4 carry tier, so a user bot freshly into a new tournament with no snapshot yet — exactly Stuber's state after the (wrong) relegation — read $100K on the runtime feed instead of its real carried equity. The 3-tier fallback now matches the matching engine.

Three things broke, one worked

For the record, in order:

  • The leaderboard display lied. TUM's +11.35% was an artifact of a carried position and a missing opening snapshot. Caught during the week, backfill script written and run, honest number restored to approximately +1.78%.
  • The settle code misfired. A one-way thin-field gate tried to relegate Stuber on a 0-eligible field. Caught the same morning as settle, symmetric rule shipped in 5e328a1, Stuber restored to Crab by SQL restore and future recurrences blocked by code.
  • The runtime equity feed read wrong. After the (wrong) relegation, /tv/state skipped the carry tier and served $100K. Wired in the same commit.
  • The partial-close mechanism worked. 25%-at-1R fired live for the first time. Breakeven trail installed in the same tick. Runner carried correctly. The platform's close_pct signal field is proven in production.

Three regressions, one first. The belt sits vacant for Wk4 — it isn't Stuber's and it isn't anyone's. He holds the Crab slot earned by winning Wk3 and carries forward into Wk5 with $111,117.94 in banked equity — still ahead of his original $100K Shrimp start, still down −13.12% on the week. The partial-close is in the arsenal. The thin-field rule is symmetric. The leaderboard is telling the truth. That's the state of the board.

The field needs filling

The Stuber has been the only actively trading bot in Crab for four consecutive weeks. TUM has been idle more weeks than active. A two-bot field where one bot is consistently idle is not a tournament — it is an endurance test for the platform's edge-case handling, and this week proved that the edge cases are real. The fastest fix is more bots.

Win Shrimp this week and meet Stuber in Crab next. The path runs through /build — three templates, a wizard, a validator that catches the obvious mistakes before deploy. Or write your own bot and send signals via HMAC-signed webhook from any stack; the matching engine reads from anywhere. The belt was won in Wk3 and is uncontested in Wk4. That sentence should not be repeatable in Wk5. Come take a swing.

The current state of Crab Week 5 is on the live leaderboard. The Stuber's source code is public and forkable. Read it, understand what won Wk3, decide for yourself whether you can beat it. Then build.

Vibe-coded AI trading bot Crab Week 4: first live partial close, a losing week, and a platform bug fixed the same morning — Pitlog · BotPit