STET

agent_patch

runs/2026-02-28__13-38-10__gpt-5-1-codex-mini/flux-pr-1087/flux-pr-1087.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/agent-logs/agent.patch

6310 bytes

Back to adjudication
diff --git a/app/pkg/testing/permutations/permutations.go b/app/pkg/testing/permutations/permutations.go
new file mode 100644
index 0000000..f67baee
--- /dev/null
+++ b/app/pkg/testing/permutations/permutations.go
@@ -0,0 +1,29 @@
+package permutations
+
+import "gonum.org/v1/gonum/stat/combin"
+
+type Permutation[T any] struct {
+	Order []int
+	Items []T
+}
+
+func Permutations[T any](items []T) []*Permutation[T] {
+	size := len(items)
+	orderPermutations := combin.Permutations(size, size)
+
+	permutations := make([]*Permutation[T], 0, len(orderPermutations))
+	for _, order := range orderPermutations {
+		orderCopy := append([]int(nil), order...)
+		itemsCopy := make([]T, size)
+		for i, idx := range orderCopy {
+			itemsCopy[i] = items[idx]
+		}
+
+		permutations = append(permutations, &Permutation[T]{
+			Order: orderCopy,
+			Items: itemsCopy,
+		})
+	}
+
+	return permutations
+}
diff --git a/tmp/agent-patch-flux-pr-1087.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/engine/datasourcetesting/datasourcetesting.go b/app/v2/pkg/engine/datasourcetesting/datasourcetesting.go
index 9a02e3e..6ca32f7 100644
--- a/tmp/agent-patch-flux-pr-1087.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/engine/datasourcetesting/datasourcetesting.go
+++ b/app/v2/pkg/engine/datasourcetesting/datasourcetesting.go
@@ -13,7 +13,8 @@ import (
 	"github.com/kylelemons/godebug/pretty"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
-	"gonum.org/v1/gonum/stat/combin"
+
+	permutations "github.com/wundergraph/graphql-go-tools/v2/pkg/testing/permutations"
 
 	"github.com/wundergraph/graphql-go-tools/v2/pkg/internal/unsafeprinter"
 
@@ -70,13 +71,12 @@ func WithPrintPlan() func(*testOptions) {
 func RunWithPermutations(t *testing.T, definition, operation, operationName string, expectedPlan plan.Plan, config plan.Configuration, options ...func(*testOptions)) {
 	t.Helper()
 
-	dataSourcePermutations := DataSourcePermutations(config.DataSources)
+	dataSourcePermutations := permutations.Permutations(config.DataSources)
 
-	for i := range dataSourcePermutations {
-		permutation := dataSourcePermutations[i]
+	for _, permutation := range dataSourcePermutations {
 		t.Run(fmt.Sprintf("permutation %v", permutation.Order), func(t *testing.T) {
 			permutationPlanConfiguration := config
-			permutationPlanConfiguration.DataSources = permutation.DataSources
+			permutationPlanConfiguration.DataSources = permutation.Items
 
 			t.Run("run", RunTest(
 				definition,
@@ -91,7 +91,7 @@ func RunWithPermutations(t *testing.T, definition, operation, operationName stri
 }
 
 func RunWithPermutationsVariants(t *testing.T, definition, operation, operationName string, expectedPlans []plan.Plan, config plan.Configuration, options ...func(*testOptions)) {
-	dataSourcePermutations := DataSourcePermutations(config.DataSources)
+	dataSourcePermutations := permutations.Permutations(config.DataSources)
 
 	if len(dataSourcePermutations) != len(expectedPlans) {
 		t.Fatalf("expected %d plan variants, got %d", len(dataSourcePermutations), len(expectedPlans))
@@ -101,7 +101,7 @@ func RunWithPermutationsVariants(t *testing.T, definition, operation, operationN
 		permutation := dataSourcePermutations[i]
 		t.Run(fmt.Sprintf("permutation %v", permutation.Order), func(t *testing.T) {
 			permutationPlanConfiguration := config
-			permutationPlanConfiguration.DataSources = permutation.DataSources
+			permutationPlanConfiguration.DataSources = permutation.Items
 
 			t.Run("run", RunTest(
 				definition,
@@ -232,35 +232,3 @@ func ShuffleDS(dataSources []plan.DataSource) []plan.DataSource {
 
 	return dataSources
 }
-
-func OrderDS(dataSources []plan.DataSource, order []int) (out []plan.DataSource) {
-	out = make([]plan.DataSource, 0, len(dataSources))
-
-	for _, i := range order {
-		out = append(out, dataSources[i])
-	}
-
-	return out
-}
-
-func DataSourcePermutations(dataSources []plan.DataSource) []*Permutation {
-	size := len(dataSources)
-	elementsCount := len(dataSources)
-	list := combin.Permutations(size, elementsCount)
-
-	permutations := make([]*Permutation, 0, len(list))
-
-	for _, v := range list {
-		permutations = append(permutations, &Permutation{
-			Order:       v,
-			DataSources: OrderDS(dataSources, v),
-		})
-	}
-
-	return permutations
-}
-
-type Permutation struct {
-	Order       []int
-	DataSources []plan.DataSource
-}
diff --git a/tmp/agent-patch-flux-pr-1087.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/datasource_filter_collect_nodes_visitor.go b/app/v2/pkg/engine/plan/datasource_filter_collect_nodes_visitor.go
index 1262c2e..fdc35eb 100644
--- a/tmp/agent-patch-flux-pr-1087.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/datasource_filter_collect_nodes_visitor.go
+++ b/app/v2/pkg/engine/plan/datasource_filter_collect_nodes_visitor.go
@@ -197,8 +197,11 @@ func (f *collectNodesVisitor) isInterfaceObject(typeName string) bool {
 
 // has disabled entity resolver
 func (f *collectNodesVisitor) allKeysHasDisabledEntityResolver(typeName string) bool {
-	keys := f.dataSource.FederationConfiguration().Keys
-	return !slices.ContainsFunc(keys.FilterByTypeAndResolvability(typeName, false), func(k FederationFieldConfiguration) bool {
+	keys := f.dataSource.FederationConfiguration().Keys.FilterByTypeAndResolvability(typeName, false)
+	if len(keys) == 0 {
+		return false
+	}
+	return !slices.ContainsFunc(keys, func(k FederationFieldConfiguration) bool {
 		return !k.DisableEntityResolver
 	})
 }
diff --git a/tmp/agent-patch-flux-pr-1087.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/datasource_filter_visitor.go b/app/v2/pkg/engine/plan/datasource_filter_visitor.go
index f96b8e8..1746eab 100644
--- a/tmp/agent-patch-flux-pr-1087.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/datasource_filter_visitor.go
+++ b/app/v2/pkg/engine/plan/datasource_filter_visitor.go
@@ -206,6 +206,10 @@ func (f *DataSourceFilter) selectUniqNodeParentsUpToRootNode(i int) {
 		if !ok {
 			break
 		}
+		parent := f.nodes.items[parentIdx]
+		if parent.IsExternal && !parent.IsProvided {
+			break
+		}
 		f.nodes.items[parentIdx].selectWithReason(ReasonStage1SameSourceParent, f.enableSelectionReasons)
 
 		current = parentIdx