GitHub Actions 無料枠 枯渇 の 原因と対策

2026-09-19、 rei-aios repo 私 用 CI 枠 2,000 min/月 が 月中 に 枯渇した 事案 の root cause audit と 修正 arc (STEP 2127〜2130、 rei-aios-09 tab)

STEP 2127-2130 rei-aios-09 tab 2026-09-19 (未 review)

原因

私 の rei-aios repo (private) の GitHub Actions 無料枠 (2,000 min/月) が 2026-09-19 昼過ぎに 枯渇。 直接 causal chain:

  1. push で 動く workflow が 複数 (Mirror to GitLab + Codeberg、 dist-renderer/data mirror check 等)
  2. 私 用 自動 commit が 高頻度 (site rebuild + stats refresh + OUKC static pages refresh 等、 実測 ~39 回/日)

この 2 つの 掛け算 (~39 push/day × 複数 workflow × 各 1-2 min billable) で 全体 の 8 割 弱 が 消費されていた。 push で 動く 設定 (on: push) と 自動 commit の 高頻度 の 組合せ が 本質的 root cause で、 定期実行 (schedule cron) の 本数 が 多いこと は 副次的。

更に 悪化要因 が 2 つ:

workflow ごとの 消費内訳

2026-09-01 〜 2026-09-19 (18 日) の 実測 run 数 × 1 job あたり平均 wall-clock × 「job 単位 1 min 切り上げ」 の 総和。 30 日換算は 一律 × 5/3 で 外挿。

workflowtrigger30 日 見込み (min)備考
Mirror to GitLab + Codebergpush + schedule~1,973全体 の 32%
dist-renderer/data mirror checkpush + pull_request~967全体 の 16% (537/537 全 failure)
Lean 4 Verifypush (paths filter)~453paths filter で 既に 抑制
Rei Learning Cycleschedule 2/日~223健全
Comparator Gauge Dailyschedule 1/日~133健全
MCP Tests (STEP 1987+1988)push (filter 無し = 想定)~2,340quota 枯渇時 は 21 runs × 1 min の billing 失敗 短周期 のみ、 正常時 は 39 push/日 × 2 min の想定
continuous-self-firing weeklyschedule (書式エラーで 未 発火)0本 arc で invalid 判明
その他 (7 workflow)schedule 主体~185Daily / Weekly 系
rei-aios-v2 Auto Evolvepush~145本 arc 未変更
合計 (13 workflow、 修正前 想定)~6,100無料枠 2,000 の 3 倍超

対策

STEP 2127 (commit 7c8afa398) — 2 workflow の push 発火 削除

STEP 2128 (commit 9eff44712) — MCP Tests に paths filter 追加

STEP 1987 は readFileSync('src/mcp/rei-mcp-server.ts') で 解析、 STEP 1988 は tsx src/mcp/rei-mcp-server.ts を 実 subprocess spawn。 実 import を grep で 特定し、 src/mcp/** + src/agent-connector/** + src/aios/dialogue-terminal/** + src/aios/stopping-condition/** + src/axiom-os/bilattice-eight-engine.ts + src/axiom-os/seven-logic.ts + test/step1987-*.ts + test/step1988-*.ts + package.json + package-lock.json + tsconfig.json + 本 workflow file 自身、 の 12 paths を filter に。 push + pull_request 両方に 適用。

STEP 2129 (commit 57bb45245) — self-firing workflow の 書式エラー 修正

2 箇所 の YAML block scalar (run: |) content indent bug を発見・修正:

本 修正 で GitHub Actions parser が workflow file を 受理、 API .name field が raw path から 「Continuous Self-Firing Signal Monitor Weekly」 に 復活。 STEP 2004 (2026-09-13) 設置以降 6 日間 一度も 動いていなかった monitor が 初 実行 (詳細 は 下記 § Ⅵ)。

対策 前後 の 月間見込み

「全体 (13 workflow 合計)」 と 「MCP Tests 単独 (STEP 1987+1988 のみ)」 は 別の scale。 混同予防で 分けて 提示:

scope修正前 (30 日換算)修正後 (30 日換算)削減
全体 (13 workflow 合計)~6,100 min/月~1,250 min/月~4,850 (80%)
MCP Tests 単独 (paths filter で hit した push のみ 発火 に 変化)~2,340 min/月~112 min/月~2,228 (95%)

無料枠 2,000 min/月 に 対して 全体 ~1,250 で 750 min の 余裕。 MCP Tests は 実測 wall-clock 55s (1 run) を 実 CI で 観測、 過去 18 日 の commit 971 件中 67 件 (6.9%) が paths filter に該当 = 30 日換算 ~112 件/月 × 1 min billable = ~112 min/月 の 見込み。

self-firing 監視 の dormant 期間 と 初 実行 結果

要点: STEP 2004 (2026-09-13) で 設置された continuous-self-firing-signal-monitor-weekly.yml は 書式エラー で GitHub Actions parser に invalid file と 判定されていたため、 週次 cron (Sunday 22:40 UTC = Monday 07:40 JST) が 一度も 発火せず。 設置以降 6 日間、 monitor は 完全に dormant だった。 push 毎に 「0 job の failure run」 が 211 件 記録されていたが、 実 runner 時間 は 消費されず (0 min billable)、 monitor script も 走っていなかった。

STEP 2129 修正後、 workflow_dispatch で 初 実行 (run ID 35406858861、 2026-09-18T23:44 UTC):

Honest scope: CI runner に $HOME/.claude/.../memory/ hooks は 存在しない ため、 CI 上 の 走査は notepad-only の partial scan (script 内 comment で 明示)。 ローカル memory hooks を含む full scan は 別環境。 「monitor が 動いていなかった 6 日間 の signal を backfill 収集する」 forward-only の recovery は 困難 (run 記録側 の backfill は 不能)、 今後 の weekly cron で 継続 観測。

commit メッセージ の skip 命令 の 規則

本 arc で 私 (rei-aios-09 tab) が STEP 2128 で 副次事故: commit メッセージ本文 内 で 「自動 commit への skip-ci 案 は 未来 STEP 候補 として 記録のみ」 と 説明 する 際、 GitHub が commit メッセージ 内 を 検出する 角括弧付き 5 文字列 の うちの 1 つ を そのまま literal で 書いてしまい、 GitHub が 該当 push の 全 workflow を silent-skip。 私 は 「billing transition 由来 の event drop」 と 誤 診断、 chat-Claude が 真因 を catch。

公式 規則 (要旨)

出典: docs.github.com — Skipping workflow runs (公式文書、 2026-09-19 curl 取得、 md5 fixed で sidecar 永久保存 = STEP 2130 一次資料)。 詳細 の 5 文字列 と verbatim 原文は 出典 link を 参照 (本 page では 転記しない、 未来 誰かが 本 page を 別 commit body に 引用 した 際 の 再 感染 予防)。

私 の feedback memory では 「commit body で skip-ci 案 を 記述 する 際 は hyphen 化 (skip-ci 案) or word 化 (skip flag) or 括弧除去 で 回避」 を rule として embed。 意図的 marker としての 使用 (auto-commit script の 自己再帰 prevent 用) は 従来通り正しい (rule 対象外)。

arc 全体 (STEP 2127〜2130)

STEP内容run ID / 主 evidencecommit
2127GHA quota audit + mirror-sync / dist-renderer push 発火 削除gh audit 1,673 runs 内訳7c8afa398
2128ci-mcp-tests.yml paths filter 追加run 35406077167 PASS 11/11 + 23/23、 55 秒9eff44712
2129continuous-self-firing yaml 修正 + skip-ci 規則 embedrun 35406858861 NOT_EMERGED、 1m15s57bb45245
2130公式文書 一次資料 curl 取得 + feedback memory 出所訂正docs.github.com md5 5d26d57ee6e1efb84
2140source-attribution + 数字混同 訂正 (記録のみ)b595509b0

本 page は STEP 2141 で land、 未 review。 rei-aios repo は private のため run URL は link に せず、 run ID のみ 記載。

未決 (未来 STEP candidate、 本 arc では 実施なし)