Skip to content

cross-review / cross-refactoring: 担当が揃わないときに各ラウンド 2 者を確保する規則を決める(同一ランタイム 2 つ・ホストの参加を許す) #687

Description

@takemi-ohama

何を見つけたか

/ndf:cross-review/ndf:cross-refactoring は、担当を「全ランタイム − ホスト」の 3 者から輪番で 2 者選ぶ。3 者が揃わない場面で、2 者を確保する規則が無い。

場面 いま起きること
1 者が認証できない 初期化ごと失敗する(#478
1 者が利用上限に達している 認証の確認は通り、担当に当たったラウンドで NO_RESULT → 起動し直し → final=error#619
--only で 1 者に絞る そのラウンドの担当が 1 者になり、2 者で見る前提が崩れる

#598 / #537 は v10.13.0(2026-09-16)で解決した。 監視の上限は工程ごとの表
plugins/ndf/scripts/lib/limits.py)が持ち、レビューの工程は 1200 秒になった。担当の CLI の
上限は、環境変数で解決した監視の上限 + 120 秒(既定 1320 秒)を導く。無進捗の許容は担当ごと
(codex 180 / agy 480 / kiro 480 / claude 900 秒)で、監視の上限とは別に働く。

そのため「agy の打ち切りを避けるために外す」という場面は減った。 母集合を欠く理由として残るのは
認証・利用上限・モデルの 404 である。

実際に、マイルストーン 1 本の開発で 3 回止まった。

  1. PR Fix: Codex Slack通知のメンション削除を修正 #40(ideabase): agy が結果を残さず final=error。単独で回し直して収束させた
  2. PR Add: plan確定仕様書化スキルを追加 #43(ideabase): codex の refresh_token_invalidatedfinal=error。利用者の再ログイン待ちで中断
  3. PR docs: 完了issue由来仕様とランタイム分離計画を整理 #44(ideabase): codex が利用上限(4 日先まで復旧しない表示)に達し、cross-review を 1 度も開始できなかった。「3 ラウンドに 2 回は codex が担当に当たるので必ず落ちる」と判断して開始を見送った

決めたい規則(利用者の指示)

  • 各ラウンドで 2 者がレビューできることを最優先にする。 誰が担当かより、2 つの目で見ることを優先する
  • 文脈が分かれていれば、同じランタイムを 2 つ立ててよい。 別プロセス・別文脈なら独立した意見になる
  • コードを書いたランタイム(ホスト)が担当に入ってよい。 輪番の形にはこだわらない
  • 他にランタイムが 1 つも無ければ、ホストを 2 つ走らせる形でよい

決めた規則をどこへ置くか

置き場所も決める。 規則が決まっても、置き場所が決まらなければ次に使う人へ届かない。

候補 何を置くか
plugins/ndf/scripts/lib/assignment.py 担当の選び方そのもの(使える者の数で分岐する実装)
SKILL.md(cross-review / cross-refactoring) 手順として読む担当の決まり方と、渡す引数
docs/ 2 つの Skill が共有する規則の正本(同一ランタイム 2 つ・ホストの参加を許す判断の理由)

agy を収束ループの担当から外して codex と kiro で回す運用は、リポジトリのどこにも記録が無い。
CLAUDE.md は今も cross-refactoring を「ホストを除く 3 者」、cross-review を
「codex / agy の両方」と書く。docs/ndf-version-decisions.md にも agy を外した記録は無い
grep -rn 'agy を外' --include='*.md' .issues/issue-624-478-648-design.md:196 の 1 件だけで、
完了報告の書き方の話であり運用の宣言ではない)。この課題で規則を決めたら、CLAUDE.md の記述も
あわせて直す。

どこで見つけたか

  • plugins/ndf/scripts/lib/assignment.pyreview_pool() / review_assign()(母集合は常に 3 者、そこから輪番で 1 者を外す)
  • plugins/ndf/skills/cross-review/scripts/state.pyinitcheck_auth が 1 件でも失敗すると die()
  • plugins/ndf/skills/cross-review/SKILL.md の「レビュワーの母集合」と --only(1 者へ絞る引数しか無い)

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

ideabase のマイルストーン 1(#30 #35 #36 #37 #39)の受け入れ条件は personal/worktime/ の振る舞いで、工程の手順そのものは対象外である。手順書と共通層を直さないと、次に使う人が同じ場所で止まる。

直さないと何が起きるか

担当のランタイムが 1 つでも使えないと、レビューの工程が開始できないか error で終わる。利用者が別の CLI へ再ログインするか、上限の回復(数日)を待つまで、開発が進まない。--host に嘘の値を渡して母集合をずらす回避策はあるが、記録に残る担当が実態と食い違う。

関連

由来

issue #478(使える者だけで回せるようにする)の続き。ideabase のマイルストーン 1(PR takemi-ohama/ideabase#40 / #43 / #44)で 3 回停止した。

cross-refactoring での決定(2026-09-18 追記)

cross-refactoring では、既定の担当から agy を外し、ホストのランタイムを輪番へ入れると決めた(利用者の指示)。提案も適用も codex / kiro / ホストの 3 者になる。この課題の「コードを書いたランタイム(ホスト)が担当に入ってよい」を、既定の構成として採った形である。

理由は実測にある。CLI の起動 199 回のうち、失敗したのは agy の 7 回(STALLED 4 回・NO_RESULT 3 回)だけで、提案の所要も agy が最も長かった(中央値 5 分。codex は 3 分、kiro は 2 分)。詳細は #664 の追記にある。

assignment.py は cross-review と共有しているため、この課題で決める共通の規則と食い違わないように揃える。

進行

モード: standard / 作業ツリー: .worktrees/feat/issue-727-participants / 計画: issues/issue-727-p6-participants-plan.md

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

閉じた理由

PR #793 で直り、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 本体enhancementNew feature or requestpriority: high実害・安全機構の欠落など、優先して対応する

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions