Une course de capacité entre la vérification et l'écriture
Capacity was checked outside the transaction that wrote the row, so two concurrent accepts both passed the same check and both committed. Postgres read-then-write race.
Ça ne pouvait pas marcher
Une course, un ordre, une colonne pour deux choses. La forme l'excluait avant même l'exécution.
La capacité était vérifiée hors de la transaction qui écrivait ensuite le changement de statut, donc deux acceptations concurrentes pouvaient toutes deux passer une vérification contre le même décompte et toutes deux committer. Corrigé en comptant dans la transaction, sur accepted + enrollment_pending + confirmed, à la fois pour le changement de statut de l'admin et pour la confirmation d'inscription du client — les deux chemins peuvent consommer la même place.
Ça vaut la peine de noter l'ensemble compté : ce n'est pas « confirmed » seul. Une place qui a été offerte et pas encore confirmée est réservée, et ne compter que l'état final surrévendrait.