Skip to content

fix(ci): branch-cleanup workflow job has no timeout-minutes — the one runnable job that regressed #61's cap rule #1184

Closed

Description

@dezren39

Problem

.github/workflows/branch-cleanup.yml's only job (cleanup) has no timeout-minutes — it is the one runnable job in the repo that regressed the rule closed by #61 ("CI: add timeout-minutes caps to every job in every workflow", closed 2026-10-19).

Evidence (verified this run, main 775632b96a)

  • grep -L timeout-minutes .github/workflows/*.yml matches exactly two files: agents.yml (a thin reusable-workflow caller — caller jobs cannot take timeout-minutes; the callee owns its caps) and branch-cleanup.yml (a regular runs-on: ubuntu-latest job with steps). The other 27 workflow files all carry at least one cap.
  • branch-cleanup.yml was added 2026-10-27 in 680d6af57c ("ci: add stale-branch cleanup workflow") — eight days after CI: add timeout-minutes caps to every job in every workflow #61 closed, so the new workflow never got the cap the repo had just standardized.
  • The job is exactly the kind that can hang: actions/checkout with fetch-depth: 0, a full git fetch --prune of every branch ref, two gh pr list --limit 1000 calls, a per-branch git log/git merge-base loop over all remote branches, and up to 50 git push origin --delete calls. With no cap, a stalled fetch/API/push runs to GitHub's 360-minute default instead of failing in minutes.
  • Precedent values in sibling scheduled housekeeping workflows: stats.yml 15, jules-daily-upstream-sync.yml 30, notify-discord.yml 10, repo-sweeper.yml 90.

Why it matters

A daily scheduled job (cron 17 14 * * *) that can silently burn a 6-hour runner slot on a network stall, delaying its own next runs and hiding a real failure (auth expiry, API stall) behind a timeout nobody chose. #61 already decided this repo's policy; this is the one job that slipped past it.

Acceptance criteria

  • cleanup job in .github/workflows/branch-cleanup.yml carries an explicit timeout-minutes (suggested 30, matching jules-daily-upstream-sync.yml; justify any other value in the PR).
  • No other behavior change to the workflow (triggers, permissions, dry-run latch, deletion logic untouched).
  • The PR notes that agents.yml was checked and is exempt-by-construction (reusable-workflow caller), so the repo is back to "every runnable job capped" per CI: add timeout-minutes caps to every job in every workflow #61.

Activity

  1. added
    kind/ciCI/CD pipelines, workflows, and build automation
    task/small-fixQueue packet kind: bounded fix with reproduction and targeted tests
    source/creatorFiled by the new-issue-creator job
    priority/lowNice to have; do when convenient
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 1, 2026
  2. developing-today commented on Nov 1, 2026

    @developing-today
  3. added
    area/ciCI, workflows, and build infrastructure
    effort/xsTrivial: expected under 30 minutes of work
    work/self-assignedAn agent grabbed this item directly, outside the queue
    task/small-fixQueue packet kind: bounded fix with reproduction and targeted tests
    and removed
    task/small-fixQueue packet kind: bounded fix with reproduction and targeted tests
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 1, 2026
  4. dezren39 commented on Nov 1, 2026

    @dezren39
    Author

    🤖 Agent note · filed

    • Agent: new-issue-creator-opencode
    • Session / ID: new-issue-creator-opencode cron run 2026-11-01 03:35 CST
    • Found via: filed this run — swept .github/workflows/*.yml on main 775632b96a for jobs missing timeout-minutes after CI: add timeout-minutes caps to every job in every workflow #61 closed that rule on 2026-10-19; branch-cleanup.yml (added 2026-10-27, 680d6af57c) is the only runnable job without a cap (agents.yml is a reusable-workflow caller and cannot take one).
    • Task: Filed this issue, and — genuinely trivial (one YAML line, low risk) — self-assigned it under lifecycle protocol §4 in the same run: branch creator/1184-branch-cleanup-timeout, add timeout-minutes: 30 to the cleanup job, PR, merge when verified.
    • Expectation: effort xs; done when the cap is on main via a merged PR and this issue closes.
    • Links: evidence in this issue's body; sibling precedents jules-daily-upstream-sync.yml (30), stats.yml (15)
  5. added a commit that references this issue on Nov 1, 2026
  6. dezren39 commented on Nov 1, 2026

    @dezren39
    Author

    🤖 Agent note · done

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

    area/ciCI, workflows, and build infrastructureeffort/xsTrivial: expected under 30 minutes of workkind/ciCI/CD pipelines, workflows, and build automationpriority/lowNice to have; do when convenientsource/creatorFiled by the new-issue-creator jobstatus:donetask/small-fixQueue packet kind: bounded fix with reproduction and targeted tests

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions