Put a team's own settings in the web UI #18
Reference in New Issue
Block a user
Delete Branch "team-settings-ui"
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?
Closes #17. Everything a team owner configures was API-only — escalation, integrations, dead-man switches, membership, and the rota, which the on-call view still described as the TUI's job. Setting up the feature this whole line of work exists for meant using
curl.The Team tab
One team at a time, with a picker for somebody in more than one:
replace, because silently moving a shift moves who gets paged without telling either person.An owner edits; a member sees the same page without the controls, because the server refuses their writes anyway. Hiding a button is a courtesy to the reader, not the thing enforcing anything.
Two details worth the space
The escalation editor holds a draft and sends the whole ladder, because the API replaces it wholesale — the levels are an order, and patching one rung leaves the numbering of the others undecided. A new level defaults to five minutes and the rota, which is the shape almost every ladder starts as.
An integration key is returned exactly once, so creating one opens a panel that says so, shows the URL large with a copy button, and renders the Alertmanager receiver snippet with the URL already in it — the next thing anybody does with that key is paste it into a config. The panel stays until dismissed rather than vanishing on the next re-render.
The incident view now says what happens next
escalation_levelandescalation_due_atare on the incident payload, so the detail view showsEscalating · level 2 · next in 4m. The due time is computed in the incident SELECT by joining the level's timeout, so a list costs no extra queries.That was in #6's scope and deferred with the rest of the UI.
Verified
make fmt lint test helm-lintgreen with-raceagainst Postgres 17, every module parses, and a script checks that everyimportin the UI resolves to a real export — the failure mode for a no-build ES-module frontend is a blank page at runtime, not a compile error.Then against a live server, making every call the page makes including the writes: the six reads the tab issues, a two-level ladder saved and read back, an integration created with its key returned once, three days of rota assigned, switches set, and an incident showing level 1 with a due time five minutes out.
Not in here
No screenshots — I can't drive a browser in this environment, so "it renders correctly" is the one claim I can't make. The data and the imports are verified; the layout is not.
https://claude.ai/code/session_01RHPj4ggeFdEjKKfm4SHbD7