STET

agent_patch

runs/2026-02-21__03-36-16__gpt-5-1-codex-mini/flux-pr-1268/flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/agent-logs/agent.patch

21681 bytes

Back to adjudication
diff --git a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/datasource/graphql_datasource/graphql_datasource.go b/app/v2/pkg/engine/datasource/graphql_datasource/graphql_datasource.go
index 316e2fc..e915c06 100644
--- a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/datasource/graphql_datasource/graphql_datasource.go
+++ b/app/v2/pkg/engine/datasource/graphql_datasource/graphql_datasource.go
@@ -269,14 +269,6 @@ func (p *Planner[T]) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias
 	return "", false
 }
 
-func (p *Planner[T]) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior {
-	return plan.DataSourcePlanningBehavior{
-		MergeAliasedRootNodes:      true,
-		OverrideFieldPathFromAlias: true,
-		IncludeTypeNameFields:      true,
-	}
-}
-
 func (p *Planner[T]) Register(visitor *plan.Visitor, configuration plan.DataSourceConfiguration[T], dataSourcePlannerConfiguration plan.DataSourcePlannerConfiguration) error {
 
 	p.visitor = visitor
@@ -1825,6 +1817,22 @@ func (f *Factory[T]) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguratio
 	return schema, true
 }
 
+func (f *Factory[T]) PlanningBehavior() plan.DataSourcePlanningBehavior {
+	behavior := plan.DataSourcePlanningBehavior{
+		MergeAliasedRootNodes:      true,
+		OverrideFieldPathFromAlias: true,
+		PlanTypeNameFields:         true,
+	}
+	if f.isGRPC() {
+		behavior.FlattenInlineFragments = true
+	}
+	return behavior
+}
+
+func (f *Factory[T]) isGRPC() bool {
+	return f.grpcClient != nil || f.grpcClientProvider != nil
+}
+
 type Source struct {
 	httpClient *http.Client
 }
diff --git a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/datasource/introspection_datasource/factory.go b/app/v2/pkg/engine/datasource/introspection_datasource/factory.go
index a251521..95cda48 100644
--- a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/datasource/introspection_datasource/factory.go
+++ b/app/v2/pkg/engine/datasource/introspection_datasource/factory.go
@@ -29,3 +29,11 @@ func (f *Factory[T]) Context() context.Context {
 func (f *Factory[T]) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguration[T]) (*ast.Document, bool) {
 	return nil, false
 }
+
+func (f *Factory[T]) PlanningBehavior() plan.DataSourcePlanningBehavior {
+	return plan.DataSourcePlanningBehavior{
+		MergeAliasedRootNodes:      false,
+		OverrideFieldPathFromAlias: true,
+		PlanTypeNameFields:         true,
+	}
+}
diff --git a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/datasource/introspection_datasource/planner.go b/app/v2/pkg/engine/datasource/introspection_datasource/planner.go
index 2b05800..481dc3c 100644
--- a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/datasource/introspection_datasource/planner.go
+++ b/app/v2/pkg/engine/datasource/introspection_datasource/planner.go
@@ -45,14 +45,6 @@ func (p *Planner[T]) DownstreamResponseFieldAlias(_ int) (alias string, exists b
 	return
 }
 
-func (p *Planner[T]) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior {
-	return plan.DataSourcePlanningBehavior{
-		MergeAliasedRootNodes:      false,
-		OverrideFieldPathFromAlias: true,
-		IncludeTypeNameFields:      true,
-	}
-}
-
 func (p *Planner[T]) EnterField(ref int) {
 	fieldName := p.v.Operation.FieldNameString(ref)
 	fieldAliasOrName := p.v.Operation.FieldAliasOrNameString(ref)
diff --git a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/datasource/pubsub_datasource/pubsub_datasource.go b/app/v2/pkg/engine/datasource/pubsub_datasource/pubsub_datasource.go
index 60faa27..ace6382 100644
--- a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/datasource/pubsub_datasource/pubsub_datasource.go
+++ b/app/v2/pkg/engine/datasource/pubsub_datasource/pubsub_datasource.go
@@ -275,14 +275,6 @@ func (p *Planner[T]) ConfigureSubscription() plan.SubscriptionConfiguration {
 	return plan.SubscriptionConfiguration{}
 }
 
-func (p *Planner[T]) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior {
-	return plan.DataSourcePlanningBehavior{
-		MergeAliasedRootNodes:      false,
-		OverrideFieldPathFromAlias: false,
-		IncludeTypeNameFields:      true,
-	}
-}
-
 func (p *Planner[T]) DownstreamResponseFieldAlias(_ int) (alias string, exists bool) {
 	return "", false
 }
@@ -316,6 +308,14 @@ func (f *Factory[T]) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguratio
 	return nil, false
 }
 
+func (f *Factory[T]) PlanningBehavior() plan.DataSourcePlanningBehavior {
+	return plan.DataSourcePlanningBehavior{
+		MergeAliasedRootNodes:      false,
+		OverrideFieldPathFromAlias: false,
+		PlanTypeNameFields:         true,
+	}
+}
+
 func buildEventDataBytes(ref int, visitor *plan.Visitor, variables *resolve.Variables) ([]byte, error) {
 	// Collect the field arguments for fetch based operations
 	fieldArgs := visitor.Operation.FieldArguments(ref)
diff --git a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/datasource/staticdatasource/static_datasource.go b/app/v2/pkg/engine/datasource/staticdatasource/static_datasource.go
index 3449afb..59c3aa5 100644
--- a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/datasource/staticdatasource/static_datasource.go
+++ b/app/v2/pkg/engine/datasource/staticdatasource/static_datasource.go
@@ -30,6 +30,13 @@ func (f *Factory[T]) UpstreamSchema(dataSourceConfig plan.DataSourceConfiguratio
 	return nil, false
 }
 
+func (f *Factory[T]) PlanningBehavior() plan.DataSourcePlanningBehavior {
+	return plan.DataSourcePlanningBehavior{
+		MergeAliasedRootNodes:      false,
+		OverrideFieldPathFromAlias: false,
+	}
+}
+
 type Planner[T Configuration] struct {
 	id     int
 	config Configuration
@@ -48,13 +55,6 @@ func (p *Planner[T]) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias
 	return
 }
 
-func (p *Planner[T]) DataSourcePlanningBehavior() plan.DataSourcePlanningBehavior {
-	return plan.DataSourcePlanningBehavior{
-		MergeAliasedRootNodes:      false,
-		OverrideFieldPathFromAlias: false,
-	}
-}
-
 func (p *Planner[T]) Register(_ *plan.Visitor, configuration plan.DataSourceConfiguration[T], _ plan.DataSourcePlannerConfiguration) error {
 	p.config = Configuration(configuration.CustomConfiguration())
 	return nil
diff --git a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__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 284ad42..4f69b57 100644
--- a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/abstract_selection_rewriter.go
+++ b/app/v2/pkg/engine/plan/abstract_selection_rewriter.go
@@ -58,11 +58,11 @@ In this case if any of rules 1-3 are not satisfied we have to rewrite this fragm
 	}
 */
 type fieldSelectionRewriter struct {
-	operation  *ast.Document
-	definition *ast.Document
-
+	operation        *ast.Document
+	definition       *ast.Document
 	upstreamDefinition *ast.Document
 	dsConfiguration    DataSource
+	planningBehavior   DataSourcePlanningBehavior
 
 	skipFieldRefs []int
 }
@@ -74,19 +74,19 @@ type RewriteResult struct {
 
 var resultNotRewritten = RewriteResult{}
 
-func newFieldSelectionRewriter(operation *ast.Document, definition *ast.Document) *fieldSelectionRewriter {
-	return &fieldSelectionRewriter{
-		operation:  operation,
-		definition: definition,
+func newFieldSelectionRewriter(operation *ast.Document, definition *ast.Document, upstreamDefinition *ast.Document, dsConfiguration DataSource) *fieldSelectionRewriter {
+	planningBehavior := DataSourcePlanningBehavior{}
+	if dsConfiguration != nil {
+		planningBehavior = dsConfiguration.DataSourcePlanningBehavior()
 	}
-}
-
-func (r *fieldSelectionRewriter) SetUpstreamDefinition(upstreamDefinition *ast.Document) {
-	r.upstreamDefinition = upstreamDefinition
-}
 
-func (r *fieldSelectionRewriter) SetDatasourceConfiguration(dsConfiguration DataSource) {
-	r.dsConfiguration = dsConfiguration
+	return &fieldSelectionRewriter{
+		operation:          operation,
+		definition:         definition,
+		upstreamDefinition: upstreamDefinition,
+		dsConfiguration:    dsConfiguration,
+		planningBehavior:   planningBehavior,
+	}
 }
 
 func (r *fieldSelectionRewriter) RewriteFieldSelection(fieldRef int, enclosingNode ast.Node) (res RewriteResult, err error) {
@@ -169,6 +169,10 @@ func (r *fieldSelectionRewriter) processUnionSelection(fieldRef int, unionDefRef
 }
 
 func (r *fieldSelectionRewriter) unionFieldSelectionNeedsRewrite(selectionSetInfo selectionSetInfo, unionTypeNames, entityNames []string) (needRewrite bool) {
+	if r.planningBehavior.FlattenInlineFragments && selectionSetInfo.hasInlineFragments() {
+		return true
+	}
+
 	if selectionSetInfo.hasInlineFragmentsOnObjects {
 		// when we have types not exists in the current datasource - we need to rewrite
 		if r.objectFragmentsRequiresCleanup(selectionSetInfo.inlineFragmentsOnObjects, unionTypeNames) {
@@ -412,6 +416,10 @@ func (r *fieldSelectionRewriter) processInterfaceSelection(fieldRef int, interfa
 }
 
 func (r *fieldSelectionRewriter) interfaceFieldSelectionNeedsRewrite(selectionSetInfo selectionSetInfo, interfaceTypeNames []string, entityNames []string) (needRewrite bool) {
+	if r.planningBehavior.FlattenInlineFragments && selectionSetInfo.hasInlineFragments() {
+		return true
+	}
+
 	// when we do not have fragments
 	if !selectionSetInfo.hasInlineFragmentsOnInterfaces &&
 		!selectionSetInfo.hasInlineFragmentsOnUnions &&
diff --git a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/abstract_selection_rewriter_info.go b/app/v2/pkg/engine/plan/abstract_selection_rewriter_info.go
index 950ccb0..2491aa7 100644
--- a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/abstract_selection_rewriter_info.go
+++ b/app/v2/pkg/engine/plan/abstract_selection_rewriter_info.go
@@ -20,6 +20,10 @@ type selectionSetInfo struct {
 	hasInlineFragmentsOnUnions     bool
 }
 
+func (s selectionSetInfo) hasInlineFragments() bool {
+	return s.hasInlineFragmentsOnInterfaces || s.hasInlineFragmentsOnUnions || s.hasInlineFragmentsOnObjects
+}
+
 type fieldSelection struct {
 	fieldSelectionRef int
 	fieldName         string
diff --git a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/abstract_selection_rewriter_test.go b/app/v2/pkg/engine/plan/abstract_selection_rewriter_test.go
index 11b5fc8..2308fc1 100644
--- a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/abstract_selection_rewriter_test.go
+++ b/app/v2/pkg/engine/plan/abstract_selection_rewriter_test.go
@@ -49,9 +49,7 @@ func TestInterfaceSelectionRewriter_RewriteOperation(t *testing.T) {
 
 		node, _ := def.Index.FirstNodeByNameStr(testCase.enclosingTypeName)
 
-		rewriter := newFieldSelectionRewriter(&op, &def)
-		rewriter.SetUpstreamDefinition(&upstreamDef)
-		rewriter.SetDatasourceConfiguration(testCase.dsConfiguration)
+		rewriter := newFieldSelectionRewriter(&op, &def, &upstreamDef, testCase.dsConfiguration)
 
 		result, err := rewriter.RewriteFieldSelection(fieldRef, node)
 		require.NoError(t, err)
diff --git a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/datasource_configuration.go b/app/v2/pkg/engine/plan/datasource_configuration.go
index 07ec63e..67d6486 100644
--- a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/datasource_configuration.go
+++ b/app/v2/pkg/engine/plan/datasource_configuration.go
@@ -20,6 +20,8 @@ type DSHash uint64
 type PlannerFactory[DataSourceSpecificConfiguration any] interface {
 	// Planner creates a new DataSourcePlanner
 	Planner(logger abstractlogger.Logger) DataSourcePlanner[DataSourceSpecificConfiguration]
+    // PlanningBehavior describes the static planning behavior of datasources created by this factory
+	PlanningBehavior() DataSourcePlanningBehavior
 	// Context returns the execution context of the factory
 	// For stateful datasources, the factory should contain cancellable global execution context
 	// This method serves as a flag that factory should have a context
@@ -213,6 +215,7 @@ type dataSourceConfiguration[T any] struct {
 	custom              T                 // custom is the datasource specific configuration
 
 	hash DSHash // hash is a unique hash for the dataSourceConfiguration used to match datasources
+	planningBehavior DataSourcePlanningBehavior
 }
 
 func NewDataSourceConfiguration[T any](id string, factory PlannerFactory[T], metadata *DataSourceMetadata, customConfig T) (DataSourceConfiguration[T], error) {
@@ -237,6 +240,7 @@ func NewDataSourceConfigurationWithName[T any](id string, name string, factory P
 		factory:            factory,
 		custom:             customConfig,
 		hash:               DSHash(xxhash.Sum64([]byte(id))),
+		planningBehavior:   factory.PlanningBehavior(),
 	}, nil
 }
 
@@ -257,6 +261,7 @@ type DataSource interface {
 	Id() string
 	Name() string
 	Hash() DSHash
+	DataSourcePlanningBehavior() DataSourcePlanningBehavior
 	FederationConfiguration() FederationMetaData
 	CreatePlannerConfiguration(logger abstractlogger.Logger, fetchConfig *objectFetchConfiguration, pathConfig *plannerPathsConfiguration, configuration *Configuration) PlannerConfiguration
 }
@@ -303,6 +308,10 @@ func (d *dataSourceConfiguration[T]) Hash() DSHash {
 	return d.hash
 }
 
+func (d *dataSourceConfiguration[T]) DataSourcePlanningBehavior() DataSourcePlanningBehavior {
+	return d.planningBehavior
+}
+
 type DataSourcePlannerConfiguration struct {
 	RequiredFields FederationFieldConfigurations
 	ParentPath     string
@@ -383,8 +392,10 @@ type DataSourcePlanningBehavior struct {
 	// When true expected response will be { "rootField": ..., "alias": ... }
 	// When false expected response will be { "rootField": ..., "original": ... }
 	OverrideFieldPathFromAlias bool
-	// IncludeTypeNameFields should be set to true if the planner allows to plan __typename fields
-	IncludeTypeNameFields bool
+	// PlanTypeNameFields should be set to true if the planner allows to plan __typename fields
+	PlanTypeNameFields bool
+	// FlattenInlineFragments should be set to true if the planner requires inline fragments to be unconditionally flattened.
+	FlattenInlineFragments bool
 }
 
 type DataSourceFetchPlanner interface {
@@ -392,8 +403,14 @@ type DataSourceFetchPlanner interface {
 	ConfigureSubscription() SubscriptionConfiguration
 }
 
-type DataSourceBehavior interface {
-	DataSourcePlanningBehavior() DataSourcePlanningBehavior
+type Identifyable interface {
+	astvisitor.VisitorIdentifier
+}
+
+type DataSourcePlanner[T any] interface {
+	DataSourceFetchPlanner
+	Identifyable
+	Register(visitor *Visitor, configuration DataSourceConfiguration[T], dataSourcePlannerConfiguration DataSourcePlannerConfiguration) error
 	// DownstreamResponseFieldAlias allows the DataSourcePlanner to overwrite the response path with an alias
 	// It's required to set OverrideFieldPathFromAlias to true
 	// This function is useful in the following scenario
@@ -418,17 +435,6 @@ type DataSourceBehavior interface {
 	DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool)
 }
 
-type Identifyable interface {
-	astvisitor.VisitorIdentifier
-}
-
-type DataSourcePlanner[T any] interface {
-	DataSourceFetchPlanner
-	DataSourceBehavior
-	Identifyable
-	Register(visitor *Visitor, configuration DataSourceConfiguration[T], dataSourcePlannerConfiguration DataSourcePlannerConfiguration) error
-}
-
 type SubscriptionConfiguration struct {
 	Input          string
 	Variables      resolve.Variables
diff --git a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/datasource_filter_visitor_test.go b/app/v2/pkg/engine/plan/datasource_filter_visitor_test.go
index acf02a9..4e066d1 100644
--- a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/datasource_filter_visitor_test.go
+++ b/app/v2/pkg/engine/plan/datasource_filter_visitor_test.go
@@ -88,6 +88,9 @@ func (b *dsBuilder) DS() DataSource {
 	if err := b.ds.DataSourceMetadata.Init(); err != nil {
 		panic(err)
 	}
+	if b.behavior != nil {
+		b.ds.planningBehavior = *b.behavior
+	}
 	return b.ds
 }
 
diff --git a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/node_selection_visitor.go b/app/v2/pkg/engine/plan/node_selection_visitor.go
index 95c4f01..bdd73d3 100644
--- a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/node_selection_visitor.go
+++ b/app/v2/pkg/engine/plan/node_selection_visitor.go
@@ -649,9 +649,7 @@ func (c *nodeSelectionVisitor) rewriteSelectionSetHavingAbstractFragments(fieldR
 		return
 	}
 
-	rewriter := newFieldSelectionRewriter(c.operation, c.definition)
-	rewriter.SetUpstreamDefinition(upstreamSchema)
-	rewriter.SetDatasourceConfiguration(ds)
+	rewriter := newFieldSelectionRewriter(c.operation, c.definition, upstreamSchema, ds)
 
 	result, err := rewriter.RewriteFieldSelection(fieldRef, c.walker.EnclosingTypeDefinition)
 	if err != nil {
diff --git a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/path_builder_visitor.go b/app/v2/pkg/engine/plan/path_builder_visitor.go
index bd4d6b2..b828089 100644
--- a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/path_builder_visitor.go
+++ b/app/v2/pkg/engine/plan/path_builder_visitor.go
@@ -1247,7 +1247,7 @@ func (c *pathBuilderVisitor) addPlannerPathForTypename(
 	if fieldName != typeNameField {
 		return false
 	}
-	if !planningBehaviour.IncludeTypeNameFields {
+	if !planningBehaviour.PlanTypeNameFields {
 		return false
 	}
 
diff --git a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/planner_configuration.go b/app/v2/pkg/engine/plan/planner_configuration.go
index 69e23e8..9b22e23 100644
--- a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/planner_configuration.go
+++ b/app/v2/pkg/engine/plan/planner_configuration.go
@@ -23,9 +23,22 @@ type plannerConfigurationOptions struct {
 }
 
 type PlannerConfiguration interface {
-	DataSourceBehavior
 	PlannerPathConfiguration
 
+	DataSourcePlanningBehavior() DataSourcePlanningBehavior
+	// DownstreamResponseFieldAlias allows the DataSourcePlanner to overwrite the response path with an alias
+	// It's required to set OverrideFieldPathFromAlias to true
+	// Example:
+	//
+	// type Query {
+	//		country: Country
+	//		countryAlias: Country
+	// }
+	//
+	// The DataSourcePlanner could keep track that it rewrites the upstream query and use DownstreamResponseFieldAlias
+	// to indicate to the Planner to expect the response for countryAlias on the path "countryAlias" instead of "country".
+	DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool)
+
 	ObjectFetchConfiguration() *objectFetchConfiguration
 	DataSourceConfiguration() DataSource
 
@@ -63,7 +76,7 @@ func (p *plannerConfiguration[T]) ObjectFetchConfiguration() *objectFetchConfigu
 }
 
 func (p *plannerConfiguration[T]) DataSourcePlanningBehavior() DataSourcePlanningBehavior {
-	return p.planner.DataSourcePlanningBehavior()
+	return p.dataSourceConfiguration.DataSourcePlanningBehavior()
 }
 
 func (p *plannerConfiguration[T]) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) {
diff --git a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/planner_test.go b/app/v2/pkg/engine/plan/planner_test.go
index 0a498ad..88ddabb 100644
--- a/tmp/agent-patch-flux-pr-1268.1-of-1.2026-03-05__17-48-26__gpt-5-1-codex-mini/app/v2/pkg/engine/plan/planner_test.go
+++ b/app/v2/pkg/engine/plan/planner_test.go
@@ -1006,7 +1006,6 @@ func (f *FakeFactory[T]) Planner(logger abstractlogger.Logger) DataSourcePlanner
 	return &FakePlanner[T]{
 		source:         source,
 		upstreamSchema: f.upstreamSchema,
-		behavior:       f.behavior,
 	}
 }
 
@@ -1014,11 +1013,21 @@ func (f *FakeFactory[T]) Context() context.Context {
 	return context.TODO()
 }
 
+func (f *FakeFactory[T]) PlanningBehavior() DataSourcePlanningBehavior {
+	if f.behavior == nil {
+		return DataSourcePlanningBehavior{
+			MergeAliasedRootNodes:      false,
+			OverrideFieldPathFromAlias: false,
+		}
+	}
+
+	return *f.behavior
+}
+
 type FakePlanner[T any] struct {
 	id             int
 	source         *StatefulSource
 	upstreamSchema *ast.Document
-	behavior       *DataSourcePlanningBehavior
 }
 
 func (f *FakePlanner[T]) ID() int {
@@ -1050,17 +1059,6 @@ func (f *FakePlanner[T]) ConfigureSubscription() SubscriptionConfiguration {
 	return SubscriptionConfiguration{}
 }
 
-func (f *FakePlanner[T]) DataSourcePlanningBehavior() DataSourcePlanningBehavior {
-	if f.behavior == nil {
-		return DataSourcePlanningBehavior{
-			MergeAliasedRootNodes:      false,
-			OverrideFieldPathFromAlias: false,
-		}
-	}
-
-	return *f.behavior
-}
-
 func (f *FakePlanner[T]) DownstreamResponseFieldAlias(downstreamFieldRef int) (alias string, exists bool) {
 	return
 }