PJR-7WFE Schedule の phase に agent の by-name 指定を追加する
1. 概要
Schedule(sch-strategy-<track>.yaml)の phase は agent_pipeline.stages[].proficiency と capability による自動選択だけで agent を決めており、nickname を埋め込まない設計になっている。自動選択は「条件を満たす agent を priority 順に選ぶ」だけで、provider ごとの利用制限(rate limit)の枠を計画できない。実際に次の状況が起きている。
- codex の利用制限に当たり、claude へ切り替えて再開した(PJR-08K1、PJR-19HX)。
- review-pass で strategy の
proficiency: expertがgenerated/ready.jsonのagent_pipelineに反映されず normal(qwen)が選ばれたため、--executor-byで明示して回避した(2026-09-17)。 - 夜間の grade(codex)と日中の register 実行(codex)が同じ枠を消費する。
「この track の refine は codex、review は claude、夜間 grade は codex」のように枠を割り当てて設計するため、job が既に持つ agent.executor / agent.reporter と同じ by-name 指定を strategy の phase にも追加する。自動選択は「誰でもよい」タスク向けに残し、両方を使い分ける。
1.1. 決定事項
- strategy の phase(
phase_sets.<name>[]とcross_deliverable_passes[])にagent: { executor: <nickname>, reporter: <nickname> }を追加する。agent_pipelineと併存可。owner_rules[].phase_overridesでも上書きできる。 - 解決順序は
--executor-by/--reporter-by(緊急の差し替え)> phase のagent(by-name)>agent_pipelineの proficiency / capability による自動選択。 - by-name で指定した agent が rate limit 中の場合、他の agent へフォールバックせず待つ(
exec run --autoは対象タスクを選ばず、exec resumeの再開対象として扱う)。差し替えは人が--executor-byで行う。 - nickname は
pm-members.yamlに存在しstage_roleが一致することをschedule buildで検証する(job と同じ検証)。 - job / routine は現行の
agent指定で足りるため変更しない。grade の単段化(PJR-W5JT)ではrun-per-document.shの--stage-1-executor codex-expert-executorを明示する。
2. 完了条件
sch-strategy.schema.yamlの phase と cross_deliverable_pass にagent(executor 必須、reporter 任意)があり、owner_rules[].phase_overridesでも指定できる。schedule buildが nickname の存在とstage_roleの一致を検証し、不一致は build を失敗させる。sch-track-<track>.yamlとgenerated/ready.jsonに by-name が引き継がれ、exec run --auto/--taskがその agent で claim する。- 指定 agent が rate limit 中のとき自動選択へ落ちず、待機として記録される。
--executor-byによる差し替えが by-name より優先される。 - review-pass で
proficiency: expertが ready.json に反映されなかった原因が特定・修正され、自動選択の track でも strategy の proficiency が守られる。 sch-strategy-data-flow-pdca.yamlの review-pass をagent: { executor: codex-expert-review-executor, reporter: gemma-reporter }に書き換え、schedule build --force後のexec run --dry-runがその agent を表示する。- 単体テストで解決順序、検証、待機動作が検証され、
docs/ja/specdojo/guides/schedule-design-guide.mdとexec-config-guide.mdに by-name の使い分けが記載されている。 npm run checkが通過している。
3. 作業内容
| No | 作業 | 担当 | 状態 | メモ |
|---|---|---|---|---|
| 1 | schema に agent を追加し、schedule build で nickname と stage_role を検証する | DEV | done | phase・override・cross-deliverable pass に対応 |
| 2 | exec-strategy / exec-run で解決順序と rate limit 時の待機動作を実装し、テストを追加する | DEV | done | CLI > by-name > 自動選択。by-name は候補を1件に固定 |
| 3 | review-pass の proficiency が ready.json に落ちない原因を特定して修正する | DEV | done | strategy index の track 間衝突と Ready 外タスクの復元漏れを修正 |
| 4 | sch-strategy-data-flow-pdca.yaml の review-pass を by-name に書き換え、track を再生成して dry-run で確認する | ARC | done | codex-expert-review-executor / gemma-reporter を確認 |
| 5 | schedule-design-guide / exec-config-guide に自動選択と by-name の使い分けを記載する | DEV | done | 解決順序、rate limit、通常固定と緊急差し替えの使い分けを追記 |
4. 対応結果
- strategy と生成 track に
agent.executor/agent.reporterを保持し、exec refreshで Ready タスクへ引き継ぐようにした。owner_rules[].phase_overridesとcross_deliverable_passesにも対応した。 schedule buildはpm-members.yamlの nickname の一意な存在と、executor / reporter のstage_role一致を検証する。- 実行時は CLI の
--executor-by/--reporter-by、phase の by-name、自動選択の順に解決する。by-name は実行候補を1件に固定するため、rate limit 時に別 agent へフォールバックせず待機となる。 - review-pass の事象は、strategy index が同名の phase set / suffix を track で区別せず、後から読んだ別 track の normal 条件で expert 条件を上書きしていたことが主因だった。index のキーを track 修飾し、同名 phase の回帰テストを追加した。あわせて Ready 外(claim 済みなど)の
--task実行でagent_pipelineを復元していなかった経路も修正し、by-name と stage 条件を保持した。 data-flow-pdcaの review-pass を codex-expert-review-executor / gemma-reporter に固定し、track 再生成後の dry-run で両 agent を確認した。- specdojo:schedule-design-guide と specdojo:exec-config-guide に自動選択との使い分け、解決順序、rate limit 時の動作を追記した。残課題はない。
5. 関連ドキュメント
- specdojo:schedule-design-guide
- specdojo:exec-config-guide
- prj-0001:pjr-w5jt-grade-single-stage-nightly
docs/specdojo/schemas/v1/sch-strategy.schema.yamldocs/specdojo/schemas/v1/job.schema.yamlsrc/exec-strategy.tssrc/exec-run.ts