Files
pyMC_Repeater/tests
agessaman faaf7f2213 fix(acl): make room ACL moves atomic, refuse shared keys, surface load errors
Second review round (codex, opencode):
- Moving a room's rows and pointing its live ACL at them happened in two
  steps, so a grant could land under the old key in between.
  ACL.move_store now does both under the ACL's lock.
- update_identity accepted a key another identity already uses, and the
  move merged the two ACLs. It now refuses such a key before changing
  anything, and the store refuses to move onto a key that has entries.
- update_identity saved the new key before moving the ACL, so a failed move
  left a saved key with an empty ACL. The move now runs first, and a failed
  save moves it back. It also runs when the daemon has no login helper.
- A failed read at startup looked like an empty ACL. The ACL records the
  error and /api/acl_info reports it as store_error.
- A deleted room's handlers stay live until a restart, and a login there
  wrote its entries back. Deleting now detaches the live ACL from storage.
- /api/acl_info looked ACLs up by the 1-byte hash, so identities sharing one
  could show each other's counts. It uses the name lookup acl_clients does.
- The acl_clients filter is an object in the spec, as returned.
2026-10-02 10:48:10 +01:00
..