STET

agent_patch

runs/2026-02-28__13-38-10__gpt-5-4/flux-pr-1128/flux-pr-1128.1-of-1.2026-02-28__13-38-10__gpt-5-4/agent-logs/agent.patch

5330 bytes

Back to adjudication
diff --git a/tmp/agent-patch-flux-pr-1128.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/plan/configuration_visitor.go b/app/v2/pkg/engine/plan/configuration_visitor.go
index e4eedb8..56f8841 100644
--- a/tmp/agent-patch-flux-pr-1128.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/plan/configuration_visitor.go
+++ b/app/v2/pkg/engine/plan/configuration_visitor.go
@@ -400,6 +400,11 @@ func (c *configurationVisitor) EnterField(fieldRef int) {
 	if root.Kind != ast.NodeKindOperationDefinition {
 		return
 	}
+
+	if c.isStaticRootOperationTypeNameField(typeName, fieldName) {
+		return
+	}
+
 	isSubscription := c.isSubscription(root.Ref, currentPath)
 
 	suggestions := c.nodeSuggestions.SuggestionsForPath(typeName, fieldName, currentPath)
@@ -429,6 +434,16 @@ func (c *configurationVisitor) EnterField(fieldRef int) {
 	}
 }
 
+func (c *configurationVisitor) isStaticRootOperationTypeNameField(typeName, fieldName string) bool {
+	return fieldName == typeNameField && c.isRootOperationType(typeName)
+}
+
+func (c *configurationVisitor) isRootOperationType(typeName string) bool {
+	return typeName == c.definition.Index.QueryTypeName.String() ||
+		typeName == c.definition.Index.MutationTypeName.String() ||
+		typeName == c.definition.Index.SubscriptionTypeName.String()
+}
+
 func (c *configurationVisitor) handlePlanningField(fieldRef int, typeName, fieldName, currentPath, parentPath, precedingParentPath string, isSubscription bool, suggestion *NodeSuggestion, ds DataSource, shareable bool) {
 	plannedOnPlannerIds := c.fieldsPlannedOn[fieldRef]
 
diff --git a/tmp/agent-patch-flux-pr-1128.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/plan/planner_test.go b/app/v2/pkg/engine/plan/planner_test.go
index e9e1f88..138aa50 100644
--- a/tmp/agent-patch-flux-pr-1128.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/plan/planner_test.go
+++ b/app/v2/pkg/engine/plan/planner_test.go
@@ -174,6 +174,58 @@ func TestPlanner_Plan(t *testing.T) {
 		DataSources:                  []DataSource{testDefinitionDSConfiguration},
 	}))
 
+	t.Run("Root operation __typename is resolved statically", test(`
+		schema {
+			query: RootQuery
+		}
+
+		type RootQuery {
+			hero: String
+		}
+	`, `
+		query RootTypename {
+			aliased: __typename
+		}
+	`, "RootTypename", &SynchronousResponsePlan{
+		Response: &resolve.GraphQLResponse{
+			Data: &resolve.Object{
+				Nullable: false,
+				Fields: []*resolve.Field{
+					{
+						Name: []byte("aliased"),
+						Value: &resolve.StaticString{
+							Path:  []string{"aliased"},
+							Value: "RenamedRootQuery",
+						},
+					},
+				},
+			},
+		},
+	}, Configuration{
+		DisableResolveFieldPositions: true,
+		DisableIncludeInfo:           true,
+		Types: TypeConfigurations{
+			{
+				TypeName: "RootQuery",
+				RenameTo: "RenamedRootQuery",
+			},
+		},
+		DataSources: []DataSource{
+			dsb().
+				Schema(`
+					schema {
+						query: RootQuery
+					}
+
+					type RootQuery {
+						hero: String
+					}
+				`).
+				RootNode("RootQuery", "hero").
+				DS(),
+		},
+	}))
+
 	t.Run("Merging duplicate fields in response should not happen", func(t *testing.T) {
 		t.Run("Interface response type with type fragments and shared field", test(testDefinition, `
 			query Hero {
diff --git a/tmp/agent-patch-flux-pr-1128.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/plan/visitor.go b/app/v2/pkg/engine/plan/visitor.go
index 261d475..3892c9b 100644
--- a/tmp/agent-patch-flux-pr-1128.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/plan/visitor.go
+++ b/app/v2/pkg/engine/plan/visitor.go
@@ -336,12 +336,19 @@ func (v *Visitor) EnterField(ref int) {
 	}
 
 	if bytes.Equal(fieldName, literal.TYPENAME) {
-		str := &resolve.String{
-			Nullable:   false,
-			Path:       []string{v.Operation.FieldAliasOrNameString(ref)},
-			IsTypeName: true,
+		if v.isStaticRootOperationTypeNameField(ref) {
+			v.currentField.Value = &resolve.StaticString{
+				Path:  []string{v.Operation.FieldAliasOrNameString(ref)},
+				Value: v.rootOperationTypeName(),
+			}
+		} else {
+			str := &resolve.String{
+				Nullable:   false,
+				Path:       []string{v.Operation.FieldAliasOrNameString(ref)},
+				IsTypeName: true,
+			}
+			v.currentField.Value = str
 		}
-		v.currentField.Value = str
 	} else {
 		path := v.resolveFieldPath(ref)
 		v.currentField.Value = v.resolveFieldValue(ref, fieldDefinitionTypeRef, true, path)
@@ -353,6 +360,21 @@ func (v *Visitor) EnterField(ref int) {
 	v.mapFieldConfig(ref)
 }
 
+func (v *Visitor) isStaticRootOperationTypeNameField(ref int) bool {
+	return bytes.Equal(v.Operation.FieldNameBytes(ref), literal.TYPENAME) &&
+		v.isRootOperationType(v.Walker.EnclosingTypeDefinition.NameString(v.Definition))
+}
+
+func (v *Visitor) isRootOperationType(typeName string) bool {
+	return typeName == v.Definition.Index.QueryTypeName.String() ||
+		typeName == v.Definition.Index.MutationTypeName.String() ||
+		typeName == v.Definition.Index.SubscriptionTypeName.String()
+}
+
+func (v *Visitor) rootOperationTypeName() string {
+	return v.Config.Types.RenameTypeNameOnMatchStr(v.Walker.EnclosingTypeDefinition.NameString(v.Definition))
+}
+
 func (v *Visitor) mapFieldConfig(ref int) {
 	typeName := v.Walker.EnclosingTypeDefinition.NameString(v.Definition)
 	fieldNameStr := v.Operation.FieldNameString(ref)