Work item statuses - Iteration 2 (GA)
## [Iteration 2: Add configuration to Status](https://gitlab.com/groups/gitlab-org/-/epics/11975#iteration-2-add-configuration-to-status "[UX] Configurable status field design") _Outcome: Users can configure a custom set of statuses per group/project, which can be applied on all tasks and issues._ ### Designs * [Item detail](https://gitlab.com/gitlab-org/gitlab/-/issues/383125/designs/Detail_page__Set_view_status_MVC2.png "Detail_page__Set_view_status_MVC2.png") * [List items](https://gitlab.com/gitlab-org/gitlab/-/issues/383125/designs/List.png "List.png") * [List filter](https://gitlab.com/gitlab-org/gitlab/-/issues/383125/designs/Filters.png "Filters.png") * [Board items](https://gitlab.com/gitlab-org/gitlab/-/issues/383125/designs/Board.png "Board.png") * [Board filter](https://gitlab.com/gitlab-org/gitlab/-/issues/383125/designs/Filters.png "Filters.png") * Board scope, depending on LOE and saved view timing. Not designed but it would use existing board scope patterns. * [Child and linked items (tasks)](https://gitlab.com/gitlab-org/gitlab/-/issues/383125/designs/Child_items.png "Child_items.png") * [Iterations table item](https://gitlab.com/gitlab-org/gitlab/-/issues/383125/designs/Milestones_and_iterations.png "Milestones_and_iterations.png") * [Milestones list item](https://gitlab.com/gitlab-org/gitlab/-/issues/383125/designs/Milestones_and_iterations.png "Milestones_and_iterations.png") * Roadmaps? ### Additional reference * See the requirements SSOT parent epic, https://gitlab.com/groups/gitlab-org/-/epics/5099, for more information * A deep dive into UX concerns can be found in https://gitlab.com/groups/gitlab-org/-/epics/11975 * [UX video walkthrough](https://www.youtube.com/watch?v=SRM_EiW0YPM) (19:06, chapters by background, iteration plan, status categories, and initial design) ### Acceptance criteria #### Must haves ~"custom status::must have" Configuration: - [ ] Navigate to the root group's Settings > Work Items > Status. - [ ] View the default statuses grouped by their category - [ ] Update status names - [ ] Create a new status - [ ] Reorder statuses within a category - [ ] Set a default status in each state (open/closed) - [ ] Delete a status - [ ] ~Map soon-to-be deleted status to other existing status.~ [Not part of Iteration 2](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/work_items_custom_status/#:~:text=As%20part%20of,but%20not%20deleted.) - [ ] ~Update all corresponding work items with the deleted status to the new status~ [Not part of Iteration 2](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/work_items_custom_status/#:~:text=As%20part%20of,but%20not%20deleted.) - [ ] Status configuration is only available for ~"GitLab Premium" and above. - [ ] Cascade and apply configuration to all child namespaces (subgroups and projects) - [ ] Instrument event tracking for create, update, delete status (record status and category name as custom attributes) [MAU/WAU + Total Counts) - [ ] Status configuration and interactions are available in our GraphQL API (public). What we need to perform these actions in the frontend fulfills this requirement. Integration with work items and views: - [ ] Set a status when creating a work item. **We'll only support tasks and issues for now.** - [ ] If no status is assigned, fallback to the default open status (ex: we can pre-fill the status widget with the default value, which the user can change before creating the work item) - [ ] Apply default open status when a work item is created outside UI-based creation workflows. - [ ] Apply default closed status when a work item is closed outside when the work item is closed without selecting a closed status. - [ ] Update a status on a work item detail view sidebar - [ ] Update a status via a quick action - [ ] Changing the status value creates a system note, triggers a notification, and fires webhook events - [ ] Create board lists with status values. **We'll only support legacy issue boards for now.** - [ ] Remove board list with status values. **We'll only support legacy issue boards for now.** - [ ] Filter by status in the list and board, **this only includes work item lists, issue lists and legacy issue boards.** We won't implement status on the legacy epic list, epic boards and saved views list for iteration 2. - [ ] Instrumentation to track events for status changes (MAU/WAU + total counts - track status change location as a custom attribute -- quick action, board, list, default) - [ ] Display status in work item cards/rows in all applicable places (lists, boards, linked items widget, child items widget, popovers). Other product areas that will need to integrate status: - [ ] GLQL #### Nice to haves ~"custom status::nice to have" Configuration: - [ ] Migrate a set of labels to a set of status - [ ] Optionally remove label values from existing work items when adding the status to the work item. Integration with work items and views: - [ ] Scope board to status values? (TBD: @nickleonard to confirm this behavior, potential dependency with ~"group::product planning" and the "improved views and filtering" workstream). **What does that mean/entail in detail?** - [ ] Bulk update work item status (work item list) - [ ] Minimal valuable integration with iteration and milestone reports (@nickleonard to define acceptance criteria for this) Other product areas that will need to integrate status. It's still TBD which are required for Iteration 2 and which we can punt to follow on iterations: - [ ] Import/Export - [ ] Value Stream Analytics (stage events, filtering) - [ ] Issue Analytics - [ ] Insights - [ ] Additional Iteration report logic - [ ] Additional Milestone report logic - [ ] `gitlab-triage` - [ ] Roadmaps (? - Scope TBD) - [ ] work item reference extender (`+s`) - [ ] ...where else?
epic