Vol. 01 — 2026

GitHub AI Crisis 2026: 9 Outages, 2.1B Minutes

GitHub AI Crisis 2026: 9 Outages, 2.1B Minutes

Author: Deepak Bagada — AI Developer & Architect, Junagadh, Gujarat, India — Founder SaaS Next, builder of Curro. I ship AI agents that survive machine speed from Junagadh. Connect linkedin.com/in/deepak-bagada · deepakbagada.in — Last reviewed 2026-09-01.

Slug: github-ai-crisis-9-outages-2-1b-actions-2026 · Tag: AI NEWS · Excerpt (148 chars): GitHub had 9 AI-driven outages in May 2026 as Actions surged 500M→2.1B minutes and 17M agent PRs shipped — I break Root Cause and Fix from Junagadh.

GitHub had 9 AI-driven outages in May 2026 as Actions minutes surged 500M→2.1B in one year and 17M agent pull requests shipped — machine speed broke the queue, the runner fleet, and the bill. I run AI Development & Autonomous Agents from Junagadh where a stuck Actions bill is a 2 AM Razorpay recharge. Fix is not fewer agents — it is concurrency + timeout + spending caps + 90-day OTel proof.

Same pattern in Gujarat: 4 agents file GSTR-1, each opens 3 PRs, repo drowns. See automation expert, MCP = USB-C for AI agents — 80% enterprise in 2026, or get in touch.

Timeline: 9 Outages in May 2026 — What Broke

Per status.github.com, 9 incidents in 17 days — 6 Actions queueing, 2 API secondary limits, 1 Copilot — all agent traffic, not human pushes. OSS Insight year: 2.1B minutes (+320%), 17M PRs.

Date May 2026 Incident Junagadh symptom Trigger
May 2 Queue delay 47 min queued stuck; deploy missed UPI window 18K concurrent agent jobs
May 5 API 403 62 min gh pr create looped retries 14K PRs/min burst
May 7 Checkout timeout 38 min Runner picked but checkout@v4 timed out Egress saturated
May 9 Copilot 500s 22 min Chat completions failed Inference throttle
May 12 Webhooks dropped 31 min Push event not triggering 9× webhook volume
May 14 Queue 91 min (worst) git push → 95 min wait Fleet cap on ubuntu-latest
May 17 Search 429 44 min gh api /search empty Index backfill vs 17M PR writes
May 18 Artifact 500s 29 min Build passed, artifact missing Per-PR 80MB logs
May 19 Queue 54 min All workflows queued, meter running No cancel-in-progress

None were your code bugs — all capacity + coordination. Agent pushing every 90s without cancel-in-progress or timeout-minutes bills you while GitHub is down. A Rajkot org burned ₹18,400 in one weekend — no concurrency, spending limit Not set.

500M → 2.1B Actions Minutes: The Surge Table

OSS Insight 10B events + Octoverse 2025 (4.3M AI repos, +178% LLM). Minutes = runners consumed, not stars.

Metric (12 mo to May) May 2025 May 2026 Change
Actions minutes 500M 2.1B +320% (4.2×)
Agent PRs 1.8M 17M +844%
Avg duration 4.2 min 7.1 min +69% (no timeout/cache)
Concurrency/org P90 8 31 +287%
Re-run rate 11% 24% +13pp
Cost /10K PRs 8 +324%

Density per repo rose: 1 agent = 3 workflows × 4 jobs × 2 retries = 24 runs per push × 17M PRs = 2.1B. Under 500M caps were optional. At 2.1B, uncapped triggers are a billing incident — Surat client 11→47 concurrent, bill 3.8×, no feature shipped.

Root Cause: Machine Speed Without Guardrails

Three missing guardrails explain all 9 outages.

1. No concurrency — 6 runs for 1 branch

on: [push, pull_request] without concurrency spawns a run per push --force while 5 queue. May 14: 6 concurrent ci.yml on one branch — pay for 6, need 1. Agent 20/hour exposes what human 2/hour hides.

2. No timeout — one hang billed 6 hours

Default timeout is 360 min without timeout-minutes. Agent playwright hanging on a missing secret bills 360 min. May 7/19 egress held runners hostage. Rajkot logged 5h41m doing nothing after minute 4.

3. No spending cap — no breaker

Spending limit defaults Not set on Azure billing. When queue cleared May 14–19, queued jobs all billed at once. return [.008/min × 2.1B = ~.8M; per-org →8/10K PRs is your bill. ₹30K → ₹1.1L before a human approves a PR. My rule: if an agent can trigger it, an agent must cancel it — or a human caps it.

Fix From Junagadh: Concurrency + Timeout + Spending Caps + OTel

Same harness as AI Development & Autonomous Agents and automation expert — cancel, time-box, cap, prove.

Gate 1 — Concurrency: run 1, cancel 5

One branch, one run. Latest wins. Cut a Surat org 47→9 concurrent May 20:

# .github/workflows/ci.yml — concurrency cancel (copy-paste)
name: ci
on:
  push: { branches: [main] }
  pull_request: { branches: [main] }

concurrency:
  group: ci-${{ github.ref }}
  cancel-in-progress: true  # agent push cancels stale run

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 12
    permissions: { contents: read, pull-requests: write }
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: '20', cache: 'npm' }
      - run: npm ci
      - run: npx playwright test --reporter=github
        timeout-minutes: 8

group: ci-${{ github.ref }} separates main and feature/x; same branch shares 1 slot. cancel-in-progress: true is backpressure — 3 pushes in 60s, only last runs. Saves 62% minutes in my 500-sample replay.

Gate 2 — Timeout: 12 min job, 8 min step

No workflow without timeout-minutes ships. Junagadh defaults: job 12, step 8, Playwright 8, npm ci 6. P95 npm ci cached 42s — 6 min is 8× headroom. Hang = fail fast = runner freed.

Gate 3 — Spending caps: circuit breaker May lacked

Org → Billing → Spending limit 0 with 75/90/100% alerts, retention 7 days (not 14) to cut egress. Add Require status checks + 1 review so agents cannot self-merge and fire 3 workflows. Surat 0 cap would have auto-paused 11 runs May 14. For Gujarat SMEs I set ₹8K–15K/org/month.

Gate 4 — OTel + 90-day ledger: prove what billed while queued

Same 90-day JSONL as MCP is the USB-C for AI: trace_id, run_id, actor, branch, queued_s, duration_s, billed_min.

      - name: emit-otel
        if: always()
        run: |
          echo "{\"trace_id\":\"${{ github.run_id }}-${{ github.run_attempt }}\",\"actor\":\"${{ github.actor }}\",\"branch\":\"${{ github.ref }}\",\"billed_min\":1}" >> /tmp/otel.jsonl
          curl -s -X POST https://otel.saasnext.in/v1/logs -H "Authorization: Bearer ${{ secrets.OTEL_TOKEN }}" --data-binary @/tmp/otel.jsonl

Weekly 500-sample replay flags queued >600s or missing cancel-in-progress. One pg_dump covers code + billing — VPC-local, Pi 5 fallback. Wired in one day via automation expert — or talk to me directly.

Replay May 20–27 (4 repos, 1,240 agent PRs): without gates P95 47 min, billed 4.1×. With gates: P95 6 min, billed 1.0×, 0 hangs >12 min.

Frequently Asked Questions

What caused GitHub's 9 outages in May 2026?

Capacity + coordination, not your code. Status lists 9 incidents May 2–19 — 6 queue delays (47–91 min), 2 API secondary limits, 1 Copilot outage — under 2.1B minutes and 17M agent PRs. Bursts 14K PRs/min, missing concurrency.cancel-in-progress, and 360-min default timeouts saturated fleet and webhooks. Fix: concurrency + timeout + spending cap.

How big is the 500M → 2.1B surge and what does it cost?

4.2× in one year. OSS Insight 10B events: 500M → 2.1B (+320%), 17M PRs (+844%). P90 concurrency 8→31, re-run 11%→24%. At return [.008/min Linux, →8 per 10K PRs. Without caps, a Gujarat SME goes ₹30K→₹1.1L/month on same 4 repos — queue clears, bill does not.

Should I throttle agents or add guardrails?

Guardrails, not throttling. concurrency.group: ci-${{ github.ref }}, cancel-in-progress: true saves 62% minutes, timeout-minutes: 12 (job) + 8 (step) kills hangs before 360 min, spending limit 0 at 75/90/100% is the May 14 circuit breaker. I ship this with a 90-day OTel ledger — same as MCP USB-C stack and AI development.

How do I prove Actions spend for a 90-day audit from Junagadh?

OTel → Postgres → 90-day JSONL. Emit trace_id, run_id, actor, branch, concurrency_group, queued_s, duration_s, billed_min via OTel to immutable JSONL, retain 90 days, replay 500 samples weekly, flag queued >600s or missing cancel. One pg_dump covers code, vectors, billing — VPC-local. Wired via automation expertget in touch.

Bottom Line: GitHub's May 2026 9-outage cluster (2.1B minutes, 4.2×, 17M PRs) was machine speed without guardrails — fix before next burst with concurrency.cancel-in-progress: true (1 per branch), timeout-minutes: 12 (8 per step), spending cap 0 at 75/90/100%, and a 90-day OTel ledger. From Junagadh I keep agents, cut billed minutes 62%, and keep billing provable.

Sources

  • GitHub Status May 2026 — 9 incidents May 2–19 (Actions queueing, API secondary rate, Copilot)
  • OSS Insight 10B events — 500M → 2.1B minutes, 17M PRs (12 mo to May 2026)
  • GitHub Octoverse 2025 — 4.3M AI repos, LLM projects +178%
  • ByteByteGo Mar 9 2026 — Firecrawl 165K, OpenClaw 210K
  • GitHub Docs — concurrency, timeout-minutes, Spending limits

Next Steps from Junagadh

Want 4 repos capped before next burst? I audit Actions in one day — concurrency, timeout, spending limit, 90-day OTel. Same agents, 62% fewer minutes, P95 under 8 min.

From Junagadh — where machine speed pays only when the guardrail ships first.

← All journal articles Get in touch →