Epic: teams, escalation chains, self-service onboarding and an admin page #1
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Tracking issue. All sub-issues are done and deployed as of v0.15.0, 2026-09-21.
Why this was opened
terdut was single-tenant, and an unacknowledged incident re-paged the same person forever. There was no sign-up, and the alert webhook took no credential at all.
What shipped
/admin/users/{id}, and the admin/team boundary corrected belowThe unauthenticated
POST /api/alertmanager/webhookwas removed in v0.13.0, afterRyuvia/charts#233moved this cluster's Alertmanager onto an integration key.Decisions, for whoever reads this later
open/invite_only, default invite-only; invites are links, not email; no domain mode, because there is no email to verify againstowner= team config + membership;member= incident work. An admin configures any team without being in it, but reads none — see the correction belowacknowledged_byand rewrites historyCorrection: what "an admin is not implicitly in every team" actually meant
This row used to read "an admin is not implicitly in every team", full stop. That was never what the code did, and the gap went unnoticed from v0.12.0 to v0.16.0 because nothing tested it.
requireTeamOwnerhas taken the administrator flag sincea4fbd60(#4), with the reason in its own comment: "A system administrator passes without being a member, because somebody has to be able to repair a team whose owner has left." It guards nine call sites — membership, invites, schedule, integrations, escalation, dead-man, rename, delete — so an administrator has always been able to configure any team on the server.The decision holds in the direction that matters. An administrator configures any team; an administrator reads no team.
callerTeamIDsis built from real memberships only, so the queue, the alerts and the incidents stay invisible until they actually join a team — which is a membership change, and shows as one.Both halves are now pinned by
TestAdmin_ConfiguresATeamTheyAreNotIn: the admin renames, invites, adds and removes on a team they are not in, and then sees zero of its incidents. The README's Teams table marks owner as owner-or-admin, and its Authentication section states the two directions.Still outstanding, and not covered by any issue yet
GET /api/schedule/currentreturns an array, non-admins get403on the user endpoints, and ingestion needs an integration key. Nothing in the cluster runs it, which is why it went unnoticed — it wants its own issue in that repo.pvc-c5ef5aa7-017d-4550-ab93-c17f640e0c1fstill holds the pre-Postgres SQLite database,Releasedand retained./admin/users/{id}, particularly at phone width.Teams, escalation chains, self-service onboarding and an admin pageto Epic: teams, escalation chains, self-service onboarding and an admin page