Skip to content

Strix run ended "cancelled" at 6h with no verdict: 909 provider attempts, 92% on one route, 0 exhaustion events, request identity absent from evidence #2000

Description

@claude

What happened

strix on .github#1187@541cadd1 ran from 15:19:48Z to 21:20:05Z and was cancelled at exactly 6 h 00 m 17 s — GitHub Actions' hard per-job ceiling, not any policy timeout. The required check is now cancelled, which is not a verdict at all: no findings, no gate decision, and a required context that branch protection cannot interpret.

Job 101503665803; every step succeeded through Prepare Strix model input file, and Run Strix (quick) is the cancelled one. Evidence artifact strix-reports (id 9997372950) uploaded successfully, so the whole run is inspectable.

The run never had a termination condition

From contextual-orchestrator-sidecar.stderr.log (2,691 lines, 15:25:29Z → 21:19:46Z):

event count
provider_attempt (starts) 909
provider_attempt_failed 603
error_type=TimeoutError 541
error_type=HTTPError 62
request_failed status=500 code=internal_error 536
provider_exhausted 0
circuit_failure 55
circuit_opened 3
circuit_cleared 43

The final log line is a new provider_attempt at 21:19:46, 19 seconds before the platform killed the job. Nothing in the run was converging; it was stopped from outside.

92% of all attempts went to one route. Attempts per agent_id:

agent_id attempts
nvidia_nim_deepseek_ai_deepseek_v4_flash_0731 837
nvidia_nim_sub_deepseek_ai_deepseek_v4_pro_0813 55
nvidia_nim_deepseek_ai_deepseek_v4_pro_0813 4
every other agent (13 of them) 1 each

The 13 single-attempt rows are the preflight probes. After preflight, the request path re-selected one already-failing route 837 times over six hours.

This is not in-call retry: attempt= is 1/1 on 904 of 909 attempts (the other five are one 1/32/3 sequence). The per-call retry budget is 1. The repetition comes from the caller re-selecting the same route after each failure, and provider_exhausted never firing once in 837 consecutive failures on it.

Sustained, not a tail-end artifact — attempts per hour: 15:00 51 (partial hour), 16:00 258, 17:00 196, 18:00 204, 19:00 146, 20:00 41, 21:00 13.

The circuit breaker did not keep the dead route out

55 circuit_failure produced only 3 circuit_opened, against 43 circuit_cleared. An earlier run on this same pool logged circuit_opened … threshold=3 reset_seconds=30.0. A 30-second reset against a failure cycle whose dominant mode is a ~90-second socket idle timeout means the breaker re-admits the same route roughly every cycle, so it records failures without ever excluding the route for a meaningful interval. I am reporting the observed counts and that outcome; I have not read the selection code closely enough to assert which specific branch decides re-admission.

Why this is not the same issue as #1915

#1915 tracks the free pool having no provider-family diversity, and this run reproduces that again — third independent confirmation today:

"candidate_count": 24, "ready_count": 5, "target_ready": 8

with all five ready routes on nvidia_nim / nvidia_nim_sub, provider_discovery_failed provider=bytez code=http_status_500, and both OpenRouter free routes deferred.

But the two are separable. Restoring provider diversity would change which routes get hammered, not the fact that a degraded pool produces an unbounded retry loop. An upstream-wide outage with a perfectly diverse pool yields the same six-hour burn. Conversely, a bounded exhaustion condition would turn this run into a fail-closed verdict in minutes regardless of pool composition.

Consequences already observable

  1. cancelled required checks. Sweep pre-#1669 PRs stuck with a wrongly-cancelled current-head Strix/OpenCode/Noema check #1756 is already sweeping PRs stuck behind wrongly-cancelled Strix/OpenCode/Noema checks. This is a live production path that creates them.
  2. Runner occupancy. Measured 2026-09-06T18:1x on this repository: status=in_progress = 18 runs, 14 of them Strix Security Scan, aged 97–381 minutes, against status=queued = 150 with the oldest waiting 39 minutes. If each stuck scan runs to the 6-hour ceiling, that is a large fraction of the runner pool held by runs that will produce no verdict. Related but distinct from ops: three required workflows each boot a runner for the same "Detect changed scope" job #1976.

What this issue is not asking for

Not a wall-clock timeout on the model path. docs/product-goal-directive.md §8 accepts that central OpenCode/Strix/Noema may take more than two hours per model, and #1889/#1890/#1892 each added a 900-second cap on genuine multi-hour-hang evidence and were all reverted (#1891, #1895). Elapsed inference time must not become a model-failure verdict, and nothing here argues otherwise: a single 90-second timeout is a normal event, and 837 of them is not a slow model.

The lever is attempt/route exhaustion, which is orthogonal to elapsed time:

  • provider_exhausted firing after a bounded number of consecutive failures on the same agent_id, so the selector stops re-picking it.
  • A breaker reset window that is not shorter than the failure cycle it is meant to damp.
  • A terminal condition when every ready route has been exhausted, so the gate fails closed with evidence instead of being killed with none.

All three bound attempts, not duration. A route that is genuinely slow but progressing is untouched by any of them.

Reproduction

  • Artifact strix-reports id 9997372950 on run 34036172117 (contextual-orchestrator-preflight.json, contextual-orchestrator-sidecar.stderr.log, gate-console.log).
  • Same-day second sample with the same pool shape: noema-review on docs: confirm review pipeline already routes through orchestrator/free, not NIM directly #1884@396b4dee, artifact noema-sidecar-evidence id 9994541963 — ready_count: 6, all nvidia_nim/nvidia_nim_sub, ends request_failed status=502 code=provider_connection_error.

Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingpriority: highHigh-priority or P1 work

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions