โ† All Posts

August 24, 2026

DaddyP Stress-Tests the Bracket

By

A live 16-song bracket tournament found real bugs no amount of solo testing would have, fixed within a day, and shaped a feature that shipped two days later.

DaddyP Stress-Tests the Bracket card from Aux Battles, showing 16 entrants, a real crowd, real bugs
DaddyP Stress-Tests the Bracket

Bracket mode had been through plenty of solo testing and the odd dev-only sim run, but nothing that actually behaves like a live audience. That changed when DaddyP ran a full bracket tournament live, chat and all. This post is a thank you, and an honest account of what a real crowd immediately broke.

A clip from the stream, posted to the Aux Battles YouTube channel.

What DaddyP ran

16 songs, seeded into a straight knockout bracket, playing out live to his own chat. Below is the quarter-final round on the prompt "Covid Songs": two tracks side by side, chat typing 1 or 2 to weigh in, DaddyP holding the final call on every match.

Bracket quarter-final match on twitch.tv/daddyp, "Covid Songs" prompt, Internet Money's "Lemonade" against Tiko's "Fishy on Me," chat vote split showing 52% to 48%
Quarter-finals, match 1 of 4: chat splitting almost dead even.
Bracket quarter-final match 4 of 4 on twitch.tv/daddyp, Lil Mosey's "Blueberry Faygo" against Bankrol Hayden's "Costa Rica," chat voting 100% for the second song
Match 4 of 4: chat unanimous this time, 5 votes and not one for the other side.

What actually broke

The tournament itself held up perfectly: 16 entrants, 4 rounds, bracket_seq finished at exactly 23, the number you'd expect from 1 seed plus 15 match decisions plus the round-start and round-finish writes. Every prompt recorded, every survivor resubmitted correctly, champion written at the end. No database write failed, no realtime payload was ever rejected. The bracket logic, the part I actually worried about, was flawless.

Everything that broke was client-side, and it broke in ways solo testing never surfaces. A quarter of the viewers who clicked "Log in with Twitch" got bounced straight back to the same button with zero explanation, because Twitch doesn't guarantee an email address and the app had no idea what to do when one didn't show up: 12 failed callbacks against 49 login attempts in a single seven-minute submission window. In that same hour the project minted 52 anonymous accounts against 29 real, identified ones, because the app was quietly signing people in anonymously behind a failed Twitch login and calling that success.

The other bug was the funnier one to diagnose: at every round transition, the screen would flash the previous round's name ("Round of 16" showing up mid quarter-final) before correcting itself a second later. The bracket data was never wrong. The problem was that four different things in the app were allowed to overwrite room state on their own schedule (a 30-second poll, a tab-focus resync, a realtime fallback fetch, a couple of pages that refetched instead of trusting the payload they'd just received), and nothing stopped an older fetch from landing after a newer one and rewinding the screen by exactly one step. A streamer's PC juggling OBS, chat, and a browser tab is exactly the environment where that race is wide open.

Fixed within a day

Everything got checked against the actual data from that stream (Supabase auth logs, the room and submission rows, the analytics events), not just a read of the code, and shipped the next day:

  • Failed logins are visible now. a viewer whose Twitch login fails sees an actual error card and a retry button instead of the same button doing nothing, with a chat-paste fallback offered right there.
  • No more silent anonymous sign-ins. the submit page stopped minting a throwaway account behind a failed login and calling it fine.
  • Room state can't rewind anymore. a single sequence number now guards every write into room state, and a stale fetch loses to whatever's already on screen instead of overwriting it. This is the guard this site's own build notes now describe as the rule for how room state is allowed to move.
  • The submissions table stopped being wide open. the insert policy had no real check on it at all before this; now it requires either the submitter's own auth or the room's host.

None of this would have surfaced from me clicking through the app alone. It took 49 real login attempts inside a 7-minute window and a streaming PC actually busy doing five things at once to find it.

The feature that came out of it

Two days later, a smaller fix turned into a real feature. Bracket rounds used to redraw the prompt wheel fresh every round, which meant any prompt a streamer had hand-typed in got thrown away the moment the next round started. Now the wheel is a pack a streamer curates once, hand-typed prompts included, and it survives the entire tournament, every round, until they hit Regenerate or edit the list themselves. Small change, but it's exactly the kind of thing that only becomes obvious after watching someone actually run a multi-round tournament live instead of guessing at how one gets used.

Thank you

Thanks for running this, DaddyP. A stream is a far better stress test than anything I can script myself, and this one earned real fixes and a real feature within days. If you're reading this, go check out his stream: twitch.tv/daddyp.