PJR-ADZ6 register の実行で pipeline 用でない agent が自動で選ばれる
1. 課題内容
exec run --register を --executor-by/--reporter-by なしで起動すると、owner の role で agent が見つからない場合に stage_role を持たない翻訳専用の agent(gemma26-translator)が選ばれる
2. 影響範囲
| 観点 | 影響 |
|---|---|
| スコープ | exec run --register を --by・--executor-by・--reporter-by なしで起動した場合の agent 選択 |
| スケジュール | 影響なし |
| コスト | 不適切な agent での実行と、その中断・やり直しの手間 |
| 品質 | 調査や実装に向かない agent(翻訳専用など)が成果物を書き、品質が落ちる |
| 関係者 | exec を起動する利用者と orchestrator |
3. 対応方針
| 項目 | 内容 |
|---|---|
| 原因 | src/exec-run.ts の resolveRegisterCommand は、owner の role に合う agent がない場合に selectCandidates の先頭を選ぶ。この候補に stage_role を持たない agent(gemma26-translator)が含まれる。agent の roles は規約上空配列のため、owner からの選択はほぼ常にこの経路に落ちる。 |
| 対応策 | 推奨案は (b)。pipeline の指定がない場合も、stage_role: executor と stage_role: reporter の agent から自動で選んで 2 段階で実行する。該当する agent がいない場合は --executor-by / --reporter-by を求めるエラーにする。代替案 (a) は、自動選択をやめて常にエラーにする。 |
| 依存事項 | command-reference の --register の agent 選択の記述(owner・role からの自動選択は行わない旨)の改訂 |
| 完了条件 | pipeline の指定なしで stage_role を持たない agent が自動で選ばれないことをテストで確認する。pm-members の規約「agent は全員 stage_role を持つ」と、command-reference の記述が実装と一致する。 |
4. 対応結果
推奨案 (b) で対応した。
- 解決内容:
src/exec-run.tsのisRegisterPipelineRequestedは、--byを指定しない場合に常に pipeline 実行を選ぶ。resolveRegisterPipelineCommandは、--executor-by/--reporter-byがどちらも無い場合にstage_role: executor(mode: editまたは未指定)とstage_role: reporterの agent からpriority順に自動で選ぶ。該当する agent がいない段がある場合は、明示指定を求めるエラーにする。resolveRegisterCommandは--by指定時の単一 agent 実行だけを扱い、owner・role・汎用候補からの自動選択を廃止した。 - 確認結果:
tests/src/exec-register.test.tsに、stage_roleの無い agent(priorityが最も小さい翻訳専用 agent を想定)とmode: reviewの executor を候補から除外して選ぶテスト、stage_roleの無い agent しかいない場合はエラーになるテスト、--byが無いと owner 一致の agent を自動選択しないテストを追加した。 - 文書: specdojo:command-reference の
--registerの agent 選択の記述(既定は pipeline、stage_roleからの自動選択、owner・role からは選ばない)を実装に合わせて改訂した。 - 再発防止策: register の自動選択は、
stage_roleで段を指定するselectCandidatesだけを経由する。stage_roleを持たない agent は段指定の選択で除外されるため、自動選択の対象にならない。 - 残課題:
.specdojo/agent-members.yaml冒頭の規約コメント「type: agentのメンバーは全員stage_roleを持つ」に対し、gemma26-translatorはstage_roleを持たない(agent run --by専用)。同ファイルは agent の書き込み禁止対象のため、例外の明記または規約の見直しは人が行う。 - 統合の経緯: 2026-10-12 の exec run で runner の親検証 7 種は通ったが、executor が
specdojo index buildをnot_runと記録したことで run が止まった(出力先の.specdojo/doc-index.jsonは agent の書き込み禁止対象)。利用者の承認を得て orchestrator が exec ブランチへ commit し(57c36a760)、develop を取り込んで型検査と単体テスト 2014 件の通過を確かめたうえで、develop へ--no-ffで merge した(013daa695)。この止まり方は prj-0001:pjr-hj99-index-build-not-run-blocks で扱う。
5. 関連ドキュメント
- prj-0002 の PJR-G4QN(
project/prj-0002/develop上): 事象が起きた実行(1 回目にgemma26-translatorが選ばれ、中断した)。 - specdojo:command-reference:
--executor-by/--reporter-byと agent 選択の記述。