Skip to content

TIMEOUT001 — missing-timeout

Severity: warning · Category: Timeouts · Autofix: yes

What it checks

Flags a job with no timeout-minutes set.

Why it matters

Without an explicit timeout, a job inherits GitHub's default cap of 360 minutes (6 hours). A hung step — a test waiting on a prompt that will never come, a deadlocked process, a network call retrying forever — occupies a runner and burns billed minutes for up to six hours before GitHub finally kills it. A tight timeout-minutes turns "stuck for hours" into "fails fast and loudly."

Examples

Flagged:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - run: npm test

Fixed:

jobs:
  test:
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - run: npm test

Set it a little above the slowest normal run, not the theoretical maximum — the point is to catch a hang, not to accommodate one.

Suppressing

The finding is reported on the job's declaration line:

  test: # vlotpipe: ignore[TIMEOUT001]
    runs-on: ubuntu-latest

Rarely worth suppressing — setting an explicit timeout is close to free and the failure mode it prevents (silently burning runner-hours) is expensive.

Autofix

vlotpipe scan --fix (or check --fix) inserts timeout-minutes: 30 — a modest, explicit placeholder, not a guess at what your job actually needs. Treat it as a starting point to tune, not a final answer.

Both the inserted value and whether --fix touches this code at all are configurable:

# .vlotpipe.yml
rules:
  TIMEOUT001:
    fix_default: 15   # override the inserted value (default: 30)
    fix: false         # or skip the autofix entirely — still fires and reports as usual

fix_default is independent of AZR001's own — the two can differ.