Skip to content

agent::rung_c_sigkill_... hangs on Linux runners ~half the time, costing 30min and cancelling the job #160

Description

@kjgbot

Not the rare flake I first called it. It has now hit roughly half of the runs that reach it, and each hit burns the full 30-minute job budget and cancels every later step — so the SDK suite never runs at all on those.

Signature

06:17:00  test agent::rung_c_sigkill_boundaries_resume_only_unfinished_steps_via_real_cli
            has been running for over 60 seconds
06:42:29  ##[error]The operation was canceled.

Test kernel reaches 30m15s / 30m16s and dies. When healthy, the whole crash_resume binary — all 34 tests including this one — finishes in 38 seconds.

Tally of runs that reached the test

run branch outcome
33843408251 feat/tick-runner-0903 (#157) passed the test (38s binary)
33843430434 feat/v2-surface-package (#134) passed the test (38s binary)
33843397637 feat/v2-gate-contract (#139) hung, cancelled 30m15s
33844679490 (1st) fix/155-crash-skips-backoff (#158) hung, cancelled 30m16s
33844679490 (rerun) same commit passed, whole job 6m46s
33847657688 ci/analyzer-skip-0904 (#159) Test kernel in progress 16+ min at time of writing

Same commit both hung and passed (#158), which rules out any particular branch and rules out my own suspicion that the kernel-touching PRs were at fault — I asserted that on #139 and have corrected it there.

Not reproducible locally

macOS, this repo, on the #158 branch:

  • crash_resume full binary: PASS in 37–47s, 34/34, at default parallelism, --test-threads=4, and --test-threads=2;
  • the test alone: 3/3 PASS in ~1s.

So it is specific to the Linux runner, not to thread count and not to the test in isolation.

Why it matters more than a flaky test normally would

  1. It is not a failure, it is a hang. The job burns its whole budget, then cancels — 30 minutes per hit.
  2. Cancellation skips Install SDK dependencies and everything after, so a hit means the SDK suite does not run at all. A PR can look "checked" while two thirds of the gate never executed.
  3. At roughly 50% it will hit most PRs on first try, so the practical cost is a re-run cycle on nearly everything.

This was invisible before #153, because the kernel suite never ran in CI.

Suggested direction, not a fix

The test drives kill/resume boundaries against a real CLI. A resume path waiting on something that never arrives — a process that does not reap, a socket read with no deadline, a lease that is never released — fits the evidence. Worth adding a hard per-test timeout so the failure is a fast red with a backtrace instead of a 30-minute cancellation, independent of the root cause; the diagnosis is much easier from a panic than from a killed job.

Found while landing #154/#158/#159. Filed separately because it blocks every PR and is unrelated to any of them.

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions