Skip to content

Slack

What it gives you โ€” findings delivered to a channel, with optional Approve/Reject buttons and one-click ๐Ÿ‘/๐Ÿ‘Ž diagnosis feedback.

Minimal config

Incoming webhook (simplest โ€” single message per finding):

notify:
  slack:
    webhook_url_env: SLACK_WEBHOOK_URL

Or a bot token (chat.postMessage) โ€” posts a verdict-first summary then the full analysis as a threaded reply; the bot must be a member of the channel (invite it / conversations.join):

notify:
  slack:
    bot_token_env: SLACK_BOT_TOKEN         # xoxb-โ€ฆ (takes precedence over webhook_url_env)
    channel: C0123456789                   # channel ID or name to post to

Verify it locally

kubectl -n runlore create secret generic runlore-secrets \
  --from-literal=SLACK_WEBHOOK_URL='https://hooks.slack.com/services/...'

Fire a test incident (see Alertmanager or hack/demo.sh) and confirm delivery:

kubectl -n runlore logs deploy/runlore | grep 'msg=findings'

Notes

  • A bot token takes precedence over webhook_url_env when both are set.
  • An incoming webhook delivers the same content as a single message โ€” it cannot thread and exposes no interaction buttons.
  • Approve/Reject buttons (actions.mode: approve) and feedback_buttons (opt-in ๐Ÿ‘/๐Ÿ‘Ž rating) both need signing_secret_env set and the same exposure: Slack Interactivity turned on, with Request URL https://<your-runlore-host>/slack/interactions reachable from Slack’s servers.
    • api.slack.com/apps โ†’ your app โ†’ Interactivity & Shortcuts โ†’ toggle On, Request URL = https://<your-runlore-host>/slack/interactions.
    • Read-only deployments (no actions, no feedback buttons) need none of this.
    • Route it through your ingress/gateway; if you use the chart’s networkPolicy.ingressFrom, allow your ingress controller, not the internet.
  • feedback_buttons: true also requires outcome.ledger_path โ€” startup fails loud otherwise. Ratings land in the outcome ledger and weigh the recalled entry’s trust, exactly like resolve signals do.
  • Feedback is deliberately unprivileged: any signature-valid member of your workspace can rate (approve/reject keep their own approver_ids allowlist). One live vote per (trigger key, Slack user); latest wins.
  • signing_secret_env HMAC-verifies every button click (ยฑ5 min replay window).

Reference