canAccessAccount = isOwner OR isAuthorizer OR isMember, and isOwner reads accounts.owner_uuid_bin. There is currently no API to change an account's owner — updateAccount deliberately updates only displayName/requiresAuth/archived/overdraft/creditLimit.
This blocks Business from fully reconciling a firm-account when a firm's proprietorship is transferred: the new proprietor cannot be made owner, and the previous owner keeps owner-level access forever. See the sibling Business issue.
Add a narrow public API to reassign an account's owner:
TreasuryApi.reassignOwner(int accountId, UUID newOwnerUuid) (treasury-api)AccountService.reassignOwner(int accountId, UUID newOwnerUuid) + impl (@Transactional, validates the account exists)AccountMapper.updateOwner(accountId, ownerUuid) — dedicated UPDATE accounts SET owner_uuid_bin = ? WHERE account_id = ? (kept separate from updateAccount so general updates can't accidentally move ownership)Scope guard: intended for non-PERSONAL accounts (BUSINESS firm accounts). Do not allow it to collide with the one-PERSONAL-per-player virtual unique index — callers use it for BUSINESS accounts only.
treasury-api and delegated in TreasuryApiImpl.isOwnerForAccountId(newOwner) true, old owner false afterwards.