STET

agent_patch

runs/2026-02-21__03-36-16__gpt-5-1-codex-mini/flux-pr-1184/flux-pr-1184.1-of-1.2026-02-21__03-36-16__gpt-5-1-codex-mini/agent-logs/agent.patch

5127 bytes

Back to adjudication
diff --git a/tmp/agent-patch-flux-pr-1184.1-of-1.2026-02-21__03-36-16__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/abstract_selection_rewriter.go b/app/v2/pkg/engine/plan/abstract_selection_rewriter.go
index 3484ce9..f268922 100644
--- a/tmp/agent-patch-flux-pr-1184.1-of-1.2026-02-21__03-36-16__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/abstract_selection_rewriter.go
+++ b/app/v2/pkg/engine/plan/abstract_selection_rewriter.go
@@ -222,6 +222,10 @@ func (r *fieldSelectionRewriter) rewriteUnionSelection(fieldRef int, fieldInfo s
 		r.flattenFragmentOnInterface(inlineFragmentOnInterface.selectionSetInfo, inlineFragmentOnInterface.typeNamesImplementingInterface, unionTypeNames, &newSelectionRefs)
 	}
 
+	for _, inlineFragmentOnUnion := range fieldInfo.inlineFragmentsOnUnions {
+		r.flattenFragmentOnUnion(inlineFragmentOnUnion, unionTypeNames, &newSelectionRefs)
+	}
+
 	// filter existing fragments by type names exists in the current datasource
 	// TODO: do not need to iterate 2 times in filter and here
 	filteredObjectFragments, _ := r.filterFragmentsByTypeNames(fieldInfo.inlineFragmentsOnObjects, unionTypeNames)
@@ -440,6 +444,59 @@ func (r *fieldSelectionRewriter) flattenFragmentOnInterface(selectionSetInfo sel
 
 		r.flattenFragmentOnInterface(inlineFragmentInfo.selectionSetInfo, inlineFragmentInfo.typeNamesImplementingInterface, filteredImplementingTypes, selectionRefs)
 	}
+
+	for _, inlineFragmentInfo := range selectionSetInfo.inlineFragmentsOnUnions {
+		r.flattenFragmentOnUnion(inlineFragmentInfo, filteredImplementingTypes, selectionRefs)
+	}
+}
+
+func (r *fieldSelectionRewriter) flattenFragmentOnUnion(inlineFragment inlineFragmentSelectionOnUnion, allowedTypeNames []string, selectionRefs *[]int) {
+	unionMemberTypes := inlineFragment.unionMemberEntityNames
+	if len(unionMemberTypes) == 0 {
+		unionMemberTypes = inlineFragment.unionMemberTypeNames
+	}
+
+	if len(unionMemberTypes) == 0 {
+		return
+	}
+
+	filteredMemberTypes := make([]string, 0, len(unionMemberTypes))
+	if len(allowedTypeNames) == 0 {
+		filteredMemberTypes = append(filteredMemberTypes, unionMemberTypes...)
+	} else {
+		for _, typeName := range unionMemberTypes {
+			if slices.Contains(allowedTypeNames, typeName) {
+				filteredMemberTypes = append(filteredMemberTypes, typeName)
+			}
+		}
+	}
+
+	if len(filteredMemberTypes) == 0 {
+		return
+	}
+
+	if inlineFragment.selectionSetInfo.hasFields {
+		for _, typeName := range filteredMemberTypes {
+			*selectionRefs = append(*selectionRefs, r.createFragmentSelection(typeName, inlineFragment.selectionSetInfo.fields))
+		}
+	}
+
+	for _, inlineFragmentInfo := range inlineFragment.selectionSetInfo.inlineFragmentsOnObjects {
+		if !slices.Contains(filteredMemberTypes, inlineFragmentInfo.typeName) {
+			continue
+		}
+
+		fragmentSelectionRef := r.operation.CopySelection(inlineFragmentInfo.selectionRef)
+		*selectionRefs = append(*selectionRefs, fragmentSelectionRef)
+	}
+
+	for _, inlineFragmentInfo := range inlineFragment.selectionSetInfo.inlineFragmentsOnInterfaces {
+		r.flattenFragmentOnInterface(inlineFragmentInfo.selectionSetInfo, inlineFragmentInfo.typeNamesImplementingInterface, filteredMemberTypes, selectionRefs)
+	}
+
+	for _, inlineFragmentInfo := range inlineFragment.selectionSetInfo.inlineFragmentsOnUnions {
+		r.flattenFragmentOnUnion(inlineFragmentInfo, filteredMemberTypes, selectionRefs)
+	}
 }
 
 func (r *fieldSelectionRewriter) collectChangedRefs(fieldRef int, fieldRefsPaths map[int]string) (map[int][]int, error) {
diff --git a/tmp/agent-patch-flux-pr-1184.1-of-1.2026-02-21__03-36-16__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/abstract_selection_rewriter_helpers.go b/app/v2/pkg/engine/plan/abstract_selection_rewriter_helpers.go
index 17a53e1..63e0eb2 100644
--- a/tmp/agent-patch-flux-pr-1184.1-of-1.2026-02-21__03-36-16__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/abstract_selection_rewriter_helpers.go
+++ b/app/v2/pkg/engine/plan/abstract_selection_rewriter_helpers.go
@@ -45,7 +45,7 @@ func (r *fieldSelectionRewriter) entitiesImplementingInterface(typesImplementing
 		}
 	}
 
-	return entityNames
+	return out
 }
 
 func (r *fieldSelectionRewriter) entityNamesWithoutFragments(inlineFragments []inlineFragmentSelection, entityNames []string) []string {
@@ -168,7 +168,11 @@ func (r *fieldSelectionRewriter) interfaceFragmentsRequiresCleanup(inlineFragmen
 	return false
 }
 
-func (r *fieldSelectionRewriter) objectFragmentNeedCleanup(inlineFragment inlineFragmentSelection) bool {
+func (r *fieldSelectionRewriter) objectFragmentNeedCleanup(inlineFragment inlineFragmentSelection, parentSelectionValidTypes []string) bool {
+	if len(parentSelectionValidTypes) > 0 && !slices.Contains(parentSelectionValidTypes, inlineFragment.typeName) {
+		return true
+	}
+
 	if !r.hasTypeOnDataSource(inlineFragment.typeName) {
 		return true
 	}
@@ -206,7 +210,7 @@ func (r *fieldSelectionRewriter) interfaceFragmentNeedCleanup(inlineFragment inl
 				return true
 			}
 
-			if r.objectFragmentNeedCleanup(fragmentOnObject) {
+			if r.objectFragmentNeedCleanup(fragmentOnObject, parentSelectionValidTypes) {
 				return true
 			}
 		}