towerops/lib/towerops_web/live/schedule_live
Graham McIntire a91c00f3cf feat(on_call): PagerDuty-style escalation policy redesign + dialyzer fix
Chunk 1 of the on-call/escalation redesign plan
(docs/plans/2026-04-28-on-call-pagerduty-style-redesign.md):

Schema
- on_call.ex: list_devices_using_policy/2 (direct + org-default inheritance)
- on_call.ex: move_escalation_rule/2 for up/down level reordering
- list_escalation_policies/1 now preloads :rules

Show page
- Levels rendered as numbered cards with up/down/delete controls
- "Notify the following users immediately and escalate after N minutes."
- REPEAT footer surfaces repeat_count inline (no longer a standalone column)
- Right-side Services sidebar lists devices using the policy
- Header line shows the handoff notifications mode (when in use by a service /
  always / never)

Edit form
- Removed standalone Repeat Count input
- Added handoff notifications mode select
- Added inline "If no one acknowledges, repeat this policy N time(s)" block

Index views (policies tab + standalone)
- Replaced Repeat Count column with a Levels (rule count) column

Other
- rate_limit.ex: bind unmatched :ets.new/2 + schedule_clean/1 returns to fix
  dialyzer :unmatched_returns warning under the project's strict flags.

All 10,191 tests pass; mix format clean; mix compile --warnings-as-errors clean;
mix dialyzer passes.
2026-04-28 12:36:41 -05:00
..
form.ex fix: input validation, SSRF, API hardening, and cookie security 2026-03-14 14:48:59 -05:00
form.html.heex feat: add on-call schedules and escalation policies 2026-03-11 12:32:54 -05:00
index.ex fix: display on-call user names instead of emails on schedule index 2026-03-11 13:35:43 -05:00
index.html.heex feat(on_call): PagerDuty-style escalation policy redesign + dialyzer fix 2026-04-28 12:36:41 -05:00
show.ex fix: input validation, SSRF, API hardening, and cookie security 2026-03-14 14:48:59 -05:00
show.html.heex ux: improve mobile responsiveness across all pages 2026-03-12 16:49:59 -05:00