Skip to content

NDF の手順が TMPDIR に置く一時の worktree と状態のファイルが消されず溜まる(1 回分で数百 MB) #2085

Closed

Description

@takemi-ohama

何を見つけたか

NDF の手順が ${TMPDIR:-/tmp} に置く一時のものが、手順の後に消されずに溜まる。中でも一時の worktree(<tmpdir>/ndf-worktrees)は 1 回分で数百 MB あり、ディスクを圧迫する。devbase の開発コンテナでは /tmp が書き込み層にあり、再起動しても消えない。2026-10-23 には、ホストのディスクが埋まって Docker Desktop が落ちた(devbasex/devbase#499)。

2026-10-23 の手元の devbase のコンテナで測った値:

置き場 件数・大きさ 作るところ
/tmp/ndf-worktrees/devbasex--ai-plugins/rf<n>/ 20 余回分で 10.6GB cross-refactoring(外れない件は #1680)
/tmp/ndf-worktrees/<slug>/pr<n>/ ほかのリポジトリで 9 件残っていた(どれも変更・未 push 無し) cross-review。merged を通らずに閉じた、またはマージされた Pull Request の分と見られる
/tmp/ndf-worktree-<session>.json 681 件 hook_lib/worktree.py:140・worktree-session.sh:82
/tmp/ndf-deps.XXXXXX 440 件(1.8MB) worktree-deps.sh:138。trap で消すが、プロセスが止められると残る
/tmp/fix-pr<n>-* 121 件(1.7MB) fix の結果・文脈のファイル
/tmp/ndf-tests-usage-*・ndf-tests-metrics-* 十数件 テスト(plugins/ndf/conftest.py:32 ほか)

大きさのほとんどは一時の worktree で、ほかは件数だけが多い。

一時の worktree には、作業中のものが残る場合がある。rf1732/work には、push していないコミットが 23 件あった。消す処理は、変更と未 push のコミットを確かめてから外す必要がある。

直さないと何が起きるか

  • /tmp が自動で片付かない環境(devbase のコンテナ、再起動の少ない端末)では、cross-review・cross-refactoring を回すたびにディスクが減る
  • 小さなファイルの件数が増え、/tmp の一覧が読めなくなる

決めること

関連

由来

利用者からの依頼(2026-10-23、Mac のディスクの空きが頻繁に無くなる件の調査)

受け入れ条件

  • マージ済みの Pull Request n について merged-steps.py cleanup を実行したとき、<NDF_WORKTREE_BASE>/<slug>/rf<n>(中の work などを含む)が変更も未 push のコミットも持たない → pr<n> と同じく外れ、git worktree list から消え、ディレクトリも残らない。結果の items に removed で出る
  • 一時の worktree(pr<n>・rf<n>)に未コミットの変更か、未 push のコミットがある → 外さず、kept と理由を返す(rf1732/work の 23 件のような作業を消さない)
  • merged を通らずに閉じた、またはマージされた Pull Request の一時の worktree → 「決めること」で決めた時点(または一括の片付けの手段)を実行した後、変更も未 push も無いものは残らない。open の Pull Request と、実行中の手順が使っている一時の worktree は外さない
  • ndf-worktree-<session>.json と ndf-deps.* のうち、持ち主のセッション・プロセスが終わったもの → 決めた片付けの時点(セッションの終わりに消すかは「決めること」で決める)の後に残らない。実行中のセッション・プロセスのものは消さない

修正レイヤー

親 #2229(実行をまたいで残る状態の寿命と持ち主)。一時の置き場の掃除を lib/worktree_base.py に寄せ、merged-steps.py の _cleanup_pr から呼ぶ(今は pr{n} だけを外し rf{n} を外さない)。#1680 は open。

2026-10-31 の残り 件数
/tmp/ndf-worktrees/devbasex--ai-plugins/ の rf*(rf2152・rf2178・rf2192・rf2209。4 本とも PR はマージ済み) 4(2.0G)
git worktree list の ndf-worktrees 16
ndf-worktree-*.json 79
ndf-deps.* 26
ndf-tests-* 24

進行

モード: — / 進め方: auto

  • 要求と受け入れ条件
  • 作業場所の用意 — 2026-10-31 03:59
  • 設計
  • 素材の収集と出典の確定
  • ドキュメント再構成
  • ドキュメントレビュー
  • 計画 — 2026-10-31 03:59
  • 実装 — 2026-10-31 05:36
  • 構造改善 — 2026-10-31 07:38
  • 実装レビュー — 2026-10-31 09:12
  • 完了判定 — 2026-10-31 06:18
  • Pull Request — 2026-10-31 06:41
  • 確定仕様化 — 2026-10-31 11:00
  • 後片付け — 2026-10-31 10:57
  • 配布 — 2026-10-31 10:33
  • 体裁レビュー
  • リリース後テスト — 2026-10-31 10:56
  • 振り返り — 2026-10-31 11:00
  • 棚卸し — 2026-10-31 11:21

振り返り: #2282 (comment)

リリース後テスト(v10.27.2)で残ったこと

条件 1・2・4 と条件 3 のテストは合格。条件 3 の手動確認(手元の残骸が片付けの後に減ること)は保留(記録: #2281 (comment) )。理由と確かめ直す時点は #2229 の「リリース後テスト(v10.27.2)で残ったこと」と同じ。

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions