Skip to content

Add explicit timeouts to workflow jobs with proportional limits #241

Closed

Description

@hyperpolymath

Failure type

echidna has many workflow jobs without explicit timeout-minutes.

Evidence

On 2026-06-06, echidna has 44 open Hypatia alerts under hypatia/workflow_audit/missing_timeout_minutes.

Local workflow scan shows many jobs under .github/workflows/ with no explicit timeout, while a few already declare one, e.g. hypatia-scan.yml, codeql.yml, and part of container-ci.yml.

Expected behavior

This should be a workflow-security/control hygiene bucket, suitable for mechanical PRs after canary validation.

Route

Suggested route: rhodibot or robot-repo-automaton PR-only. Use a conservative timeout matrix based on workflow class:

  • quick lint/governance: 5-10 minutes;
  • build/test: 20-60 minutes;
  • formal/prover/live jobs: explicit longer values with rationale.

Safety notes

Do not blindly set every job to 10 minutes. Some echidna jobs are formal verification, live provers, container builds, or fuzzing and need proportional limits.

Acceptance criteria

  • Every workflow job has explicit timeout-minutes.
  • Long-running jobs document why their timeout is high.
  • Hypatia stops reporting the 44 timeout findings after scan rerun.
  • The fix is delivered as a PR, not direct mass mutation.

Activity

  1. hyperpolymath commented on Jun 15, 2026

    @hyperpolymath
    OwnerAuthor

    Resolved by #247 (merged).

    #247 added timeout-minutes to every steps-based (runs-on) job across all 18 echidna workflows that lacked one — 37 jobs, with proportional values per the matrix this issue asked for (quick lint/governance 10–15; build/test 20–30; idris2/chapel 30; live-provers/dogfood-proofs 20; container builds 90). Delivered as a reviewed PR, not a mass mutation.

    Residual Hypatia missing_timeout_minutes hits, if any, are caller-workflow false-positives: timeout-minutes is invalid on reusable-workflow (uses:) jobs (governance, rust-ci, scorecard, secret-scanner, mirror), so those can't/shouldn't be "fixed." A re-scan should drop the 44 toward just those caller cases.

    Closing as completed.


    Generated by Claude Code

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions