Hi Dispatch users!
This is the last release of 2024. As we wrap up the year, we want to take a moment to express our heartfelt gratitude to our community, contributors, and users. This update introduces a variety of new features, alongside numerous bug fixes and enhancements, as we continue to improve the stability of Dispatch. Explore some of the highlights and the complete details below.
-
Primary Branch Name Update: We have updated our primary branch name from "master" to "main," aligning with modern naming conventions.
-
Project Display Name Customization: Projects can now have a display name separate from their key, allowing for customization in the user interface without breaking existing API calls.
-
Export of Incident/Case Tags: Users can now export incident and case tags, improving data management and reporting capabilities.
-
Incident Reports Tab: A new "Reports" tab for incidents includes a list of tactical reports and, if enabled, the genAI-produced incident summary when the incident closes. We hope this provides users with quick access to key information.
-
MFA Challenge in Case Threads: Users can now be MFA challenged within case threads.
-
Incident Title in Ticket Names: Admins can now set the default ticket plug-in to use the incident title in the incident ticket name.
A big thank you to all our contributors for their invaluable support and collaboration, including @roblambell, @bashbreakpoint, @rialg, and @nimaxin.
Enhancements:
- fix: updating main branch name (#5645) by @whitdog47
- fix(case): close escalated case when associated incident is closed (#5618) by @whitdog47
- feat(ui): allow project to have a display name separate from its key (#5616) by @whitdog47
- Allow export of incident/case tags (#5613) by @metroid-samus
- feat(ui): adds button to go to legacy edit pane (#5605) by @whitdog47
- feat(aws sqs plugin): adds exception handling for ResourceClosedError errors (#5601) by @mvilanova
- feat(dispatch-aws-plugin): better logging (#5594) by @mvilanova
- feat(signal processing): adds better logging for troubleshooting purposes (#5592) by @mvilanova
- chore(ci): test docker build on pull request (#5588) by @roblambell
- feat(ui): add incident summary to Reports tab (#5582) by @whitdog47
- feat(auth): aws application load balancer plugin (#5581) by @roblambell
- feat(ui): show message if no tactical reports (#5576) by @whitdog47
- feat(ticket): update ticket metadata on change of incident type (#5575) by @whitdog47
- feat(mfa): change mfa prompt link to button (#5565) by @whitdog47
- Add tags and tickets fields to get cases request (#5564) by @metroid-samus
- feat(slack): add users to threaded case on mention (#5530) by @whitdog47
- feat(dispatch aws plugin): adds support for decompressing zlib compressed signals (#5523) by @mvilanova
- feat(slack): remove signal text from manual mfa engage and add user to channel (#5506) by @whitdog47
- feat(slack plugin): improve user experience when resolving cases via Slack (#5485) by @mvilanova
- Removes ability to delete signal definitions in Web UI (#5484) by @mvilanova
- ui(case): fix misaligned instance selector (#5473) by @wssheldon
- ui: remove 'incident participant' string from report tab (#5470) by @wssheldon
- feat(scheduler): keep participant list in sync (#5460) by @whitdog47
- feat(ui): add dedicated status tab for can report in incident edit sheet (#5459) by @wssheldon
- tests(incident): Increase test coverage for report flows and incident severity service. (#5453) by @metroid-samus
- feat(case): add ability to MFA challenge user in case thread (#5450) by @whitdog47
- ui(mfa): dont require button click to validate mfa, do automatically (#5448) by @wssheldon
- enhancement(ui): allow multiple assignee and participants (#5443) by @whitdog47
- Enables usage of welcome message template for creating case ephemeral welcome messages (#5439) by @metroid-samus
- chore(slack): update mfa fail messages to not reference specific providers (#5437) by @wssheldon
- enhancement(slack): adding slash command and button to manually engage user for mfa prompt (#5429) by @whitdog47
- feat(slack): add signal snooze channel notification for visibility (#5421) by @wssheldon
- feat(genai): elevates GenAI feature to its own service library (#5416) by @mvilanova
- feat(case): update conversation on case auto close (#5412) by @mvilanova
- feat(case type): adds support for auto closing cases (#5409) by @mvilanova
- feat(incident): Show the last update time of response costs in the UI (#5408) by @metroid-samus
- feat(ticket): allows incident title in ticket name (#5397) by @whitdog47
- feat(case): add case feedback daily email (#5395) by @whitdog47
- chore(node): Upgrade to node lts (#5394) by @bashbreakpoint
- Speeds up case resolution (#5384) by @mvilanova
- Handles JSONDecodeError exception when parsing GenAI JSON string (#5359) by @mvilanova
- feat(case): adding case feedback (#5356) by @whitdog47
- feat(jira): add Dispatch link in Jira ticket (#5352) by @whitdog47
Bug Fixes:
- fix(slack): fixing regression in update incident modal (#5640) by @whitdog47
- Adds additional permissions and switches to minimal (#5639) by @kevgliss
- fix(slack): email not in profile dict (#5638) by @whitdog47
- fix(ui): remove html from summary before display (#5637) by @whitdog47
- End polling for case details after conversation has been created. (#5632) by @metroid-samus
- fix(ui): default incident project should be null (#5626) by @whitdog47
- fix(db): make migration statement conditional (#5625) by @roblambell
- fix(cli): use new entry point method (#5623) by @whitdog47
- fix(models): reducing information for duplicates or associated incidents and cases (#5619) by @whitdog47
- fix(ui): fixes property access error (#5617) by @whitdog47
- fix(genai): incident summary generate takes only kw args (#5607) by @whitdog47
- fix(ui): show error in UI if signal filter name already exists (#5606) by @whitdog47
- fix(case): log warning instead of throw exception (#5604) by @whitdog47
- fix(ui): only show enabled incident types (#5598) by @whitdog47
- fix(signal): get name from raw dictionary (#5597) by @whitdog47
- fix(signal): retrieve kv with get (#5596) by @whitdog47
- bugfix(signal service): fixes logging message (#5595) by @mvilanova
- bugfix(aws-plugin-signal-consume): always json.loads() message body message (#5593) by @mvilanova
- bugfix(aws-sqs-signal-consumer-plugin): fixes logic (#5589) by @mvilanova
- fix(ui): filter incident type by selected project (#5583) by @whitdog47
- fix(groups): limit group_key username to first 60 characters (#5554) by @whitdog47
- fix(task): be sure to add user to incident before sending ephemeral message (#5553) by @whitdog47
- fix(ui): adding enums to configuration form (#5539) by @whitdog47
- Fixes listing empty incidents in Slack. (#5531) by @metroid-samus
- fix(slack): ensure only one slash in tags (#5528) by @whitdog47
- Do not throw errors when trying to list members from a non-existent Google Group (#5522) by @metroid-samus
- fix(db): updating sass and remove document resolver plugin (#5518) by @whitdog47
- fix(ui): fixes edit pane on case type (#5507) by @whitdog47
- fix(ui): self closing tag (#5505) by @whitdog47
- fix(metrics): if filter spec is string, load to dict (#5503) by @whitdog47
- (Bug/case) Do not fetch channel activity for threads. (#5500) by @metroid-samus
- fix(slack): use case_id for mfa button metadata (#5498) by @whitdog47
- fix(ui): fixes broken resize component (#5486) by @whitdog47
- fix(slack): verify email before resolving (#5482) by @whitdog47
- fix(slack): fixing append elements when adding buttons (#5472) by @whitdog47
- fix(case/ui): fixes case page to show escalation (#5462) by @whitdog47
- fix(db): ensure type is str before trying to deserialize (#5461) by @whitdog47
- fix(ui/ux): show zero escalated cases if there are none (#5458) by @mvilanova
- fix(logging): log case has been linked to incident when incident has a name (#5457) by @mvilanova
- fix(db): fixes migration to ensure index and column exist before dropping (#5456) by @whitdog47
- fix(docker-image): downgrade Python base image and remove pkg_resources (#5447) by @rialg
- fix(plugin): check if challenge is already approved before raising exception (#5445) by @whitdog47
- fix(ui): use local event to prevent slow down (#5444) by @whitdog47
- fix(slack): remove mfa button for now (#5440) by @whitdog47
- fix(slack): using participant id for manual engagement (#5432) by @whitdog47
- fix(db): cleaning up alembic migration files (#5431) by @whitdog47
- fix(groups/plugin): log when group no longer exists (#5430) by @whitdog47
- Fix docstring for get_definition and get_document routes (#5428) by @nimaxin
- fix(slack): skip after hours notification if no participant (#5419) by @whitdog47
- fix(plugin): create fallback ticket in case Jira fails (#5415) by @whitdog47
- fix(ui): only disable project if editing existing case or incident (#5410) by @whitdog47
- fix(case): case reporter can be null (#5407) by @whitdog47
- fix(case): ensure participant read through individual (#5396) by @whitdog47
- fix(ui): increasing type selector length (#5389) by @whitdog47
- fix(ui): fixes details tab selects (#5385) by @whitdog47
- Fixing selects when not yet loaded (#5380) by @kevgliss
- bug(docker): Revert python version bump (#5379) by @bashbreakpoint
- Timeline Error handling (#5378) by @jneelamekam
- bug(core-ticket): Add dispatch_weblink field to core ticket plugin (#5377) by @bashbreakpoint
- (fix) get_signal_filter arg name is signal_filter_id (#5376) by @aliciamatsumoto
- bug(slack/api): Make slack /event respond to challenge (#5375) by @bashbreakpoint
- fix(feedback): store service id rather than schedule id (#5374) by @whitdog47
- fix(test): use correct rounding strategy (#5373) by @whitdog47
- fix(groups): propagate errors back to remove_member (#5372) by @whitdog47
- fix(case): handle no case conversation (#5371) by @whitdog47
- fix(test): adding rounding method to quantize (#5368) by @whitdog47
- fix(case): ensure case tickets are updated (#5367) by @whitdog47
- fix(plugin): allow dictionary in plugin metadata (#5366) by @whitdog47
- fix(ui): fixing linting errors (#5360) by @whitdog47
- Checks if the message is a dict before saving it to the genai analysis field in the case model (#5357) by @mvilanova
- fix(search): only collect participant emails if individual exists (#5351) by @whitdog47
- fix(plugin): allow list of strings in plugin metadata (#5350) by @whitdog47
- fix(utils): adding docker type to github utils (#5348) by @whitdog47
- Fixes warning (#5338) by @kevgliss
- Fixing case/incident report selects. (#5332) by @kevgliss
- Update Docker images from Buster to Bullseye. (#5326) by @forestmonster
Tech Debt:
- refactor(case): Refactor case cost model. (#5529) by @metroid-samus
- fix(slack): ensure only one slash in tags (#5528) by @whitdog47
- Removes option to delete a signal definition (#5471) by @mvilanova
- fix(case/ui): fixes case page to show escalation (#5462) by @whitdog47
- feat(scheduler): keep participant list in sync (#5460) by @whitdog47
- fix(db): cleaning up alembic migration files (#5431) by @whitdog47
- fix(groups/plugin): log when group no longer exists (#5430) by @whitdog47
- techdebt(plugin): deprecates the document resolver plugin and its code (#5420) by @mvilanova
- fix(slack): skip after hours notification if no participant (#5419) by @whitdog47
- fix(plugin): create fallback ticket in case Jira fails (#5415) by @whitdog47
- fix(groups): propagate errors back to remove_member (#5372) by @whitdog47
- fix(case): handle no case conversation (#5371) by @whitdog47
- fix(case): ensure case tickets are updated (#5367) by @whitdog47
- fix(search): only collect participant emails if individual exists (#5351) by @whitdog47
- Removes obsolete attribute version from docker-compose file (#5349) by @mvilanova
Tests:
- tests(case): adds case reporting test (#5435) by @whitdog47
- tests(database): update database to latest migration and add case attributes (#5434) by @whitdog47
- test(service_feedback): adding tests for oncall service feedback (#5386) by @whitdog47
- fix(test): use correct rounding strategy (#5373) by @whitdog47
Documentation:
- Fix docstring for get_definition and get_document routes (#5428) by @nimaxin
- Update support.mdx (#5330) by @mvilanova