Skip to content

cross-refactoring: テスト整備ラウンドの採用 0 件で項目の無い適用ラウンドが開き、同じ群を上限なしに繰り返す #592

Description

@takemi-ohama

何を見つけたか

テスト整備ラウンドの採用が 0 件のとき、項目の無い適用ラウンドが開き、上限なしに同じ群を繰り返す。 手順書の骨組み(SKILL.md の「実行」)をそのまま回すと、提案ラウンドへ進まない。

PR #587 の構造改善で、約 3 時間 25 分のあいだに --- 適用ラウンド 1 / 1 (実装 codex / 項目 )--- が 187 回出て、そのたびに codex の適用を起動した(手で止めた)。

提案 0 件 → 統合 0 件 → 採用 0 件 / 見送り 0 件
テスト整備の採用 0 件のため、構造改善の提案ラウンドへ進みます
--- 適用ラウンド 1 / 1 (実装 codex / 項目 )---
❌ 適用ラウンド 1: コミットが 1 件もありません(適用ラウンド = 1 コミットの前提を満たしていません)
この適用ラウンドは取り消しました。検証は行いません
↻ 適用ラウンド 1 は取り込み済みです(検証から再開)
--- 適用ラウンド 1 / 1 (実装 codex / 項目 )---
↻ 適用ラウンド 1 の適用は取り込み済みです(採用 0 件 / 失敗 0 件)
↻ 適用ラウンド 1 は取り込み済みです(検証から再開)
(以下同じ)

経路は次のとおりである(コードを読んで追った)。

何が起きるか
merge-proposals テスト整備の採用 0 件は終了コード 0 を返す(apply.pycmd_merge_proposals
next-apply-round apply_rounds が空なので、rounds.pyapply_groups項目 0 件の群を 1 つ作り、開く
merge-apply 1 回目 コミットが無いため取り消し、終了コード 2。群の statusapplied のまま残る
next-apply-round 2 回目以降 statuspending / applied の群を開き直すため、同じ群を返す(終了コード 0)
merge-apply 2 回目以降 「取り込み済み・採用 0 件」で終了コード 2 → 骨組みの `

状態ファイルの群: {"apply_round": 1, "impl": "codex", "items": [], "status": "applied", ...}

項目 0 件の群が作られることは v10.13.0(b37d738)でも変わらない。 apply_groups を直接呼ぶと
apply_round に 1 が入った群を 1 つ返す。

$ python3 -c "
import sys; sys.path.insert(0, 'plugins/ndf/skills/cross-refactoring/scripts')
from refactor_lib import rounds
print(rounds.apply_groups({'impl': 'codex', 'items': []}))"
[{'apply_round': 1, 'impl': 'codex', 'impl_model': {'requested': None, 'observed': None}, 'items': [], 'status': 'pending', 'base_sha': None, 'head_sha': None, 'fix_rounds': 0}]

開き直す側も変わっていない。cmd_next_apply_roundapply.py:278)は statuspending /
applied の群を無条件に返す(:296-299)。適用ラウンドに別の上限を置かない方針も現行のまま
である(SKILL.md:56-57)。

どこで見つけたか

#536(取り消した群の statuspending のまま残る。2026-09-15 に DUPLICATE として closed)と症状は似るが、入口が違う。こちらは項目の無い群が作られること、適用ラウンドの繰り返しに上限が掛からず提案ラウンドの上限でも抜けないことが異なる。

#647(取り込みの前に抜けた群を開き直し続ける)とは入口が違うが、同じ next-apply-round の開き直しで止まらないため、#647 と同じ変更で直す

なぜこの変更の範囲外なのか

#526 の受け入れ条件は design Skill の本文(対の表と手順 2)に閉じており、cross-refactoring のスクリプトは対象に含まない。

直さないと何が起きるか

文書だけの変更など、足すべきテストが出ない Pull Request で構造改善を回すと、進行が永久に止まり、適用担当の CLI を起動し続ける。 利用料と CLI のレート制限を消費し、並行して回す他の Pull Request の cross-review / cross-refactoring も巻き込む。

所要時間への影響(2026-09-01〜09-15 の実測)

集計の方法と全体の値は #662 にある。

由来

PR #587

進行

モード: standard / 作業ツリー: .worktrees/feat/issue-728-apply-intake / 計画: issues/issue-728-647-592-553-plan.md

  • 要求と受け入れ条件 — 2026-09-15 12:46
  • 作業場所の用意 — 2026-09-15 12:45
  • 設計 — 2026-09-15 13:45
  • 素材の収集と出典の確定
  • ドキュメント再構成 — 2026-09-15 13:45
  • ドキュメントレビュー — 2026-09-15 13:46
  • 計画 — 2026-09-21 21:27
  • 実装 — 2026-09-21 21:46
  • 構造改善 — 2026-09-21 22:19
  • 実装レビュー — 2026-09-22 02:28
  • 完了判定 — 2026-09-22 02:44
  • Pull Request — 2026-09-21 22:16
  • 確定仕様化 — 2026-09-22 03:43
  • 後片付け — 2026-09-22 03:31
  • 配布 — 2026-09-22 14:17
  • 体裁レビュー
  • リリース後テスト — 2026-09-22 15:06
  • 振り返り — 2026-09-22 15:38

閉じた理由

PR #796 で直り、ndf 10.16.0(2026-09-22、main / タグ ndf--v10.16.0、PR #810)で配布した。リリース後テスト(#810 (comment) )でこの課題の受け入れ条件はすべて合格した。

振り返り: #810 (comment)

Activity

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

    area: ndf-skillNDF の Skill 本体bugSomething isn't workingpriority: high実害・安全機構の欠落など、優先して対応する

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions