From 24 August to 30 August 2026 we merged 18 pull requests across the three Block 52 repositories and changed 2,270 lines doing it — 1,635 added, 635 removed, across 51 files. The settlement chain cut nine releases in those seven days. By line count this was a small week. By subject it was an unusually focused one: almost everything that shipped was about the moment a player joins a table and decides whether they are in this hand or the next one.

The Scoreboard

18 Pull requests merged
2,270 Lines changed
9 Chain releases published
6 Engine versions adopted

The three repositories broke down like this:

The PVM repository recorded no merged pull requests at all this week. That row is a zero and we are going to leave it as a zero — the engine work that mattered arrived in the chain as version bumps, which is exactly what the Go port was for.

Six Pull Requests About One Screen

Six of the eight UI pull requests touch the same flow: what the client does when you arrive at a table.

It used to decide for you. On bootstrap, the client would fire a sit-in and seat you, which is fine right up until the table is mid-hand, or you are owed a big blind, or you wanted to watch a lap before committing money. So we took it apart over five merges in four days:

That last step is worth being honest about. We spent four days removing an automatic behaviour and then shipped a toggle that restores it as the default. The difference is that the automatic path is now one branch of an explicit decision rather than the only thing the code knows how to do, and any table can turn it off. But the shape of the work was "make it a choice," not "make it stop."

723 Lines In, 396 Lines Out

The single largest change in the UI this week was #556 (27 Aug): a per-seat committed-action echo, a rebase of a long-lived branch onto main, +723 lines across 6 files and not one deletion. Every seat got a small bubble showing the action that player had just committed.

#559 merged 28 hours later, on 28 August: remove per-seat action echo bubble, −396 lines across 5 files, zero additions. It closed the issue the bubble itself had opened.

It did not work at the table. It read as noise on a busy board and duplicated information the seat already carried, so it came out. The underlying plumbing stayed; only the bubble went. Between them those two pull requests account for 723 of the UI's 1,187 additions and 396 of its 564 deletions — more than half the client's churn for the week is one feature arriving and mostly leaving again.

Shipping something for a day and pulling it is a cheaper way to find that out than arguing about it for a month.

The Chain: Nine Releases, Six Engine Bumps

The chain merged 10 pull requests for only 519 changed lines, but recorded 25 commits and published nine releases, v0.1.131 through v0.1.139. Most of those commits are the automated version bump that follows each merge.

That release cadence exists because of the first fix of the week. #310 (24 Aug, +7/−0, one file) granted packages:write to the auto-tag workflow, which had been failing at startup and blocking every release since v0.1.130. v0.1.131 was published three minutes after it merged, and the tagger has not missed one since.

Six of the ten chain PRs are engine adoptions, pulling the embedded Go engine forward one version at a time:

Each of those is a three-line change to two files. Six engine fixes reached production for eighteen lines of chain code, because the engine is a pinned Go module rather than a service on the other side of a language boundary. That is the whole return on last month's port, showing up as a rounding error in the diff.

The chain's one real code fix was #319 (28 Aug, +50/−10): tolerate partial Results in maybeFinalizeSNG. Tournament finalisation assumed it would always be handed a complete result set, which is not true of a chop or of a tournament still working through multiple hands. It now finalises on what it actually has.

The Rest

#313 (26 Aug, +361/−35) was the largest single chain PR of the week: a Docker option for running the chain locally, so a local testnet is one command rather than an afternoon.

#312 (+12/−8) retired the node2 Docker deploy path, node2 having moved to bare-metal systemd — deleting a deploy route we no longer use before it rots.

And #554 (+7/−16) came from a Copilot agent, the only bot-authored merge of the week: the Top-Up Chips button is now always clickable while you are seated. A net deletion of nine lines to remove a disabled state nobody wanted.

The Through-Line

Weeks like this do not photograph well. Two thousand lines is a slow week by any measure we have, and a meaningful slice of it was a feature that lasted a day.

But look at what the small numbers are made of. Six engine fixes shipped for eighteen lines. A stuck release pipeline was unblocked by seven lines and produced nine releases behind it. A feature that did not work at the table was gone the next morning without a migration. The join flow that used to be an assumption is now a setting.

Most of the leverage in a project this size is built in the loud weeks and spent in the quiet ones. This was a quiet one.

Want to build a poker platform?

We build provably fair, real-money poker where every hand is shuffled by verifiable randomness and settled on a public blockchain. We'd love to hear about your project.

Get in Touch