Skip to content

v1.2.0 — Slack ChatOps Incident War Rooms

Choose a tag to compare

@Dushyant-rahangdale Dushyant-rahangdale released this 16 Aug 19:42
· 93 commits to main since this release
Immutable release. Only release title and notes can be modified.
806e0ed

Incidents now get a dedicated Slack channel with the responders already in it, so triage starts in the room rather than in a link.

Added

  • Incident war rooms — a Slack channel per qualifying incident, with on-call responders auto-invited from the first three escalation steps, an incident command card, and an optional Jitsi / Zoom / Google Meet bridge
  • 1-click actions — Acknowledge, Assign to Me, Resolve, straight from the card
  • Slash commands/incident ack | resolve | note | who | postmortem | help
  • 📌 emoji pin sync — react to any message in a war room to capture it as an incident note; pinning is idempotent, so re-reacting will not duplicate it
  • Slack app manifest generator — copy a manifest that configures every scope, Event Subscriptions, interactivity and the slash command in one step
  • Signing secret in the UI, stored encrypted — no environment variable required
  • Setup documentation for the whole flow, with a scope reference and a troubleshooting table keyed by symptom

Fixed

On-call resolution paged the entire schedule. hour12: false resolves to the h24 hour cycle on Node 20's ICU, reporting midnight as hour "24" and shifting start-of-day a full day early in zero-offset zones such as UTC. No block covered "now", so the safety net paged every member of the schedule instead of the person actually on call. Reproduced and verified fixed on the production runtime.

Also:

  • Slack request signatures are verified and fail closed; a missing secret previously meant every unsigned request was trusted
  • Server-side request forgery via response_url, which was fetched unvalidated
  • "Assign to Me" could assign an incident to an arbitrary user when Slack resolution failed
  • The Acknowledge button did not stop the escalation chain
  • Slack button actions did not send the notifications their web equivalents send
  • The incident timeline showed raw Slack IDs instead of names
  • The war-room API required only authentication, not permission on the incident
  • Manual Create War-Room and Archive were blocked by settings governing automatic behaviour
  • Slack rate limits (429) crashed some paths and were swallowed on others
  • Archived war rooms no longer read as active, no longer receive updates, and reopening an incident can provision a fresh channel

Changed

  • Watchtower removed from the production compose file; image rollout is a deliberate action
  • engines pins Node 20 to match the production image
  • Pinned messages are saved as an incident note only, without a duplicate timeline event

Upgrading

Docker / Compose

docker pull ghcr.io/opsknight-labs/opsknight:v1.2.0
docker compose down && docker compose up -d

Kubernetes / Helm

helm upgrade opsknight opsknight/opsknight --set image.tag=v1.2.0
  1. Deploy — migrations run on start
  2. Enter the Slack Signing Secret in Settings → Integrations → Slack. Earlier releases stored a value in that field that was never a signing secret; the migration clears it, and Slack requests are rejected until the real one is provided
  3. Apply the app manifest from Settings → Integrations → Slack, then reinstall the Slack app so the new scopes are granted

Full notes in CHANGELOG.md · Slack ChatOps setup guide