You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[AW Top 10] 07 Investigate synchronized hangs in PR review workflows #66819
Several PR review persona workflows start at identical times and then time out or hang until the job cap.
Implementation scope
Identify the shared trigger or dependency, add timeout guards and missing-tool preflight checks, and fix the root cause so the reviewers finish within their budget.
Done when
The persona workflows complete within their configured timeouts on a pull request.
A hang produces a timeout with diagnostic output rather than running to the job cap.
Why now
The timeouts recur on pull request branches and the synchronized start times suggest a common cause; confidence is moderate because individual runs were not reproduced.
No corroborating AW discussion; evidence comes from the source issues.
Unchanged AW sources close only after this summary is completed. Newer source activity and not-planned retirement do not trigger source closure. Assigned summaries are frozen; unassign to allow reclustering.
changed the title [-][AW Top 10] 05 Investigate synchronized hangs in PR review workflows[/-][+][AW Top 10] 07 Investigate synchronized hangs in PR review workflows[/+]on Oct 9, 2026
.github/workflows/impeccable-skills-reviewer.md and .github/workflows/mattpocock-skills-reviewer.md both hardcode:
timeout-minutes: 15
on the engine execution step (compiled as the Execute GitHub Copilot CLI step, e.g. impeccable-skills-reviewer.lock.yml:1092 / mattpocock-skills-reviewer.lock.yml:1195). This is separate from the job-level timeout-minutes: 60.
Verified via gh run view <id> --log on runs 37502435413, 37523691712, 37535185512:
Each shows [detect-agent-errors] Detected step timeout: the engine execution step reached its 15-minute timeout-minutes budget and was terminated and categories=["agentic_engine_timeout"] — a hard kill at exactly 15 minutes, not an indefinite hang. numTurns≈87 at kill time, i.e. actively working (grep/skill lookups/diff review), not blocked on one call.
gh run list shows ~30–40% failure rate for both workflows, not 100% — consistent with timeout being diff/PR-size dependent.
Synchronization explained: both workflows trigger on the same pull_request: ready_for_review event and review the same diff, so a sufficiently large/complex PR times out both within seconds of each other — this produced the "synchronized start times" signal, but it's shared triggering + a too-tight shared budget, not a shared external dependency.
timeout-minutes: 15 has been unchanged since these files were created (git log -p), never recalibrated as skill-driven review flow (prefetch caching, deterministic skill selection, etc.) grew more turn-intensive over time.
Secondary, narrower symptom (#67292/#67299 only): those runs show fatal: unable to access 'https://github.com/github/gh-aw.git/': server certificate verification failed from git log/git show run inside the sandboxed CLI — expected firewall behavior (no direct git remote access from inside the sandbox), but the agent burned turns retrying instead of fast-failing, helping it hit the 15-min ceiling sooner. Contributing factor for those two runs only, not the general root cause.
Minimal fix
Raise timeout-minutes on the agent engine step in both .md files from 15 to 25–30 (job-level timeout-minutes: 60 stays as outer bound); gh aw compile/make recompile to regenerate the .lock.yml files.
Confirm the run-failure message template surfaces "timed out" explicitly (detect-agent-errors already emits agentic_engine_timeout) so future occurrences are self-diagnosing without a full log pull.
Low (2/10) — two one-line frontmatter edits + recompile; no Go/runtime code changes.
Risks
Raising the timeout increases worst-case latency/AI-credit spend per run for large PRs, bounded by the existing job-level 60-minute cap. Does not address why skill-driven reviews need this many turns — if turn counts keep growing this will need revisiting (e.g. diff-size capping, as previously proposed-but-superseded in #53619).
Validation
Bump timeout-minutes: 15 → 25 in both .md files, make recompile, confirm only the Execute GitHub Copilot CLI step timeout changes (job-level 60 unchanged).
Activity
[-][AW Top 10] 05 Investigate synchronized hangs in PR review workflows[/-][+][AW Top 10] 07 Investigate synchronized hangs in PR review workflows[/+]pelikhan commentedon Oct 10, 2026
RCA — Synchronized hangs/timeouts in PR review persona workflows
Status: Outstanding, actively reproducing (not fixed)
Scope note: Of the 7 clustered source issues, two patterns were found and they are not the same root cause:
30/30LLM-invocation-cap failure). A fresh Design Decision Gate failure I checked (run 38044878675, 2026-10-10) had itsagentjob succeed in 3 min; the failure was insafe_outputs, unrelated to hangs. Recommend dropping [aw-failures] [P1] Design Decision Gate hangs silently mid-tool-use in Claude Code CLI step #53619 from this cluster.Root cause (confidence 8/10)
.github/workflows/impeccable-skills-reviewer.mdand.github/workflows/mattpocock-skills-reviewer.mdboth hardcode:on the engine execution step (compiled as the
Execute GitHub Copilot CLIstep, e.g.impeccable-skills-reviewer.lock.yml:1092/mattpocock-skills-reviewer.lock.yml:1195). This is separate from the job-leveltimeout-minutes: 60.Verified via
gh run view <id> --logon runs 37502435413, 37523691712, 37535185512:[detect-agent-errors] Detected step timeout: the engine execution step reached its 15-minute timeout-minutes budget and was terminatedandcategories=["agentic_engine_timeout"]— a hard kill at exactly 15 minutes, not an indefinite hang. numTurns≈87 at kill time, i.e. actively working (grep/skill lookups/diff review), not blocked on one call.gh run listshows ~30–40% failure rate for both workflows, not 100% — consistent with timeout being diff/PR-size dependent.pull_request: ready_for_reviewevent and review the same diff, so a sufficiently large/complex PR times out both within seconds of each other — this produced the "synchronized start times" signal, but it's shared triggering + a too-tight shared budget, not a shared external dependency.timeout-minutes: 15has been unchanged since these files were created (git log -p), never recalibrated as skill-driven review flow (prefetch caching, deterministic skill selection, etc.) grew more turn-intensive over time.Secondary, narrower symptom (#67292/#67299 only): those runs show
fatal: unable to access 'https://github.com/github/gh-aw.git/': server certificate verification failedfromgit log/git showrun inside the sandboxed CLI — expected firewall behavior (no direct git remote access from inside the sandbox), but the agent burned turns retrying instead of fast-failing, helping it hit the 15-min ceiling sooner. Contributing factor for those two runs only, not the general root cause.Minimal fix
timeout-minuteson the agent engine step in both.mdfiles from15to25–30(job-leveltimeout-minutes: 60stays as outer bound);gh aw compile/make recompileto regenerate the.lock.ymlfiles.run-failuremessage template surfaces "timed out" explicitly (detect-agent-errors already emitsagentic_engine_timeout) so future occurrences are self-diagnosing without a full log pull.shared/pr-diff-data-fetch.mdtelling the agent not to run rawgit log/git showagainst the remote (local checkout only), to stop wasted turns on failing network git calls.Effort
Low (2/10) — two one-line frontmatter edits + recompile; no Go/runtime code changes.
Risks
Raising the timeout increases worst-case latency/AI-credit spend per run for large PRs, bounded by the existing job-level 60-minute cap. Does not address why skill-driven reviews need this many turns — if turn counts keep growing this will need revisiting (e.g. diff-size capping, as previously proposed-but-superseded in #53619).
Validation
timeout-minutes: 15→25in both.mdfiles,make recompile, confirm only theExecute GitHub Copilot CLIstep timeout changes (job-level 60 unchanged).agentjob concludes withoutagentic_engine_timeout.gh run view <new_run_id> --log | grep agentic_engine_timeout→ no match; numTurns completes under budget.fix: scope Impeccable reviewer to UI paths, bound review exploration
docs(skill): stop recommending timeout bump as the default timeout fix
fix: scope Impeccable reviewer to UI paths and bound review explorati…