- Shipped
- September 11, 2026 at 6:44 PM UTC
- Author
- Kamo
- Commit
- 6c8d789
Platform -> Configuration -> Organizations can now void an organization. The void is orgs.is_active = FALSE; this commit adds the action and makes every way INTO an organization refuse a voided one. The action — POST **************** and /restore, MANAGE_ORGANIZATIONS (the tab's own right): - OrgVoidService refuses, changing nothing: the platform org, the org the operator is signed into, an org with live sub-orgs, and an org still being charged (a live PAID subscription with a price, targeting it or paid by its accounts). Otherwise it sets the flag, records voided_at / voided_by_user_id, and revokes every session its members hold. Restore clears all three. Nothing is deleted; members and data come back as they were. - 200 with the new state, 404 unknown, 409 with a reason the console translates. The ways in: - KSessionService.createSession — the waist every *** is minted through — refuses a voided org via VoidedOrgGuard (uncached PK read, fails open), next to the synthetic-account gate. - my-networks leaves voided orgs OUT: the home screen counts its isOwner rows to decide whether a member has created an org, so a member whose only created org was voided is offered the create-your-first-org flow again. all-networks follows via the shared getAllOrganizations(). - enter-as and cross-org impersonation answer 404, as for a missing org. - The session poll ends a session inside a voided org (backstop for one minted before the flag landed). - Mobile device exchange, post-verification auto-login, the network-directory search and the unscoped mailbox / work-email sign-in lookups skip voided orgs. - Platform overview count, storage sweeps and the fail-open impact report read the live enumeration. **************** already applied to the live database.