The badge that wouldn't forgive
Hedge is a daily calibration trivia game I build solo; the architecture lives in the case study. This is the engineering story behind this week's badge update. The why-it-matters half has its own entry, The second half of the promise.
Two weeks ago Hedge shipped twelve badges. This weekend it shipped thirty-six, and Gut Check finally earns them too. But the story worth telling is one predicate that took three tries to get honest.
The unforgiving gate
"Bold Call II" asks you to win at 99% confidence, a lot, without spraying. The anti-farming gate was obvious: require high accuracy on your 99% bets, so reckless betting locks the badge instead of earning it. The first implementation measured that accuracy over your lifetime. A reviewer ran the math on what that means for a player who sprayed early: twenty-five wild misses at 99% would take roughly four hundred seventy-five straight wins to dilute past the gate. A permanent scar for early miscalibration. An app whose whole thesis is that calibration is improvable cannot ship a badge that says otherwise.
Three tries at honest
So version two measured your most recent fifty bets instead. Recoverable now. But looking at the tiers side by side, the fixed window had quietly made tier three a patience test, not a skill test: same fifty-bet gate as tier two, just a bigger count to sit through.
Version three was the one that felt inevitable afterward: the window is the count. The badge collapsed into one honest sentence. "Bold Call II" is your last twenty-five bets at 99%, at least 95% of them right. Tier three is the same claim sustained over a hundred. The count condition disappears because a full window implies it, recovery scales with the tier's own seriousness, and the higher tier is genuinely harder rather than merely slower. The proof work was real too: the implementation was shown by construction and by three thousand adversarial simulations to never earn a tier out of order, and one test a reviewer requested turned out to describe a mathematically unreachable state, so the implementer wrote the true invariant instead of the impossible scenario.
The simulator became a design studio
Then the simulator pass turned into something I did not plan: a design studio. Playing the build found zero logic bugs, because the review pipeline had already eaten them, and instead produced the reveal queue cap, the badge tour that scrolls you section by section through everything new, the held count-up when one badge earned several times over, and the little unseen counter on every path into Pulse. It also caught three bugs of a species no test can see: animations that were correct but imperceptible. A glow firing while its tile was off screen. A count-up spending itself behind another animation. A scroll leaving before the flourish landed. You only find those with eyes.
Already shipped
The quiet win underneath all of it: every badge is computed from play history, never stored. Which means every future badge idea is already shipped. Write the predicate, push it over the air, and everyone who ever earned it gets it that morning, with the real date, and the tour walks them right to it.