Allow excluding group-level work items in WorkItemsFinder

When looking at the performance for the new group issues list, which will use the GQL query ``, we noticed that the DB query for fetching the items is different. This is because

The reason the queries are different is that WorkItemsFinder does not have an option to exclude group-level work items when passing a group, so the query looks for items in the group and its descendants as well.

Because the issues list at the group level only includes project-level issues, we should add an option to exclude group-level issues when passing a group to WorkItemsFinder.

Proposed solution

diff
Index: app/graphql/resolvers/namespaces/work_items_resolver.rb
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/app/graphql/resolvers/namespaces/work_items_resolver.rb b/app/graphql/resolvers/namespaces/work_items_resolver.rb
--- a/app/graphql/resolvers/namespaces/work_items_resolver.rb	(revision 4089699d880efc91a1a8b29ad90e05c6dce5a9b7)
+++ b/app/graphql/resolvers/namespaces/work_items_resolver.rb	(date 1756209257641)
@@ -6,7 +6,13 @@
     class WorkItemsResolver < ::Resolvers::WorkItemsResolver
       include TimeFrameHelpers
 
-      GROUP_NAMESPACE_ONLY_ARGS = %i[include_ancestors include_descendants exclude_projects timeframe].freeze
+      GROUP_NAMESPACE_ONLY_ARGS = %i[
+        include_ancestors
+        include_descendants
+        exclude_projects
+        timeframe
+        exclude_group_work_items
+      ].freeze
 
       argument :include_ancestors, GraphQL::Types::Boolean,
         required: false,
@@ -24,6 +30,13 @@
         description: 'Exclude work items from projects within the group. Ignored for project namespaces.',
         experiment: { milestone: '17.5' }
 
+      argument :exclude_group_work_items, GraphQL::Types::Boolean,
+        required: false,
+        default_value: false,
+        description: 'Exclude group-level work items within the group and its descendants.' \
+          'Ignored for project namespaces.',
+        experiment: { milestone: '18.4' }
+
       argument :timeframe, Types::TimeframeInputType,
         required: false,
         description: 'List items overlapping the given timeframe. Ignored for project namespaces.'
Index: ee/app/finders/ee/work_items/work_items_finder.rb
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/ee/app/finders/ee/work_items/work_items_finder.rb b/ee/app/finders/ee/work_items/work_items_finder.rb
--- a/ee/app/finders/ee/work_items/work_items_finder.rb	(revision 4089699d880efc91a1a8b29ad90e05c6dce5a9b7)
+++ b/ee/app/finders/ee/work_items/work_items_finder.rb	(date 1756209407036)
@@ -1,5 +1,12 @@
 # frozen_string_literal: true
 
+# EE::WorkItems::WorkItemsFinder
+#
+# Extends WorkItems::WorkItemsFinder
+#
+# Added arguments:
+#   params:
+#     exclude_group_work_items: boolean
 module EE
   module WorkItems
     module WorkItemsFinder
@@ -93,12 +100,20 @@
       end
 
       def include_group_work_items?
-        params.group? && params.group.supports_group_work_items?
+        return false unless params.group?
+        return false if exclude_group_level_work_items?
+
+        params.group.supports_group_work_items?
       end
 
       def with_namespace_cte
         include_group_work_items?
       end
+
+      def exclude_group_level_work_items?
+        params.fetch(:exclude_group_work_items, false)
+      end
+      strong_memoize_attr :exclude_group_level_work_items?
     end
   end
 end