gitlabhq/gitlabhq · error · Gitlab::Graphql::Errors::ArgumentError

`taskListToggle` is not available. The `work_items_task_list

Error message

`taskListToggle` is not available. The `work_items_task_list_toggle` feature flag is disabled.

What it means

Thrown by `workItemUpdate`'s `extract_task_list_toggle!` when a `taskListToggle` input is present in the description widget but `Feature.disabled?(:work_items_task_list_toggle, work_item.resource_parent)` is true. The task-list toggle feature is rollout-gated per project/group; until the flag is enabled for the item's `resource_parent`, the input is rejected.

Source

Thrown at app/graphql/mutations/work_items/update.rb:168

          attributes.delete(:move_after_id)
        )
      end

      def can_update?(work_item)
        current_user.can?(:update_work_item, work_item)
      end

      # The task list toggle arrives in the description widget, but it's executed
      # by `update_task` (IssuableBaseService#update_task_event), which doesn't
      # run widget callbacks => no widget-level permission checking.
      #
      # We move it into the base attributes to ensure it triggers the `can_update?` check.
      def extract_task_list_toggle!(work_item, attributes, widget_params)
        toggle = widget_params[:description_widget]&.delete(:task_list_toggle)
        return unless toggle

        if Feature.disabled?(:work_items_task_list_toggle, work_item.resource_parent)
          raise Gitlab::Graphql::Errors::ArgumentError,
            '`taskListToggle` is not available. The `work_items_task_list_toggle` feature flag is disabled.'
        end

        # `update_task` path doesn't run any other normal update processing,
        # so deny combining toggle with anything else.
        if attributes.present? || widget_params.except(:description_widget).present?
          raise Gitlab::Graphql::Errors::ArgumentError,
            '`taskListToggle` cannot be combined with other arguments'
        end

        widget_params.delete(:description_widget)

        attributes[:update_task] = {
          checked: toggle[:checked],
          line_source: toggle[:line_source],
          line_sourcepos: toggle[:line_sourcepos]
        }
      end

View on GitHub (pinned to 55ee20384a)

Solutions

  1. Remove `taskListToggle` and update the description text directly (rewriting the markdown checkbox) until the flag is enabled.
  2. Ask an admin to enable the flag: `Feature.enable(:work_items_task_list_toggle)` or scoped to the project's group.
  3. Gate the UI checkbox interaction on the flag's availability before building the mutation.

Example fix

# before
workItemUpdate(id: gid, descriptionWidget: { taskListToggle: { checked: true, lineSource: "- [ ] a", lineSourcepos: 1 } })
# after (flag disabled path)
workItemUpdate(id: gid, descriptionWidget: { description: "- [x] a" })
Defensive patterns

Strategy: validation

Validate before calling

# Send taskListToggle only when the feature is available for the item's parent:
query { project(fullPath: $path) { ... } }
# In-app: gate the checkbox on the client feature check tied to work_items_task_list_toggle;
# otherwise fall back:
workItemUpdate(id: gid, descriptionWidget: { description: toggled_markdown })

Try / catch

When the response errors array contains 'work_items_task_list_toggle feature flag is disabled', retry once with the plain description rewrite instead of the taskListToggle input.

Prevention

When it happens

Trigger: Sending `workItemUpdate(id: gid, descriptionWidget: { taskListToggle: { ... } })` for an item whose project/group does not have the `work_items_task_list_toggle` feature flag enabled.

Common situations: Frontend shipped ahead of the flag rollout; self-managed instances where the flag is off by default; flag enabled on some groups but the item lives in another namespace; stale flag state after a rollout rollback.

Related errors


AI-assisted analysis of gitlabhq/gitlabhq@55ee20384a (2026-08-21). Data as JSON: /api/errors/ac165a2ac6df8bfe. Report an issue: GitHub.