何を見つけたか
構造改善の収束ループ(cross-refactoring)を途中で止めて、SKILL.md の「実行」の bash をそのまま叩き直して再開すると、止めた時点のラウンドに未着手の群(適用ラウンド)が残っていても、次のラウンドが開く。未着手の群に入っていた採用済みの項目は、適用されないまま状態ファイルに pending として残る。
再現した形(PR #791 、テスト整備ラウンド 1):
テスト整備ラウンド 1 が 5 件を採用し、3 つの群へ分けた。群 1(担当 codex)は検証を通り push まで済んだ
群 2 の担当が結果を残さずに終わり、同じ群が再起動され続けたため(cross-refactoring: 実装担当が停止し続ける項目で適用ラウンドが無限に再試行される #647 の形)、進行を手で止めた
同じコマンド列で再開した。初期化は「前回中断した状態から再開します(提案ラウンド 1)」と出た
次の start-round が テスト整備ラウンド 2 を開いた。ラウンド 1 の群 2・3 は開かれなかった
再開後の状態ファイル(cross-refactoring-rf791-state.json)の抜粋:
[{"round" :1 ,"kind" :" test" ,"groups" :[
{"apply_round" :1 ,"impl" :" codex" ,"status" :" verified" },
{"apply_round" :2 ,"impl" :" codex" ,"status" :" pending" },
{"apply_round" :3 ,"impl" :" kiro" ,"status" :" pending" }]},
{"round" :2 ,"kind" :" test" ,"groups" :[
{"apply_round" :1 ,"impl" :" claude" ,"status" :" pending" }, " …" ]}]
ラウンド 1 の群 2・3 に入っていた 3 件(R1-002 / R1-004 / R1-005)は、採用済みとして items に残るため次のラウンドの重複排除で対象外になり、再提案もされない。見送りの一覧にも入らない。
どこで見つけたか
なぜこの変更の範囲外なのか
PR #791 の受け入れ条件は結末の語彙と理由(利用上限・CLI の上限)、起動し直しの可否、プロセスグループの停止に関するもので、ラウンドを開く処理と再開の経路を含まない。
直さないと何が起きるか
途中で止めた収束ループを再開すると、採用済みの項目が黙って落ちる。落ちた項目は見送りにも入らないため、報告からも読めない。#647 (担当が結果を残さない群の無限の再試行)は手で止めて再開する回避を前提にしており、その回避のたびにこの形で項目が落ちる。
直す先の候補は 2 つある。
候補
中身
start-round が直前のラウンドの pending の群を見る
残っていれば新しいラウンドを開かず、そのラウンド番号を返して next-apply-round へ戻す
SKILL.md の再開の手順を分ける
群の途中で止めたときは next-apply-round から叩き直すと書く
由来
PR #791 (issue #729 の実装。構造改善の工程で確認した)
何を見つけたか
構造改善の収束ループ(
cross-refactoring)を途中で止めて、SKILL.mdの「実行」の bash をそのまま叩き直して再開すると、止めた時点のラウンドに未着手の群(適用ラウンド)が残っていても、次のラウンドが開く。未着手の群に入っていた採用済みの項目は、適用されないまま状態ファイルにpendingとして残る。再現した形(PR #791、テスト整備ラウンド 1):
start-roundが テスト整備ラウンド 2 を開いた。ラウンド 1 の群 2・3 は開かれなかった再開後の状態ファイル(
cross-refactoring-rf791-state.json)の抜粋:[{"round":1,"kind":"test","groups":[ {"apply_round":1,"impl":"codex","status":"verified"}, {"apply_round":2,"impl":"codex","status":"pending"}, {"apply_round":3,"impl":"kiro","status":"pending"}]}, {"round":2,"kind":"test","groups":[ {"apply_round":1,"impl":"claude","status":"pending"}, "…"]}]ラウンド 1 の群 2・3 に入っていた 3 件(
R1-002/R1-004/R1-005)は、採用済みとしてitemsに残るため次のラウンドの重複排除で対象外になり、再提案もされない。見送りの一覧にも入らない。どこで見つけたか
plugins/ndf/skills/cross-refactoring/scripts/refactor_lib/commands/setup.pyのcmd_start_round。新しいラウンド番号をround_no = len(rounds) + 1で決め、直前のラウンドにpendingの群が残っているかを見ていない(配布版 10.15.1 のsetup.py:484付近)plugins/ndf/skills/cross-refactoring/SKILL.mdの「実行」。「状態ファイルに全ての状態が入るため、どこで落ちても同じコマンド列を叩き直せば再開できる」とある。繰り返しの先頭がstart-roundなので、群の途中で止めた実行はこの文のとおりには再開しないなぜこの変更の範囲外なのか
PR #791 の受け入れ条件は結末の語彙と理由(利用上限・CLI の上限)、起動し直しの可否、プロセスグループの停止に関するもので、ラウンドを開く処理と再開の経路を含まない。
直さないと何が起きるか
途中で止めた収束ループを再開すると、採用済みの項目が黙って落ちる。落ちた項目は見送りにも入らないため、報告からも読めない。#647(担当が結果を残さない群の無限の再試行)は手で止めて再開する回避を前提にしており、その回避のたびにこの形で項目が落ちる。
直す先の候補は 2 つある。
start-roundが直前のラウンドのpendingの群を見るnext-apply-roundへ戻すSKILL.mdの再開の手順を分けるnext-apply-roundから叩き直すと書く由来
PR #791(issue #729 の実装。構造改善の工程で確認した)