同じ根本原因を持つ課題(子 issue)を、現れている場所ではなく根本原因の場所で直すための親 issue である(issue-upkeep の判定「ルートコーズ」)。再現手順と観測は各子 issue にある。
修正レイヤー
主ディレクトリへの書き込みの検知。 場所は plugins/ndf/scripts/worktree-guard.sh のシェル系 tool の枝(198 行目で wt_extract_write_target を呼ぶ)である。
採る手
移動(move_responsibility)。tool の実行後に wt_dirty_paths(worktree-common.sh:2193)で主ディレクトリの差分を見て案内する。パスが引数で明示されるパッチ系・編集系の tool の枝は変えない。
移すときに扱いを決めること:
| 決めること |
何が起きるか |
.gitignore の対象と未追跡のファイル |
git status --untracked-files=no に出ない |
| 同じ主ディレクトリへの別のセッションの同時の書き込み |
どの tool の書き込みか区別できない |
| 実行の費用 |
tool の実行ごとに git status が走る(hook の上限 5 秒) |
| 実行後の hook の発火 |
Claude Code の PostToolUse、codex と agy の対応する事象が実際に発火するかは確かめていない |
| 案内の文言が指す後始末 |
主ディレクトリに残った変更を作業ツリーへ移す手段は、#867 の worktree-setup.sh move-stray <branch> になる。検知(この課題)と後始末(#867)が同じ wt_dirty_paths を読み、案内はその後始末を指す |
着手は #867 の後にする。 案内が指す move-stray が先に要る。
PostToolUse の hook を新設するときは、マイルストーン 26 の #829 / #830(PR #844)が増やす PreToolUse の hook と
合わせて、hook の構成と実行の費用を見る。
関連
子 issue
| 子 issue |
現象レイヤー |
観測 |
| #625 |
>| のリダイレクト |
書き込み先を出さない |
| #627 |
コマンド置換 |
閉じ括弧を書き込み先の語に含める(out=$(bash x 2>&1) → 1)) |
| #633 |
補助関数 _redir_target |
呼び出し後もシェルに残る |
| #644 |
オプション終端 -- |
cp src -- -dest で複製元を宛先として案内する |
| #645 |
被演算子 1 件の cp / mv |
何も書かれないのに、複製元を書き込み先として案内する |
完了条件
- シェル系 tool の書き込みの検知が実行後の差分で行われ、
wt_extract_write_target を使わない
- 上の表の 4 つの扱いが決まり、それぞれに検査がある
- 各子 issue の再現手順を実行し、誤った案内が出ないことを確かめる(子 issue はその時点の棚卸が「閉じてよい」で閉じる)
同じ根本原因を持つ課題(子 issue)を、現れている場所ではなく根本原因の場所で直すための親 issue である(
issue-upkeepの判定「ルートコーズ」)。再現手順と観測は各子 issue にある。修正レイヤー
主ディレクトリへの書き込みの検知。 場所は
plugins/ndf/scripts/worktree-guard.shのシェル系 tool の枝(198 行目でwt_extract_write_targetを呼ぶ)である。plugins/ndf/scripts/lib/worktree-common.shのwt_extract_write_targetが、シェルの文法(cdの追跡・部分シェル・case・関数定義・リダイレクト・コマンドごとのオプション)を再実装して、コマンド文字列から書き込み先を推定する。字句解析から末尾までが約 1,391 行、テストが 140 件あるworktree-guard.sh:16)。実行の前に書き込み先を知る必要は無い採る手
移動(
move_responsibility)。tool の実行後にwt_dirty_paths(worktree-common.sh:2193)で主ディレクトリの差分を見て案内する。パスが引数で明示されるパッチ系・編集系の tool の枝は変えない。移すときに扱いを決めること:
.gitignoreの対象と未追跡のファイルgit status --untracked-files=noに出ないgit statusが走る(hook の上限 5 秒)PostToolUse、codex と agy の対応する事象が実際に発火するかは確かめていないworktree-setup.sh move-stray <branch>になる。検知(この課題)と後始末(#867)が同じwt_dirty_pathsを読み、案内はその後始末を指す着手は #867 の後にする。 案内が指す
move-strayが先に要る。PostToolUse の hook を新設するときは、マイルストーン 26 の #829 / #830(PR #844)が増やす PreToolUse の hook と
合わせて、hook の構成と実行の費用を見る。
関連
create/move-stray)子 issue
>|のリダイレクトout=$(bash x 2>&1)→1))_redir_target--cp src -- -destで複製元を宛先として案内するcp/mv完了条件
wt_extract_write_targetを使わない