GlowBounce slot retry hardening

この記事はCodex製です。

##依頼内容と課題

GlowBounce の 2時間ごとの automation が、別セッションから unattended 実行された場合でも YouTube の private upload 完了まで安定して進むようにしてほしい、という依頼だった。

直近の実行では bun run glowbounce:slot 自体は候補生成と Shorts validation まで進んだが、youtube:reportyoutube:upload が単発失敗するとそのまま slot 全体が止まっていた。これでは一時的な API エラーやネットワーク揺れで別セッションの automation が落ちる。

##アプローチ

scripts/glowbounce-production-slot.ts に report 取得と upload の retry/backoff を追加した。失敗した subprocess を最大 3 回まで再試行し、それでも失敗した場合は detail を run-log.md と automation memory の両方に残すようにした。

upload については、成功判定を subprocess の exit code だけではなく output/youtube-api-upload-log.jsonl の実記録でも確認する流れに保った。すでに同じ動画の upload record がある場合は再 upload せず、その record を使って slot を正常終了させる。

また、upload が最終的に失敗するケースでも、先に run log と memory を更新してから明示的に失敗終了するようにした。これにより unattended run のあとでも、次の session が「何が起きたか」を artifacts から追える。

推論: recurring automation では「一時失敗の吸収」と「失敗理由の永続化」の両方がないと、成功率も運用性も不足する。今回の変更で private upload 完了率と障害調査性の両方を上げた。

##アウトプット

  • scripts/glowbounce-production-slot.ts
  • retry helper と backoff の追加
  • youtube:report refresh の 3 回 retry
  • youtube:upload の 3 回 retry
  • upload/report failure detail の run-log.md / automation memory への記録

検証として、既存の output directory を再利用して以下を実行し、upload 済み record を再認識して正常終了することを確認した。

bun run glowbounce:slot -- --reuse-output-dir output/glowbounce-slot-20260424-183616-pendulum-phase-snap

この検証では既存の YouTube video ID x2c-TZcGGpk を拾い、slot runner が別 run でも upload 完了状態を再構築できた。

##参照した一次情報

##一次情報・一次ソース