Add WorkItemTypeUpdate GraphQL mutation

What does this MR do and why?

Introduce a new GraphQL mutation called WorkItemTypeUpdate for work item type management that establishes the foundation for updating work item type attributes including name, icon name, and archiving functionality.

Current implementation:

  • Validate work_item_configurable_types feature flag is enabled
  • Enforce container restrictions (root group or organization level)
  • Use the current organization context when full_path of the root group is not provided
  • Return existing work item type without modifications

Additional changes:

  • Add support for organizations as resource parents in work item type licensing checks. Organizations use License.feature_available? directly since they don't implement licensed_feature_available? method, enabling proper functionality when no full_path is provided and the system defaults to current_organization.

Follow-up implementation:

  • Due to blocker MRs, the mutation accepts update arguments (name, icon_name, archive) but does not yet perform actual updates.
  • In a follow-up MR (after !219133 (merged) is merged), when a system-defined work item type is provided, the mutation will create a custom work item type with the updated attributes.
  • In a follow-up MR (after !221664 (merged) is merged), authorization will be added using update_work_item_permission check which validates licensed features and ensures the user has root maintainer+ role.

References

Screenshots or screen recordings

With a full_path Screenshot_2026-02-11_at_10.12.15_am
Without a full_path Screenshot_2026-02-11_at_12.19.42_pm
With FF disabled Screenshot_2026-02-11_at_1.35.25_pm
With invalid ID Screenshot_2026-02-12_at_12.49.36_pm

How to set up and validate locally

  1. Run the following query with work_item_configurable_types feature flag enabled and disabled.
  2. When the feature flag is enabled, the mutation should return an existing work item type without any modifications.
Click to expand
mutation UpdateWorkItemType($input: WorkItemTypeUpdateInput!) {
  workItemTypeUpdate(input: $input) {
    workItemType {
      id
      name
      iconName
    }
    errors
  }
}
{
  "input": {
    "id": "gid://gitlab/WorkItems::Type/1",
    "fullPath": "root-group-name",
    "name": "Updated Name",
    "iconName": "updated-icon-name",
    "archive": false
  }
}

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Agnes Slota

Merge request reports

Loading