STET

agent_patch

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

56158 bytes

Back to adjudication
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/baseschema.go b/app/v2/pkg/asttransform/baseschema.go
index 45a6ebc..a830029 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/baseschema.go
+++ b/app/v2/pkg/asttransform/baseschema.go
@@ -168,6 +168,11 @@ directive @deprecated(
 
 directive @specifiedBy(url: String!) on SCALAR
 
+"""
+Marks an input object type so that exactly one of its fields must be provided with a non-null value at runtime.
+"""
+directive @oneOf on INPUT_OBJECT
+
 """
 A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.
 In some cases, you need to provide options to alter GraphQL's execution behavior
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/complete.golden b/app/v2/pkg/asttransform/fixtures/complete.golden
index 27488b6..5e24aa0 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/complete.golden
+++ b/app/v2/pkg/asttransform/fixtures/complete.golden
@@ -57,6 +57,11 @@ directive @specifiedBy(
     url: String!
 ) on SCALAR
 
+"""
+Marks an input object type so that exactly one of its fields must be provided with a non-null value at runtime.
+"""
+directive @oneOf on INPUT_OBJECT
+
 """
 A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.
 In some cases, you need to provide options to alter GraphQL's execution behavior
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/custom_query_name.golden b/app/v2/pkg/asttransform/fixtures/custom_query_name.golden
index 3bcc2af..0c54e03 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/custom_query_name.golden
+++ b/app/v2/pkg/asttransform/fixtures/custom_query_name.golden
@@ -57,6 +57,11 @@ directive @specifiedBy(
     url: String!
 ) on SCALAR
 
+"""
+Marks an input object type so that exactly one of its fields must be provided with a non-null value at runtime.
+"""
+directive @oneOf on INPUT_OBJECT
+
 """
 A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.
 In some cases, you need to provide options to alter GraphQL's execution behavior
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/mutation_only.golden b/app/v2/pkg/asttransform/fixtures/mutation_only.golden
index 66da6be..499e1cb 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/mutation_only.golden
+++ b/app/v2/pkg/asttransform/fixtures/mutation_only.golden
@@ -49,6 +49,11 @@ directive @specifiedBy(
     url: String!
 ) on SCALAR
 
+"""
+Marks an input object type so that exactly one of its fields must be provided with a non-null value at runtime.
+"""
+directive @oneOf on INPUT_OBJECT
+
 """
 A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.
 In some cases, you need to provide options to alter GraphQL's execution behavior
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/schema_missing.golden b/app/v2/pkg/asttransform/fixtures/schema_missing.golden
index 27488b6..5e24aa0 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/schema_missing.golden
+++ b/app/v2/pkg/asttransform/fixtures/schema_missing.golden
@@ -57,6 +57,11 @@ directive @specifiedBy(
     url: String!
 ) on SCALAR
 
+"""
+Marks an input object type so that exactly one of its fields must be provided with a non-null value at runtime.
+"""
+directive @oneOf on INPUT_OBJECT
+
 """
 A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.
 In some cases, you need to provide options to alter GraphQL's execution behavior
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/simple.golden b/app/v2/pkg/asttransform/fixtures/simple.golden
index 27488b6..5e24aa0 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/simple.golden
+++ b/app/v2/pkg/asttransform/fixtures/simple.golden
@@ -57,6 +57,11 @@ directive @specifiedBy(
     url: String!
 ) on SCALAR
 
+"""
+Marks an input object type so that exactly one of its fields must be provided with a non-null value at runtime.
+"""
+directive @oneOf on INPUT_OBJECT
+
 """
 A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.
 In some cases, you need to provide options to alter GraphQL's execution behavior
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/subscription_only.golden b/app/v2/pkg/asttransform/fixtures/subscription_only.golden
index e8e8573..92e46db 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/subscription_only.golden
+++ b/app/v2/pkg/asttransform/fixtures/subscription_only.golden
@@ -48,6 +48,11 @@ directive @specifiedBy(
     url: String!
 ) on SCALAR
 
+"""
+Marks an input object type so that exactly one of its fields must be provided with a non-null value at runtime.
+"""
+directive @oneOf on INPUT_OBJECT
+
 """
 A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.
 In some cases, you need to provide options to alter GraphQL's execution behavior
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/subscription_renamed.golden b/app/v2/pkg/asttransform/fixtures/subscription_renamed.golden
index e78cb9d..28e4ed0 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/subscription_renamed.golden
+++ b/app/v2/pkg/asttransform/fixtures/subscription_renamed.golden
@@ -48,6 +48,11 @@ directive @specifiedBy(
     url: String!
 ) on SCALAR
 
+"""
+Marks an input object type so that exactly one of its fields must be provided with a non-null value at runtime.
+"""
+directive @oneOf on INPUT_OBJECT
+
 """
 A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.
 In some cases, you need to provide options to alter GraphQL's execution behavior
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/with_mutation_subscription.golden b/app/v2/pkg/asttransform/fixtures/with_mutation_subscription.golden
index 229b242..5247f8d 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/asttransform/fixtures/with_mutation_subscription.golden
+++ b/app/v2/pkg/asttransform/fixtures/with_mutation_subscription.golden
@@ -68,6 +68,11 @@ directive @specifiedBy(
     url: String!
 ) on SCALAR
 
+"""
+Marks an input object type so that exactly one of its fields must be provided with a non-null value at runtime.
+"""
+directive @oneOf on INPUT_OBJECT
+
 """
 A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.
 In some cases, you need to provide options to alter GraphQL's execution behavior
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/astvalidation/operation_rule_values.go b/app/v2/pkg/astvalidation/operation_rule_values.go
index 5030117..934bc03 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/astvalidation/operation_rule_values.go
+++ b/app/v2/pkg/astvalidation/operation_rule_values.go
@@ -11,6 +11,8 @@ import (
 	"github.com/wundergraph/graphql-go-tools/v2/pkg/operationreport"
 )
 
+const oneOfDirectiveName = "oneOf"
+
 // Values validates if values are used properly
 func Values() Rule {
 	return func(walker *astvisitor.Walker) {
@@ -54,7 +56,11 @@ func (v *valuesVisitor) EnterArgument(ref int) {
 	if value.Kind == ast.ValueKindVariable {
 		_, exists := v.variableDefinition(value.Ref)
 		if !exists {
-			v.StopWithExternalErr(operationreport.ErrVariableNotDefinedOnOperation(v.operation.VariableValueNameBytes(value.Ref), []byte("")))
+			v.StopWithExternalErr(operationreport.ErrVariableNotDefinedOnOperation(
+				v.operation.VariableValueNameBytes(value.Ref),
+				v.currentOperationNameBytes(),
+				value.Position,
+			))
 			return
 		}
 
@@ -430,6 +436,38 @@ func (v *valuesVisitor) valueSatisfiesInputObjectTypeDefinition(value ast.Value,
 		return false
 	}
 
+	return v.valueSatisfiesOneOfInputObject(value, inputObjectTypeDefinition)
+}
+
+func (v *valuesVisitor) valueSatisfiesOneOfInputObject(value ast.Value, inputObjectTypeDefinition int) bool {
+	node := ast.Node{
+		Kind: ast.NodeKindInputObjectTypeDefinition,
+		Ref:  inputObjectTypeDefinition,
+	}
+
+	if !v.definition.NodeHasDirectiveByNameString(node, oneOfDirectiveName) {
+		return true
+	}
+
+	fieldRefs := v.operation.ObjectValues[value.Ref].Refs
+	if len(fieldRefs) != 1 {
+		typeName := v.definition.InputObjectTypeDefinitionNameBytes(inputObjectTypeDefinition)
+		v.Report.AddExternalError(operationreport.ErrOneOfInputObjectRequiresExactlyOneField(typeName, value.Position))
+		return false
+	}
+
+	fieldValue := v.operation.ObjectFieldValue(fieldRefs[0])
+	if fieldValue.Kind == ast.ValueKindNull {
+		fieldName := v.operation.ObjectFieldNameBytes(fieldRefs[0])
+		typeName := v.definition.InputObjectTypeDefinitionNameBytes(inputObjectTypeDefinition)
+		v.Report.AddExternalError(operationreport.ErrOneOfInputObjectFieldMustBeNonNull(
+			fieldName,
+			typeName,
+			v.operation.ObjectField(fieldRefs[0]).Position,
+		))
+		return false
+	}
+
 	return true
 }
 
@@ -674,6 +712,15 @@ func (v *valuesVisitor) printOperationValue(value ast.Value) (printedValue []byt
 	return printedValue, true
 }
 
+func (v *valuesVisitor) currentOperationNameBytes() ast.ByteSlice {
+	for i := len(v.Ancestors) - 1; i >= 0; i-- {
+		if v.Ancestors[i].Kind == ast.NodeKindOperationDefinition {
+			return v.operation.OperationDefinitionNameBytes(v.Ancestors[i].Ref)
+		}
+	}
+	return nil
+}
+
 func (v *valuesVisitor) operationVariableDefinition(variableValueRef int) (ref int, exists bool) {
 	variableName := v.operation.VariableValueNameBytes(variableValueRef)
 
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/introspection/fixtures/interfaces_implementing_interfaces.golden b/app/v2/pkg/introspection/fixtures/interfaces_implementing_interfaces.golden
index 2bc1782..452fcf5 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/introspection/fixtures/interfaces_implementing_interfaces.golden
+++ b/app/v2/pkg/introspection/fixtures/interfaces_implementing_interfaces.golden
@@ -7,7 +7,8 @@
       "inputFields": null,
       "interfaces": null,
       "possibleTypes": null,
-      "__typename": ""
+      "__typename": "",
+      "isOneOf": false
     },
     "mutationType": null,
     "subscriptionType": null,
@@ -40,7 +41,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "INTERFACE",
@@ -96,7 +98,8 @@
           }
         ],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "INTERFACE",
@@ -177,7 +180,8 @@
           }
         ],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "INTERFACE",
@@ -207,7 +211,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "INTERFACE",
@@ -263,7 +268,8 @@
           }
         ],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "INTERFACE",
@@ -344,7 +350,8 @@
           }
         ],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       }
     ],
     "directives": [],
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/introspection/fixtures/starwars_introspected.golden b/app/v2/pkg/introspection/fixtures/starwars_introspected.golden
index 5bb9e05..8299302 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/introspection/fixtures/starwars_introspected.golden
+++ b/app/v2/pkg/introspection/fixtures/starwars_introspected.golden
@@ -247,7 +247,8 @@
       "inputFields": [],
       "interfaces": [],
       "possibleTypes": [],
-      "__typename": "__Type"
+      "__typename": "__Type",
+      "isOneOf": false
     },
     "mutationType": {
       "kind": "OBJECT",
@@ -306,7 +307,8 @@
       "inputFields": [],
       "interfaces": [],
       "possibleTypes": [],
-      "__typename": "__Type"
+      "__typename": "__Type",
+      "isOneOf": false
     },
     "subscriptionType": {
       "kind": "OBJECT",
@@ -346,7 +348,8 @@
       "inputFields": [],
       "interfaces": [],
       "possibleTypes": [],
-      "__typename": "__Type"
+      "__typename": "__Type",
+      "isOneOf": false
     },
     "types": [
       {
@@ -596,7 +599,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -655,7 +659,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -695,7 +700,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -727,7 +733,8 @@
           }
         ],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "INTERFACE",
@@ -880,7 +887,8 @@
             "__typename": "__Type"
           }
         ],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -905,7 +913,8 @@
           }
         ],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -1128,7 +1137,8 @@
           }
         ],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -1289,7 +1299,8 @@
           }
         ],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -1371,7 +1382,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -1415,7 +1427,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -1473,7 +1486,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -1531,7 +1545,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -1588,7 +1603,8 @@
         ],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -1655,7 +1671,8 @@
         ],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -1747,7 +1764,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "UNION",
@@ -1775,7 +1793,8 @@
             "__typename": "__Type"
           }
         ],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "SCALAR",
@@ -1785,6 +1804,7 @@
         "interfaces": [],
         "possibleTypes": [],
         "__typename": "__Type",
+        "isOneOf": false,
         "specifiedByURL": "https://scalars.graphql.org/andimarek/date-time"
       },
       {
@@ -1794,7 +1814,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "SCALAR",
@@ -1803,7 +1824,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "SCALAR",
@@ -1812,7 +1834,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "SCALAR",
@@ -1821,7 +1844,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       },
       {
         "kind": "SCALAR",
@@ -1830,7 +1854,8 @@
         "inputFields": [],
         "interfaces": [],
         "possibleTypes": [],
-        "__typename": "__Type"
+        "__typename": "__Type",
+        "isOneOf": false
       }
     ],
     "directives": [
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/introspection/generator.go b/app/v2/pkg/introspection/generator.go
index 820483f..553b882 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/introspection/generator.go
+++ b/app/v2/pkg/introspection/generator.go
@@ -13,6 +13,7 @@ const (
 	DeprecatedDirectiveName  = "deprecated"
 	DeprecationReasonArgName = "reason"
 	SpecifiedByDirectiveName = "specifiedBy"
+	OneOfDirectiveName       = "oneOf"
 )
 
 type Generator struct {
@@ -315,6 +316,11 @@ func (i *introspectionVisitor) EnterInputObjectTypeDefinition(ref int) {
 	i.currentType.Kind = INPUTOBJECT
 	i.currentType.Name = i.definition.InputObjectTypeDefinitionNameString(ref)
 	i.currentType.Description = i.definition.InputObjectTypeDefinitionDescriptionString(ref)
+	inputNode := ast.Node{
+		Kind: ast.NodeKindInputObjectTypeDefinition,
+		Ref:  ref,
+	}
+	i.currentType.IsOneOf = i.definition.NodeHasDirectiveByNameString(inputNode, OneOfDirectiveName)
 }
 
 func (i *introspectionVisitor) LeaveInputObjectTypeDefinition(ref int) {
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/introspection/introspection.go b/app/v2/pkg/introspection/introspection.go
index c799e64..0b7dc5e 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/introspection/introspection.go
+++ b/app/v2/pkg/introspection/introspection.go
@@ -68,6 +68,8 @@ type FullType struct {
 	// not empty for __TypeKind INTERFACE and UNION only
 	PossibleTypes []TypeRef `json:"possibleTypes"`
 	TypeName      string    `json:"__typename"`
+	// true if this type is a OneOf input object
+	IsOneOf bool `json:"isOneOf"`
 	// may be non-null for custom SCALAR, otherwise null.
 	SpecifiedByURL *string `json:"specifiedByURL,omitempty"`
 }
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/introspection/testdata/out_swapi_introspection_response.json b/app/v2/pkg/introspection/testdata/out_swapi_introspection_response.json
index 4b470ba..6fbab12 100755
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/introspection/testdata/out_swapi_introspection_response.json
+++ b/app/v2/pkg/introspection/testdata/out_swapi_introspection_response.json
@@ -7,7 +7,8 @@
       "inputFields": null,
       "interfaces": null,
       "possibleTypes": null,
-      "__typename": ""
+      "__typename": "",
+      "isOneOf": false
     },
     "mutationType": {
       "kind": "SCALAR",
@@ -16,7 +17,8 @@
       "inputFields": null,
       "interfaces": null,
       "possibleTypes": null,
-      "__typename": ""
+      "__typename": "",
+      "isOneOf": false
     },
     "subscriptionType": {
       "kind": "SCALAR",
@@ -25,7 +27,8 @@
       "inputFields": null,
       "interfaces": null,
       "possibleTypes": null,
-      "__typename": ""
+      "__typename": "",
+      "isOneOf": false
     },
     "types": [
       {
@@ -65,7 +68,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -104,7 +108,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -143,7 +148,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -182,7 +188,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -221,7 +228,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -260,7 +268,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -299,7 +308,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -338,7 +348,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -377,7 +388,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -563,7 +575,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -721,7 +734,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -2471,7 +2485,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -2553,7 +2568,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -2681,7 +2697,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -3049,7 +3066,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -3440,7 +3458,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -3711,7 +3730,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -3992,7 +4012,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -4295,7 +4316,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -4584,7 +4606,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -4775,7 +4798,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -4933,7 +4957,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -6573,7 +6598,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -6655,7 +6681,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -7046,7 +7073,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -7317,7 +7345,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -7598,7 +7627,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -7901,7 +7931,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -8190,7 +8221,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -8252,7 +8284,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -8296,7 +8329,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -14114,7 +14148,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -14348,7 +14383,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -14506,7 +14542,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -15978,7 +16015,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -16060,7 +16098,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -16428,7 +16467,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -16699,7 +16739,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -16980,7 +17021,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -17283,7 +17325,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -17572,7 +17615,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -17810,7 +17854,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -17968,7 +18013,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -19662,7 +19708,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -19744,7 +19791,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -20112,7 +20160,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -20475,7 +20524,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -20514,7 +20564,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -20553,7 +20604,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -20592,7 +20644,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -20631,7 +20684,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -20670,7 +20724,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -20709,7 +20764,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -20748,7 +20804,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -20787,7 +20844,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -20826,7 +20884,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -21074,7 +21133,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -21232,7 +21292,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -22962,7 +23023,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -23044,7 +23106,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -23412,7 +23475,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -23803,7 +23867,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -24073,7 +24138,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -24231,7 +24297,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -26537,7 +26604,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -26619,7 +26687,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -26987,7 +27056,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -27378,7 +27448,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -27592,7 +27663,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -27719,7 +27791,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -28096,7 +28169,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -28501,7 +28575,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -28786,7 +28861,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -29081,7 +29157,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -29398,7 +29475,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -29701,7 +29779,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -29957,7 +30036,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -30115,7 +30195,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -32373,7 +32454,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -32455,7 +32537,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -32823,7 +32906,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -33214,7 +33298,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -33246,7 +33331,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -33439,7 +33525,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -35237,7 +35324,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -35388,7 +35476,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "SCALAR",
@@ -35397,7 +35486,8 @@
         "inputFields": null,
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -36800,7 +36890,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -38488,7 +38579,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -38625,7 +38717,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INTERFACE",
@@ -38698,7 +38791,8 @@
             "__typename": ""
           }
         ],
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -38807,7 +38901,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -38846,7 +38941,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -38906,7 +39002,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -39057,7 +39154,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -40291,7 +40389,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -41811,7 +41910,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -41948,7 +42048,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -42675,7 +42776,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -44417,7 +44519,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -44582,7 +44685,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -46636,7 +46740,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -46759,7 +46864,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -46812,7 +46918,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -46970,7 +47077,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -47707,7 +47815,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -49485,7 +49594,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -49636,7 +49746,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -50395,7 +50506,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -52749,7 +52861,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -52970,7 +53083,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -53715,7 +53829,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "INPUT_OBJECT",
@@ -56021,7 +56136,8 @@
         ],
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -56228,7 +56344,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -56258,7 +56375,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -56417,7 +56535,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -56554,7 +56673,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -56631,7 +56751,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -56756,7 +56877,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -56833,7 +56955,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -56949,7 +57072,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "OBJECT",
@@ -57171,7 +57295,8 @@
         "inputFields": null,
         "interfaces": [],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "ENUM",
@@ -57238,7 +57363,8 @@
           }
         ],
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "SCALAR",
@@ -57247,7 +57373,8 @@
         "inputFields": null,
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "SCALAR",
@@ -57256,7 +57383,8 @@
         "inputFields": null,
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "SCALAR",
@@ -57265,7 +57393,8 @@
         "inputFields": null,
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "SCALAR",
@@ -57274,7 +57403,8 @@
         "inputFields": null,
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       },
       {
         "kind": "SCALAR",
@@ -57283,7 +57413,8 @@
         "inputFields": null,
         "interfaces": null,
         "possibleTypes": null,
-        "__typename": ""
+        "__typename": "",
+        "isOneOf": false
       }
     ],
     "directives": [
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/operationreport/externalerror.go b/app/v2/pkg/operationreport/externalerror.go
index 8de9805..8c3da6c 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/operationreport/externalerror.go
+++ b/app/v2/pkg/operationreport/externalerror.go
@@ -26,6 +26,8 @@ const (
 	UnknownFieldOfInputObjectErrMsg         = `Field "%s" is not defined by type "%s".`
 	DuplicatedFieldInputObjectErrMsg        = `There can be only one input field named "%s".`
 	ValueIsNotAnInputObjectTypeErrMsg       = `Expected value of type "%s", found %s.`
+	OneOfInputObjectSingleFieldErrMsg       = `OneOf input object "%s" must define exactly one field.`
+	OneOfInputObjectFieldNonNullErrMsg      = `Value for member field "%s" of OneOf input object "%s" must not be null.`
 )
 
 type ExternalError struct {
@@ -299,14 +301,29 @@ func ErrValueDoesntSatisfyID(value, inputType ast.ByteSlice, position position.P
 	return err
 }
 
+func ErrOneOfInputObjectRequiresExactlyOneField(typeName ast.ByteSlice, position position.Position) (err ExternalError) {
+	err.Message = fmt.Sprintf(OneOfInputObjectSingleFieldErrMsg, typeName)
+	err.Locations = LocationsFromPosition(position)
+
+	return err
+}
+
+func ErrOneOfInputObjectFieldMustBeNonNull(fieldName, typeName ast.ByteSlice, position position.Position) (err ExternalError) {
+	err.Message = fmt.Sprintf(OneOfInputObjectFieldNonNullErrMsg, fieldName, typeName)
+	err.Locations = LocationsFromPosition(position)
+
+	return err
+}
+
 func ErrVariableTypeDoesntSatisfyInputValueDefinition(value, inputType, expectedType ast.ByteSlice, valuePos, variableDefinitionPos position.Position) (err ExternalError) {
 	err.Message = fmt.Sprintf(`Variable "%v" of type "%v" used in position expecting type "%v".`, value, inputType, expectedType)
 	err.Locations = LocationsFromPosition(variableDefinitionPos, valuePos)
 	return err
 }
 
-func ErrVariableNotDefinedOnOperation(variableName, operationName ast.ByteSlice) (err ExternalError) {
+func ErrVariableNotDefinedOnOperation(variableName, operationName ast.ByteSlice, pos position.Position) (err ExternalError) {
 	err.Message = fmt.Sprintf("variable: %s not defined on operation: %s", variableName, operationName)
+	err.Locations = LocationsFromPosition(pos)
 	return err
 }
 
diff --git a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/variablesvalidation/variablesvalidation.go b/app/v2/pkg/variablesvalidation/variablesvalidation.go
index 70bb603..6188fd3 100644
--- a/tmp/agent-patch-flux-pr-1308.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/variablesvalidation/variablesvalidation.go
+++ b/app/v2/pkg/variablesvalidation/variablesvalidation.go
@@ -15,11 +15,49 @@ import (
 	"github.com/wundergraph/graphql-go-tools/v2/pkg/operationreport"
 )
 
+const oneOfDirectiveName = "oneOf"
+
 type InvalidVariableError struct {
 	ExtensionCode string
 	Message       string
 }
 
+func (v *variablesVisitor) validateOneOfInputObject(node ast.Node, jsonValue *astjson.Value) bool {
+	if !v.definition.NodeHasDirectiveByNameString(node, oneOfDirectiveName) {
+		return true
+	}
+
+	typeName := v.definition.InputObjectTypeDefinitionNameBytes(node.Ref)
+	obj := jsonValue.GetObject()
+	if obj.Len() != 1 {
+		v.renderOneOfVariableError(jsonValue, fmt.Sprintf(`OneOf input object "%s" must define exactly one field.`, string(typeName)))
+		return false
+	}
+
+	var fieldName []byte
+	var fieldValue *astjson.Value
+	obj.Visit(func(key []byte, value *astjson.Value) {
+		fieldName = append([]byte{}, key...)
+		fieldValue = value
+	})
+
+	if fieldValue == nil || fieldValue.Type() == astjson.TypeNull {
+		v.renderOneOfVariableError(jsonValue, fmt.Sprintf(`Value for member field "%s" of OneOf input object "%s" must not be null.`, string(fieldName), string(typeName)))
+		return false
+	}
+
+	return true
+}
+
+func (v *variablesVisitor) renderOneOfVariableError(jsonValue *astjson.Value, detail string) {
+	invalidValue := string(jsonValue.MarshalTo(nil))
+	path := ""
+	if len(v.path) > 0 {
+		path = fmt.Sprintf(` at "%s"`, v.renderPath())
+	}
+	v.err = v.newInvalidVariableError(fmt.Sprintf(`%s%s; %s`, v.invalidValueMessage(string(v.currentVariableName), invalidValue), path, detail))
+}
+
 func (e *InvalidVariableError) Error() string {
 	return e.Message
 }
@@ -415,6 +453,9 @@ func (v *variablesVisitor) traverseNamedTypeNode(jsonValue *astjson.Value, typeN
 				return
 			}
 		}
+		if !v.validateOneOfInputObject(fieldTypeDefinitionNode, jsonValue) {
+			return
+		}
 	case ast.NodeKindScalarTypeDefinition:
 		switch unsafebytes.BytesToString(typeName) {
 		case "String":