Summary
Model requests through ANTHROPIC_BASE_URL (https://ai.eduly.com) intermittently hang on the first turn of a stage and return after ~27.6 minutes having done nothing. Six occurrences measured, across three repos and two model IDs.
This is not an ai-review defect. Three fixes were attempted inside the action and all three were falsified by measurement. Filing so it reaches whoever operates the gateway.
Fingerprint
{"turns":1,"costUsd":0,"numToolCalls":0,"durationMs":1654722,"dominantStage":"review"}
The stage log shows a clean init, then silence, then an error result with no body:
06:40:26 {"subtype":"init","model":"claude-sonnet-5"}
← 27m35s, zero output
07:08:01 {"subtype":"success","is_error":true,"duration_ms":1654722,
"num_turns":1,"total_cost_usd":0,"permission_denials_count":0}
The six observations
| Run |
Repo |
Stage |
duration_ms |
| 31317613715 |
github-actions |
context (haiku-4-5) |
1,647,262 |
| lagn A |
Lagn-App/lagn |
context + review + retry |
1,666,947 |
| lagn B |
Lagn-App/lagn |
context + review + retry |
1,666,947 |
| 31356469199 |
github-actions |
context (haiku-4-5) |
1,656,307 |
| 31360398002 |
github-actions |
context (haiku-4-5) |
1,658,923 |
| 31362834124 |
github-actions |
review (sonnet-5) |
1,654,722 |
Spread: 1.2%. A ceiling that tight across different repos, days, and model IDs is a configured timeout expiring, not variable slowness.
What has been ruled out
| Hypothesis |
Ruled out by |
| HTTP 529 / model overload |
No 529 appears in any log. The original attribution came from a grep matching the branch name perf/ai-qa-hotfix-529 |
--fallback-model would recover it |
Live during run 31317613715; stall happened anyway. A fallback triggers on an overloaded response — this gateway never answers |
| CLI per-request timeout × SDK retries (~10 min × 3) |
Run 31356469199 stalled 27m36s with API_TIMEOUT_MS=180000 (3 min). A 3-min timeout cannot produce a 27.6-min stall |
| Specific to the context stage |
Run 31362834124 stalled in the review stage with context skipped. The earlier pattern was selection bias — context was simply always the first stage |
| Specific to a model or model ID |
Observed on both claude-haiku-4-5 and claude-sonnet-5 |
| Specific to one repo |
Observed in EdulyCom/github-actions and Lagn-App/lagn |
Impact
- Six killed or wasted jobs, each burning ~28 min of runner time for zero output
- The lagn runs stalled on three stages serially — 83-minute jobs producing nothing
- Contributed to the 32 timeout kills measured across 682 consumer review jobs
What is already handled
ai-review fails closed: a stalled stage is continue-on-error, and Publish posts an explicit "inconclusive — re-run required" verdict rather than a false pass. Verified on run 31362834124 — Publish succeeded and the gate job was correctly skipped.
So this does not produce wrong verdicts. It wastes wall-clock and runner minutes, and it blocks CI until a re-run.
What would help from the gateway side
- What happens to a request that sits ~27.6 min and returns zero bytes — is there a proxy/LB idle timeout near 1,650,000 ms?
- Are these requests reaching the upstream API at all, or terminating at the gateway?
- Anything correlating with the trigger — concurrency, cold start, connection reuse?
Reproduction
Intermittent — roughly 6 occurrences in ~25 runs today. Not deterministic. Any ai-review run can hit it; the signature to grep for is ai-review-metrics with "turns":1 and "costUsd":0.
Summary
Model requests through
ANTHROPIC_BASE_URL(https://ai.eduly.com) intermittently hang on the first turn of a stage and return after ~27.6 minutes having done nothing. Six occurrences measured, across three repos and two model IDs.This is not an
ai-reviewdefect. Three fixes were attempted inside the action and all three were falsified by measurement. Filing so it reaches whoever operates the gateway.Fingerprint
{"turns":1,"costUsd":0,"numToolCalls":0,"durationMs":1654722,"dominantStage":"review"}The stage log shows a clean init, then silence, then an error result with no body:
The six observations
duration_msSpread: 1.2%. A ceiling that tight across different repos, days, and model IDs is a configured timeout expiring, not variable slowness.
What has been ruled out
perf/ai-qa-hotfix-529--fallback-modelwould recover itAPI_TIMEOUT_MS=180000(3 min). A 3-min timeout cannot produce a 27.6-min stallclaude-haiku-4-5andclaude-sonnet-5EdulyCom/github-actionsandLagn-App/lagnImpact
What is already handled
ai-reviewfails closed: a stalled stage iscontinue-on-error, and Publish posts an explicit "inconclusive — re-run required" verdict rather than a false pass. Verified on run 31362834124 — Publish succeeded and the gate job was correctly skipped.So this does not produce wrong verdicts. It wastes wall-clock and runner minutes, and it blocks CI until a re-run.
What would help from the gateway side
Reproduction
Intermittent — roughly 6 occurrences in ~25 runs today. Not deterministic. Any
ai-reviewrun can hit it; the signature to grep for isai-review-metricswith"turns":1and"costUsd":0.