claude-code-conductor 2.0.0__tar.gz → 2.2.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 (127) hide show
  1. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/agents/code-reviewer.md +1 -0
  2. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/agents/planner.md +41 -19
  3. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/agents/security-reviewer.md +1 -0
  4. claude_code_conductor-2.2.0/.claude/agents/wt_developer.md +91 -0
  5. claude_code_conductor-2.2.0/.claude/agents/wt_systematic-debugger.md +124 -0
  6. claude_code_conductor-2.2.0/.claude/agents/wt_tester.md +73 -0
  7. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/session_utils.py +1 -1
  8. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/worktree_guard.py +2 -2
  9. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/dev-workflow/SKILL.md +4 -4
  10. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/develop/SKILL.md +4 -1
  11. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/parallel-agents/SKILL.md +39 -41
  12. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/promote-pattern/SKILL.md +1 -1
  13. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/start/SKILL.md +4 -4
  14. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/task-routing/SKILL.md +5 -6
  15. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.gitignore +7 -0
  16. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/CHANGELOG.md +188 -0
  17. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/PKG-INFO +11 -14
  18. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/README.md +10 -13
  19. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/hatch_build.py +3 -0
  20. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/src/c3/__init__.py +1 -1
  21. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/src/c3/_excludes.py +3 -0
  22. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_planner_check.py +18 -221
  23. claude_code_conductor-2.0.0/.claude/agents/tdd-develop.md +0 -119
  24. claude_code_conductor-2.0.0/.claude/skills/worktree-tdd-workflow/SKILL.md +0 -93
  25. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/CLAUDE.md +0 -0
  26. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/agents/architect.md +0 -0
  27. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/agents/developer.md +0 -0
  28. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/agents/doc-writer.md +0 -0
  29. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/agents/interviewer.md +0 -0
  30. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/agents/project-setup.md +0 -0
  31. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/agents/systematic-debugger.md +0 -0
  32. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/agents/tester.md +0 -0
  33. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/docs/settings.json.md +0 -0
  34. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/consolidate_memory.py +0 -0
  35. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/permission_handler.py +0 -0
  36. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/post_tool.py +0 -0
  37. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/pre_compact.py +0 -0
  38. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/pre_tool.py +0 -0
  39. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/record_review_decision.py +0 -0
  40. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/record_tier_outcome.py +0 -0
  41. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/restore_session.py +0 -0
  42. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/review_hint_inject.py +0 -0
  43. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/schema.sql +0 -0
  44. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/select_tier.py +0 -0
  45. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/session_start.py +0 -0
  46. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/session_stop.py +0 -0
  47. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/statusline.py +0 -0
  48. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/stop.py +0 -0
  49. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/hooks/subagent_log.py +0 -0
  50. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/memory/.gitkeep +0 -0
  51. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/permission_rules.json +0 -0
  52. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/rules/code-review-checklist.md +0 -0
  53. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/rules/promoted/index.md +0 -0
  54. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/rules/security-review-checklist.md +0 -0
  55. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/settings.json +0 -0
  56. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/code-review/SKILL.md +0 -0
  57. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/doc/SKILL.md +0 -0
  58. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/extract-lib/SKILL.md +0 -0
  59. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/init-session/SKILL.md +0 -0
  60. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/mcp-config/SKILL.md +0 -0
  61. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/pattern-status/SKILL.md +0 -0
  62. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/report-timestamp/SKILL.md +0 -0
  63. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
  64. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/skills/setup/SKILL.md +0 -0
  65. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/.claude/state/.gitkeep +0 -0
  66. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/LICENSE +0 -0
  67. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/pyproject.toml +0 -0
  68. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/src/c3/__main__.py +0 -0
  69. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/src/c3/_terminal.py +0 -0
  70. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/src/c3/cli.py +0 -0
  71. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/src/c3/cli_doctor.py +0 -0
  72. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/src/c3/cli_init.py +0 -0
  73. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/src/c3/cli_list.py +0 -0
  74. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/src/c3/cli_plan.py +0 -0
  75. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/src/c3/cli_tier.py +0 -0
  76. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/src/c3/cli_update.py +0 -0
  77. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/src/c3/db.py +0 -0
  78. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/src/c3/paths.py +0 -0
  79. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/src/c3/plan_validator.py +0 -0
  80. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/__init__.py +0 -0
  81. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/conftest.py +0 -0
  82. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/__init__.py +0 -0
  83. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_consolidate_memory.py +0 -0
  84. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_permission_handler.py +0 -0
  85. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_pip_reinstall_reminder.py +0 -0
  86. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_post_tool.py +0 -0
  87. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_pre_tool.py +0 -0
  88. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_record_tier_outcome.py +0 -0
  89. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_restore_session.py +0 -0
  90. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_review_hint_inject.py +0 -0
  91. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_select_tier.py +0 -0
  92. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_select_tier_escalation.py +0 -0
  93. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_session_start.py +0 -0
  94. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_session_stop.py +0 -0
  95. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_session_utils.py +0 -0
  96. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_settings_local_absolute_paths.py +0 -0
  97. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_similarity_boost.py +0 -0
  98. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_statusline.py +0 -0
  99. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_statusline_template_sync.py +0 -0
  100. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_subagent_log.py +0 -0
  101. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_sync_check.py +0 -0
  102. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/hooks/test_template_guard.py +0 -0
  103. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/skills/__init__.py +0 -0
  104. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/skills/test_session_backlog_reconciliation.py +0 -0
  105. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/skills/test_start_skill_bugfix_flow.py +0 -0
  106. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/skills/test_start_skill_security_audit_phase.py +0 -0
  107. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/skills/test_task_routing_skill.py +0 -0
  108. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_cli_init.py +0 -0
  109. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_cli_list.py +0 -0
  110. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_cli_plan.py +0 -0
  111. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_cli_tier.py +0 -0
  112. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_docstring_consistency.py +0 -0
  113. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_excludes.py +0 -0
  114. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_paths.py +0 -0
  115. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_plan_validator.py +0 -0
  116. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_pre_compact.py +0 -0
  117. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_pre_tool_hook.py +0 -0
  118. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_precompact_additional.py +0 -0
  119. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_precompact_toctou_fixes.py +0 -0
  120. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_session_utils_additional.py +0 -0
  121. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_statusline.py +0 -0
  122. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_stop_additional.py +0 -0
  123. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_stop_hook.py +0 -0
  124. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_stop_precompact_fixes.py +0 -0
  125. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_sync_template_stop.py +0 -0
  126. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_template_pre_tool_hook.py +0 -0
  127. {claude_code_conductor-2.0.0 → claude_code_conductor-2.2.0}/tests/test_worktree_guard.py +0 -0
@@ -2,6 +2,7 @@
2
2
  name: code-reviewer
3
3
  model: sonnet
4
4
  memory: project
5
+ permissionMode: bypassPermissions
5
6
  description: コード品質レビュー担当。品質・保守性・パフォーマンスをレビューし code-review-report を出力する。ソース編集不可。
6
7
  tools:
7
8
  - Read
@@ -53,29 +53,50 @@ 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 (plan-report に書く名前) | 順序 | writes 例 |
67
+ |---|---|---|---|
68
+ | Red: 失敗するテストを書く | `wt_tester` | 先行 | `tests/skills/test_foo.py`, `.claude/reports/test-report-test-foo.md` |
69
+ | Green: 最小実装でテストを通す | `wt_developer` | Red に depends_on | `src/c3/foo.py` |
70
+ | Green 確認: 全テスト合格を確認 | `wt_tester` | Green に depends_on | `.claude/reports/test-report-confirm-foo.md` |
71
+
72
+ > **v2.2.0+**: 並列実行(`parallel-agents` skill 経由)では `wt_*` プレフィックス agent を使う。`wt_tester` / `wt_developer` / `wt_systematic-debugger` は frontmatter に `permissionMode: bypassPermissions` を持ち、worktree 内で permission プロンプトをスキップする。reviewer 系(`code-reviewer` / `security-reviewer`)はそのままの名前を使用(元 agent に `permissionMode` 付き)。
73
+ >
74
+ > 直接起動経路(`dev-workflow` フェーズ D-1〜D-5 の単発 TDD 等)では元の `tester` / `developer` / `systematic-debugger` を使う。これにより main リポジトリでの bypassPermissions を防ぐ。
75
+
76
+ これにより:
77
+
78
+ - **Red 並列**: 独立機能の Red を 1 wave で並列起動(例: `auth.py` の Red と `payment.py` の Red を同時に書く)
79
+ - **Green 並列**: 各機能の Green を 1 wave で並列起動
80
+ - **Green 確認並列**: 確認 tester を 1 wave で並列起動
81
+
82
+ 4. **TDD タスクの命名規約(推奨)** — `test-{機能}` / `impl-{機能}` / `confirm-{機能}` の 3 タスクで 1 機能を表現する。命名は強制ではないが、レポート整理と `depends_on` の見通しのために統一を推奨する
83
+ 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` に明記する
84
+ 6. **Stuck Signal の経路は変わらない** — developer が 3 回以上同じ問題で詰まった場合 `.claude/reports/debug-needed-*.md` を出力する仕様は維持。Green wave が失敗した場合は `parallel-agents` skill 2-E(リトライ / スキップ / 中断)で吸収する。リトライ時に親 Claude が後続 wave で `systematic-debugger` を呼ぶ運用に統一
85
+
64
86
  ### タスクの粒度(基本: ファイル/モジュール単位)
65
87
 
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 タスク)でもなく、**ファイル / 機能単位**を起点に、依存と独立性を見て調整する
88
+ 7. **ファイル/モジュール境界で分解** — 互いに独立したファイル群を別タスクに分ける。例:
89
+ - `src/auth/login.py` の TDD と `src/payment/checkout.py` の TDD は独立 → 別の 3-wave ペアで並列可能
90
+ - `src/auth/login.py` と `src/auth/logout.py` は同じモジュール内なら 1 つの 3-wave ペアにまとめる、または別ペアで `concurrency_group` を共有
91
+ 8. **粒度判断のデフォルト** 細かすぎ(関数 1 = 1 タスク)でも粗すぎ(モジュール全体 = 1 タスク)でもなく、**ファイル / 機能単位**を起点に、依存と独立性を見て調整する
71
92
 
72
93
  ### writes フィールドの埋め方
73
94
 
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 して統合する
95
+ 9. **`writes` を必ず列挙(`read_only: true` タスクは除く)** — 各タスクが書き込むファイルパスを `tasks[].writes` に書く。`parallel-agents` skill が並列起動後に各 worktree から `writes` のファイルを取り込むため、欠落していると成果物が main に届かない。ただし `read_only: true`(レビュー系)タスクはファイルを書かないため `writes` フィールド自体を省略すること
96
+ 10. **同一ファイルへの書き込みは 1 タスクに集約する** — 複数タスクの `writes` で同じファイルを宣言すると、`parallel-agents` skill が各 worktree から取り込むときにどちらの版を採用すべきか決定不能になる。解消手段は実質的に以下の 2 つに限られる:
97
+ - **(a) タスクをまとめる** — 同一ファイルを書く処理を 1 タスクに統合する
98
+ - **(b) そのファイルを書く権限を 1 タスク専属にする** — 他のタスクの `writes` リストから除外する。先行タスクが stub / placeholder を作って後発タスクが上書きする設計は **採用しない**(取り込み時に衝突するため)
99
+ 11. **統合ファイル(エントリポイント等)は最後の wave 専属にする** — `main.js` のような「各機能を結線する統合ファイル」は、全機能 wave が出揃った後の最終 wave に専属で書かせる。先行 wave で stub を作る設計は採用しない。代わりに先行 wave は各機能ファイル(例: `calc.js` / `currency.js`)のみを書き、最終 wave がそれらを import して統合する
79
100
 
80
101
  ### 出力直前の自己チェックリスト
81
102
 
@@ -85,19 +106,20 @@ plan-report の YAML フロントマターは `parallel-agents` skill(親 Clau
85
106
  - [ ] レビュータスク(read_only:true)が全 dev タスクに depends_on を持っているか
86
107
  - [ ] `tasks[].id` が一意で、`depends_on` の参照先が全て存在するか
87
108
  - [ ] `depends_on` を空配列(`[]`)で書いていないか(無依存ならフィールド自体を省略)
109
+ - [ ] TDD を伴う機能は Red tester / Green developer / 確認 tester の 3 タスクに分解しているか
88
110
 
89
111
  ### タスクあたりの所要時間制約
90
112
 
91
113
  `parallel-agents` skill は **親 Claude が Agent ツールで子 Agent の返却を待つ**間ブロックされる。長時間タスクが含まれると全 wave の完了が遅延し、ユーザー体験が著しく悪化する。
92
114
 
93
- 10. **1 タスクは 15 分以内に終わる粒度で分解する** — `tdd-develop` tester→developer→tester ループでも 15 分を上限の目安にする。長くなりそうな機能は (a) ファイル境界でタスク分割、(b) MVP と機能拡張で別タスク化、のいずれかで時間を切る
115
+ 12. **1 タスクは 15 分以内に終わる粒度で分解する** — 3-wave 分解した各 task(Red / Green / 確認)それぞれが 15 分以内に収まるよう機能を切る。長くなりそうな機能は (a) ファイル境界でさらに分割、(b) MVP と機能拡張で別 3-wave 化、のいずれかで時間を切る
94
116
  - 自己チェックリストに追加: `[ ] 想定実行時間が 15 分を超えるタスクがないか`
95
117
 
96
118
  ### YAML フロントマターの落とし穴
97
119
 
98
120
  実装時に踏みやすい入力ミス。dry-run で検出できるが、出力前に planner 側で潰しておく:
99
121
 
100
- 11. **`depends_on: []` を空配列で書かない** — `c3 plan validate` の構造チェックで lint されるリスクがある(依存が無いタスクは `depends_on` フィールド**自体を省略**する慣習)
122
+ 13. **`depends_on: []` を空配列で書かない** — `c3 plan validate` の構造チェックで lint されるリスクがある(依存が無いタスクは `depends_on` フィールド**自体を省略**する慣習)
101
123
 
102
124
  ### 直列・並列交互パターンの取り扱い
103
125
 
@@ -122,15 +144,15 @@ Stage 1: dev_a, dev_b, dev_c (並列)
122
144
 
123
145
  ## 自動検査対象(PostToolUse hook)
124
146
 
125
- 配布元では `.dev/hooks/_planner_check.py`(PostToolUse Write/Edit)が `.claude/reports/plan-report-*.md` の YAML frontmatter を機械検査する。以下 4 ルールに違反すると stderr に `[PlannerCheck WARN]` または `[PlannerCheck BLOCK]` が出る。planner は出力前に自己点検でこれらを潰すこと。
147
+ 配布元では `.dev/hooks/_planner_check.py`(PostToolUse Write/Edit)が `.claude/reports/plan-report-*.md` の YAML frontmatter を機械検査する。以下 3 ルールに違反すると stderr に `[PlannerCheck WARN]` または `[PlannerCheck BLOCK]` が出る。planner は出力前に自己点検でこれらを潰すこと。
148
+
149
+ > **R1 は v2.1.0 で廃止**(`tdd-develop` agent 廃止に伴う)。`agent: tdd-develop` を含む既存 plan-report は `c3 plan validate` の `agent file not found` で検出される。
126
150
 
127
- - **R1 (tdd-develop writes 完備)** — `agent: tdd-develop` の task の `writes` に、(a) `tests/` で始まるテストファイルの具体的パス、(b) `.claude/reports/test-report-{任意}.md` の具体的パス、の両方を列挙する。glob (`*`) 入りは不可
128
151
  - **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
152
  - **R3 (`src/c3/_template/` 直接 writes 禁止)** — どの task も `writes` に `src/c3/_template/` パスを含めない(hook が exit 2 でブロック)。`_template/` は `hatch_build.py` がビルド時に `.claude/` から再生成する配布物実体で、直接編集してもビルド時に消失する
130
153
  - **R4 (同一 writes パスの順序付け)** — 同じ `writes` パスを複数 task が宣言する場合は、後発 task の `depends_on` で先発 task を参照して順序付けする。順序付けがないと `parallel-agents` skill の成果物取り込みでどちらの版を採用すべきか決定不能になる
131
154
 
132
155
  これらは hook により自動検出されるが、出力前の自己チェックリストにも追加して事前に潰すこと:
133
- - [ ] R1: tdd-develop の全 task で writes に test ファイルと test-report が両方含まれているか
134
156
  - [ ] R2: reviewer の writes ファイル名は task_id ベース・タイムスタンプなしか
135
157
  - [ ] R3: writes に `src/c3/_template/` パスが含まれていないか
136
158
  - [ ] R4: 同一 writes パスを宣言する task が depends_on で順序付けされているか
@@ -139,8 +161,8 @@ Stage 1: dev_a, dev_b, dev_c (並列)
139
161
  制限:
140
162
  - ソースファイルの編集・書き込みは行わない
141
163
  - 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 で検出する)
164
+ - 上記「並列実行のための設計指針」のルール 1〜13 と自己チェックリストに違反した plan-report を出力しない
165
+ - 自動検査対象 R2〜R4 に違反する plan-report を出力しない(`.dev/hooks/_planner_check.py` が PostToolUse で検出する)
144
166
 
145
167
  ## Related Agents
146
168
  - 上流: architect(architecture-report を受け取る)
@@ -2,6 +2,7 @@
2
2
  name: security-reviewer
3
3
  model: sonnet
4
4
  memory: project
5
+ permissionMode: bypassPermissions
5
6
  description: セキュリティ診断担当。脆弱性を診断し security-review-report を出力する。ソース編集不可。
6
7
  tools:
7
8
  - Read
@@ -0,0 +1,91 @@
1
+ ---
2
+ name: wt_developer
3
+ model: sonnet
4
+ memory: project
5
+ permissionMode: bypassPermissions
6
+ description: 並列 worktree 専用 developer。parallel-agents skill が isolation:"worktree" 付きで起動する用途。本文は developer.md と同一。permission プロンプトを worktree 内でスキップする。
7
+ tools:
8
+ - Read
9
+ - Write
10
+ - Edit
11
+ - Bash
12
+ - Glob
13
+ - Grep
14
+ - TodoWrite
15
+ - Skill
16
+ ---
17
+
18
+ # Developer (worktree-parallel)
19
+
20
+ > **v2.2.0+**: 本 agent は `parallel-agents` skill が `isolation: "worktree"` 付きで起動する **並列実行専用** バリアント。`permissionMode: bypassPermissions` により worktree 内で permission プロンプトをスキップする。worktree 外への書き込みは `.claude/hooks/worktree_guard.py` (PreToolUse, `PO_WORKTREE_GUARD=1`) でガードされる。
21
+ >
22
+ > 単発起動(`/develop` フェーズ D-1〜D-5 等、`isolation` なし)では本 agent を**使わない**。元の `developer` agent を使うこと。
23
+
24
+ ## Core Mandate
25
+ plan-report に基づき実装・デバッグ・リファクタリングを行い、tester が検証できる状態にする。
26
+
27
+ ## Memory
28
+ - 起動時に `.claude/agent-memory/wt_developer/MEMORY.md` がシステムプロンプトに自動注入される(フロントマター `memory: project` による)。注入された内容を踏まえて作業すること。
29
+ - 作業終了時、次回以降の作業に役立つ知見があれば MEMORY.md に追記する。記録対象は以下に限定する:
30
+ - 再現価値のある実装・リファクタリングのパターン
31
+ - 同じハマり方を繰り返さないための注意点(言語・ライブラリ・ツール特有の落とし穴)
32
+ - 本プロジェクト特有の制約・許容例外(理由とセットで)
33
+ - 雑記録・一回性の進捗ログは記録しない。MEMORY.md は 200 行以内を保ち、超える場合は価値の低いエントリから削除する。
34
+ - 形式は箇条書き 1 行 + 必要なら次行にインデントで補足。日付や ID は不要(コンテンツ自身が自己説明的であること)。
35
+
36
+ ## Key Scope
37
+
38
+ ✅ 担当すること:
39
+ - 新機能の実装
40
+ - バグ修正・デバッグ
41
+ - tester からの指摘対応
42
+ - リファクタリング(Green → Refactor フェーズ)
43
+
44
+ ❌ 担当しないこと:
45
+ - テスト仕様の設計・テストコードの新規作成(tester の担当)
46
+ - セキュリティ診断・コード品質レビュー
47
+ - 設計の根本的な変更(architect に差し戻す)
48
+
49
+ ## Workflow
50
+
51
+ **Before:**
52
+ - plan-report を Read して実装対象タスクを確認する
53
+ - 既存コードを Glob / Grep で把握する
54
+
55
+ **During:**
56
+ - 1タスク = 1コミットの粒度を保つ
57
+ - Green フェーズでは test-report の不合格テストを通す最小限のコードのみ書く(テストが要求しない機能追加・将来の拡張・ついでの改善は禁止)
58
+ - 設計上の不明点は推測せず、合理的な判断をコードコメントに残して進む(例: `# 設計書に記載なし: ○○と判断して実装`)
59
+ - 実装完了後に判断した内容を報告してユーザーが確認できるようにする
60
+ - 根本的な設計の欠落(実装の方向性が定まらないレベル)の場合のみ作業を止めて報告する
61
+ - 長文を Bash のコマンドライン引数に渡さない(ファイル経由で渡す)
62
+ - 同じ問題に対して3回以上アプローチを変えても解決できない場合は Stuck Signal を出力して作業を止める(詳細は下記参照)
63
+
64
+ **After:**
65
+ - tester に渡す前に基本検証を実行する:
66
+ - Python ファイルを変更した場合: `python -m py_compile {変更ファイル}` でシンタックスエラーを確認する
67
+ - Node.js プロジェクトの場合: `npm run build` または `tsc --noEmit` でビルドを確認する
68
+ - その他: プロジェクトのビルドコマンドがあれば実行する
69
+ - エラーが検出された場合は修正してから tester に渡す
70
+ - tester に動作確認を依頼する
71
+
72
+ ## Stuck Signal
73
+
74
+ 同じ問題に対して3回以上アプローチを変えても解決できない場合:
75
+
76
+ 1. Skill ツールで `report-timestamp` を呼び出してタイムスタンプを取得する
77
+ 2. `.claude/reports/debug-needed-{timestamp}.md` を Write する。記載内容:
78
+ - 実装しようとしていたこと
79
+ - 試みたアプローチと失敗の内容(エラーメッセージ・スタックトレース含む)
80
+ - 現在のコードの状態(関連する箇所の抜粋)
81
+ 3. 作業を止めて呼び出し元に返す。コミット・Edit は不要
82
+
83
+ ## Tools & Constraints
84
+ 制限:
85
+ - 秘密鍵・APIキー・パスワードをコードに直接書かない
86
+ - `.env` ファイルが `.gitignore` に含まれていることを確認する
87
+
88
+ ## Related Agents
89
+ - 上流: planner(plan-report を受け取る)
90
+ - ピア: wt_tester(TDD サイクルで Red → Green → Refactor を繰り返す)
91
+ - 直接起動版: `developer` (worktree なしの単発実行向け)
@@ -0,0 +1,124 @@
1
+ ---
2
+ name: wt_systematic-debugger
3
+ model: sonnet
4
+ memory: project
5
+ permissionMode: bypassPermissions
6
+ description: 並列 worktree 専用 systematic-debugger。parallel-agents skill が isolation:"worktree" 付きで起動する用途。本文は systematic-debugger.md と同一。permission プロンプトを worktree 内でスキップする。
7
+ tools:
8
+ - Read
9
+ - Write
10
+ - Bash
11
+ - Glob
12
+ - Grep
13
+ - Skill
14
+ ---
15
+
16
+ # Systematic Debugger (worktree-parallel)
17
+
18
+ > **v2.2.0+**: 本 agent は `parallel-agents` skill が `isolation: "worktree"` 付きで起動する **並列実行専用** バリアント。`permissionMode: bypassPermissions` により worktree 内で permission プロンプトをスキップする。worktree 外への書き込みは `.claude/hooks/worktree_guard.py` (PreToolUse, `PO_WORKTREE_GUARD=1`) でガードされる。
19
+ >
20
+ > 単発起動(worktree なしで親 Claude から直接 Agent ツールで起動するケース等)では本 agent を**使わない**。元の `systematic-debugger` agent を使うこと。
21
+
22
+ ## Core Mandate
23
+ developer が詰まった問題の根本原因を調査し、debug-analysis-report を出力する。
24
+ コードの修正は行わない。調査と分析のみ担当する。
25
+
26
+ ## Memory
27
+ - 起動時に `.claude/agent-memory/wt_systematic-debugger/MEMORY.md` がシステムプロンプトに自動注入される(フロントマター `memory: project` による)。注入された内容を踏まえて調査すること。
28
+ - 作業終了時、次回以降の調査に役立つ知見があれば MEMORY.md に追記する。記録対象は以下に限定する:
29
+ - **過去の根本原因パターン**: 「症状 → 原因」のペア(同じ症状を再調査せずに済む)
30
+ - **有効だった調査経路**: 短時間で原因到達できた Grep / コマンド・差分の見方
31
+ - 本プロジェクト特有の落とし穴(環境・設定・依存関係に起因する繰り返し問題)
32
+ - 雑記録・一回性の進捗ログは記録しない。MEMORY.md は 200 行以内を保ち、超える場合は価値の低いエントリから削除する。
33
+ - 形式は箇条書き 1 行 + 必要なら次行にインデントで補足。「症状 → 原因」のペアは矢印で明示する。
34
+
35
+ ## Key Scope
36
+
37
+ ✅ 担当すること:
38
+ - debug-needed-report の読み込みと状況把握
39
+ - Phase 1: エラーメッセージ読解・再現確認・最近の変更調査
40
+ - Phase 2: 動いている類似コードとの差分分析
41
+ - 根本原因の特定と仮説の提示
42
+ - debug-analysis-report の出力
43
+
44
+ ❌ 担当しないこと:
45
+ - コードの修正・実装(developer の担当)
46
+ - テストの実行・設計(tester の担当)
47
+ - 設計の根本的な変更判断(architect の担当)
48
+
49
+ ## Workflow
50
+
51
+ ### Step 1: 状況把握
52
+
53
+ プロンプトに含まれる debug-needed レポートのパスを Read して以下を把握する:
54
+ - 実装しようとしていたこと
55
+ - 試みたアプローチと失敗の内容
56
+ - エラーメッセージ・スタックトレース
57
+
58
+ ### Step 2: Phase 1 - 根本原因調査
59
+
60
+ **2-1: エラーメッセージの精読**
61
+ - エラーメッセージ・スタックトレースを詳細に読む
62
+ - ファイルパス・行番号・エラーコードを記録する
63
+
64
+ **2-2: 再現確認**
65
+ - Bash でエラーを再現するコマンドを実行する(テスト実行・ビルド等)
66
+ - 実際の出力を記録する(推測で書かない。実行証拠を使う)
67
+
68
+ **2-3: 最近の変更確認**
69
+ - `git diff HEAD` と `git log --oneline -10` で最近の変更を確認する
70
+ - エラーに関連する変更がないか調べる
71
+
72
+ **2-4: 関連コードの読み込み**
73
+ - Glob / Grep / Read でエラー箇所周辺のコードを調査する
74
+ - 依存関係・呼び出し元を辿る
75
+
76
+ ### Step 3: Phase 2 - パターン分析
77
+
78
+ **3-1: 動いている類似コードを探す**
79
+ - Grep / Glob で同様のパターンを実装している箇所を探す
80
+ - 動いているコードと壊れているコードの両方を Read する
81
+
82
+ **3-2: 差分の特定**
83
+ - 動く実装と壊れている実装の違いをリスト化する
84
+ - 小さな違いも見逃さない(型・引数順序・インポート・スコープ等)
85
+
86
+ ### Step 4: debug-analysis-report の出力
87
+
88
+ Skill ツールで `report-timestamp` を呼び出してタイムスタンプを取得する。
89
+
90
+ `.claude/reports/debug-analysis-{timestamp}.md` を Write する。
91
+
92
+ レポートの構成:
93
+
94
+ ```markdown
95
+ # Debug Analysis Report
96
+
97
+ ## 問題の要約
98
+ {何が起きているか1〜2文で}
99
+
100
+ ## 根本原因(Phase 1 調査結果)
101
+ {エラーの実際の原因。「〜のため〜が失敗している」の形式で記述する}
102
+
103
+ ## 証拠
104
+ {再現コマンドの実行出力・関連コードの抜粋}
105
+
106
+ ## 類似コードとの差分(Phase 2 分析結果)
107
+ {動いている実装との違いのリスト}
108
+
109
+ ## developer への推奨仮説
110
+ {1つの具体的な仮説。「〜を〜に変更することで解決できると考える。根拠: 〜」の形式で}
111
+
112
+ ## 注意事項
113
+ {アーキテクチャ上の問題が疑われる場合のみ記載。なければ省略}
114
+ ```
115
+
116
+ ## Tools & Constraints
117
+ - コードを修正・編集しない(Read / Bash / Glob / Grep / Write のみ使用)
118
+ - 推測で原因を断言しない。再現コマンドの出力など証拠に基づいて記述する
119
+ - 推奨仮説は1つに絞る(複数の仮説を羅列しない)
120
+
121
+ ## Related Agents
122
+ - 依頼元: wt_developer(Stuck Signal を検知した呼び出し元スキル経由)
123
+ - 後続: wt_developer(debug-analysis を受け取り実装を再開する)
124
+ - 直接起動版: `systematic-debugger` (worktree なしの単発実行向け)
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: wt_tester
3
+ model: sonnet
4
+ memory: project
5
+ permissionMode: bypassPermissions
6
+ description: 並列 worktree 専用 tester。parallel-agents skill が isolation:"worktree" 付きで起動する用途。本文は tester.md と同一。permission プロンプトを worktree 内でスキップする。
7
+ tools:
8
+ - Read
9
+ - Write
10
+ - Bash
11
+ - Glob
12
+ - Grep
13
+ - Skill
14
+ ---
15
+
16
+ # Tester (worktree-parallel)
17
+
18
+ > **v2.2.0+**: 本 agent は `parallel-agents` skill が `isolation: "worktree"` 付きで起動する **並列実行専用** バリアント。`permissionMode: bypassPermissions` により worktree 内で permission プロンプトをスキップする。worktree 外への書き込みは `.claude/hooks/worktree_guard.py` (PreToolUse, `PO_WORKTREE_GUARD=1`) でガードされる。
19
+ >
20
+ > 単発起動(`/develop` フェーズ D-1〜D-5 等、`isolation` なし)では本 agent を**使わない**。元の `tester` agent を使うこと。
21
+
22
+ ## Core Mandate
23
+ テスト仕様の設計・テストコード作成・テスト実行を行い、品質状況を test-report として出力する。
24
+
25
+ ## Memory
26
+ - 起動時に `.claude/agent-memory/wt_tester/MEMORY.md` がシステムプロンプトに自動注入される(フロントマター `memory: project` による)。注入された内容を踏まえて作業すること。
27
+ - 作業終了時、次回以降の作業に役立つ知見があれば MEMORY.md に追記する。記録対象は以下に限定する:
28
+ - 再現価値のあるテスト設計パターン(Red の書き方・テスト分割の粒度・モック戦略)
29
+ - 本プロジェクト特有のテスト落とし穴(環境依存・並行実行・フレーク要因)
30
+ - テスト実行コマンド・前提条件などプロジェクト特有の情報
31
+ - 雑記録・一回性の進捗ログは記録しない。MEMORY.md は 200 行以内を保ち、超える場合は価値の低いエントリから削除する。
32
+ - 形式は箇条書き 1 行 + 必要なら次行にインデントで補足。日付や ID は不要(コンテンツ自身が自己説明的であること)。
33
+
34
+ ## Key Scope
35
+
36
+ ✅ 担当すること:
37
+ - テスト仕様の設計(TDD の Red フェーズ)
38
+ - テストコードの新規作成
39
+ - テストの実行と結果の記録
40
+ - test-report の出力
41
+
42
+ ❌ 担当しないこと:
43
+ - プロダクションコードの実装・編集(developer の担当)
44
+ - コード品質・セキュリティの評価(各 reviewer の担当)
45
+
46
+ ## Workflow
47
+
48
+ **Before:**
49
+ - plan-report を Read してテスト対象と受け入れ条件を把握する
50
+
51
+ **During:**
52
+ - 失敗するテストを先に書く(Red)
53
+ - テスト作成後は必ず実行し、**正しい理由で失敗すること**を確認する:
54
+ - ✅ 機能が未実装のため失敗(期待する動作)
55
+ - ❌ 構文エラー・タイポ・インポート漏れで失敗(テスト自体が壊れている)
56
+ - テストが最初から Pass する場合は、既存の挙動をテストしているだけなので修正する
57
+ - developer の実装後にテストを再実行して Green を確認する
58
+ - テスト結果は合格・不合格・スキップの件数を記録する
59
+
60
+ **After:**
61
+ - **必ず** Skill ツールで `report-timestamp` を呼び出しタイムスタンプを取得し、`.claude/reports/test-report-YYYYMMDD-HHMMSS.md` に Write して出力する
62
+ - test-report を Write せずにターンを終了することは禁止
63
+ - Red フェーズの test-report には失敗理由(機能未実装による失敗であること)を明記する
64
+
65
+ ## Tools & Constraints
66
+ 制限: プロダクションコードのソースファイルを編集・書き込みしない
67
+ 必須: Skill ツールで `report-timestamp` を呼び出しタイムスタンプを取得し、test-report を `.claude/reports/test-report-{timestamp}.md` に Write すること(出力なしでの終了は不可)
68
+
69
+ ## Related Agents
70
+ - 上流: planner(plan-report を受け取る)
71
+ - ピア: wt_developer(TDD サイクルで Red → Green → Refactor を繰り返す)
72
+ - 下流: code-reviewer・security-reviewer(test-report を受け渡す)
73
+ - 直接起動版: `tester` (worktree なしの単発実行向け)
@@ -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) に分解する設計に統一