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
-
Add a test that exercises the dfeInUse=true interface path in findMethodOnPublicInterfaces. This requires a test class that:
- Is package-private (non-public class)
- Implements a public interface that declares a method accepting DataFetchingEnvironment
- Is fetched using PropertyDataFetcher
Example: Create a public interface in src/test/groovy/graphql/schema/somepackage/ with a method String getData(DataFetchingEnvironment env), then a package-private implementing class, and add a test fetching data from it.
-
Alternatively, if the dfeInUse branch inside findMethodOnPublicInterfaces is intentional but unreachable in practice (interfaces rarely declare methods taking DataFetchingEnvironment), 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.json to accept lower coverage — the uncovered code path represents a real gap that could contain latent bugs.
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
Failed Jobs and Errors
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 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):
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
Add a test that exercises the dfeInUse=true interface path in findMethodOnPublicInterfaces. This requires a test class that:
Example: Create a public interface in src/test/groovy/graphql/schema/somepackage/ with a method String getData(DataFetchingEnvironment env), then a package-private implementing class, and add a test fetching data from it.
Alternatively, if the dfeInUse branch inside findMethodOnPublicInterfaces is intentional but unreachable in practice (interfaces rarely declare methods taking DataFetchingEnvironment), 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.json to accept lower coverage — the uncovered code path represents a real gap that could contain latent bugs.