Files
claude-code/CHANGELOG-2.1.263-d.md
T
claude 1b74e230ad
Helm Chart Release / release-chart (push) Successful in 7s
Build Session Image / build-push (push) Successful in 2m3s
feat: 失敗セッションの調査性を改善(終了Pod保持 + ログAPI + UI)(v2.1.263-d)
セッション Pod がブート失敗で Failed になると reaper が即削除し kubectl logs で
死因を追えなかった。「開く」で 502 になるだけで原因不明だった。

- session.reaper.terminatedRetentionSeconds(既定 900): 終了済み Pod を
  finishedAt からこの秒数は回収しない。manager 回収ループと reaper CronJob 両方が尊重
- GET /api/sessions/<id>/log: セッション Pod のログを text で返す(pods/log get のみ、追加権限なし)
- UI: 「ログ」ボタン、状態の色分け、Failed 行に reason/exitCode/message 併記、
  Running 以外は「開く」非表示
- session-entrypoint.sh: URL スキームと identity 型の不一致を警告。
  git clone を --progress ... 2>&1 にして git/ssh の出力を Pod ログへ
- helm lint / template 検証済み
2026-09-08 21:14:56 +09:00

2.2 KiB
Raw Blame History

CHANGELOG 2.1.263-d — 手動リリース

背景

セッション Pod がブート失敗(git clone エラー等)で Failed になると、reaper が 即座に削除するため kubectl logs で死因を確認できなかった。「開く」で 502 になるだけで 原因が分からない状態だった。

追加 / 変更

  • session.reaper.terminatedRetentionSeconds(既定 900) 終了済み(Succeeded / Failed)のセッション Pod を、この秒数が経過するまで回収しない。 Pod の containerStatuses[].state.terminated.finishedAt を基準に判定。0 で旧挙動(即回収)。 manager の回収ループと予備 CronJob の両方が尊重する。
  • GET /api/sessions/<id>/log セッション Pod(claude コンテナ)の直近ログを text/plain で返す。manager は既に pods/log の get 権限を持つ(追加権限なし)。
  • Web UI
    • セッション一覧に 「ログ」ボタン(インラインでログ表示)。
    • 状態を色分け表示。Failed の行に reason / exit <code> / message を併記。
    • Running 以外では「開く」を出さない。
  • セッションブートスクリプト(files/session-entrypoint.sh)
    • URL のスキーム(https:// / git@ / ssh://)と選択された identity の型 (ssh / https-token)の不一致を検出して警告。
    • git clone を --progress ... 2>&1 で実行し、git / ssh の出力をそのまま Pod ログへ。 失敗時は代表的な原因(認証不足・権限なし・known_hosts 不一致・NetworkPolicy による egress 遮断)をメッセージで提示。

トラブルシューティング追記(README)

  • 「開く」で 502 / 一覧が Failed → UI の「ログ」ボタンで死因確認。
  • clone が 60〜130 秒でタイムアウト → NetworkPolicy(Cilium 等)の egress 遮断を疑い、 --set networkPolicy.enabled=false で切り分け。
  • URL スキームと identity 型を一致させる(HTTPS ↔ https-token / SSH ↔ ssh)。

バージョン

version = 2.1.263-d / appVersion = "2.1.263"。