STET

agent_patch

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

20958 bytes

Back to adjudication
diff --git a/tmp/agent-patch-flux-pr-1169.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/apollocompatibility/flags.go b/app/v2/pkg/apollocompatibility/flags.go
index 6ba7713..77fd2a0 100644
--- a/tmp/agent-patch-flux-pr-1169.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/apollocompatibility/flags.go
+++ b/app/v2/pkg/apollocompatibility/flags.go
@@ -1,8 +1,7 @@
 package apollocompatibility
 
 type Flags struct {
-	ReplaceInvalidVarError       bool
-	ReplaceUndefinedOpFieldError bool
+	ReplaceInvalidVarError bool
 }
 
 type ApolloRouterFlags struct {
diff --git a/tmp/agent-patch-flux-pr-1169.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/astvalidation/operation_rule_field_selection_merging.go b/app/v2/pkg/astvalidation/operation_rule_field_selection_merging.go
index a5f80a3..2084aa9 100644
--- a/tmp/agent-patch-flux-pr-1169.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/astvalidation/operation_rule_field_selection_merging.go
+++ b/app/v2/pkg/astvalidation/operation_rule_field_selection_merging.go
@@ -97,7 +97,9 @@ func (f *fieldSelectionMergingVisitor) EnterField(ref int) {
 	definition, ok := f.definition.NodeFieldDefinitionByName(f.EnclosingTypeDefinition, fieldName)
 	if !ok {
 		enclosingTypeName := f.definition.NodeNameBytes(f.EnclosingTypeDefinition)
-		f.StopWithExternalErr(operationreport.ErrFieldUndefinedOnType(fieldName, enclosingTypeName))
+		err := operationreport.ErrFieldUndefinedOnType(fieldName, enclosingTypeName)
+		err.Locations = operationreport.LocationsFromPosition(f.operation.Fields[ref].Position)
+		f.StopWithExternalErr(err)
 		return
 	}
 
diff --git a/tmp/agent-patch-flux-pr-1169.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/astvalidation/operation_rule_validate_field_selections.go b/app/v2/pkg/astvalidation/operation_rule_validate_field_selections.go
index 5e07ca7..b0771aa 100644
--- a/tmp/agent-patch-flux-pr-1169.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/astvalidation/operation_rule_validate_field_selections.go
+++ b/app/v2/pkg/astvalidation/operation_rule_validate_field_selections.go
@@ -3,7 +3,6 @@ package astvalidation
 import (
 	"bytes"
 	"fmt"
-	"github.com/wundergraph/graphql-go-tools/v2/pkg/apollocompatibility"
 
 	"github.com/wundergraph/graphql-go-tools/v2/pkg/ast"
 	"github.com/wundergraph/graphql-go-tools/v2/pkg/astvisitor"
@@ -12,11 +11,10 @@ import (
 )
 
 // FieldSelections validates if all FieldSelections are possible and valid
-func FieldSelections(options OperationValidatorOptions) Rule {
+func FieldSelections() Rule {
 	return func(walker *astvisitor.Walker) {
 		fieldDefined := fieldDefined{
-			Walker:                   walker,
-			apolloCompatibilityFlags: options.ApolloCompatibilityFlags,
+			Walker: walker,
 		}
 		walker.RegisterEnterDocumentVisitor(&fieldDefined)
 		walker.RegisterEnterFieldVisitor(&fieldDefined)
@@ -25,9 +23,12 @@ func FieldSelections(options OperationValidatorOptions) Rule {
 
 type fieldDefined struct {
 	*astvisitor.Walker
-	operation                *ast.Document
-	definition               *ast.Document
-	apolloCompatibilityFlags apollocompatibility.Flags
+	operation  *ast.Document
+	definition *ast.Document
+}
+
+func (f *fieldDefined) fieldLocations(ref int) []operationreport.Location {
+	return operationreport.LocationsFromPosition(f.operation.Fields[ref].Position)
 }
 
 func (f *fieldDefined) EnterDocument(operation, definition *ast.Document) {
@@ -41,7 +42,9 @@ func (f *fieldDefined) ValidateUnionField(ref int, enclosingTypeDefinition ast.N
 	}
 	fieldName := f.operation.FieldNameBytes(ref)
 	unionName := f.definition.NodeNameBytes(enclosingTypeDefinition)
-	f.StopWithExternalErr(operationreport.ErrFieldSelectionOnUnion(fieldName, unionName))
+	err := operationreport.ErrFieldSelectionOnUnion(fieldName, unionName)
+	err.Locations = f.fieldLocations(ref)
+	f.StopWithExternalErr(err)
 }
 
 func (f *fieldDefined) ValidateInterfaceOrObjectTypeField(ref int, enclosingTypeDefinition ast.Node) {
@@ -59,24 +62,28 @@ func (f *fieldDefined) ValidateInterfaceOrObjectTypeField(ref int, enclosingType
 			fieldDefinitionTypeKind := f.definition.FieldDefinitionTypeNode(i).Kind
 			switch {
 			case hasSelections && fieldDefinitionTypeKind == ast.NodeKindScalarTypeDefinition:
-				f.StopWithExternalErr(operationreport.ErrFieldSelectionOnScalar(fieldName, definitionName))
+				err := operationreport.ErrFieldSelectionOnScalar(fieldName, definitionName)
+				err.Locations = f.fieldLocations(ref)
+				f.StopWithExternalErr(err)
 			case !hasSelections && (fieldDefinitionTypeKind != ast.NodeKindScalarTypeDefinition && fieldDefinitionTypeKind != ast.NodeKindEnumTypeDefinition):
-				f.StopWithExternalErr(operationreport.ErrMissingFieldSelectionOnNonScalar(fieldName, typeName))
+				err := operationreport.ErrMissingFieldSelectionOnNonScalar(fieldName, typeName)
+				err.Locations = f.fieldLocations(ref)
+				f.StopWithExternalErr(err)
 			}
 			return
 		}
 	}
-	if f.apolloCompatibilityFlags.ReplaceUndefinedOpFieldError {
-		f.StopWithExternalErr(operationreport.ErrApolloCompatibleFieldUndefinedOnType(fieldName, typeName))
-		return
-	}
-	f.StopWithExternalErr(operationreport.ErrFieldUndefinedOnType(fieldName, typeName))
+	err := operationreport.ErrFieldUndefinedOnType(fieldName, typeName)
+	err.Locations = f.fieldLocations(ref)
+	f.StopWithExternalErr(err)
 }
 
 func (f *fieldDefined) ValidateScalarField(ref int, enclosingTypeDefinition ast.Node) {
 	fieldName := f.operation.FieldNameBytes(ref)
 	scalarTypeName := f.operation.NodeNameBytes(enclosingTypeDefinition)
-	f.StopWithExternalErr(operationreport.ErrFieldSelectionOnScalar(fieldName, scalarTypeName))
+	err := operationreport.ErrFieldSelectionOnScalar(fieldName, scalarTypeName)
+	err.Locations = f.fieldLocations(ref)
+	f.StopWithExternalErr(err)
 }
 
 func (f *fieldDefined) EnterField(ref int) {
diff --git a/tmp/agent-patch-flux-pr-1169.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/astvalidation/operation_validation.go b/app/v2/pkg/astvalidation/operation_validation.go
index b33c80b..4d7aec3 100644
--- a/tmp/agent-patch-flux-pr-1169.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/astvalidation/operation_validation.go
+++ b/app/v2/pkg/astvalidation/operation_validation.go
@@ -2,30 +2,13 @@
 package astvalidation
 
 import (
-	"github.com/wundergraph/graphql-go-tools/v2/pkg/apollocompatibility"
 	"github.com/wundergraph/graphql-go-tools/v2/pkg/ast"
 	"github.com/wundergraph/graphql-go-tools/v2/pkg/astvisitor"
 	"github.com/wundergraph/graphql-go-tools/v2/pkg/operationreport"
 )
 
-type OperationValidatorOptions struct {
-	ApolloCompatibilityFlags apollocompatibility.Flags
-}
-
-func WithApolloCompatibilityFlags(flags apollocompatibility.Flags) Option {
-	return func(options *OperationValidatorOptions) {
-		options.ApolloCompatibilityFlags = flags
-	}
-}
-
-type Option func(options *OperationValidatorOptions)
-
 // DefaultOperationValidator returns a fully initialized OperationValidator with all default rules registered
-func DefaultOperationValidator(options ...Option) *OperationValidator {
-	var opts OperationValidatorOptions
-	for _, opt := range options {
-		opt(&opts)
-	}
+func DefaultOperationValidator() *OperationValidator {
 	validator := OperationValidator{
 		walker: astvisitor.NewWalker(48),
 	}
@@ -36,7 +19,7 @@ func DefaultOperationValidator(options ...Option) *OperationValidator {
 	validator.RegisterRule(OperationNameUniqueness())
 	validator.RegisterRule(LoneAnonymousOperation())
 	validator.RegisterRule(SubscriptionSingleRootField())
-	validator.RegisterRule(FieldSelections(opts))
+	validator.RegisterRule(FieldSelections())
 	validator.RegisterRule(FieldSelectionMerging())
 	validator.RegisterRule(KnownArguments())
 	validator.RegisterRule(Values())
diff --git a/tmp/agent-patch-flux-pr-1169.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/astvalidation/operation_validation_test.go b/app/v2/pkg/astvalidation/operation_validation_test.go
index 6885ceb..9f11656 100644
--- a/tmp/agent-patch-flux-pr-1169.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/astvalidation/operation_validation_test.go
+++ b/app/v2/pkg/astvalidation/operation_validation_test.go
@@ -2,9 +2,9 @@ package astvalidation
 
 import (
 	"fmt"
+	"net/http"
 	"testing"
 
-	"github.com/wundergraph/graphql-go-tools/v2/pkg/apollocompatibility"
 	"github.com/wundergraph/graphql-go-tools/v2/pkg/errorcodes"
 
 	"github.com/stretchr/testify/assert"
@@ -321,7 +321,7 @@ func TestExecutionValidation(t *testing.T) {
 							fragment aliasedLyingFieldTargetNotDefined on Dog {
 								barkVolume: kawVolume
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Invalid, withExpectNormalizationError())
+					FieldSelections(), Invalid, withExpectNormalizationError())
 			})
 			t.Run("104 variant", func(t *testing.T) {
 				run(t, `
@@ -330,7 +330,7 @@ func TestExecutionValidation(t *testing.T) {
 									barkVolume: kawVolume
 								}
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Invalid, withExpectNormalizationError())
+					FieldSelections(), Invalid, withExpectNormalizationError())
 			})
 			t.Run("103", func(t *testing.T) {
 				run(t, `	{
@@ -341,7 +341,7 @@ func TestExecutionValidation(t *testing.T) {
 							fragment interfaceFieldSelection on Pet {
 								name
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Valid)
+					FieldSelections(), Valid)
 			})
 			t.Run("104", func(t *testing.T) {
 				run(t, `
@@ -353,7 +353,7 @@ func TestExecutionValidation(t *testing.T) {
 							fragment definedOnImplementorsButNotInterface on Pet {
 								nickname
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Invalid, withExpectNormalizationError())
+					FieldSelections(), Invalid, withExpectNormalizationError())
 			})
 			t.Run("105", func(t *testing.T) {
 				run(t, `	fragment inDirectFieldSelectionOnUnion on CatOrDog {
@@ -365,7 +365,7 @@ func TestExecutionValidation(t *testing.T) {
 	    							name
 	  							}
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Valid)
+					FieldSelections(), Valid)
 			})
 			t.Run("105 variant", func(t *testing.T) {
 				run(t, `
@@ -378,7 +378,7 @@ func TestExecutionValidation(t *testing.T) {
 	    							name
 	  							}
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Valid)
+					FieldSelections(), Valid)
 			})
 			t.Run("105 variant", func(t *testing.T) {
 				run(t, `
@@ -391,7 +391,7 @@ func TestExecutionValidation(t *testing.T) {
 	    							x
 	  							}
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Invalid, withExpectNormalizationError())
+					FieldSelections(), Invalid, withExpectNormalizationError())
 			})
 			t.Run("106", func(t *testing.T) {
 				run(t, `
@@ -399,7 +399,7 @@ func TestExecutionValidation(t *testing.T) {
 								name
 								barkVolume
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Invalid, withExpectNormalizationError())
+					FieldSelections(), Invalid, withExpectNormalizationError())
 			})
 			t.Run("106 variant", func(t *testing.T) {
 				run(t, `
@@ -408,7 +408,7 @@ func TestExecutionValidation(t *testing.T) {
 									name
 								}
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Invalid, withExpectNormalizationError())
+					FieldSelections(), Invalid, withExpectNormalizationError())
 			})
 		})
 		t.Run("5.3.2 Field Selection Merging", func(t *testing.T) {
@@ -2024,7 +2024,7 @@ func TestExecutionValidation(t *testing.T) {
 				run(t, `	fragment scalarSelection on Dog {
 								barkVolume
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Valid)
+					FieldSelections(), Valid)
 			})
 			t.Run("114", func(t *testing.T) {
 				run(t, `
@@ -2033,32 +2033,32 @@ func TestExecutionValidation(t *testing.T) {
 									sinceWhen
 								}
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Invalid, withExpectNormalizationError())
+					FieldSelections(), Invalid, withExpectNormalizationError())
 			})
 			t.Run("116", func(t *testing.T) {
 				run(t, `	
 							query directQueryOnObjectWithoutSubFields {
 								human
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Invalid)
+					FieldSelections(), Invalid)
 				run(t, `	query directQueryOnInterfaceWithoutSubFields {
 								pet
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Invalid)
+					FieldSelections(), Invalid)
 				run(t, `	query directQueryOnUnionWithoutSubFields {
 								catOrDog
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Invalid)
+					FieldSelections(), Invalid)
 				run(t, `
 							mutation directQueryOnUnionWithoutSubFields {
 								catOrDog
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Invalid, withExpectNormalizationError())
+					FieldSelections(), Invalid, withExpectNormalizationError())
 				run(t, `
 							subscription directQueryOnUnionWithoutSubFields {
 								catOrDog
 							}`,
-					FieldSelections(OperationValidatorOptions{}), Invalid, withExpectNormalizationError())
+					FieldSelections(), Invalid, withExpectNormalizationError())
 			})
 		})
 	})
@@ -4673,59 +4673,21 @@ func BenchmarkValidation(b *testing.B) {
 	})
 }
 
-func TestWithApolloCompatibilityFlags(t *testing.T) {
+func TestFieldSelectionValidationErrors(t *testing.T) {
 	doc := unsafeparser.ParseGraphqlDocumentStringWithBaseSchema(`type Query { name: String! }`)
 	op := unsafeparser.ParseGraphqlDocumentString(`query { age }`)
 
-	t.Run("With propagated true flag", func(t *testing.T) {
-		operationValidator := DefaultOperationValidator(WithApolloCompatibilityFlags(
-			apollocompatibility.Flags{
-				ReplaceInvalidVarError:       false,
-				ReplaceUndefinedOpFieldError: true,
-			},
-		))
-		report := operationreport.Report{}
-		operationValidator.Validate(&op, &doc, &report)
-		assert.True(t, report.HasErrors())
-		require.Len(t, report.ExternalErrors, 1)
-		expectedError := operationreport.ExternalError{
-			ExtensionCode: errorcodes.GraphQLValidationFailed,
-			Message:       `Cannot query "age" on type "Query".`,
-		}
-		assert.Equal(t, expectedError.ExtensionCode, report.ExternalErrors[0].ExtensionCode)
-		assert.Equal(t, expectedError.Message, report.ExternalErrors[0].Message)
-	})
-	t.Run("With propagated false flag", func(t *testing.T) {
-		operationValidator := DefaultOperationValidator(WithApolloCompatibilityFlags(
-			apollocompatibility.Flags{
-				ReplaceInvalidVarError:       false,
-				ReplaceUndefinedOpFieldError: false,
-			},
-		))
-		report := operationreport.Report{}
-		operationValidator.Validate(&op, &doc, &report)
-		assert.True(t, report.HasErrors())
-		require.Len(t, report.ExternalErrors, 1)
-		expectedError := operationreport.ExternalError{
-			Message: `field: age not defined on type: Query`,
-		}
-		assert.Equal(t, expectedError.Message, report.ExternalErrors[0].Message)
-		assert.Equal(t, "", report.ExternalErrors[0].ExtensionCode)
-		assert.Equal(t, 0, report.ExternalErrors[0].StatusCode)
-	})
-	t.Run("Without propagated false flag", func(t *testing.T) {
-		operationValidator := DefaultOperationValidator()
-		report := operationreport.Report{}
-		operationValidator.Validate(&op, &doc, &report)
-		assert.True(t, report.HasErrors())
-		require.Len(t, report.ExternalErrors, 1)
-		expectedError := operationreport.ExternalError{
-			Message: `field: age not defined on type: Query`,
-		}
-		assert.Equal(t, expectedError.Message, report.ExternalErrors[0].Message)
-		assert.Equal(t, "", report.ExternalErrors[0].ExtensionCode)
-		assert.Equal(t, 0, report.ExternalErrors[0].StatusCode)
-	})
+	report := operationreport.Report{}
+	DefaultOperationValidator().Validate(&op, &doc, &report)
+	require.True(t, report.HasErrors())
+	require.Len(t, report.ExternalErrors, 1)
+	validationErr := report.ExternalErrors[0]
+	assert.Equal(t, errorcodes.GraphQLValidationFailed, validationErr.ExtensionCode)
+	assert.Equal(t, http.StatusBadRequest, validationErr.StatusCode)
+	assert.Equal(t, `Cannot query field "age" on type "Query".`, validationErr.Message)
+	require.Len(t, validationErr.Locations, 1)
+	assert.Equal(t, uint32(1), validationErr.Locations[0].Line)
+	assert.Equal(t, uint32(9), validationErr.Locations[0].Column)
 }
 
 var testDefinition = `
diff --git a/tmp/agent-patch-flux-pr-1169.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/astvalidation/reference/testsgo/harness_test.go b/app/v2/pkg/astvalidation/reference/testsgo/harness_test.go
index e0ae258..a79b350 100644
--- a/tmp/agent-patch-flux-pr-1169.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/astvalidation/reference/testsgo/harness_test.go
+++ b/app/v2/pkg/astvalidation/reference/testsgo/harness_test.go
@@ -63,7 +63,7 @@ const (
 
 var rulesMap = map[string][]astvalidation.Rule{
 	ExecutableDefinitionsRule:                 {astvalidation.DocumentContainsExecutableOperation()},
-	FieldsOnCorrectTypeRule:                   {astvalidation.FieldSelections(astvalidation.OperationValidatorOptions{})},
+	FieldsOnCorrectTypeRule:                   {astvalidation.FieldSelections()},
 	KnownArgumentNamesRule:                    {astvalidation.KnownArguments()},
 	KnownArgumentNamesOnDirectivesRule:        {},
 	KnownDirectivesRule:                       {astvalidation.DirectivesAreDefined()},
diff --git a/tmp/agent-patch-flux-pr-1169.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/astvisitor/visitor.go b/app/v2/pkg/astvisitor/visitor.go
index b256dab..21cf8f5 100644
--- a/tmp/agent-patch-flux-pr-1169.1-of-1.2026-02-28__13-38-10__gpt-5-1-codex-mini/app/v2/pkg/astvisitor/visitor.go
+++ b/app/v2/pkg/astvisitor/visitor.go
@@ -3,9 +3,11 @@ package astvisitor
 import (
 	"bytes"
 	"fmt"
+	"net/http"
 	"sync"
 
 	"github.com/wundergraph/graphql-go-tools/v2/pkg/ast"
+	"github.com/wundergraph/graphql-go-tools/v2/pkg/errorcodes"
 	"github.com/wundergraph/graphql-go-tools/v2/pkg/lexer/literal"
 	"github.com/wundergraph/graphql-go-tools/v2/pkg/operationreport"
 )
@@ -3921,6 +3923,12 @@ func (w *Walker) HandleInternalErr(err error) bool {
 func (w *Walker) StopWithExternalErr(err operationreport.ExternalError) {
 	w.stop = true
 	err.Path = w.Path
+	if err.ExtensionCode == "" {
+		err.ExtensionCode = errorcodes.GraphQLValidationFailed
+	}
+	if err.StatusCode == 0 {
+		err.StatusCode = http.StatusBadRequest
+	}
 	w.Report.AddExternalError(err)
 }
 
diff --git a/tmp/agent-patch-flux-pr-1169.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 250918e..b5f4ac8 100644
--- a/tmp/agent-patch-flux-pr-1169.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
@@ -3,9 +3,7 @@ package operationreport
 import (
 	"fmt"
 	"github.com/wundergraph/graphql-go-tools/v2/pkg/ast"
-	"github.com/wundergraph/graphql-go-tools/v2/pkg/errorcodes"
 	"github.com/wundergraph/graphql-go-tools/v2/pkg/lexer/position"
-	"net/http"
 )
 
 const (
@@ -54,14 +52,7 @@ func ErrDocumentDoesntContainExecutableOperation() (err ExternalError) {
 }
 
 func ErrFieldUndefinedOnType(fieldName, typeName ast.ByteSlice) (err ExternalError) {
-	err.Message = fmt.Sprintf("field: %s not defined on type: %s", fieldName, typeName)
-	return err
-}
-
-func ErrApolloCompatibleFieldUndefinedOnType(fieldName, typeName ast.ByteSlice) (err ExternalError) {
-	err.Message = fmt.Sprintf(`Cannot query "%s" on type "%s".`, fieldName, typeName)
-	err.ExtensionCode = errorcodes.GraphQLValidationFailed
-	err.StatusCode = http.StatusBadRequest
+	err.Message = fmt.Sprintf("Cannot query field %q on type %q.", fieldName, typeName)
 	return err
 }
 
@@ -141,8 +132,7 @@ func ErrSubscriptionMustOnlyHaveOneRootSelection(subscriptionName ast.ByteSlice)
 }
 
 func ErrFieldSelectionOnUnion(fieldName, unionName ast.ByteSlice) (err ExternalError) {
-
-	err.Message = fmt.Sprintf("cannot select field: %s on union: %s", fieldName, unionName)
+	err.Message = fmt.Sprintf("Cannot query field %q on type %q.", fieldName, unionName)
 	return err
 }
 
@@ -167,12 +157,12 @@ func ErrDifferingFieldsOnPotentiallySameType(objectName ast.ByteSlice) (err Exte
 }
 
 func ErrFieldSelectionOnScalar(fieldName, scalarTypeName ast.ByteSlice) (err ExternalError) {
-	err.Message = fmt.Sprintf("cannot select field: %s on scalar %s", fieldName, scalarTypeName)
+	err.Message = fmt.Sprintf("Field %q must not have a selection since type %q has no subfields.", fieldName, scalarTypeName)
 	return err
 }
 
 func ErrMissingFieldSelectionOnNonScalar(fieldName, enclosingTypeName ast.ByteSlice) (err ExternalError) {
-	err.Message = fmt.Sprintf("non scalar field: %s on type: %s must have selections", fieldName, enclosingTypeName)
+	err.Message = fmt.Sprintf("Field %q of type %q must have a selection of subfields.", fieldName, enclosingTypeName)
 	return err
 }