Hi Dispatch users!
This is the first release of 2024. This release comes with a ton of new features and lots of bug fixes and improvements. See below for some highlights and the full list.
- Update to Vue 3: We have updated to the latest version of Vue for improved performance, better support, and enhanced features.
- Full-width Case page: We've introduced a new full-width Case page which can be found under "View" from the Case table. Please be aware that this page is currently under development, and the original page can still be accessed under the "Edit" menu option. We welcome your feedback and suggestions on this update.
- Activity-based cost models: This feature introduces customizable cost models, allowing users to estimate incident response costs based on their unique organization’s workflow, tools, and participant activity. This update provides plugin-based tracking, effort assignment for each tracked activity, and incident cost calculation based on the cost model and effort assignment.
- Custom incident forms: Custom forms inside Dispatch allow admins to develop any number of assessments that can be completed for each incident, such as for legal assessment. Additionally, this improvement includes a mechanism for attorney notification, assessment evaluation and status.
- Enhanced incident timeline entry and exporting: This change allows the incident commander to add custom events to the timeline and introduces more powerful filtering of timeline events. Moreover, a new export feature allows the timeline to be exported directly into the incident or post-incident document(s).
- All new tag selector component: This new tag selector component allows for searching by tag name, has collapsable/expandable tag type sections, allows for required tag types, and enforces exclusivity. Tags are now shown as removable color chips with tag type icons. A clipboard copy button allows users to easily copy the tag list in the legacy format.
- Dedicated case channels: When created from the UI or through the conversation tool (e.g., Slack), cases now default to creating a separate private, dedicated channel.
Big thanks to @Meandmybadself, @KaelWD, @mattayes, and @zetxek for their contributions!
Enhancements:
- Adds test cases for the case views (#4745) by @metroid-samus
- Change topic in case channel on update (#4726) by @whitdog47
- [Case] - Improves case ephemeral welcome message to include additional details (#4725) by @wssheldon
- Initial assignee not populated for case update command modal (#4724) by @wssheldon
- [Enhancement] - Case participant slack functions, ephemeral message, and escalate bug fix (#4708) by @wssheldon
- Adding ability to filter cases by participant and assignee (#4707) by @whitdog47
- Add welcome ephemeral message to dedicated channel cases (#4700) by @wssheldon
- [Refactor] - Default dedicated case channel, no tags on report form (#4684) by @wssheldon
- Adding new project-level setting to enable/disable self join (#4675) by @milavent
- Adds optional attorney form to attorney review (#4649) by @whitdog47
- Increases code coverage requirement. (#4648) by @metroid-samus
- Move cost models from incident to incident types (#4647) by @metroid-samus
- Send ephemeral message when participant is added to an incident due to an assigned task (#4586) by @whitdog47
- Adds enabled to project to hide disabled projects from new incidents and cases (#4572) by @whitdog47
- Enforces minimum code coverage. (#4560) by @metroid-samus
- Updates classic cost model to append new response costs instead of overwriting them. (#4552) by @metroid-samus
- [Enhancement] - Cases, but they can be Slack channels (#4551) by @wssheldon
- Adding new form type that allows new values (#4540) by @whitdog47
- Allows for custom email templates (#4498) by @whitdog47
- Adds code coverage recommendations in GitHub workflow. (#4489) by @metroid-samus
- Add alert data to JSON file in Case thread, remove Raw Data button (#4474) by @wssheldon
- Allow filtering of incidents that have all of a selected set of tags (#4462) by @whitdog47
- Add a Required column to the TagType table (#4448) by @wssheldon
- Add required as a tag type attribute (#4430) by @whitdog47
- Adding back new button for Admin and above and sets default project on report forms (#4429) by @whitdog47
- handle network timeouts in slack make_call (#4428) by @jschroth
- Changes signals ingestion from opt in to opt out approach (#4396) by @mvilanova
- Adds routing to an incident's forms tab. (#4376) by @metroid-samus
- Replaces hyperlinks in a specified Google Doc. (#4375) by @metroid-samus
- Change new button on incident and case pages to point to report form (#4374) by @whitdog47
- Changing HttpUrl to AnyHttpUrl (#4360) by @whitdog47
- Only show copy button in tag picker if prop is set (#4358) by @whitdog47
- Validate project-specific fields in UI (#4336) by @whitdog47
- Adding copy button to tag picker (#4326) by @whitdog47
- Reduce logging noise for incident cost calculation. (#4305) by @metroid-samus
- Send email to oncall when form is completed (#4264) by @whitdog47
- New tag selector component (#4243) by @whitdog47
- Adds new Entity Type Creation dialog on case page and minor page polish (#4181) by @wssheldon
- Updated Feature: Activity-based Incident Cost Model (#4172) by @metroid-samus
- Moves deleted documents to trash instead of immediately deleting them (#4158) by @kevgliss
- Enhancement/timeline export (#4153) by @jneelamekam
- Adds custom incident forms (#4151) by @whitdog47
- Polish CaseStatusSelectGroup dialog when changing status (#4145) by @wssheldon
- Restricting oncall feedback permission (#4144) by @whitdog47
- [Case] - Refactor table to use script setup v3 api (#4131) by @wssheldon
- Allows for an incident commander to be specified when reporting an incident (#4101) by @whitdog47
- Add next oncall incident commander as observer (#4100) by @whitdog47
- Move "Signal too large" message to top of
Raw Data
modal, change messaging (#4094) by @wssheldon - Change View Case button to Open in Dispatch (#4093) by @wssheldon
- Only install chrome for playwright since we only test on chrome (#4091) by @wssheldon
- Adds filtering support by signal definition to signal instance table (#4074) by @mvilanova
- Adds vitest proof-of-concept for LockButton component (#4070) by @wssheldon
- Renames Investigation Write-Up to Resolution and move button to top (#4063) by @wssheldon
- Show default participant icon and fix label for reporter (#4060) by @wssheldon
- debounce
tiptatp
editor save to not interfere with typing (#4057) by @wssheldon - Add UTC hover to relative times in timeline (#4056) by @wssheldon
- Polish row/col sizing of signal tab and move resolution up in drawer (#4054) by @wssheldon
- Set a saving indicator and save status to Case Page Header (#4048) by @wssheldon
- Removes signal instance fingerprint column (#4047) by @mvilanova
- Setup
eslint
for TypeScript and resolve all errors (#4046) by @wssheldon - Tries a different approach to signal instance table filtering (#4044) by @mvilanova
- Declutters Slack case threads (#3994) by @mvilanova
- Increase min page sizes to 25 (#3993) by @kevgliss
- Removes canary column in signal instance table (#3985) by @mvilanova
- Only show variant in case notification if it is set (#3984) by @mvilanova
- Updates OpenAI plugin (#3975) by @mvilanova
- Adds Case Page, Signal Graph, and supporting components (#3974) by @kevgliss
- Bugfix/vuetify upgrade (#3973) by @kevgliss
- Pre commit/eslint ruff versions (#3957) by @wssheldon
- Project autocomplete (#3944) by @kevgliss
- Enhances Signals table (#3898) by @mvilanova
- Update to vue 3 (#3857) by @KaelWD
- Adds new oncall service feedback table (#3856) by @whitdog47
- Do not fail to process all case close reminders if one fails (#3847) by @mvilanova
- Allows users to edit name and description of search filter and view membership (#3846) by @whitdog47
- Adds a note to the engagement initial modal to have MFA device ready … (#3845) by @wssheldon
- Link directly to dispatch (#3844) by @kevgliss
- Renames parameter create_resources to create_all_resources (#3842) by @mvilanova
- Adds Create Case checkbox to Signal Definition table (#3830) by @wssheldon
- Enhancement/clearer signal consume msg (#3828) by @kevgliss
- Adds
Experimental Features
toggle for built-in feature flags (#3818) by @wssheldon - Process Signal SQS (#3813) by @kevgliss
- Allowing filtering in incident dashboard by participant or commander (#3802) by @whitdog47
- Making experience textbox from oncall end-of-shift feedback optional (#3799) by @whitdog47
- Enhancement/case reminders (#3796) by @kevgliss
- Timeline enhancements (#3795) by @whitdog47
- Adds functionality to manually create missing incident and case resources. (#3791) by @metroid-samus
Bug Fixes:
- bugfix: use ilike instead of like in participant search (#4770) by @wssheldon
- Replace Slack user_ids in messages with names (#4756) by @whitdog47
- bugfix: make document flows in use by both case and incident generalized (#4754) by @wssheldon
- bugfix: Bolt event subscriptions get hijacked by one of the funcs registered (#4752) by @wssheldon
- Respect restricted case visibility (#4743) by @kevgliss
- bugfix: Redundant participant add in case resource creation flow (#4740) by @wssheldon
- Changing extend to append (#4739) by @whitdog47
- Change extend to append (#4738) by @whitdog47
- bugfix: Reporter can be None in resources flows (#4737) by @wssheldon
- [Escalate] - Do not override user selected inc type with case type mapping (#4729) by @wssheldon
- [Bugfix] - Remove debug print in case Slack interactive (#4728) by @wssheldon
- [Case] - Remove convo target from case type select since we default to dedicated channels (#4727) by @wssheldon
- Initial assignee not populated for case update command modal (#4724) by @wssheldon
- [Enhancement] - Case participant slack functions, ephemeral message, and escalate bug fix (#4708) by @wssheldon
- bug: Fixes tags not showing up during incident report / update (#4706) by @Meandmybadself
- Changing to subject in add_conversation_bookmark (#4701) by @whitdog47
- Validate IncidentUpdate's incident_type field against the retrieved incident type. (#4699) by @metroid-samus
- [Bugfix] - We rename case -> incident channel twice (#4698) by @wssheldon
- Revert "Bump sentry-sdk from 1.45.0 to 2.1.1" (#4687) by @whitdog47
- Cases with dedicated channels do not require conversation targets. (#4686) by @metroid-samus
- Incident costs are only updated for non-closed incidents. (#4685) by @metroid-samus
- Fix == True ruff check (#4663) by @wssheldon
- Archive channel when closing dedicated case channel (#4662) by @whitdog47
- Don't send a conversation update if no thread (#4661) by @whitdog47
- bug: Accurately captures severity level at time of incident report (#4655) by @Meandmybadself
- Fixing Report Case card to ensure case type reflows on project change (#4651) by @whitdog47
- Cases should be created with a conversation target (#4646) by @metroid-samus
- bug: pagerduty_plugin - Updates method for accessing current on-call email (#4645) by @Meandmybadself
- Clicking escalate in the status group brings up escalation dialog (#4640) by @whitdog47
- bug: Updates is_bot to support bots defined in apps.event.authorizations.list (#4635) by @Meandmybadself
- Fixes incident naming and incident resource creation during active incident creation. (#4634) by @metroid-samus
- [Copy] - Set the correct modal message depending on escalation source for Cases (#4631) by @wssheldon
- pass signal.id on delete (#4617) by @jschroth
- Adding exception handling around message send (#4611) by @whitdog47
- Updating Slack close reminder to use Dispatch UI weblink (#4610) by @whitdog47
- Only show enabled projects in Slack project select (#4603) by @whitdog47
- Handle slack rate limit for does_user_exist (#4597) by @jschroth
- DISDEV-221 Fix get_by_primary_or_external_id by testing for uuid (#4596) by @jschroth
- Fixing date in date picker from modelValue (#4587) by @whitdog47
- [Bugs] Check incident status before re-adding IC (#4582) by @jschroth
- [Bug] moved participant lookup (#4581) by @jschroth
- [Bug] Adding the message template in SlackAPIError when channel is archived (#4580) by @jschroth
- Fixes calls to renamed incident cost functions (#4579) by @metroid-samus
- Do not duplicate the default incident cost. (#4571) by @metroid-samus
- Do not remove the cost model when updating the incident. (#4567) by @metroid-samus
- github_utils: Allowing long return window and adding 'improvement' category (#4565) by @whitdog47
- Adding back case transition when participant is added (#4559) by @whitdog47
- Validating uuid before storing (#4555) by @whitdog47
- [Bugfix] - Call commit after we associate an incident to a case (#4550) by @wssheldon
- Do not extract new entities from updated instances (#4543) by @wssheldon
- Run transition flow to move to triage state (#4542) by @whitdog47
- [Bugfix] - Timezone and expression construction for snooze created via Slack (#4500) by @wssheldon
- Log a warning if the exception in case add thread flow is users not found (#4484) by @wssheldon
- Adding incident resources to export (#4483) by @whitdog47
- Moving incident combobox to fixed incident filter combobox (#4482) by @whitdog47
- Do not process handle_case_after_hours_message outside of a thread context (#4475) by @wssheldon
- Ensuring filter counter includes tag-all (#4469) by @whitdog47
- Only run member join or remove for incident channels (#4457) by @whitdog47
- Fixing triage button transition (#4432) by @kevgliss
- Removes dupe function add_participants_to_conversation (#4405) by @mvilanova
- Removes redundant report incident button (#4400) by @mvilanova
- Force cases resolved via user enagement to follow case flows (#4399) by @kevgliss
- Fix source link modeling (#4395) by @kevgliss
- Checks for incident before attempting to remove participant from it (#4392) by @mvilanova
- updated delete to trashed (#4388) by @jschroth
- Updates the resource deletion call. (#4387) by @metroid-samus
- Fixes error from accessing a None type object. (#4386) by @metroid-samus
- Fixes case escalate modal submission (#4371) by @mvilanova
- Fixes case escalate button/modal generation (#4370) by @mvilanova
- Fixing issue when event comes from an unrecognized sender (#4369) by @whitdog47
- Adds the Slack API endpoint for conversation replies. (#4359) by @metroid-samus
- Revert linter changes (#4347) by @metroid-samus
- Do not allow user password changes via API (#4346) by @mvilanova
- Fixes participant role time calculation by defaulting the participant role end time to now. (#4341) by @metroid-samus
- Adds http url validation to all weblinks (#4340) by @kevgliss
- Only populate the tacticall report actions field if there are current actions. (#4324) by @metroid-samus
- Adding missing enum (#4314) by @whitdog47
- Bugfix/do not overwrite stable at (#4304) by @metroid-samus
- Bugfix/do not overwrite stable at (#4301) by @metroid-samus
- Add Case reporters to Case conversation by default (#4299) by @wssheldon
- Fixes race condition where the updated incident is marked as stable (#4295) by @metroid-samus
- Bugfix/slack no cost model (#4291) by @metroid-samus
- Fixing one_or_none error when conversation has multiple rows (#4290) by @whitdog47
- Fixes slack cost model select. (#4288) by @metroid-samus
- Ensuring that the tag picker reloads on project selection (#4287) by @whitdog47
- No need to add commander as observer for next oncall feature (#4275) by @whitdog47
- Moving next oncall block and preventing exception (#4259) by @whitdog47
- Fixing next oncall type (#4258) by @whitdog47
- Perform None check for group in update_group (#4255) by @jschroth
- Ensure that next oncall observer is added to all workflows (#4242) by @whitdog47
- Fixed sorting during timeline export (#4240) by @jneelamekam
- Scheduler.stop() takes 1 positional argument but 3 were given (#4225) by @wssheldon
- Update case service to return only lists for get_participants (#4219) by @jschroth
- Check for case assignee before trying to send reminder (#4218) by @jschroth
- Update slack plugin.py to check if user exists before send direct (#4217) by @jschroth
- Fix bug where you can't go to the next page on Case table (#4216) by @wssheldon
- Updated find_schedule_and_send to check for Null current on call (#4212) by @jschroth
- Logs exception when trying to add non-existing user to a case (#4205) by @whitdog47
- Pins Python protobuf and bumps base and dev dependencies (#4204) by @mvilanova
- Fix default project filter on case table (#4203) by @wssheldon
- Adds watcher back to query variable on Case table (#4202) by @wssheldon
- Temporarily disable await imports and other formkit pro code in main.js (#4190) by @wssheldon
- Hides search bar in signals table (#4189) by @mvilanova
- Adds library to allow vite to parse top-level await (#4188) by @whitdog47
- Revert awaitable target environment build config (#4187) by @wssheldon
- Add top level awaitable target environment (#4186) by @wssheldon
- Fix sort by and descending on Case table (#4185) by @wssheldon
- Fix bug in slack response plan button (#4157) by @wssheldon
- Only add project to participant filter if non-null (#4147) by @whitdog47
- Set closed at time when resolving case in Slack plugin (#4146) by @wssheldon
- Fixes table column sorting (#4135) by @kevgliss
- Fixing signal dedup and snooze conflict (#4134) by @kevgliss
- Implements missing bulk edit functionality (#4133) by @wssheldon
- Avoid fetching data on sheet close (#4132) by @kevgliss
- [Cases] - Clicking row in case table should open page, fix regression (#4130) by @wssheldon
- Fixing issue where case type parameter in route is not resolving (#4102) by @whitdog47
- Do not try to render Slack Button with empty url in Signal message (#4099) by @wssheldon
- Aligns closed status name and label (#4095) by @mvilanova
- Resolve unreferenced conversation variable in no target conditional case (#4092) by @wssheldon
- use
flex-shrink
andmin-width 0
for signal instance tab viewer (#4090) by @wssheldon - Use ellipsis in the signal name list on case page to avoid format issues (#4089) by @wssheldon
- Add CaseStatusSelect group tests, refactor to script setup, and fix a couple bugs (#4088) by @wssheldon
- Change Case Page route to name and revert all previous changes (#4085) by @wssheldon
- Make only title and description required on case form (#4083) by @wssheldon
- Filter by project in SearchPopovers (#4082) by @wssheldon
- Require all fields but tags, fix Submit button validation (#4080) by @wssheldon
- Get all items for Pri, Sev, Type, and Project in
SearchPopover
component and add tests (#4079) by @wssheldon - Fixes an issue where multiple search clauses were not OR'd together (#4072) by @kevgliss
- Change
name
toid
for reminder URL (#4071) by @wssheldon - Fix error where exception for missing vector is silenced. (#4065) by @kevgliss
- Add a search filter to the participant search popover and items per page (#4064) by @wssheldon
- Fixing snackbar errors not showing (#4062) by @kevgliss
- Change
View
button for Case Slack message to useid
as route parameter (#4061) by @wssheldon - Display label correctly for SignalInstanceNode (#4059) by @wssheldon
- Only update signal definition fields if provided (#4058) by @mvilanova
- debounce
tiptatp
editor save to not interfere with typing (#4057) by @wssheldon - Fix self closing custom component lint flag on DateWindowInput (#4055) by @wssheldon
- Fix color of escalate/report incident icon and make it mdi-fire instead of mdi-alert-outline (#4049) by @wssheldon
- Show the value of the Entity in Slack snooze dropdown (#4045) by @wssheldon
- Increases text visibility for plugin edit sheet in dark mode. (#4037) by @metroid-samus
- Bugfix/datewindow fix (#4036) by @kevgliss
- Swallow send exceptions (#4034) by @whitdog47
- Dark mode not persisting through reloads (#4033) by @whitdog47
- Make assignee combobox behave like participant select (#4018) by @whitdog47
- Bugfix/cant add assignee (#4017) by @whitdog47
- Fixes signal instance deduplication check. (#4012) by @metroid-samus
- Fixing project and case type select (#4010) by @whitdog47
- Do not send case traige reminders if there is no assignee. (#4008) by @metroid-samus
- Handle invalid JSONPath with KeyError, Exceptions, and add test cases (#4007) by @wssheldon
- Correctly render object title in SignalEngagementCombobox (#4002) by @wssheldon
- Show entity value in entity filter combobox (#3996) by @wssheldon
- Uses entity type name in Slack snooze modal (#3995) by @mvilanova
- Fixing settings bread crumbs (#3992) by @kevgliss
- Fixing table cards to remove card outlines (#3990) by @kevgliss
- Aligns form styles and reverts project autocomplete (#3989) by @kevgliss
- Fixes DSN. (#3986) by @metroid-samus
- Replacing deprecated props (#3971) by @whitdog47
- Fixing playwright tests part 2 (#3970) by @whitdog47
- Fixing playwright tests (#3969) by @whitdog47
- Making search more reliable (#3967) by @kevgliss
- Only display raw data in signal viewer (#3955) by @mvilanova
- Use real JSONPathError exception (#3951) by @wssheldon
- Fixing time not saving correctly in edit event dialog (#3946) by @whitdog47
- Removing password element from plugin form (#3945) by @whitdog47
- Fixing issue with new template dialog always appearing (#3936) by @whitdog47
- return object for tasks data table (#3935) by @wssheldon
- return object when an item is selected in case/incident table (#3934) by @wssheldon
- Mirror the incident bottom sheet to prevent focus from being stolen (#3933) by @wssheldon
- Timeline format fixes (#3932) by @whitdog47
- Restyling templates settings page (#3926) by @whitdog47
- Fixing participant select and centralizes component (#3925) by @kevgliss
- Ignore v-stepper and other deprecated component linter errors (#3923) by @wssheldon
- Fixes issues with Signals table after migration to Vue3 (#3922) by @mvilanova
- Bugfix/table font size (#3921) by @kevgliss
- Adding padding for spacing on participants and resources tabs (#3920) by @whitdog47
- Fixing export preview missing scroll for incidents, cases, and tasks (#3919) by @whitdog47
- Fixing styling for incident priority settings, search filter settings, and plugins table (#3918) by @whitdog47
- Rollback session in case of exceptions (#3917) by @kevgliss
- handle possible null actions in interactive.py (#3914) by @jschroth
- Do not print out raw role policies in the incident roles UI section (#3913) by @mvilanova
- Adds default org for api calls (#3912) by @kevgliss
- Fixing an issue where we aren't paging for critical (#3902) by @kevgliss
- Use threads instead of processes for better sqlalchemy support (#3886) by @kevgliss
- Only try to delete if there are entries (#3885) by @kevgliss
- Ensures that signals are actually consumed forever (#3874) by @kevgliss
- To allow deletable chips to be saved for
SearchFilterCombobox.vue
, call$emit
('input') in remove method (#3871) by @wssheldon - Fixes bug in the case report receipt card UI component (#3867) by @mvilanova
- Fix bug where entity types created via Modal don't appear in combobox (#3855) by @wssheldon
- Fixes self-closing warning for v-switch in AppToolbar.vue component (#3843) by @mvilanova
- Pass create_resources boolean to case_create_resources_flow (#3839) by @wssheldon
- Remove extra conditional in resource creation for Case flow (#3838) by @wssheldon
- Fixing issue with multiprocessing (#3837) by @kevgliss
- Fixes issues with updating case tickets (#3836) by @mvilanova
- Fix fast loop when no plugins are enabled (#3834) by @kevgliss
- Passes the current state of
experimental_features
toUserApi
(#3829) by @wssheldon - Fixing var (#3827) by @kevgliss
- Fixing restricted query statement (#3822) by @whitdog47
- Fixes errors in oncall end-of-shift feedback reminders plus opens api to fetch feedback (#3817) by @whitdog47
- Revert "Making experience textbox from oncall end-of-shift feedback optional" (#3814) by @whitdog47
- Only use stable priority if it is set (#3803) by @whitdog47
- Appends outstanding incident tasks in tactical reports (#3798) by @metroid-samus
- Do not run playwright with Webkit (#3797) by @wssheldon
- Rework the way slack api errors are propagated (to the caller) (#3789) by @kevgliss
Tech Debt:
- Implements missing bulk edit functionality (#4133) by @wssheldon
- [Case] - Refactor table to use script setup v3 api (#4131) by @wssheldon
- Fix self closing custom component lint flag on DateWindowInput (#4055) by @wssheldon
- Setup
eslint
for TypeScript and resolve all errors (#4046) by @wssheldon
Tests:
- Add CaseStatusSelect group tests, refactor to script setup, and fix a couple bugs (#4088) by @wssheldon
- Get all items for Pri, Sev, Type, and Project in
SearchPopover
component and add tests (#4079) by @wssheldon - Adds vitest proof-of-concept for LockButton component (#4070) by @wssheldon
Documentation:
- Typo fix (#4385) by @zetxek
- Enhancement/activity based cost model (#4260) by @metroid-samus
- Add doc page for forms (#4229) by @whitdog47
- installation.mdx: Add code markers, lint (#3863) by @mattayes