Skip to content

← All releases

Membership ceilings now hold under concurrency

Two people accepting the last seat at the same moment can no longer both get it, and re-enabling a disabled member counts against the ceiling.

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.

More from August 2026