diff --git a/docs/specifications/README.md b/docs/specifications/README.md index 02cdfd8b6..cfceb4199 100644 --- a/docs/specifications/README.md +++ b/docs/specifications/README.md @@ -19,6 +19,7 @@ | [cross-review-launch-outcome.md](cross-review-launch-outcome.md) | 起動 1 回の結末の語彙(理由 9 語)と起動し直しの可否、利用上限と CLI の上限の検知、プロセスグループでの起動と停止。手順は `cross-review` の `SKILL.md` と `docs/` が正 | | [cross-review-participants-and-seats.md](cross-review-participants-and-seats.md) | 使える者だけで収束ループを始める共通層(認証の確認を止めない形・参加の母集合と足す者/外す者・毎ラウンド 2 席の埋め方・席の名前)と、再開で渡した引数の反映。手順は `cross-review` の `SKILL.md` と `docs/` が正 | | [cross-refactoring-apply-intake.md](cross-refactoring-apply-intake.md) | 担当が結果を残さない起動を 3 つの取り込みが同じ手順で受けること(範囲の確定・未検証のコミットの取り消し・結末の記録)、適用ラウンドの開き直しの判定と試行の上限 2 回、項目の無い適用ラウンドを作らないこと、帰属の段落の後ろから必須の記名を読むこと。手順は `cross-refactoring` の `SKILL.md` と `docs/` が正 | +| [cross-refactoring-participants.md](cross-refactoring-participants.md) | cross-refactoring の参加者(codex / kiro とホストを既定に足す者/外す者で変える・確認を通らない者を外して続ける)、提案と適用を同じ参加者で回す輪番、再開で渡した引数の反映、呼び手の無くなった共通層の旧関数の削除。手順は `cross-refactoring` の `SKILL.md` と `docs/` が正 | | [ndf-cleanup-and-bundle-closing.md](ndf-cleanup-and-bundle-closing.md) | 後片付けが止まる条件(git の拒否だけ)、実行前確認の要否を決める 3 つの問い、まとまりの課題を終わりの工程で閉じる条件と結果の 4 値、配布の記録の形と読み方。手順は `merged` / `progress-tracking` / `release` の SKILL.md が正 | | [ndf-agent-layers-unattended-run.md](ndf-agent-layers-unattended-run.md) | `/goal` の工程を conductor / supervisor / worker の 3 層で通す運転。持ち場 5 つ、報告の 2 段、続けさせる回数、上限(429)で中断した層の再開。手順は `development-workflow` の `references/agent-layers.md` が正 | | [ndf-context-window-metrics.md](ndf-context-window-metrics.md) | 会話の記録から context window を 3 層で測る部品(`transcript_agents.py`)の値の取り方と、`skill-stats --agents` の 4 つの表と印。値の取り方はこの文書が正 | diff --git a/docs/specifications/cross-refactoring-participants.md b/docs/specifications/cross-refactoring-participants.md new file mode 100644 index 000000000..bbe3ab264 --- /dev/null +++ b/docs/specifications/cross-refactoring-participants.md @@ -0,0 +1,255 @@ +# cross-refactoring: 参加する CLI が 1 者でも使えないと初期化が止まり、担当を外す手段が無く、適用の輪番が固定の 4 者で回る → 使える者だけで始まり、参加者は codex / kiro とホストを既定に足し引きでき、提案と適用が同じ参加者の中で回る + +## 目的 + +**参加する CLI のどれか 1 者が導入・認証されていなくても、構造改善の収束ループが始まる。** +使えない者とその理由は、初期化の出力と状態ファイルに残る。 + +**参加者は codex / kiro とホストが既定で、名指しで足し引きできる。** agy は足す者の指定で戻せる。 +ホストも外せる。 + +**提案と適用は同じ参加者で回る。** 適用の輪番は参加者の数のラウンドで 1 周し、ラウンド 1 は +参加者の 2 番目から始まる。既定の参加者では、ホストが claude / codex ならホストは最初に適用 +せず、ホストが agy / kiro ならラウンド 1 の適用担当はホストになる。担当の割り当てが返すのは +適用担当 1 者だけで、レビュー担当は無い。 + +**中断した収束ループを引数を変えて再開すると、その引数は反映されるか、反映しないと知らされる。** + +**使える者の決定・適用の輪番・再開の反映の規則は、共通層が 1 か所ずつ持つ。** cross-review と +同じ関数を使い、cross-refactoring が持つのは参加の母集合の既定と、再開の表と、結果を状態 +ファイルと終了コードへ写すことだけである。共通層の契約は +[使える者だけで始める収束ループ](cross-review-participants-and-seats.md)が持つ。 + +**手順と引数の表は +[`cross-refactoring` の SKILL.md](../../plugins/ndf/skills/cross-refactoring/SKILL.md)と +[`docs/`](../../plugins/ndf/skills/cross-refactoring/docs/01-state-and-propose.md)が正である。** +ここに書き写さない。この文書が扱うのは、そこに書かない決定の理由と、cross-refactoring 側の +契約である。 + +## 用語 + +本文は左の業務用語で書く。識別子は表・コードブロック・業務用語の初出の括弧書きにだけ置く。 +共通層の語(使える者・認証の確認・使える者の解決・再開の反映など)は +[共通層の確定仕様の用語](cross-review-participants-and-seats.md#用語)と同じ意味で使う。 + +| 業務用語 | 識別子 | 何を指すか | +| --- | --- | --- | +| 既定の参加者の表 | `DEFAULT_REFACTOR_RUNTIMES` | ホストを除いた既定の参加者(codex / kiro) | +| 参加の母集合の既定 | `refactor_pool(host)` | 既定の参加者の表とホストの和。ランタイムの固定の順 | +| 参加者の一覧 | `runtimes` | 状態ファイルの項目。参加者の記録の使える者と同じ値。提案の対象・作業ツリーの準備・適用の輪番が読む | +| 参加者の記録 | `participants` | 使える者の解決の結果。cross-review と同じ形で、埋め合わせの項目を持たない | +| 適用の輪番 | `impl_assign` | 参加者の一覧から適用担当 1 者を返す共通層の関数 | +| 輪番の包み | `impl_for_seq` | 輪番の通し番号から担当と要求するモデルを引く、cross-refactoring の唯一の入口 | +| 反映の表 | `RESUME_REPLACE_FIELDS` / `RESUME_NOTIFY_FIELDS` | 再開で渡した引数ごとに「反映する」か「知らせる」かを決める表 | +| 足す者 / 外す者 / 全員を要する指定 | `--include` / `--exclude` / `--require-all` | 参加者を名指しで変える引数と、確認の失敗で止める引数 | +| 初期化 / ラウンドの開始 / 完了報告 | `init` / `start-round` / `report` | `refactor.py` の副コマンド | + +## 対象範囲 + +| 扱う | 扱わない | +| --- | --- | +| cross-refactoring の参加者の決め方、適用の輪番、再開の反映、完了報告の参加者の節 | 共通層の関数の契約([共通層の確定仕様](cross-review-participants-and-seats.md)が持つ) | +| 呼び手が無くなった共通層の旧関数 4 つを消したこと | 起動した後に分かる使えなさで担当を自動的に外す仕組み(作らない) | +| リポジトリの根の指示書の要約(参加者と輪番と上限の既定) | 指示書の cross-refactoring の節のうち、参加者と輪番と上限以外の行(#799) | + +## 背景 + +**認証の確認が関門だった。** 従来の確認は 1 件の失敗でその場で終了した。参加者の 1 者が +入っていないだけで、構造改善の収束ループを開始できなかった。 + +**担当から特定の CLI を外す引数が無かった。** 参加者は「全ランタイム − ホスト」の固定の 3 者で、 +起動の失敗が多い者や利用上限に近い者を避けられなかった。 + +**存在しない役の記録が残っていた。** 担当の割り当ては適用担当とレビュー担当の 2 つを返していた。 +構造改善のレビュー工程は既に無く、レビュー担当はラウンドの記録と出力に書かれるだけだった。 +使える者が 2 者のときに「レビュー担当が 1 者になる」と見えたのは、この記録である。 + +**適用の輪番は、提案と別の 4 者の固定の母集合で回っていた。** 提案する者と適用する者の集合が +一致しないため、適用専用の母集合を状態ファイルと初期化の出力が持っていた。 + +**再開で渡した引数を 1 つも反映していなかった。** 上限を変えて再開しても、状態ファイルの値が +そのまま使われた。 + +## 決定と理由 + +| 決定 | 理由 | +| --- | --- | +| 参加の母集合の既定を codex / kiro とホストにする | 起動 199 回のうち失敗は agy の 7 回だけで、提案の所要の中央値も agy が最も長かった(5 分。codex 3 分、kiro 2 分)。提案は最も遅い者を待つため、所要はほぼ agy で決まっていた | +| 既定はホストを除いた部分だけを表に持ち、ホストを関数で足す | ホストが変わるたびに一覧を書き直さずに済む | +| ホストも外す者の指定で外せる | cross-refactoring ではホストが参加の母集合に入る。cross-review ではホストが母集合に無いため弾かれる | +| 提案と適用を同じ参加者で回し、適用専用の母集合を消す | 既定にホストを含めると、提案と適用の集合が同じになる。別に持つ理由が無くなる | +| レビュー担当を消し、割り当ては適用担当 1 者だけを返す | 記録だけを残すと、読み手が「このラウンドはこの 2 者がレビューした」と読む。役を消せば、席を埋める規則を持ち込む必要も無い | +| 適用の輪番は「ラウンド番号を参加者の数で割った余り」の位置を採る | ラウンド 1 が 2 番目の者から始まる。ホスト claude の既定(claude / codex / kiro)でも codex → kiro → claude の順になり、ホストが最初に適用しない。ホストが agy / kiro のときは、参加者がランタイムの固定の順に並ぶためホストが 2 番目に来て、ラウンド 1 の適用担当はホストになる(手順書との食い違いは #804 で扱う) | +| 提案者と適用者が同じランタイムになることを避けない | 適用ラウンドは複数の提案者の項目を 1 つの群にまとめる。群ごとに提案者を避けると、群の分け方そのものが変わる。適用の結果は検証と、後の工程の収束レビューが見る | +| 確認は着手前のテストより先に行う | 使える者がいなければ、テストに時間を使わずに止める | +| 認証の確認の結果の項目を状態ファイルに書かない | 読み手が無い。通らなかった者と理由は参加者の記録が持つ | +| 引数の型(カンマ区切りの名前と予約語 `none`)は cross-refactoring の初期化の部品が持つ | 共通層へ移すと cross-review の状態の部品も触ることになる | +| 完了報告の参加者の節は cross-review と同じ行の形にし、埋め合わせの行を持たない | cross-refactoring に席は無い | +| モデルの指定の警告は参加者だけを対象にする | 既定で外れる agy へ警告を出すと、使わない者の指定まで読み手に見せる | +| 呼び手の無くなった共通層の旧関数 4 つを消し、残らないことをテストで固定する | 片方の Skill にだけ古い形が残ると、使える者を決める規則が 2 か所になる | + +## 仕様 + +### 常に成り立つ条件 + +| 条件 | 破れたときの扱い | +| --- | --- | +| 参加者の一覧は、参加者の記録の使える者と同じ値である | 初期化と、参加者を作り直す再開が、同じ値を両方へ書く | +| 新規の状態ファイルに、適用専用の母集合とラウンドのレビュー担当が無い | 初期化とラウンドの開始が書かない。出力にも出さない | +| 使える者が 0 者、または全員を要する指定で欠けがあるとき、状態ファイルを作らない・書き換えない | 使える者の解決を書き込みの前に呼び、失敗は終了コード 4 で止める | +| この変更の前に始めた実行の状態ファイルを、書き換えずに読める | 適用の輪番は参加者の一覧から決まる。参加者の記録が無ければ完了報告は「記録なし」と出す | +| 共通層と両 Skill の部品に、旧関数 4 つの名前が残らない | `git grep -w` が 1 件でも当たればテストが落ちる | + +### 構成要素と責務 + +| 要素 | 責務 | 置き場所 | +| --- | --- | --- | +| 参加の母集合の既定 | 既定の参加者の表とホストを固定の順で返す | `plugins/ndf/scripts/lib/assignment.py` の `refactor_pool` | +| 適用の輪番 | 参加者の一覧から適用担当 1 者を返す | 同 `impl_assign` | +| 参加者の決定 | 共通層の使える者の解決を止めない確認で呼び、出力し、失敗を終了コード 4 へ写す | `cross-refactoring/scripts/refactor_lib/commands/setup.py` の `resolve_participants` | +| 初期化と再開 | 新規なら既定を置いて参加者を決める。再開なら反映の表を渡し、担当に関わる引数があれば参加者を作り直す | 同 `cmd_init` / `_resume` | +| 輪番の包み | 輪番を引く唯一の入口。ラウンドの開始・群の割り当て・結果なしの試行の交代先・最終ゲートの修正担当の 4 か所が読む | `refactor_lib/rounds.py` の `impl_for_seq` | +| 完了報告の参加者の節 | 母集合・使える者・外した者・足した者・確認を通らなかった者・再開で変えた値を出す | `refactor_lib/commands/report.py` の `_print_participants` | + +### 参加者の決め方 + +参加の母集合の既定に足す者を加え、外す者を除き、認証の確認を通った者を参加者の一覧にする。 +手順と例外は共通層の使える者の解決が持つ。 + +| ホスト | 既定の参加者 | +| --- | --- | +| claude | claude / codex / kiro | +| codex | codex / kiro | +| agy | codex / agy / kiro | +| kiro | codex / kiro | + +**外した者へは確認コマンドを呼ばない。** 既定で外れる agy は、足さない限り確認されない。 + +| 場面 | 標準エラー | 終了コード | 状態ファイル | +| --- | --- | ---: | --- | +| 全員が使える | ホスト・母集合・使える者の 1 行 | 0 | 作る | +| 確認を通らない者がいる | `⚠ <名前> を担当から外しました(<理由>)` を 1 者 1 行 | 0 | 作る | +| 使える者が 0 者 | 全員の理由を並べた 1 行 | 4 | 作らない | +| 全員を要する指定で欠けがある | 欠けた者と理由 | 4 | 作らない | +| 名前の矛盾(外す者が母集合に無い・足す者と外す者が重なる・`none` と名前の混在) | 何が矛盾したか | 4 | 作らない | + +綴りの誤りは引数の型が弾く(終了コード 2)。 + +### 適用の輪番 + +適用担当は `参加者の一覧[通し番号 % 参加者の数]` である。通し番号は適用ラウンドを開くたびに +進むため、1 つの提案ラウンドが複数の群を持てば、その分だけ輪番も進む。 + +| 通し番号 | 1 | 2 | 3 | 4 | 5 | 6 | +| --- | --- | --- | --- | --- | --- | --- | +| 参加者が claude / codex / kiro のときの担当 | codex | kiro | claude | codex | kiro | claude | + +参加者はランタイムの固定の順(claude / codex / agy / kiro)に並ぶ。そのため、既定の参加者で +ラウンド 1 の適用担当がホストになるかどうかはホストで決まる。 + +| ホスト | 既定の参加者 | ラウンド 1 の適用担当 | +| --- | --- | --- | +| claude | claude / codex / kiro | codex | +| codex | codex / kiro | kiro | +| agy | codex / agy / kiro | agy(ホスト) | +| kiro | codex / kiro | kiro(ホスト) | + +**結果なしの試行の交代先も同じ輪番から選ぶ。** 通し番号を 1 つずつ進め、その群で失敗した担当の +どれとも違う者が出た最初の番号を採る。参加者の数だけ進めても出なければ、替える先は無い。 + +**提案ラウンドの上限は、輪番の 1 周と対応しない。** 上限が切るのは提案の回数だけである。 + +### 再開で渡した引数の扱い + +| 扱い | 引数 | 何が起きるか | +| --- | --- | --- | +| 反映する | `--max-outer-rounds` / `--max-test-rounds` / `--max-fix-rounds` / `--max-items-per-round` / テストの制限時間 | 状態ファイルを書き換え、再開で変えた値の記録へ 1 件積み、`↻ <項目>: <旧> → <新>` を出す | +| 参加者を作り直す | `--exclude` / `--include` / `--require-all` | 認証の確認をやり直し、参加者の記録と参加者の一覧を置き換え、記録へ 1 件として積む。`none` で一覧を空へ戻す | +| 知らせる | ホスト・範囲・モデル・着手前のテスト・継続的統合の検査の名前・重要度の閾値・同期のコマンド・改修計画のファイル・起動のされ方・作業ディレクトリの根 | 状態ファイルは変えず、状態と違うときだけ「反映しない」を 1 行出す | + +**値が同じ引数は、行も記録も出さない。** 比べる前に形を揃える。着手前のテストはコマンドで、 +モデルは全ランタイムの辞書で、作業ディレクトリの根は解決したパスで比べる。 + +**作り直しの入力は、渡した引数と、渡さなかった引数の記録の値である。** 足す者の指定で agy を +足して始めた実行へ外す者の指定だけを渡すと、足した agy は残る。 + +**作り直しの失敗は、状態ファイルを書き換える前に起きる。** 終了コード 4 で止まる。 + +### 完了報告の「参加した者」 + +```text +## 参加した者 + +- 母集合: claude / codex / kiro +- 使える者: claude / codex +- --exclude で外した者: なし +- --include で足した者: なし +- 確認を通らなかった者: kiro(<理由>) +- 再開で変えた値: なし +``` + +参加者の記録を持たない状態ファイルでは「使える者: 記録なし」の 1 行だけを出す。確認を飛ばした +ときは、通らなかった者の行に「確認を飛ばした(NDF_SKIP_AUTH_CHECK)」と出す。 + +ラウンド表と改修計画の見出しには、レビュー担当・そのモデル・初回承認の列が無い。 + +## データ・設定 + +### 状態ファイル + +| 項目 | 新規の状態ファイル | この変更の前の状態ファイル | +| --- | --- | --- | +| `runtimes` | 使える者と同じ値 | そのまま読む。適用の輪番もこの値を使う | +| `participants` | 共通層が返す 7 項目(埋め合わせの項目は無い) | 無い。完了報告は「記録なし」 | +| `resume_changes` | 空の配列から始め、再開で変えた値を追記する | 無ければ空として読む | +| `impl_capable` | 書かない | 残っていても読まない | +| `rounds[].reviewers` / `rounds[].reviewer_models` | 書かない | 残っていても表示しない。指標の集計は読む経路を残す | + +### 初期化の引数と出力 + +| 引数 | 既定 | 再開の経路 | +| --- | --- | --- | +| `--exclude NAMES` / `--include NAMES` | 未指定(カンマ区切り・繰り返し可。`none` で空) | 渡せば参加者を作り直す | +| `--require-all` / `--no-require-all` | 未指定(新規は偽) | 渡せば参加者を作り直す | +| 上限 4 つとテストの制限時間 | 未指定(新規の経路が現行の既定を置く。提案ラウンドの上限は 3) | 渡せば反映 | + +**上限の既定を引数の側に置かない。** 引数の側に既定を置くと、再開で「渡さなかった」と「既定値を +渡した」を区別できない。 + +初期化の出力は参加者の一覧(`RUNTIMES` / `RUNTIMES_CSV`)を持ち、適用専用の母集合の変数を +持たない。ラウンドの開始の出力は、レビュー担当の変数を持たない。 + +### 消した共通層の関数 + +| 関数 | 置き換え先 | +| --- | --- | +| `check_auth`(1 件の失敗で止める確認) | `probe_auth` と使える者の解決の全員を要する指定 | +| `impl_pool`(適用専用の母集合) | 参加者の一覧 | +| `review_assign`(従来の席の割り当て) | `review_seats` | +| `assign`(従来の適用とレビューの割り当て) | `impl_assign` | + +## テスト観点 + +| 観点 | 確かめ方 | +| --- | --- | +| ホストごとの既定の参加者、足す者・外す者での増減、ホストを外せること | `plugins/ndf/skills/cross-refactoring/tests/test_init.py` | +| 確認を通らない者を外して続け、全員を要する指定と 0 者では状態ファイルを作らずに終了コード 4 | 同 | +| 再開が上限を反映し、他の引数を知らせ、担当に関わる引数でだけ参加者を作り直し、渡さなかった値を記録で補うこと | 同 | +| 適用の輪番が参加者の数で 1 周し、ラウンド 1 が参加者の 2 番目から始まること | `plugins/ndf/scripts/tests/test_lib_assignment.py` / `cross-refactoring/tests/test_assignment.py` | +| ラウンドの開始がレビュー担当を出さず、記録にも書かないこと | `cross-refactoring/tests/test_start_round_emits_runtimes.py` | +| 完了報告と改修計画にレビュー担当の列が無く、母集合を 1 行で出すこと | `cross-refactoring/tests/test_rounds.py` / `test_plan_comment.py` | +| この変更の前の状態ファイルをラウンドの開始と完了報告が読めること | `cross-refactoring/tests/test_rounds.py` / `test_start_round_emits_runtimes.py` | +| 結果なしの試行の交代先が参加者の数の範囲で選ばれること | `cross-refactoring/tests/test_apply_attempts.py` | +| 手順書と指示書の語が新しい参加者と輪番を書くこと | `cross-refactoring/tests/test_skill_terms.py` | +| 旧関数 4 つが共通層と両 Skill の部品に残らないこと | `scripts/tests/test_shared_lib_layout.py` | + +## 関連リンク + +- [issue #664](https://github.com/devbasex/ai-plugins/issues/664) — 担当を外す引数が無く、使える者が 2 者だとレビュー担当が 1 者になる +- [issue #736](https://github.com/devbasex/ai-plugins/issues/736) — 指示書の提案ラウンドの上限の既定 +- [issue #727](https://github.com/devbasex/ai-plugins/issues/727) — 使える者から担当を割り当てる共通層 +- [PR #800](https://github.com/devbasex/ai-plugins/pull/800) — 実装 +- [使える者だけで始める収束ループ](cross-review-participants-and-seats.md) — 共通層の契約と cross-review 側 +- [結果なしの取り込み](cross-refactoring-apply-intake.md) — 適用ラウンドの開き直しと試行の上限 +- [`cross-refactoring` の手順](../../plugins/ndf/skills/cross-refactoring/SKILL.md) +- [`cross-refactoring` の状態と提案の手順](../../plugins/ndf/skills/cross-refactoring/docs/01-state-and-propose.md) diff --git a/docs/specifications/cross-review-participants-and-seats.md b/docs/specifications/cross-review-participants-and-seats.md index 90c2f742a..fbe0175be 100644 --- a/docs/specifications/cross-review-participants-and-seats.md +++ b/docs/specifications/cross-review-participants-and-seats.md @@ -51,11 +51,10 @@ | 扱う | 扱わない | | --- | --- | -| 共通層の使える者の解決・認証の確認・席の埋め方・適用の輪番・席の名前・再開の反映 | cross-refactoring の参加の母集合と担当の差し替え(別の課題が持つ) | +| 共通層の使える者の解決・認証の確認・席の埋め方・適用の輪番・席の名前・再開の反映 | cross-refactoring の参加の母集合・適用の輪番の使い方・再開の表([cross-refactoring の参加者](cross-refactoring-participants.md)が持つ) | | cross-review の新規と再開の初期化、担当の決まる順、席の名前が流れる経路、完了報告の参加者の節 | 起動した後に分かる使えなさで担当を自動的に外す仕組み | -適用の輪番は共通層に入っているためここで扱う。呼び出す側は cross-refactoring だけであり、 -その置き換えはこの時点では入っていない。 +適用の輪番は共通層に入っているためここで扱う。呼び出す側は cross-refactoring だけである。 ## 背景 @@ -90,7 +89,7 @@ | 監視では、席の形に合わない名前をそのまま返す | 担当名を任意の骨格で受ける cross-refactoring の経路がある。形で弾くとその経路が壊れる | | 担当はラウンドの記録から先に見る | 再開で 1 者指定を変えても、過去のラウンドの担当が変わらない | | 前のラウンドの検査にも、そのラウンドの担当を渡す | 固定の 2 者で数えると、担当が違うラウンドで担当でない者を結果なしと読み、修正の記録が無いまま次へ通す | -| 適用の輪番は「ラウンド番号を参加者の数で割った余り」の式を保つ | ラウンド 1 が 2 番目の者から始まるため、ホストが最初に適用する形にならない | +| 適用の輪番は「ラウンド番号を参加者の数で割った余り」の式を保つ | ラウンド 1 が 2 番目の者から始まる。参加者はランタイムの固定の順に並ぶため、既定の参加者でホストが最初に適用しないのはホストが claude / codex のときだけで、agy / kiro のときはラウンド 1 の担当がホストになる | | 再開の反映を共通層に置き、どの引数を「反映する」「知らせる」にするかは Skill ごとの表が持つ | 片方の Skill の再開の経路だけを直すと、もう片方に引数を捨てる形が残る | | 状態ファイルに載る引数は表のどちらかに必ず載せ、引数の既定を未指定にする | 黙って捨てる引数を残さない。既定値と同じ値なら渡していないとみなす形では、上限を既定値へ戻す操作を区別できない | | 担当に関わる引数を渡した再開でだけ、認証の確認をやり直して参加者を作り直す | 途中で担当が入れ替わると、前のラウンドの記録と突き合わせられなくなる | @@ -232,9 +231,10 @@ start-round → REVIEWERS="codex claude-2" ### 適用の輪番 実装担当 1 者を「ラウンド番号を参加者の数で割った余り」の位置から選ぶ。式はこの変更の前と -同じで、除数だけが参加者の数になる。ラウンド 1 が 2 番目の者から始まるため、ホストが最初に -適用する形にならない。呼び出す側は cross-refactoring だけであり、その置き換えはこの時点では -入っていない。 +同じで、除数だけが参加者の数になる。ラウンド 1 は 2 番目の者から始まる。参加者はランタイムの +固定の順に並ぶため、既定の参加者でホストが最初に適用しないのはホストが claude / codex のとき +だけで、agy / kiro のときはラウンド 1 の担当がホストになる。呼び出す側は cross-refactoring だけで、使い方は +[cross-refactoring の参加者](cross-refactoring-participants.md)が持つ。 ### 再開で渡した引数の扱い