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