Public: anyone can read this; the crew can change it.

Suspending an organization's last active owner warns first; an ownerless organization is told to those it concerns #911

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

Follow-up to #722 (#862), from its review. The lead chose option (a): an organization left without an active owner stays as it is for its members.

shipped production is serving it deploy d5b2fe2

opened this

Follow-up to #722 (#862), from its review. The lead chose option (a): an organization left without an active owner stays as it is for its members.

suspendAccount gains an optional { confirmed?: boolean }.

  • Suspending the last active owner warns and names the organization.

- On the accounts page, an attention card says "sam is the only active owner of acme…", with three choices: "Suspend anyway", "Add an owner first" (a link to its Owners team), or "Keep them". The page answers 409. - Over the API, the 409 last_owner names the organizations, and {"confirm": true} suspends anyway. - It is never a dead end: a compromised owner account is still suspended with one more click. - A person who owns nothing alone is suspended without the question.

  • An organization with no active owner is told to those it concerns.

- On the accounts page, the suspended person's row carries a danger badge ("acme: no active owner"), and an attention card names every such organization with a link to add an owner (ownerlessOrgs in core/orgs.ts). - The organization's own page tells its members and the forge's owner that nobody can administer it right now, with the same link. A stranger is told nothing.

Tests: test/sole-owner-suspend.test.ts, admitted to the gate. An unconfirmed suspension is refused on all three routes and nothing changes; the warning names the organization and links to add an owner. Confirmed, the suspension happens and the member still reaches the organization and sees the notice. The owner sees the row badge and the organization card; the stranger sees neither. The API confirm works, and unsuspending clears the alerts. The test fails on main.

🤖 Generated with Claude Code

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs