claude-code-conductor 2.0.0__tar.gz → 2.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/agents/planner.md +37 -19
  2. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/session_utils.py +1 -1
  3. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/worktree_guard.py +2 -2
  4. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/dev-workflow/SKILL.md +4 -4
  5. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/develop/SKILL.md +4 -1
  6. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/parallel-agents/SKILL.md +18 -42
  7. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/promote-pattern/SKILL.md +1 -1
  8. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/start/SKILL.md +4 -4
  9. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/task-routing/SKILL.md +5 -6
  10. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.gitignore +7 -0
  11. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/CHANGELOG.md +121 -0
  12. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/PKG-INFO +11 -14
  13. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/README.md +10 -13
  14. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/hatch_build.py +3 -0
  15. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/src/c3/__init__.py +1 -1
  16. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/src/c3/_excludes.py +3 -0
  17. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_planner_check.py +18 -221
  18. claude_code_conductor-2.0.0/.claude/agents/tdd-develop.md +0 -119
  19. claude_code_conductor-2.0.0/.claude/skills/worktree-tdd-workflow/SKILL.md +0 -93
  20. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/CLAUDE.md +0 -0
  21. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/agents/architect.md +0 -0
  22. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/agents/code-reviewer.md +0 -0
  23. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/agents/developer.md +0 -0
  24. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/agents/doc-writer.md +0 -0
  25. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/agents/interviewer.md +0 -0
  26. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/agents/project-setup.md +0 -0
  27. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/agents/security-reviewer.md +0 -0
  28. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/agents/systematic-debugger.md +0 -0
  29. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/agents/tester.md +0 -0
  30. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/docs/settings.json.md +0 -0
  31. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/consolidate_memory.py +0 -0
  32. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/permission_handler.py +0 -0
  33. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/post_tool.py +0 -0
  34. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/pre_compact.py +0 -0
  35. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/pre_tool.py +0 -0
  36. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/record_review_decision.py +0 -0
  37. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/record_tier_outcome.py +0 -0
  38. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/restore_session.py +0 -0
  39. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/review_hint_inject.py +0 -0
  40. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/schema.sql +0 -0
  41. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/select_tier.py +0 -0
  42. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/session_start.py +0 -0
  43. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/session_stop.py +0 -0
  44. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/statusline.py +0 -0
  45. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/stop.py +0 -0
  46. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/hooks/subagent_log.py +0 -0
  47. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/memory/.gitkeep +0 -0
  48. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/permission_rules.json +0 -0
  49. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/rules/code-review-checklist.md +0 -0
  50. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/rules/promoted/index.md +0 -0
  51. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/rules/security-review-checklist.md +0 -0
  52. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/settings.json +0 -0
  53. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/code-review/SKILL.md +0 -0
  54. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/doc/SKILL.md +0 -0
  55. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/extract-lib/SKILL.md +0 -0
  56. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/init-session/SKILL.md +0 -0
  57. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/mcp-config/SKILL.md +0 -0
  58. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/pattern-status/SKILL.md +0 -0
  59. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/report-timestamp/SKILL.md +0 -0
  60. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
  61. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/skills/setup/SKILL.md +0 -0
  62. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/.claude/state/.gitkeep +0 -0
  63. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/LICENSE +0 -0
  64. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/pyproject.toml +0 -0
  65. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/src/c3/__main__.py +0 -0
  66. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/src/c3/_terminal.py +0 -0
  67. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/src/c3/cli.py +0 -0
  68. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/src/c3/cli_doctor.py +0 -0
  69. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/src/c3/cli_init.py +0 -0
  70. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/src/c3/cli_list.py +0 -0
  71. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/src/c3/cli_plan.py +0 -0
  72. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/src/c3/cli_tier.py +0 -0
  73. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/src/c3/cli_update.py +0 -0
  74. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/src/c3/db.py +0 -0
  75. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/src/c3/paths.py +0 -0
  76. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/src/c3/plan_validator.py +0 -0
  77. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/__init__.py +0 -0
  78. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/conftest.py +0 -0
  79. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/__init__.py +0 -0
  80. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_consolidate_memory.py +0 -0
  81. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_permission_handler.py +0 -0
  82. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_pip_reinstall_reminder.py +0 -0
  83. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_post_tool.py +0 -0
  84. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_pre_tool.py +0 -0
  85. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_record_tier_outcome.py +0 -0
  86. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_restore_session.py +0 -0
  87. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_review_hint_inject.py +0 -0
  88. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_select_tier.py +0 -0
  89. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_select_tier_escalation.py +0 -0
  90. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_session_start.py +0 -0
  91. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_session_stop.py +0 -0
  92. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_session_utils.py +0 -0
  93. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_settings_local_absolute_paths.py +0 -0
  94. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_similarity_boost.py +0 -0
  95. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_statusline.py +0 -0
  96. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_statusline_template_sync.py +0 -0
  97. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_subagent_log.py +0 -0
  98. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_sync_check.py +0 -0
  99. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/hooks/test_template_guard.py +0 -0
  100. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/skills/__init__.py +0 -0
  101. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/skills/test_session_backlog_reconciliation.py +0 -0
  102. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/skills/test_start_skill_bugfix_flow.py +0 -0
  103. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/skills/test_start_skill_security_audit_phase.py +0 -0
  104. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/skills/test_task_routing_skill.py +0 -0
  105. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_cli_init.py +0 -0
  106. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_cli_list.py +0 -0
  107. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_cli_plan.py +0 -0
  108. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_cli_tier.py +0 -0
  109. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_docstring_consistency.py +0 -0
  110. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_excludes.py +0 -0
  111. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_paths.py +0 -0
  112. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_plan_validator.py +0 -0
  113. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_pre_compact.py +0 -0
  114. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_pre_tool_hook.py +0 -0
  115. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_precompact_additional.py +0 -0
  116. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_precompact_toctou_fixes.py +0 -0
  117. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_session_utils_additional.py +0 -0
  118. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_statusline.py +0 -0
  119. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_stop_additional.py +0 -0
  120. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_stop_hook.py +0 -0
  121. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_stop_precompact_fixes.py +0 -0
  122. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_sync_template_stop.py +0 -0
  123. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_template_pre_tool_hook.py +0 -0
  124. {claude_code_conductor-2.0.0 → claude_code_conductor-2.1.0}/tests/test_worktree_guard.py +0 -0
@@ -53,29 +53,46 @@ requirements-report・architecture-report・各種レビューレポートを統
53
53
 
54
54
  plan-report の YAML フロントマターは `parallel-agents` skill(親 Claude の Agent ツール並列起動 + 公式 `isolation: "worktree"`)で並列実行されることを前提に設計する。直列の依存チェーンを書いてしまうと並列実行の意味が消えるので、以下のルールを守る。
55
55
 
56
- **depth 1 制限の注意**: Claude Code のサブエージェントは更にサブエージェントを spawn できない。これにより `tdd-develop`(内部で tester / developer を Agent ツールで呼ぶ設計)は **`parallel-agents` skill の並列起動の対象外** で、親 Claude のペルソナ採用パターンで逐次実行される。よって **`tdd-develop` を含む wave は 1 タスクのみ** が望ましい(複数 tdd-develop を 1 wave に入れても並列度 1 で消化されるだけで意味が薄い)。
57
-
58
56
  ### depends_on の付け方
59
57
 
60
58
  1. **真の依存だけに絞る** — タスク B がタスク A の出力(コードのシグネチャ・型・関数名・ファイルそのもの)に**実際に依存している**ときのみ `B.depends_on: [A]` とする。「順序を守りたい」「念のため」「同じ機能だから」レベルの依存は書かない
61
59
  2. **直列化の自己チェック** — 出力直前に「`depends_on` チェーンの最大長が `タスク数 / 2` を超えていないか」を確認する。N 個のタスクが N-1 段の依存チェーンになっていたら **並列度 1** で並列実行を使う意味がない
62
60
  3. **レビュー系タスクは末尾に集約** — `code-reviewer` / `security-reviewer` は `read_only: true` で全 dev タスクに `depends_on` を付ける(すべての実装が終わった後に走る)
63
61
 
62
+ ### TDD タスクは 3-wave に分解する(v2.1.0+)
63
+
64
+ v2.1.0 で `tdd-develop` エージェントを廃止した。TDD を伴う機能実装は、planner が以下の **3 タスクペア**に分解する:
65
+
66
+ | 役割 | agent | 順序 | writes 例 |
67
+ |---|---|---|---|
68
+ | Red: 失敗するテストを書く | `tester` | 先行 | `tests/skills/test_foo.py`, `.claude/reports/test-report-test-foo.md` |
69
+ | Green: 最小実装でテストを通す | `developer` | Red に depends_on | `src/c3/foo.py` |
70
+ | Green 確認: 全テスト合格を確認 | `tester` | Green に depends_on | `.claude/reports/test-report-confirm-foo.md` |
71
+
72
+ これにより:
73
+
74
+ - **Red 並列**: 独立機能の Red を 1 wave で並列起動(例: `auth.py` の Red と `payment.py` の Red を同時に書く)
75
+ - **Green 並列**: 各機能の Green を 1 wave で並列起動
76
+ - **Green 確認並列**: 確認 tester を 1 wave で並列起動
77
+
78
+ 4. **TDD タスクの命名規約(推奨)** — `test-{機能}` / `impl-{機能}` / `confirm-{機能}` の 3 タスクで 1 機能を表現する。命名は強制ではないが、レポート整理と `depends_on` の見通しのために統一を推奨する
79
+ 5. **test-report ファイル名の衝突回避** — Red 用 tester と Green 確認用 tester は **別 worktree** で動くため物理衝突は起きないが、main 取り込み後の上書きを避けるため `writes` には `.claude/reports/test-report-{task_id}.md` のように **task_id ベース**のファイル名を宣言する。tester agent 内では `report-timestamp` Skill でタイムスタンプ取得 → 出力ファイル名を `writes` 宣言と一致させるよう、各 `prompt` に明記する
80
+ 6. **Stuck Signal の経路は変わらない** — developer が 3 回以上同じ問題で詰まった場合 `.claude/reports/debug-needed-*.md` を出力する仕様は維持。Green wave が失敗した場合は `parallel-agents` skill 2-E(リトライ / スキップ / 中断)で吸収する。リトライ時に親 Claude が後続 wave で `systematic-debugger` を呼ぶ運用に統一
81
+
64
82
  ### タスクの粒度(基本: ファイル/モジュール単位)
65
83
 
66
- 4. **ファイル/モジュール境界で分解** — 互いに独立したファイル群を別タスクに分ける。例:
67
- - `src/auth/login.py` の TDD と `src/payment/checkout.py` の TDD は独立 → 別タスクで並列可能
68
- - `src/auth/login.py` と `src/auth/logout.py` は同じモジュール内なら 1 タスクにまとめる、または別タスクで `concurrency_group` を共有
69
- 5. **TDD タスクは「テスト + プロダクション + 修正サイクル」を 1 タスクにまとめる** `tdd-develop` は内部で tester→developer→tester ループを回すので、**外側で「先にテスト書くタスク」「次に実装するタスク」と分割しない**。1 機能 = 1 TDD タスク
70
- 6. **粒度判断のデフォルト** — 細かすぎ(関数 1 個 = 1 タスク)でも粗すぎ(モジュール全体 = 1 タスク)でもなく、**ファイル / 機能単位**を起点に、依存と独立性を見て調整する
84
+ 7. **ファイル/モジュール境界で分解** — 互いに独立したファイル群を別タスクに分ける。例:
85
+ - `src/auth/login.py` の TDD と `src/payment/checkout.py` の TDD は独立 → 別の 3-wave ペアで並列可能
86
+ - `src/auth/login.py` と `src/auth/logout.py` は同じモジュール内なら 1 つの 3-wave ペアにまとめる、または別ペアで `concurrency_group` を共有
87
+ 8. **粒度判断のデフォルト** 細かすぎ(関数 1 = 1 タスク)でも粗すぎ(モジュール全体 = 1 タスク)でもなく、**ファイル / 機能単位**を起点に、依存と独立性を見て調整する
71
88
 
72
89
  ### writes フィールドの埋め方
73
90
 
74
- 7. **`writes` を必ず列挙(`read_only: true` タスクは除く)** — 各タスクが書き込むファイルパスを `tasks[].writes` に書く。`parallel-agents` skill が並列起動後に各 worktree から `writes` のファイルを取り込むため、欠落していると成果物が main に届かない。ただし `read_only: true`(レビュー系)タスクはファイルを書かないため `writes` フィールド自体を省略すること
75
- 8. **同一ファイルへの書き込みは 1 タスクに集約する** — 複数タスクの `writes` で同じファイルを宣言すると、`parallel-agents` skill が各 worktree から取り込むときにどちらの版を採用すべきか決定不能になる。解消手段は実質的に以下の 2 つに限られる:
76
- - **(a) タスクをまとめる** — 同一ファイルを書く処理を 1 タスクに統合する
77
- - **(b) そのファイルを書く権限を 1 タスク専属にする** — 他のタスクの `writes` リストから除外する。先行タスクが stub / placeholder を作って後発タスクが上書きする設計は **採用しない**(取り込み時に衝突するため)
78
- 9. **統合ファイル(エントリポイント等)は最後の wave 専属にする** — `main.js` のような「各機能を結線する統合ファイル」は、全機能 wave が出揃った後の最終 wave に専属で書かせる。先行 wave で stub を作る設計は採用しない。代わりに先行 wave は各機能ファイル(例: `calc.js` / `currency.js`)のみを書き、最終 wave がそれらを import して統合する
91
+ 9. **`writes` を必ず列挙(`read_only: true` タスクは除く)** — 各タスクが書き込むファイルパスを `tasks[].writes` に書く。`parallel-agents` skill が並列起動後に各 worktree から `writes` のファイルを取り込むため、欠落していると成果物が main に届かない。ただし `read_only: true`(レビュー系)タスクはファイルを書かないため `writes` フィールド自体を省略すること
92
+ 10. **同一ファイルへの書き込みは 1 タスクに集約する** — 複数タスクの `writes` で同じファイルを宣言すると、`parallel-agents` skill が各 worktree から取り込むときにどちらの版を採用すべきか決定不能になる。解消手段は実質的に以下の 2 つに限られる:
93
+ - **(a) タスクをまとめる** — 同一ファイルを書く処理を 1 タスクに統合する
94
+ - **(b) そのファイルを書く権限を 1 タスク専属にする** — 他のタスクの `writes` リストから除外する。先行タスクが stub / placeholder を作って後発タスクが上書きする設計は **採用しない**(取り込み時に衝突するため)
95
+ 11. **統合ファイル(エントリポイント等)は最後の wave 専属にする** — `main.js` のような「各機能を結線する統合ファイル」は、全機能 wave が出揃った後の最終 wave に専属で書かせる。先行 wave で stub を作る設計は採用しない。代わりに先行 wave は各機能ファイル(例: `calc.js` / `currency.js`)のみを書き、最終 wave がそれらを import して統合する
79
96
 
80
97
  ### 出力直前の自己チェックリスト
81
98
 
@@ -85,19 +102,20 @@ plan-report の YAML フロントマターは `parallel-agents` skill(親 Clau
85
102
  - [ ] レビュータスク(read_only:true)が全 dev タスクに depends_on を持っているか
86
103
  - [ ] `tasks[].id` が一意で、`depends_on` の参照先が全て存在するか
87
104
  - [ ] `depends_on` を空配列(`[]`)で書いていないか(無依存ならフィールド自体を省略)
105
+ - [ ] TDD を伴う機能は Red tester / Green developer / 確認 tester の 3 タスクに分解しているか
88
106
 
89
107
  ### タスクあたりの所要時間制約
90
108
 
91
109
  `parallel-agents` skill は **親 Claude が Agent ツールで子 Agent の返却を待つ**間ブロックされる。長時間タスクが含まれると全 wave の完了が遅延し、ユーザー体験が著しく悪化する。
92
110
 
93
- 10. **1 タスクは 15 分以内に終わる粒度で分解する** — `tdd-develop` tester→developer→tester ループでも 15 分を上限の目安にする。長くなりそうな機能は (a) ファイル境界でタスク分割、(b) MVP と機能拡張で別タスク化、のいずれかで時間を切る
111
+ 12. **1 タスクは 15 分以内に終わる粒度で分解する** — 3-wave 分解した各 task(Red / Green / 確認)それぞれが 15 分以内に収まるよう機能を切る。長くなりそうな機能は (a) ファイル境界でさらに分割、(b) MVP と機能拡張で別 3-wave 化、のいずれかで時間を切る
94
112
  - 自己チェックリストに追加: `[ ] 想定実行時間が 15 分を超えるタスクがないか`
95
113
 
96
114
  ### YAML フロントマターの落とし穴
97
115
 
98
116
  実装時に踏みやすい入力ミス。dry-run で検出できるが、出力前に planner 側で潰しておく:
99
117
 
100
- 11. **`depends_on: []` を空配列で書かない** — `c3 plan validate` の構造チェックで lint されるリスクがある(依存が無いタスクは `depends_on` フィールド**自体を省略**する慣習)
118
+ 13. **`depends_on: []` を空配列で書かない** — `c3 plan validate` の構造チェックで lint されるリスクがある(依存が無いタスクは `depends_on` フィールド**自体を省略**する慣習)
101
119
 
102
120
  ### 直列・並列交互パターンの取り扱い
103
121
 
@@ -122,15 +140,15 @@ Stage 1: dev_a, dev_b, dev_c (並列)
122
140
 
123
141
  ## 自動検査対象(PostToolUse hook)
124
142
 
125
- 配布元では `.dev/hooks/_planner_check.py`(PostToolUse Write/Edit)が `.claude/reports/plan-report-*.md` の YAML frontmatter を機械検査する。以下 4 ルールに違反すると stderr に `[PlannerCheck WARN]` または `[PlannerCheck BLOCK]` が出る。planner は出力前に自己点検でこれらを潰すこと。
143
+ 配布元では `.dev/hooks/_planner_check.py`(PostToolUse Write/Edit)が `.claude/reports/plan-report-*.md` の YAML frontmatter を機械検査する。以下 3 ルールに違反すると stderr に `[PlannerCheck WARN]` または `[PlannerCheck BLOCK]` が出る。planner は出力前に自己点検でこれらを潰すこと。
144
+
145
+ > **R1 は v2.1.0 で廃止**(`tdd-develop` agent 廃止に伴う)。`agent: tdd-develop` を含む既存 plan-report は `c3 plan validate` の `agent file not found` で検出される。
126
146
 
127
- - **R1 (tdd-develop writes 完備)** — `agent: tdd-develop` の task の `writes` に、(a) `tests/` で始まるテストファイルの具体的パス、(b) `.claude/reports/test-report-{任意}.md` の具体的パス、の両方を列挙する。glob (`*`) 入りは不可
128
147
  - **R2 (reviewer ファイル名は task_id ベース)** — `agent: code-reviewer` / `security-reviewer` の `writes` ファイル名は `task_id` を含む固定名にし、タイムスタンプ(`YYYYMMDD` / `YYYYMMDD-HHMMSS` 形式)を含めない。例: `.claude/reports/code-review-report-review1.md` ✓ / `.claude/reports/code-review-report-20260510.md` ✗。タイムスタンプを動的取得すると writes と実ファイル名が乖離して `parallel-agents` skill の成果物取り込みが破綻する
129
148
  - **R3 (`src/c3/_template/` 直接 writes 禁止)** — どの task も `writes` に `src/c3/_template/` パスを含めない(hook が exit 2 でブロック)。`_template/` は `hatch_build.py` がビルド時に `.claude/` から再生成する配布物実体で、直接編集してもビルド時に消失する
130
149
  - **R4 (同一 writes パスの順序付け)** — 同じ `writes` パスを複数 task が宣言する場合は、後発 task の `depends_on` で先発 task を参照して順序付けする。順序付けがないと `parallel-agents` skill の成果物取り込みでどちらの版を採用すべきか決定不能になる
131
150
 
132
151
  これらは hook により自動検出されるが、出力前の自己チェックリストにも追加して事前に潰すこと:
133
- - [ ] R1: tdd-develop の全 task で writes に test ファイルと test-report が両方含まれているか
134
152
  - [ ] R2: reviewer の writes ファイル名は task_id ベース・タイムスタンプなしか
135
153
  - [ ] R3: writes に `src/c3/_template/` パスが含まれていないか
136
154
  - [ ] R4: 同一 writes パスを宣言する task が depends_on で順序付けされているか
@@ -139,8 +157,8 @@ Stage 1: dev_a, dev_b, dev_c (並列)
139
157
  制限:
140
158
  - ソースファイルの編集・書き込みは行わない
141
159
  - plan-report の YAML フロントマター内で `tasks[].id` の重複・未定義の `depends_on` 参照・エージェント名の typo を出力しない(`c3 plan validate` で検証可能)
142
- - 上記「並列実行のための設計指針」のルール 1〜11 と自己チェックリストに違反した plan-report を出力しない
143
- - 自動検査対象 R1〜R4 に違反する plan-report を出力しない(`.dev/hooks/_planner_check.py` が PostToolUse で検出する)
160
+ - 上記「並列実行のための設計指針」のルール 1〜13 と自己チェックリストに違反した plan-report を出力しない
161
+ - 自動検査対象 R2〜R4 に違反する plan-report を出力しない(`.dev/hooks/_planner_check.py` が PostToolUse で検出する)
144
162
 
145
163
  ## Related Agents
146
164
  - 上流: architect(architecture-report を受け取る)
@@ -86,7 +86,7 @@ def extract_section(content: str, heading: str) -> str:
86
86
  def append_checkpoint(session_file: str, label: str, summary: str) -> None:
87
87
  """Append a checkpoint block to the session file.
88
88
 
89
- Used by wave-execution (milestone snapshots) and pre_compact.py
89
+ Used by parallel-agents skill (wave milestone snapshots) and pre_compact.py
90
90
  (compaction markers). Checkpoint blocks are append-only — they record
91
91
  the state at a point in time and never overwrite earlier entries.
92
92
 
@@ -2,8 +2,8 @@
2
2
  """PreToolUse hook: worktree boundary guardrail.
3
3
 
4
4
  PO_WORKTREE_GUARD=1 が設定されている場合のみ動作する。
5
- worktree 内で実装タスクを実行するワークフロー(tdd-develop など)が
6
- 事前にこの env を設定して有効化する。
5
+ worktree 内で実装タスクを実行するワークフロー(parallel-agents skill が
6
+ isolation:"worktree" 付きで起動する agent など)が事前にこの env を設定して有効化する。
7
7
  Write / Edit ツールの対象パスが CWD(worktree ルート)外であればブロックする。
8
8
  """
9
9
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: ヒアリング→設計→計画→実装→レビューの全フェーズワークフロー。/start・/develop・/code-review・wave-execution スキルが内部参照する。
2
+ description: ヒアリング→設計→計画→実装→レビューの全フェーズワークフロー。/start・/develop・/code-review スキルが内部参照する。
3
3
  disable-model-invocation: false
4
4
  user-invocable: false
5
5
  ---
@@ -228,7 +228,7 @@ plan-report の全タスクを走査し、以下の形式でテキスト出力
228
228
  ...
229
229
  ```
230
230
 
231
- `read_only: false` のタスクに `tdd-develop` 以外の agent(例: `developer`)が使われている場合は、
231
+ `read_only: false` のタスクに `tester` / `developer` 以外の agent が使われている場合は、
232
232
  その理由をテキストで説明した上で承認を求めること。
233
233
 
234
234
  内容を提示した後、AskUserQuestion で確認する:
@@ -264,8 +264,8 @@ plan-report の全タスクを走査し、以下の形式でテキスト出力
264
264
  plan-report の冒頭を Read し、YAML フロントマター(`---` で始まり `po_plan_version: "0.1"` を含む)の有無を確認する。
265
265
 
266
266
  **フロントマターありの場合:**
267
- 1. **最初に必ず** `.claude/skills/wave-execution/SKILL.md` を Read する(記憶・推測で進めない)
268
- 2. `.claude/skills/wave-execution/SKILL.md` の手順に完全に従って wave 単位で実装を進める
267
+ 1. **最初に必ず** `.claude/skills/parallel-agents/SKILL.md` を Read する(記憶・推測で進めない)
268
+ 2. `.claude/skills/parallel-agents/SKILL.md` の手順に完全に従って wave 単位で実装を進める
269
269
  3. 全 wave 完了後はフェーズ E(レビュー)へ進む(wave に reviewer タスクが含まれていれば E をスキップ可能と案内する)
270
270
 
271
271
  **フロントマターなしの場合(legacy フォールバック):**
@@ -16,4 +16,7 @@ plan-report に基づいて実装フェーズを実行する。
16
16
 
17
17
  ## 移行注意(v1.12.0+)
18
18
 
19
- v1.12.0 で並列実行レイヤを PO(Parallel Orchestra)から `parallel-agents` skill に切り替えた。旧 `wave-execution.md` 経由の PO 委譲は v1.14.0 で削除予定。詳細は `~/.claude/plans/atomic-foraging-sprout.md`。
19
+ - v1.12.0 で並列実行レイヤを PO(Parallel Orchestra)から `parallel-agents` skill に切り替えた
20
+ - v1.14.0 で旧 `wave-execution.md` 経由の PO 委譲を削除
21
+ - v2.0.0 で `parallel_orchestra` パッケージ本体を削除
22
+ - v2.1.0 で `tdd-develop` agent と `worktree-tdd-workflow` skill を廃止し、planner が TDD を 3-wave (Red tester / Green developer / Green 確認 tester) に分解する設計に統一
@@ -17,21 +17,11 @@ permission race の構造的修正(2026-05-11 PoC で 15 並列・101 tool 呼
17
17
 
18
18
  ---
19
19
 
20
- ## 重要な制約: depth 1 制限
20
+ ## depth 1 制限について
21
21
 
22
- Claude Code のサブエージェントは **更にサブエージェントを spawn できない**(公式仕様 depth 1 制限)。これにより:
22
+ Claude Code のサブエージェントは **更にサブエージェントを spawn できない**(公式仕様 depth 1 制限)。v2.1.0 時点で配布されている全 agent(`developer` / `tester` / `code-reviewer` / `security-reviewer` / `architect` / `interviewer` / `planner` / `doc-writer` / `systematic-debugger` / `project-setup`)は内部で Agent ツールを使わない設計のため、**すべて並列起動可能**。
23
23
 
24
- | agent 種別 | 並列起動可否 | 理由 |
25
- |---|---|---|
26
- | `developer` / `tester` / `code-reviewer` / `security-reviewer` 等 | **可** | 内部で Agent ツールを使わない |
27
- | `tdd-develop` | **不可** | 内部で tester / developer を Agent ツールで spawn する設計 |
28
-
29
- `tdd-develop` を含むタスクは次のいずれかで実行する:
30
-
31
- - **ペルソナ採用パターン**: 親 Claude が `.claude/agents/tdd-develop.md` を Read して直接実行(並列度 1)
32
- - **PO 委譲フォールバック**: `c3 po run-wave` で claude -p --agent 起動(v1.14.0 までの暫定)
33
-
34
- planner エージェントが plan-report を生成する時点で「tdd-develop を含む wave は 1 タスクのみ」と粒度を制御することが望ましい。
24
+ 将来的に「内部で Agent ツールを使う agent」を追加する場合は、その agent を含む wave のタスク数を 1 に絞る運用ガードが必要になる(v2.0.0 まで存在した `tdd-develop` agent はこのパターンだった)。
35
25
 
36
26
  ---
37
27
 
@@ -92,7 +82,7 @@ stdout の JSON 形式:
92
82
 
93
83
  セッションファイル(`.claude/memory/sessions/YYYYMMDD.tmp`)に未登録の場合のみ以下を追記:
94
84
  - 各 wave につき `- [ ] Wave {N} ({task_count} tasks, parallel={M})` を 1 行ずつ
95
- - `M` は wave 内で `tdd-develop` 以外の並列化可能タスク数
85
+ - `M` は wave 内のタスク数(全 agent が並列起動可能)
96
86
 
97
87
  ---
98
88
 
@@ -104,15 +94,13 @@ stdout の JSON 形式:
104
94
 
105
95
  親 Claude が wave のタスク一覧を Markdown 表で提示する:
106
96
 
107
- | id | agent | parallelizable | read_only | writes |
108
- |---|---|---|---|---|
109
- | dev-login | developer | yes | false | src/auth/login.py |
110
- | dev-logout | developer | yes | false | src/auth/logout.py |
111
- | tdd-mfa | tdd-develop | **no (depth 1)** | false | src/auth/mfa.py |
97
+ | id | agent | read_only | writes |
98
+ |---|---|---|---|
99
+ | test-login | tester | false | tests/auth/test_login.py, .claude/reports/test-report-test-login.md |
100
+ | impl-login | developer | false | src/auth/login.py |
101
+ | confirm-login | tester | false | .claude/reports/test-report-confirm-login.md |
112
102
 
113
- `parallelizable` は agent 名で判定:
114
- - `tdd-develop` → `no (depth 1)`
115
- - それ以外 → `yes`
103
+ v2.1.0 以降、全 agent が並列起動可能のため `parallelizable` 列は省略する。
116
104
 
117
105
  ### 2-B: 実行可否をユーザーに確認する
118
106
 
@@ -121,7 +109,7 @@ AskUserQuestion ツール:
121
109
  ```json
122
110
  {
123
111
  "questions": [{
124
- "question": "Wave {N} を実行してよいですか?並列度 {M}、tdd-develop {K} 件は逐次実行。",
112
+ "question": "Wave {N} を実行してよいですか?並列度 {M}",
125
113
  "options": [
126
114
  { "label": "承認・進む", "description": "この wave を実行する" },
127
115
  { "label": "中断", "description": "ここで wave 実行を停止する。完了済みの wave はそのまま残る" }
@@ -132,20 +120,7 @@ AskUserQuestion ツール:
132
120
 
133
121
  「中断」の場合、セッションファイルの `## 試みたが失敗したアプローチ` に中断理由を追記してスキル終了。
134
122
 
135
- ### 2-C: タスクを実行する
136
-
137
- タスクごとに分岐:
138
-
139
- #### 2-C-1: `agent == "tdd-develop"` のとき(ペルソナ採用パターン、並列度 1)
140
-
141
- depth 1 制限により Agent ツール起動不可。親 Claude が直接実行する:
142
-
143
- 1. `.claude/agents/tdd-develop.md` を Read してペルソナを採用する
144
- 2. `.claude/skills/worktree-tdd-workflow/SKILL.md` を Read して TDD ループ手順(tester→developer→tester)を取得する
145
- 3. タスクの `prompt` を実装内容として、worktree-tdd-workflow/SKILL.md の Step 1〜4 を **親 Claude が直接** 実行する。tester / developer は Agent ツールでスポーン可能(親 Claude depth 0 から depth 1 として完結)
146
- 4. ループ完了後、結果を 2-D の集約に渡す
147
-
148
- #### 2-C-2: それ以外(並列化対象、Agent ツール並列起動)
123
+ ### 2-C: タスクを実行する(並列起動)
149
124
 
150
125
  並列化可能タスクを **1 ターン内で複数 Agent ツール呼び出し** として発行する。並列度の上限は **デフォルト 5、上限 15**(PoC で検証済み)。タスク数がそれ以上なら 5 件ずつのバッチに分割する。
151
126
 
@@ -168,6 +143,8 @@ depth 1 制限により Agent ツール起動不可。親 Claude が直接実行
168
143
  - error_summary: {失敗時のエラー要約、無ければ「なし」}
169
144
  ```
170
145
 
146
+ - **tester タスクの場合の追加注入**: 「`.claude/reports/test-report-{task_id}.md` を Write し、writes 宣言と一致させること」
147
+ - **developer タスクの場合の追加注入**: 「`.claude/reports/debug-needed-*.md` 出力で Stuck Signal を返してよい。systematic-debugger は親 Claude が後続 wave で呼ぶ」
171
148
 
172
149
  全タスクを 1 メッセージ内で発行したあと、各 Agent の完了通知が `<task-notification>` で順次届く。全件揃うまで待つ。
173
150
 
@@ -184,7 +161,7 @@ worktree path は Agent ツール返り値の `<worktree><worktreePath>...</work
184
161
 
185
162
  ### 2-E: 失敗があったら方針を確認する
186
163
 
187
- 並列タスクで 1 件以上失敗した場合(2-C-1 tdd-develop が不合格の場合も含む)、AskUserQuestion で次を確認する:
164
+ 並列タスクで 1 件以上失敗した場合、AskUserQuestion で次を確認する(Green wave の失敗もここで吸収する):
188
165
 
189
166
  ```json
190
167
  {
@@ -220,7 +197,6 @@ git checkout worktree-agent-{id2} -- src/auth/logout.py
220
197
  注意:
221
198
  - `writes` フィールドに列挙されたファイルのみを取り込む
222
199
  - worktree が touch したが本タスクの責務でない周辺ファイル(`CLAUDE.md` / `package.json` / `.claude/settings.local.json` / `.claude/reports/` 配下)は取り込まない
223
- - `tdd-develop` の場合は worktree-tdd-workflow.md 内で既に作業ツリーで実装されているため、追加の checkout は不要
224
200
 
225
201
  #### 2-F-2: 親 Claude が一括コミット
226
202
 
@@ -281,10 +257,10 @@ checkpoint の summary には KEEP ルール(設計判断・決定事項・解
281
257
 
282
258
  ---
283
259
 
284
- ## PO 廃止移行期の注意(v1.12.0〜v2.0.0)
260
+ ## PO 廃止移行期の注意(v1.12.0〜v2.1.0)
285
261
 
286
262
  - 本 skill は v1.12.0 で導入された
287
263
  - v1.13.0 で `po-status` skill / `c3 status` CLI を削除
288
- - **v1.14.0 で `c3 po` CLI と `wave-execution` skill を削除し、Step 0/1 で `c3 plan validate` / `c3 plan waves`(純粋な YAML 検証 + DAG 分解、PO 非依存)に切り替えた**
264
+ - v1.14.0 で `c3 po` CLI と `wave-execution` skill を削除し、Step 0/1 で `c3 plan validate` / `c3 plan waves`(純粋な YAML 検証 + DAG 分解、PO 非依存)に切り替えた
289
265
  - v2.0.0 で `parallel_orchestra` パッケージ本体を削除(互換破壊)
290
- - 詳細計画: `~/.claude/plans/atomic-foraging-sprout.md`
266
+ - **v2.1.0 で `tdd-develop` agent と `worktree-tdd-workflow` skill を削除し、planner が 3-wave に分解する設計に統一**
@@ -84,7 +84,7 @@ trust_score: {スコア}
84
84
  ```markdown
85
85
  ---
86
86
  name: promoted-YYYYMMDD-{id}
87
- description: {昇格理由と期待効果を1文で。例: "wave 実行でのペルソナ採用パターン。tdd-develop を単独 wave で実行する際に自動適用される"}
87
+ description: {昇格理由と期待効果を1文で。例: "security-audit における code-reviewer / security-reviewer の並列起動パターン。2 体のレビュアーを 1 メッセージで同時に当てる"}
88
88
  promoted_from: {pattern id}
89
89
  promoted_date: YYYY-MM-DD
90
90
  trust_score: {スコア}
@@ -191,8 +191,8 @@ new: TASK_TYPE: {task_type}
191
191
  "question": "refactor の作業をどこから始めますか?",
192
192
  "header": "開始地点",
193
193
  "options": [
194
- { "label": "計画", "description": "planner で po_plan_version 付き plan-report を生成して PO 並列実行に備える" },
195
- { "label": "実装", "description": "既存 po_plan_version 付き plan-report を使って wave-execution に直接入る" }
194
+ { "label": "計画", "description": "planner で po_plan_version 付き plan-report を生成して parallel-agents skill 並列実行に備える" },
195
+ { "label": "実装", "description": "既存 po_plan_version 付き plan-report を使って parallel-agents skill に直接入る" }
196
196
  ]
197
197
  }]
198
198
  }
@@ -243,8 +243,8 @@ new: TASK_TYPE: {task_type}
243
243
  | bug-fix | systematic-debugger 直起動 | Agent ツールで `systematic-debugger` を起動 → `developer` → `tester` 完了後、`code-reviewer` と `security-reviewer` を 1 メッセージ内で並列起動 |
244
244
  | bug-fix | 計画から | `.claude/skills/dev-workflow/SKILL.md` を Read してフェーズ C から(既存 plan-report を利用) |
245
245
 
246
- | refactor | 計画 | Agent ツールで `planner` を起動して `po_plan_version` 付き plan-report を生成 → `.claude/skills/wave-execution/SKILL.md` を Read |
247
- | refactor | 実装 | `.claude/skills/wave-execution/SKILL.md` を Read して PO 並列実行に直接入る |
246
+ | refactor | 計画 | Agent ツールで `planner` を起動して `po_plan_version` 付き plan-report を生成 → `.claude/skills/parallel-agents/SKILL.md` を Read |
247
+ | refactor | 実装 | `.claude/skills/parallel-agents/SKILL.md` を Read して並列実行に直接入る |
248
248
  | security-audit | 即実行 | Agent ツールで `code-reviewer` と `security-reviewer` を **1 メッセージ内で並列起動** |
249
249
  | security-audit | 承認後 | Step 3(フェーズ F/G/H)へ進む(自動遷移) |
250
250
  | docs | 即実行 | Agent ツールで `doc-writer` を単独起動 |
@@ -74,22 +74,22 @@ AskUserQuestion ツール:
74
74
  | 1 | `interviewer` | A: ヒアリング |
75
75
  | 2 | `architect` | B: 設計 |
76
76
  | 3 | `planner` | C: 計画 |
77
- | 4 | `tester` → `developer` → `tester` `developer` `tester` | D: TDD |
77
+ | 4 | `tester` (Red 並列) → `developer` (Green 並列) → `tester` (Green 確認 並列) | D: TDD |
78
78
  | 5 | `code-reviewer` → `security-reviewer` | E: レビュー |
79
79
 
80
80
  意図: 新機能追加は要件定義から計画まで全フェーズが必要。
81
81
  **この場合は `/start` を直接呼ぶ方がシンプル。** 本 skill は提示のみ。
82
82
 
83
- ### refactor(並列・PO 推奨)
83
+ ### refactor(並列・parallel-agents skill 推奨)
84
84
 
85
85
  | 役割 | エージェント | 並列 |
86
86
  |---|---|---|
87
87
  | タスク分解 | `planner` | — |
88
- | 各リファクタタスク | `developer` + `tester` | PO で並列 |
88
+ | 各リファクタタスク | `developer` + `tester` | `parallel-agents` skill で並列 |
89
89
  | 最終レビュー | `code-reviewer` | — |
90
90
 
91
91
  意図: 動作を変えないため、各リファクタを worktree で並列化できる。
92
- PO(Parallel Orchestra)の `c3 po run` で時間短縮を狙う。
92
+ `parallel-agents` skill(親 Claude Agent ツール並列起動 + 公式 `isolation: "worktree"`)で時間短縮を狙う。
93
93
  最終レビューは `code-reviewer` のみ(リファクタは動作変更を伴わないため新たな攻撃面が生まれにくく、security-reviewer は省略可)。
94
94
 
95
95
  ### security-audit(並列・レビュアー 2 体)
@@ -148,7 +148,7 @@ AskUserQuestion ツール:
148
148
  - `args` 指定なし/`from_start=false` のとき: `.claude/skills/start/SKILL.md` を Read して `/start` フローに合流する
149
149
  - **bug-fix**: `systematic-debugger` → `developer` → `tester` の順に Agent ツールで順次起動し、完了後に `code-reviewer` と `security-reviewer` を 1 メッセージ内で並列起動する
150
150
  - **docs**: Agent ツールで `doc-writer` を起動する
151
- - **refactor**: planner で `po_plan_version` 付き plan-report を生成 → `.claude/skills/wave-execution/SKILL.md` を Read して PO 並列実行に合流する
151
+ - **refactor**: planner で `po_plan_version` 付き plan-report を生成 → `.claude/skills/parallel-agents/SKILL.md` を Read して並列実行に合流する
152
152
  - **security-audit**: code-reviewer と security-reviewer を **1 メッセージ内で並列起動**(複数 Agent ツール呼び出し)
153
153
 
154
154
  各エージェント完了後は通常の Approval Flow(AskUserQuestion で承認 / 否認・修正依頼 / 否認・自分で修正)に従う。
@@ -193,7 +193,6 @@ AskUserQuestion ツール:
193
193
  - `project-setup` — プロジェクト初期設定
194
194
  - `security-reviewer` — セキュリティ診断
195
195
  - `systematic-debugger` — デバッグ調査
196
- - `tdd-develop` — ヘッドレス TDD コンダクター(PO 専用)
197
196
  - `tester` — テスト設計・実行
198
197
 
199
198
  新しいエージェントが `.claude/agents/` に追加された場合は、この skill の編成
@@ -52,10 +52,17 @@ site/
52
52
  .claude/docs/c3追加予定機能リスト.md
53
53
  .claude/docs/ruflo_research_result.md
54
54
 
55
+ # codex 対応調査メモ (個人作業ノート、配布・コミット対象外)
56
+ .claude/docs/codex対応/
57
+
55
58
  # C3 distributor-only (配布元固有の開発支援、配布されない)
56
59
  .dev/
57
60
  /CLAUDE.md
58
61
 
62
+ # v2.1.0: tdd-develop / worktree-tdd-workflow 廃止後の復活防止
63
+ .claude/agents/tdd-develop.md
64
+ .claude/skills/worktree-tdd-workflow/
65
+
59
66
  # Personal Claude Code overrides (per-user / per-worktree, never committed)
60
67
  # wheel からは _excludes.py / hatch_build.py で既に除外済み。git でも tracking しない方針。
61
68
  .claude/settings.local.json
@@ -1,5 +1,126 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.1.0] - 2026-05-12
4
+
5
+ ### 概要
6
+
7
+ v2.0.0 直後の機能整理リリース。**`tdd-develop` agent と `worktree-tdd-workflow` skill を廃止**し、TDD を planner が **3-wave(Red tester 並列 → Green developer 並列 → Green 確認 tester 並列)に分解する**設計に統一した。これにより depth 1 制限で逐次実行に縛られていた TDD タスクが独立機能間で完全並列化される。
8
+
9
+ v2.0.0 で残っていた PO / `wave-execution` / `c3 po` 言及の移行漏れ(`task-routing` / `start` / `dev-workflow` / `develop` / `promote-pattern` 各 skill、`docs/skills.md` / `docs/cli-reference.md` / `docs/index.md` / `docs/getting-started.md` / `README.md`、`worktree_guard.py` / `session_utils.py` の docstring)も併せて修正した。
10
+
11
+ ### 削除(minor、利用先での手動 cleanup 必要)
12
+
13
+ | パス | 代替 |
14
+ |---|---|
15
+ | `.claude/agents/tdd-develop.md` | planner が 3-wave に分解して `tester` / `developer` を並列起動 |
16
+ | `.claude/skills/worktree-tdd-workflow/SKILL.md` | `parallel-agents` skill が直接 tester / developer を起動 |
17
+
18
+ ### 変更
19
+
20
+ #### planner エージェント
21
+ - 「並列実行のための設計指針」を 3-wave 分解指針に書き換え(旧ルール「TDD は 1 タスクにまとめる」を削除)
22
+ - 命名規約 `test-` / `impl-` / `confirm-` を推奨(強制ではない)
23
+ - `writes` の test-report ファイル名は `.claude/reports/test-report-{task_id}.md` のように task_id ベースを推奨
24
+ - depth 1 制限の tdd-develop 言及を削除
25
+ - R1 自動検査の説明を削除(hook 本体も削除)
26
+
27
+ #### parallel-agents skill
28
+ - depth 1 制限テーブルから tdd-develop 行削除し、全 agent 並列起動可能になった旨を明記
29
+ - 「2-C-1 tdd-develop ペルソナ採用」ブロック削除し、並列起動を単一手順に統合
30
+ - tester / developer 向けのプロンプト注入を強化
31
+
32
+ #### 自動検査 hook(配布元)
33
+ - `.dev/hooks/_planner_check.py`: R1(tdd-develop writes 検査)を削除。R2/R3/R4 は維持
34
+ - `tests/hooks/test_planner_check.py`: R1 系テストクラスを削除、R3 テストの tdd-develop 依存を除去
35
+
36
+ #### 配布除外(3 ファイル同期)
37
+ - `src/c3/_excludes.py` / `hatch_build.py` / `.gitignore` に `agents/tdd-develop.md` と `skills/worktree-tdd-workflow/*` を追加
38
+
39
+ #### v2.0.0 移行漏れの hotfix
40
+ - `task-routing/SKILL.md`: refactor 編成の `c3 po run` / PO 推奨を `parallel-agents` skill に置換、`wave-execution` 参照を更新、tdd-develop 行削除、feature の TDD 表記を 3-wave に更新
41
+ - `start/SKILL.md`: PO 並列実行 / wave-execution.md 参照を `parallel-agents` に置換
42
+ - `dev-workflow/SKILL.md`: description / 本文の `wave-execution` 参照を `parallel-agents` に修正、tdd-develop 言及削除
43
+ - `develop/SKILL.md`: PO 廃止履歴と v2.1.0 の tdd-develop 廃止を追記
44
+ - `promote-pattern/SKILL.md`: description 例文の tdd-develop 言及を別例に差し替え
45
+ - `worktree_guard.py` / `session_utils.py`: docstring から tdd-develop / wave-execution 言及を更新
46
+ - `docs/skills.md` / `docs/cli-reference.md` / `docs/index.md` / `docs/getting-started.md` / `README.md`: PO / wave-execution / tdd-develop / `c3 po` の陳腐化記述を削除・修正
47
+
48
+ ### 移行ガイド
49
+
50
+ #### 利用先プロジェクトでの手動 cleanup
51
+
52
+ `c3 update` は **ファイル削除を検出しない**ため、利用先で以下を手動実行する:
53
+
54
+ ```bash
55
+ rm -f .claude/agents/tdd-develop.md
56
+ rm -rf .claude/skills/worktree-tdd-workflow
57
+ ```
58
+
59
+ #### 既存 plan-report の書き換え
60
+
61
+ `agent: tdd-develop` を含む plan-report は `c3 plan validate` が `agent file not found` で失敗するため、以下のように 3 タスクに展開する:
62
+
63
+ **Before(v2.0.0):**
64
+ ```yaml
65
+ tasks:
66
+ - id: tdd-login
67
+ agent: tdd-develop
68
+ writes:
69
+ - tests/auth/test_login.py
70
+ - src/auth/login.py
71
+ - .claude/reports/test-report-tdd-login.md
72
+ prompt: "ログイン機能を TDD で実装する"
73
+ ```
74
+
75
+ **After(v2.1.0+):**
76
+ ```yaml
77
+ tasks:
78
+ - id: test-login
79
+ agent: tester
80
+ writes:
81
+ - tests/auth/test_login.py
82
+ - .claude/reports/test-report-test-login.md
83
+ prompt: |
84
+ Red フェーズ。ログイン機能の失敗テストを書き、機能未実装で正しく失敗することを確認する。
85
+ writes 宣言と一致するファイル名で test-report を Write すること。
86
+ - id: impl-login
87
+ agent: developer
88
+ depends_on: [test-login]
89
+ writes:
90
+ - src/auth/login.py
91
+ prompt: |
92
+ Green フェーズ。test-login の test-report の不合格テストを通す最小実装を行う。
93
+ テストコードは編集しない。
94
+ - id: confirm-login
95
+ agent: tester
96
+ depends_on: [impl-login]
97
+ writes:
98
+ - .claude/reports/test-report-confirm-login.md
99
+ prompt: |
100
+ Green 確認。全テストを実行して合格を確認する。
101
+ writes 宣言と一致するファイル名で test-report を Write すること。
102
+ ```
103
+
104
+ 3-wave 化により、独立した複数機能(auth / payment 等)の Red を 1 wave で並列起動できる。
105
+
106
+ #### Green wave 失敗時の運用
107
+
108
+ `impl-*` タスクが失敗した場合は `parallel-agents` skill の 2-E(リトライ / スキップ / 中断)で吸収する。developer 内の Stuck Signal(`.claude/reports/debug-needed-*.md` 出力)は引き続き機能する。リトライ時に親 Claude が後続 wave で `systematic-debugger` を呼ぶ運用に統一。
109
+
110
+ ### LTS / 互換性
111
+
112
+ - v1.x からのアップグレードは引き続き v2.0.0 経由で行う(v1.x → v2.1.0 直接は未検証)
113
+ - v2.0.x 系を維持したい場合は `pip install "claude-code-conductor>=2.0,<2.1"`
114
+ - SemVer minor: agent / skill 削除はあるが、利用先 API(CLI / Python import)は無変更
115
+
116
+ ### 検証
117
+
118
+ - `pytest -x` 572 passed / 2 skipped
119
+ - wheel に `agents/tdd-develop.md` / `skills/worktree-tdd-workflow/` のエントリ 0 件
120
+ - `_planner_check.py` が 3-wave plan-report に対して R1 警告を出さない(R1 自体が削除されている)
121
+
122
+ ---
123
+
3
124
  ## [2.0.0] - 2026-05-12
4
125
 
5
126
  ### 概要(互換破壊リリース)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-code-conductor
3
- Version: 2.0.0
3
+ Version: 2.1.0
4
4
  Summary: Multi-agent orchestration framework for Claude Code (C3)
5
5
  Project-URL: Homepage, https://github.com/satoh-y-0323/claude-code-conductor
6
6
  Project-URL: Repository, https://github.com/satoh-y-0323/claude-code-conductor
@@ -188,11 +188,9 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
188
188
  | `c3 init` | 利用先プロジェクトに `.claude/` を展開する |
189
189
  | `c3 update` | `.claude/` をパッケージ最新版へ更新する(個人ファイルはスキップ) |
190
190
  | `c3 list-agents` / `list-skills` | 設置済みアセットを一覧表示 |
191
- | `c3 doctor` | 環境診断(`.claude/`・settings.json・claude バイナリ・parallel-orchestra) |
192
- | `c3 po dry-run <plan-report>` | plan-report をマニフェストとして検証 |
193
- | `c3 po waves <plan-report>` | plan-report の wave 分解結果を JSON で出力 |
194
- | `c3 po run <plan-report>` | plan-report を parallel-orchestra で全 wave 並列実行 |
195
- | `c3 po run-wave <plan-report> --wave-index N` | 指定 wave のみ実行 |
191
+ | `c3 doctor` | 環境診断(`.claude/`・settings.json・claude バイナリ) |
192
+ | `c3 plan validate <plan-report>` | plan-report YAML フロントマターと agent 存在を検証 |
193
+ | `c3 plan waves <plan-report>` | plan-report の wave 分解結果を JSON で出力 |
196
194
 
197
195
  ### 基本的な使い方
198
196
 
@@ -217,7 +215,6 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
217
215
  | planner | opus | plan-report | 親 Claude がペルソナ採用 |
218
216
  | developer | sonnet | 実装コード | Agent ツールで起動 |
219
217
  | tester | sonnet | テスト・test-report | Agent ツールで起動 |
220
- | tdd-develop | sonnet | - | Agent ツールで起動(PO 並列時のみ)|
221
218
  | code-reviewer | sonnet | code-review-report | Agent ツールで起動 |
222
219
  | security-reviewer | sonnet | security-review-report | Agent ツールで起動 |
223
220
  | doc-writer | sonnet | ドキュメント各種 | Agent ツールで起動 |
@@ -343,19 +340,19 @@ Copy-Item -Recurse claude-code-conductor\.claude your-project\
343
340
 
344
341
  ---
345
342
 
346
- ## 並列実行 (parallel-orchestra)
343
+ ## 並列実行 (parallel-agents skill)
347
344
 
348
- 計画フェーズで生成した plan-report を YAML フロントマター付きマニフェストとして parallel-orchestra (PO) に渡し、独立タスクを git worktree で並列実行できます。
345
+ 計画フェーズで生成した plan-report を YAML フロントマター付きマニフェストとして読み込み、独立タスクを親 Claude Agent ツール並列起動 + 公式 `isolation: "worktree"` で並列実行できます(v2.0.0 以降は外部プロセス不要)。
349
346
 
350
- PO は C3 に同梱されているため、`pip install claude-code-conductor` だけで利用可能です。別途のインストールは不要。要件は Python ≥ 3.10、PATH に `claude` バイナリ、PyYAML(C3 の依存として自動インストール)。
347
+ 要件は Python ≥ 3.10、PATH に `claude` バイナリ、PyYAML(C3 の依存として自動インストール)。
351
348
 
352
349
  **使い方:**
353
350
 
354
- 1. `/start` で要件→設計→計画フェーズを完走させる(planner が plan-report の先頭に PO 用 YAML フロントマターを自動付与します)
355
- 2. `/develop` を起動 → **D-0** で plan-report のフロントマターを自動検出し PO 並列モードへ切り替わる
356
- 3. C3 が `c3 po dry-run` でマニフェスト妥当性を検証、wave ごとにユーザー承認を取りながら `c3 po run-wave` で実行します
351
+ 1. `/start` で要件→設計→計画フェーズを完走させる(planner が plan-report の先頭に YAML フロントマターを自動付与します)
352
+ 2. `/develop` を起動 → **D-0** で plan-report のフロントマターを自動検出し `parallel-agents` skill へ切り替わる
353
+ 3. C3 が `c3 plan validate` でマニフェスト妥当性を検証、wave ごとにユーザー承認を取りながら Agent ツールで並列実行します
357
354
 
358
- マニフェスト仕様の詳細は `.claude/docs/parallel-orchestra-manifest.md` を参照してください。
355
+ TDD を伴う機能実装は、planner が「test- → impl- → confirm-」の 3 タスクペアに分解し、各 wave 内で独立機能間で並列起動されます(v2.1.0+、旧 `tdd-develop` agent はこのリリースで廃止)。
359
356
 
360
357
  ---
361
358