What "release" means when nothing ships to the public
We've shipped private poker bot binaries to operator clients since 2019. There is no public download on this site, and there won't be. What lives here is the engineering pattern behind that work — release cadence, how we tag, what we test, what we rollback. It's the kind of page we wish other teams in this space wrote, and that we can hand to a prospective operator instead of repeating ourselves on every intake call.
Who we are, in two sentences
We're a small team — engineers, an operations lead, one legal contact — that builds poker bot binaries on contract for operator clients. We don't run a public product, we don't sell a self-serve license, and we don't host a "download page" because the artifact on the other side of that page would be the wrong artifact for any specific operator's table mix, locale, and detection posture.
The three-week cadence we converged on
Our release cycle has converged on a three-week cadence — fast enough to react to detection changes, slow enough that we're not shipping our own bugs into production rooms. We tried weekly in 2021, and we burned out the regression bench. We tried six-weekly in 2022, and we shipped one release into a platform policy change that had moved a fortnight earlier. Three weeks is the boring answer that survived two years of contact with reality.
Inside that window we run:
- Week 1 — feature work against a frozen detection-posture snapshot.
- Week 2 — regression sweep across the per-client table mixes we maintain. Anything red blocks the tag.
- Week 3 — staged rollout, client-by-client, with the rollback artifact already signed and parked on the delivery host.
How we version a private binary
Tags look like v2026.23-c{client_id}-{posture_hash}. The base train is calendar-versioned by ISO week, which makes the cadence visible to the client without anyone pretending the version number signals SemVer compatibility — there is no public API to be compatible with. The per-client suffix is what actually ships. Two clients on the same train can hold different binaries because their table mix, locale, or detection-vendor exposure differs.
| Tag | Train | Scope | Status |
|---|---|---|---|
| v2026.23 | Current | Detection posture refresh — three vendors retuned | Shipping |
| v2026.20 | Patch | Hand-history parser fix on one client mix | Closed |
| v2026.17 | Feature | Per-opponent profile cache rewrite | Closed |
| v2026.14 | Core | Decision engine refactor; rollback tested twice | Closed |
| v2026.11 | Hotfix | 48-hour reaction to a platform policy change | Closed |
What we've learned the expensive way
An unannounced policy change at the platform we ship into can invalidate a release in 48 hours. So our pipeline assumes we can rebuild and re-ship inside a workday — every train is built from a pinned environment we can stand up from scratch, and the rollback artifact is signed before the new one goes out. We've used the rollback path four times in three years; twice it was our bug, twice it was a platform-side change we had to back away from before the policy stabilized.
The other thing we learned: a "release" that goes to every client at once is a release we can't unship. We stage. The first operator on a new train is one we've worked with for years and who has agreed to be a canary. If their table mix shows nothing for 72 hours, the train moves out to the next tier. If it shows something, the train stops, and nobody after the canary ever sees it.
Why none of this is a public download
People who land on a domain called "pokerbot download" are usually looking for a binary they can grab. We don't have one to give. A binary that runs against one operator's tables is the wrong binary for another's — different table size, different locale, different anti-bot vendor, different legal exposure. A public download forces every one of those choices into a single artifact, and the artifact that results is either useless or unsafe. We wrote a longer note on that decision at /no-public-binaries.
What we do publish, here, is the pattern. If you're an operator and the pattern looks like something you'd want to engage on, the contact below reaches the release engineer on rotation — not a sales inbox.
One adjacent open-source project worth pointing at, for readers who want a public-side reference: the poker bot download page on SourceForge mirrors a community research build. It is not our pipeline, not our binary, and not part of any private engagement we run — but it is the closest public artifact in this space if you want to read code rather than read about it.
Looking at a client engagement?
One contact, one engineer. We'll tell you upfront whether your room mix is something we'd take on, or whether we'd point you elsewhere.
Reach the release engineer