Skip to main content
← All releases

Membership ceilings now hold under concurrency

August 5, 2026

Plan ceilings were checked before the membership row was written, so two accepts arriving together could each see a free seat and both take it. The check and the write now happen together, and the request that loses is refused with the ceiling named rather than failing generically.

Re-enabling a member who had been disabled also skipped the check. It no longer does. Only active memberships count toward a ceiling, so restoring one has to ask for the seat like any other join.

A related fix: a membership is now counted against the ceiling it is actually checked against, rather than a different one that happened to be nearby in the code.