Native provider integrations for alerting (Slack, Teams, PagerDuty with shipped templates) #138
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?
Context
Alerting v1 ships with outbound webhooks + JMustache templates and a "plain URL" flow — users paste their Slack incoming webhook URL (or PagerDuty Events API key, or Teams connector URL) and either use the default JSON envelope or write their own Mustache body. This works, but forces users to know each provider's expected payload format.
A natural fast-follow: elevate the most common providers to first-class "connection types" that ship with tuned default templates and provider-specific config hints.
What this would add
First-class connection types
Extend the
OutboundConnection.auth_kind/ type model to include provider-typed connections:SLACK_INCOMING_WEBHOOK— URL shape validated (https://hooks.slack.com/...); default body template uses Slack Block Kit for severity coloring and alert metadataPAGERDUTY_EVENTS_V2— routing key instead of URL; default body shaped to PagerDuty Events API v2 (dedup_keytied to alert instance id; severity mapping: CRITICAL →critical, WARNING →warning, INFO →info; auto-resolve on RESOLVED)MS_TEAMS_CONNECTOR— default body uses Teams MessageCard / adaptive card formatDISCORD_WEBHOOK— optional; cheap to add once the pattern existsOPSGENIE_REST— optionalUI
Backend
OutboundConnectionTypehierarchy incore/outbound/event_action: resolve, Slack doesn't — resolve just sends another message)Why we're not doing it in v1
Acceptance criteria
outbound-templates/slack-v1.mustache) so we can iterate without breaking existing connectionsLinks
docs/superpowers/specs/2026-04-19-alerting-design.md(see §2 Out of scope, §6 Outbound connections, §8 Notification dispatch)docs/superpowers/backlog.md→ BL-002