Failure Details
- Run: 22818128030
- Commit:
48d75c0785bbbab747ea7ff6468f396cbe289d4d
- PR: #4287 — "Fix findPubliclyAccessibleMethod to search interfaces for accessible methods"
- Branch:
claude/fix-graphql-java-4278-v6Z3y
Failed Jobs and Errors
| Job |
Step |
Result |
| Per-Class Coverage Gate |
Enforce Per-Class Coverage Gate |
❌ failure |
| allBuildAndTestSuccessful |
Verify all jobs passed |
❌ failure (downstream of above) |
All other jobs (buildAndTest on java11/17/21, jcstress, javadoc) passed successfully.
Root Cause
PR #4287 adds a new private method findMethodOnPublicInterfaces in src/main/java/graphql/schema/PropertyFetchingImpl.java (+39 lines). The method introduces a branch for dfeInUse=true that searches for an interface method accepting a DataFetchingEnvironment parameter:
// In findMethodOnPublicInterfaces:
if (dfeInUse) {
try {
Method method = iface.getMethod(methodName, singleArgumentType);
if (isSuitablePublicMethod(method, allowStaticMethods)) { // ← never reached
METHOD_CACHE.putIfAbsent(cacheKey, new CachedMethod(method)); // ← never reached
return method; // ← never reached
}
} catch (NoSuchMethodException e) {
// ok try the next approach
}
}
In all new tests (Map.Entry, package-private interface chains, diamond inheritance), the called interface methods (getKey(), getValue(), getBaseValue()) have no DataFetchingEnvironment overload on their interfaces. When dfeInUse=true, the iface.getMethod(methodName, singleArgumentType) call always throws NoSuchMethodException, meaning the three lines inside the if (isSuitablePublicMethod(...)) block are never executed.
Coverage Regression Estimate for graphql.schema.PropertyFetchingImpl
Baseline (from test-baseline.json):
- Line:
144/164 = 87.80%
- Branch:
55/68 = 80.88%
- Method:
31/31 = 100.00%
After PR: The new method adds ~15 new branches. The dfeInUse=true success path (finding a DFE-accepting method on an interface) introduces at least 2–3 uncovered branches and 3 uncovered lines, causing the line and/or branch coverage percentage to drop below the baseline threshold (>0.05% regression triggers failure).
Recommended Fix
Generated by CI Failure Doctor
To install this workflow, run gh aw add githubnext/agentics/workflows/ci-doctor.md@ee50a3b7d1d3eb4a8c409ac9409fd61c9a66b0f5. View source at https://github.com/githubnext/agentics/tree/ee50a3b7d1d3eb4a8c409ac9409fd61c9a66b0f5/workflows/ci-doctor.md.
Failure Details
48d75c0785bbbab747ea7ff6468f396cbe289d4dclaude/fix-graphql-java-4278-v6Z3yFailed Jobs and Errors
All other jobs (buildAndTest on java11/17/21, jcstress, javadoc) passed successfully.
Root Cause
PR #4287 adds a new private method
findMethodOnPublicInterfacesinsrc/main/java/graphql/schema/PropertyFetchingImpl.java(+39 lines). The method introduces a branch fordfeInUse=truethat searches for an interface method accepting aDataFetchingEnvironmentparameter:In all new tests (
Map.Entry, package-private interface chains, diamond inheritance), the called interface methods (getKey(),getValue(),getBaseValue()) have no DataFetchingEnvironment overload on their interfaces. WhendfeInUse=true, theiface.getMethod(methodName, singleArgumentType)call always throwsNoSuchMethodException, meaning the three lines inside theif (isSuitablePublicMethod(...))block are never executed.Coverage Regression Estimate for
graphql.schema.PropertyFetchingImplBaseline (from
test-baseline.json):144/164 = 87.80%55/68 = 80.88%31/31 = 100.00%After PR: The new method adds ~15 new branches. The
dfeInUse=truesuccess path (finding a DFE-accepting method on an interface) introduces at least 2–3 uncovered branches and 3 uncovered lines, causing the line and/or branch coverage percentage to drop below the baseline threshold (>0.05% regression triggers failure).Recommended Fix
Add a test that exercises the
dfeInUse=trueinterface path infindMethodOnPublicInterfaces. This requires a test class that:DataFetchingEnvironmentPropertyDataFetcherExample: Create a public interface in
src/test/groovy/graphql/schema/somepackage/with a methodString getData(DataFetchingEnvironment env), then a package-private implementing class, and add a test fetchingdatafrom it.Alternatively, if the
dfeInUsebranch insidefindMethodOnPublicInterfacesis intentional but unreachable in practice (interfaces rarely declare methods takingDataFetchingEnvironment), consider removing it to simplify the code and avoid the coverage gap. The non-DFE method lookup immediately follows and works for all practical cases.Do not simply update
test-baseline.jsonto accept lower coverage — the uncovered code path represents a real gap that could contain latent bugs.