Skip to content

feat(alerts): on-call schedules in the dashboard: who is on call, a calendar, overrides, and paging people - #2307

Open
Makisuo wants to merge 159 commits into
mainfrom
feat/alert-oncall-schedules-ui
Open

Makisuo wants to merge 159 commits into
mainfrom
feat/alert-oncall-schedules-ui

fix(web): overrides follow every page; the activity re-read supersede…

b9733a8
Select commit
Loading
Failed to load commit list.
Maple Review Bot / Maple / review succeeded Nov 7, 2026 in 3m 52s

Confidence 10/10 · No issues found

🟢 Confidence 10/10 · safe to merge. Both earlier findings are fixed and the new behavior is pinned by scene tests; the schedule pages' model, message and command modules went unread.
no findings · tests covered · risk medium

Adds on-call schedules to the alerts dashboard: On-call tab and inbox strip, a schedule form, a weekly calendar with overrides, people and schedule targets in escalation chains, and paged-people timeline entries. Both earlier findings are fixed; the McpQueryError issues in page/registry.ts are unrelated and untouched.

  • oncallTab and whoIsOnCallStrip join the alerts hub, between SLOs and Routing
  • New AlertsSchedule page: week calendar, overrides, DST-aware day grid
  • New schedule form with layers, rotations, handoff and weekly windows
  • Escalation steps now target destinations, people and schedules via pickList

Fixed since the last review

  • ✅ F21 · Every layer's rotation control carries the same accessible name
  • ✅ F22 · listOverrides reads one page, so overrides past the first 100 are unreachable

Production impact

Open errors in the changed files (2)
Issue Service Occurrences File
@maple/mcp/errors/McpQueryError (5 issues) maple-chat 33 apps/web/src/page/registry.ts
@maple/mcp/errors/McpQueryError (5 issues) maple-ai 15 apps/web/src/page/registry.ts

After this merges, Maple checks whether they stop.

What was checked
  • listOverrides pages while has_more, capped at 500 = MAX_ONCALL_FUTURE_OVERRIDES (oncall-schedules.ts:71)
  • One-page schedule read is safe: SCHEDULE_LIST_LIMIT 50 equals MAX_ONCALL_SCHEDULES_PER_ORG 50
  • zonedPartsToEpochMs rolls over out-of-range days, so zonedDayStart past a month end lands correctly (datetime.ts:401)

b9733a8 · Reply "won't fix" to dismiss a finding, or mention @maple-review-bot to ask about one.