Failure Details
Failed Jobs and Errors
| Job |
Conclusion |
| Per-Class Coverage Gate → Enforce Per-Class Coverage Gate |
❌ failure |
| allBuildAndTestSuccessful → Verify all jobs passed |
❌ failure (depends on above) |
| All other buildAndTest jobs (Java 11/17/21/25, jcstress) |
✅ success |
Coverage regression reported by the gate:
| Class |
Line |
Branch |
Method |
| graphql.execution.instrumentation.dataloader.ExhaustedDataLoaderDispatchStrategy |
-1.2% 🔴 |
-7.7% 🔴 |
±0.0% |
Specifically the dispatchImpl method:
- Line: 95.0% (baseline: 100.0%, delta: -5.0%)
- Branch: 75.0% (baseline: 100.0%, delta: -25.0%)
Root Cause
This failure is not caused by PR #4326, which only modifies .github/dependabot.yml (Dependabot schedule: weekly → monthly). No Java source code was changed.
The coverage regression in ExhaustedDataLoaderDispatchStrategy.dispatchImpl is a flaky/intermittent failure. The method uses a CAS (Compare-And-Swap) based loop with multiple concurrent code paths:
private void dispatchImpl(CallStack callStack) {
while (true) {
int oldState = callStack.getState();
if (!CallStack.getDataLoaderToDispatch(oldState)) { // branch: may/may-not be hit
int newState = CallStack.setCurrentlyDispatching(oldState, false);
if (callStack.tryUpdateState(oldState, newState)) { // CAS: may fail and retry
return;
}
}
// ...
if (callStack.tryUpdateState(oldState, newState)) { // CAS: retry branch may/may-not trigger
break;
}
}
// ...
}
The branch miss (25% = 2/8 branches) corresponds to CAS-retry paths that are only hit under specific concurrent timing conditions. The baseline recorded 100% coverage when these paths happened to be exercised, but they are not reliably exercised in every test run.
Baseline confirms 100% was the recorded expectation:
- dispatchImpl baseline: Line {covered: 20, missed: 0}, Branch {covered: 8, missed: 0}
Recommended Fix
- Immediate: Re-run the CI workflow for PR Change Dependabot update schedule from weekly to monthly #4326 — the coverage failure is unrelated to the PR's changes and will likely pass on a re-run
- Long-term: Update test-baseline.json to reflect a more realistic/stable coverage level for ExhaustedDataLoaderDispatchStrategy.dispatchImpl, or add a dedicated concurrency test that reliably exercises all CAS-retry branches in dispatchImpl (the while(true) loop's retry path when tryUpdateState returns false).
- File: src/main/java/graphql/execution/instrumentation/dataloader/ExhaustedDataLoaderDispatchStrategy.java
- Method: dispatchImpl (line ~239)
- Test: src/test/groovy/graphql/execution/instrumentation/dataloader/
Generated by CI Failure Doctor · ◷
To install this agentic workflow, run
gh aw add githubnext/agentics/workflows/ci-doctor.md@ee50a3b7d1d3eb4a8c409ac9409fd61c9a66b0f5
Failure Details
Failed Jobs and Errors
Coverage regression reported by the gate:
Specifically the dispatchImpl method:
Root Cause
This failure is not caused by PR #4326, which only modifies .github/dependabot.yml (Dependabot schedule: weekly → monthly). No Java source code was changed.
The coverage regression in ExhaustedDataLoaderDispatchStrategy.dispatchImpl is a flaky/intermittent failure. The method uses a CAS (Compare-And-Swap) based loop with multiple concurrent code paths:
The branch miss (25% = 2/8 branches) corresponds to CAS-retry paths that are only hit under specific concurrent timing conditions. The baseline recorded 100% coverage when these paths happened to be exercised, but they are not reliably exercised in every test run.
Baseline confirms 100% was the recorded expectation:
Recommended Fix