--- name: managed-temp user-invocable: false description: > 一時ファイルの置き場所を選ぶ時、および例外用途でmanaged-tempの中へ個別のディレクトリを作成または回収する時に起動する。 版管理または自動同期が有効な設定領域を変更する前に、一時バックアップの置き場所を選ぶ時にも起動する。 --- # managed-temp 本スキルは一時ファイルの置き場所と、managed-tempの中へ個別のディレクトリを作成する例外用途を定める知識のスキルである。 ## セッションのmanaged-temp SessionStartはセッションごとにmanaged-tempの中へセッション専用のディレクトリ(セッションのmanaged-temp)を作成し、その絶対パスを実行環境が文脈へ追加する本文で通知する。 一時ファイルは原則としてセッションのmanaged-tempの直下へ、用途の分かるファイル名で置く。 turnをまたいで読む成果物、委譲先へ絶対パスで渡す成果物および引き継ぎ記録もここへ置いてよい。 まとまったファイル群を置く場合は、セッションのmanaged-tempの中へサブディレクトリを作成してよい。 作業ツリー内の一時ディレクトリや、汎用の一時ディレクトリ作成コマンドが置く共有の一時ディレクトリに代えて、セッションのmanaged-tempを使う。 委譲元と委譲先のいずれが生成する場合も、作業目的のファイル(退避・比較・中間出力)は分量によらず対象リポジトリの作業ツリーの外へ置く。作業ツリー内へ置くとそのセッションの成果物と混在して差分の特定を要し、削除のやり残しがそのままコミット対象へ入る。 セッションのmanaged-tempはセッションの終了では削除されず、最終更新から7日を超えた後の`atk`の実行時に自動で削除される。 実行主体は回収しない。`agents_server`経由のsessionや`--resume`で同じ会話を再開した場合も、同じ`session_id`には同じセッションのmanaged-tempが通知される。 `Agent`ツールのサブエージェントには、その中の担当専用の子ディレクトリが通知される。一時ファイルは通知された専用領域へ置き、親のセッションのmanaged-tempは委譲元が渡したファイルの読み書きに使ってよい。子ディレクトリは親の領域とともに自動で回収される。 ## 個別に作成する例外用途 `atk managed-temp create --prefix <用途>`で個別の領域を作成するのは、セッションのmanaged-tempで用途を満たせない場合とする。 <例> セッションのmanaged-tempの通知を受け取っていない場合: 個別の領域を作成し、回収は7日の自動削除へ委ねてよい。 別のファイルシステム名前空間(Dockerなど)から同じパスへ到達させる場合: `--root`で共有ディレクトリを指定して作成する。 Git worktreeなど`.git`を含む領域を置く場合: 個別の領域を作成する。 7日の自動削除は`.git`を含む領域を削除しないため、`.git`を含む個別の領域は、作成した工程が不要になった時点で`atk managed-temp cleanup --path <絶対パス>`で回収する。 個別に作成する領域には、対応するAWIを`--awi <ファイル名>`で複数記録できる。 ## 設定領域を変更する前の一時バックアップ 版管理または自動同期が有効な設定領域(etckeeperが管理する`/etc`など)を変更する前に一時バックアップが必要になった場合は、変更前の版をその領域のローカル履歴から取り出せるかを先に確認する。 取り出せる場合は、その履歴の版をバックアップとして使う。別の複製が必要な場合は、設定領域の内側ではなくmanaged-tempの中へ置く。 設定領域へ置いたファイルは自動commitで履歴へ入る。後から削除しても、そのファイルを追加したcommitはローカル履歴と送出済みの外部履歴に残る。 ローカルの自動commitと、外部remoteへのpushまたは同期は別々に確認する。 外部への送出が設定されている場合は、領域内へ置いたファイルが外部の履歴へ届く前提で保存先を選ぶ。 変更後はローカル履歴と外部の同期先をそれぞれ調べ、作業用ファイルが含まれていないことを確かめる。