claude-code-conductor 0.2.0__py3-none-any.whl
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.
- c3/__init__.py +3 -0
- c3/__main__.py +4 -0
- c3/_template/.claude/CLAUDE.md +182 -0
- c3/_template/.claude/agents/architect.md +50 -0
- c3/_template/.claude/agents/code-reviewer.md +50 -0
- c3/_template/.claude/agents/developer.md +55 -0
- c3/_template/.claude/agents/doc-writer.md +62 -0
- c3/_template/.claude/agents/interviewer.md +46 -0
- c3/_template/.claude/agents/planner.md +59 -0
- c3/_template/.claude/agents/project-setup.md +106 -0
- c3/_template/.claude/agents/security-reviewer.md +51 -0
- c3/_template/.claude/agents/tdd-develop.md +117 -0
- c3/_template/.claude/agents/tester.md +48 -0
- c3/_template/.claude/commands/develop.md +10 -0
- c3/_template/.claude/commands/doc.md +174 -0
- c3/_template/.claude/commands/extract-lib.md +292 -0
- c3/_template/.claude/commands/init-session.md +110 -0
- c3/_template/.claude/commands/mcp.md +322 -0
- c3/_template/.claude/commands/promote-pattern.md +135 -0
- c3/_template/.claude/commands/review.md +9 -0
- c3/_template/.claude/commands/setup.md +206 -0
- c3/_template/.claude/commands/start.md +88 -0
- c3/_template/.claude/docs/parallel-orchestra-manifest.md +108 -0
- c3/_template/.claude/hooks/clear_file_history.py +39 -0
- c3/_template/.claude/hooks/enable_sandbox.py +61 -0
- c3/_template/.claude/hooks/pre_compact.py +82 -0
- c3/_template/.claude/hooks/pre_tool.py +64 -0
- c3/_template/.claude/hooks/statusline.py +170 -0
- c3/_template/.claude/hooks/stop.py +202 -0
- c3/_template/.claude/hooks/validate_skill_change.py +33 -0
- c3/_template/.claude/hooks/worktree_guard.py +53 -0
- c3/_template/.claude/memory/.gitkeep +0 -0
- c3/_template/.claude/rules/code-review-checklist.md +91 -0
- c3/_template/.claude/rules/promoted/index.md +5 -0
- c3/_template/.claude/rules/security-review-checklist.md +84 -0
- c3/_template/.claude/settings.json +136 -0
- c3/_template/.claude/settings.local.json +126 -0
- c3/_template/.claude/skills/dev-workflow.md +484 -0
- c3/_template/.claude/skills/parallel-execution.md +121 -0
- c3/_template/.claude/skills/promoted/index.md +5 -0
- c3/_template/.claude/skills/worktree-tdd-workflow.md +71 -0
- c3/cli.py +63 -0
- c3/cli_doctor.py +135 -0
- c3/cli_init.py +70 -0
- c3/cli_list.py +69 -0
- c3/cli_po.py +102 -0
- c3/cli_update.py +117 -0
- c3/paths.py +64 -0
- c3/po/__init__.py +11 -0
- c3/po/detect.py +44 -0
- c3/po/manifest.py +336 -0
- c3/po/run.py +105 -0
- claude_code_conductor-0.2.0.dist-info/METADATA +362 -0
- claude_code_conductor-0.2.0.dist-info/RECORD +57 -0
- claude_code_conductor-0.2.0.dist-info/WHEEL +4 -0
- claude_code_conductor-0.2.0.dist-info/entry_points.txt +2 -0
- claude_code_conductor-0.2.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
# Dev Workflow
|
|
2
|
+
|
|
3
|
+
要件定義から実装・レビューまでを複数エージェントで連携させるフルワークフロー。
|
|
4
|
+
`commands/` の各コマンドからこのファイルを Read して指定フェーズから実行する。
|
|
5
|
+
フェーズ間の遷移はこのファイル内で完結する(外部コマンド呼び出し不要)。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## フェーズ A: ヒアリング
|
|
10
|
+
|
|
11
|
+
`.claude/agents/interviewer.md` を Read してペルソナを採用する。
|
|
12
|
+
|
|
13
|
+
今日のセッションファイル(`.claude/memory/sessions/YYYYMMDD.tmp`)に以下を追記する(未登録の場合のみ):
|
|
14
|
+
- `- [ ] ヒアリング` / `- [ ] 設計` / `- [ ] 計画`
|
|
15
|
+
|
|
16
|
+
### A-1: 目的
|
|
17
|
+
|
|
18
|
+
AskUserQuestion ツール:
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"questions": [{
|
|
22
|
+
"question": "このプロジェクト・機能の目的を教えてください",
|
|
23
|
+
"options": [
|
|
24
|
+
{ "label": "新機能の追加", "description": "新しい機能を実装したい" },
|
|
25
|
+
{ "label": "既存機能の改善", "description": "現在の動作を変えたい・良くしたい" },
|
|
26
|
+
{ "label": "バグ修正", "description": "問題のある動作を直したい" },
|
|
27
|
+
{ "label": "リファクタリング", "description": "動作は変えずに内部を整理したい" }
|
|
28
|
+
]
|
|
29
|
+
}]
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### A-2: 背景・きっかけ
|
|
34
|
+
|
|
35
|
+
AskUserQuestion ツール:
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"questions": [{
|
|
39
|
+
"question": "背景・きっかけを教えてください(なぜ今これが必要ですか?)",
|
|
40
|
+
"options": [
|
|
41
|
+
{ "label": "ユーザーからの要望", "description": "具体的な声があった" },
|
|
42
|
+
{ "label": "ビジネス上の要件", "description": "事業的な理由がある" },
|
|
43
|
+
{ "label": "技術的な負債解消", "description": "将来のために今直したい" },
|
|
44
|
+
{ "label": "パフォーマンス問題", "description": "遅い・重いを解決したい" }
|
|
45
|
+
]
|
|
46
|
+
}]
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### A-3: 制約・前提条件
|
|
51
|
+
|
|
52
|
+
AskUserQuestion ツール:
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"questions": [{
|
|
56
|
+
"question": "制約や前提条件はありますか?(複数選択可)",
|
|
57
|
+
"options": [
|
|
58
|
+
{ "label": "納期がある", "description": "期日を後で教えてください" },
|
|
59
|
+
{ "label": "既存APIを壊せない", "description": "後方互換性が必要" },
|
|
60
|
+
{ "label": "特定の技術スタックに限定", "description": "使える技術が決まっている" },
|
|
61
|
+
{ "label": "特になし" }
|
|
62
|
+
],
|
|
63
|
+
"multiSelect": true
|
|
64
|
+
}]
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
制約を選んだ場合は補足情報(納期の日付など)を追加で確認する。
|
|
69
|
+
|
|
70
|
+
### A-4: 非機能要件
|
|
71
|
+
|
|
72
|
+
AskUserQuestion ツール:
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"questions": [{
|
|
76
|
+
"question": "特に重視したい品質特性はありますか?",
|
|
77
|
+
"options": [
|
|
78
|
+
{ "label": "セキュリティ", "description": "認証・認可・データ保護を重視" },
|
|
79
|
+
{ "label": "パフォーマンス", "description": "速度・スループットを重視" },
|
|
80
|
+
{ "label": "保守性", "description": "読みやすさ・変更しやすさを重視" },
|
|
81
|
+
{ "label": "特になし・バランスよく" }
|
|
82
|
+
],
|
|
83
|
+
"multiSelect": true
|
|
84
|
+
}]
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### A-5: requirements-report の生成と承認
|
|
89
|
+
|
|
90
|
+
収集した内容をもとに `.claude/reports/requirements-report-YYYYMMDD-HHMMSS.md` に Write する。
|
|
91
|
+
内容を提示した後、AskUserQuestion で確認する:
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"questions": [{
|
|
96
|
+
"question": "requirements-report の内容を確認してください。どうしますか?",
|
|
97
|
+
"options": [
|
|
98
|
+
{ "label": "承認", "description": "設計フェーズへ進む" },
|
|
99
|
+
{ "label": "否認・修正を依頼する", "description": "フィードバックを入力してヒアリングをやり直す" },
|
|
100
|
+
{ "label": "否認・自分でファイルを編集する", "description": "reports/ のファイルを直接編集してから続ける" }
|
|
101
|
+
]
|
|
102
|
+
}]
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
承認後 → セッションファイルの `- [ ] ヒアリング` を `- [x] ヒアリング` に Edit して**フェーズ B** へ。
|
|
107
|
+
|
|
108
|
+
**知識蓄積:**
|
|
109
|
+
- 「否認・修正を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
|
|
110
|
+
- 承認かつ非自明なアプローチが有効だった場合: `## うまくいったアプローチ` に追記し `patterns` にも追加する
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## フェーズ B: 設計
|
|
115
|
+
|
|
116
|
+
`.claude/agents/architect.md` を Read してペルソナを採用する。
|
|
117
|
+
|
|
118
|
+
**フェーズ A から続いている場合:** 要件はコンテキスト内にあるため読み直し不要。
|
|
119
|
+
**直接開始の場合:** Glob で `.claude/reports/requirements-report-*.md` の最新を Read する。
|
|
120
|
+
|
|
121
|
+
今日のセッションファイルに以下を追記する(未登録の場合のみ):
|
|
122
|
+
- `- [ ] 設計` / `- [ ] 計画`
|
|
123
|
+
|
|
124
|
+
### B-1: 技術スタックの確認
|
|
125
|
+
|
|
126
|
+
AskUserQuestion ツール:
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"questions": [{
|
|
130
|
+
"question": "技術スタックについて制約はありますか?",
|
|
131
|
+
"options": [
|
|
132
|
+
{ "label": "既存スタックに合わせる", "description": "使用中の言語・FWに統一する" },
|
|
133
|
+
{ "label": "最適なものを選んでほしい", "description": "推薦に任せる" },
|
|
134
|
+
{ "label": "指定がある", "description": "使う技術を具体的に伝えます" }
|
|
135
|
+
]
|
|
136
|
+
}]
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### B-2: 設計と不明点の確認
|
|
141
|
+
|
|
142
|
+
要件をもとに設計案を作成する。不明点があれば AskUserQuestion ツールで確認する。
|
|
143
|
+
|
|
144
|
+
### B-3: architecture-report の生成と承認
|
|
145
|
+
|
|
146
|
+
`.claude/reports/architecture-report-YYYYMMDD-HHMMSS.md` に Write する。
|
|
147
|
+
内容を提示した後、AskUserQuestion で確認する:
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"questions": [{
|
|
152
|
+
"question": "architecture-report の内容を確認してください。どうしますか?",
|
|
153
|
+
"options": [
|
|
154
|
+
{ "label": "承認", "description": "計画フェーズへ進む" },
|
|
155
|
+
{ "label": "否認・修正を依頼する", "description": "フィードバックを入力して設計をやり直す" },
|
|
156
|
+
{ "label": "否認・自分でファイルを編集する", "description": "reports/ のファイルを直接編集してから続ける" }
|
|
157
|
+
]
|
|
158
|
+
}]
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
承認後 → セッションファイルの `- [ ] 設計` を `- [x] 設計` に Edit して**フェーズ C** へ。
|
|
163
|
+
|
|
164
|
+
**知識蓄積:**
|
|
165
|
+
- 「否認・修正を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
|
|
166
|
+
- 承認かつ非自明なアプローチが有効だった場合: `## うまくいったアプローチ` に追記し `patterns` にも追加する
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## フェーズ C: 計画
|
|
171
|
+
|
|
172
|
+
`.claude/agents/planner.md` を Read してペルソナを採用する。
|
|
173
|
+
|
|
174
|
+
**上流フェーズから続いている場合:** 要件・設計はコンテキスト内にあるため読み直し不要。
|
|
175
|
+
**直接開始またはレビューから戻った場合:** Glob で `.claude/reports/` 内の全レポートを Read する(`[対応予定]` マーク付きの指摘を修正計画に反映する)。
|
|
176
|
+
|
|
177
|
+
今日のセッションファイルに `- [ ] 計画` を追記する(未登録の場合のみ)。
|
|
178
|
+
|
|
179
|
+
### C-1: マイルストーンの確認
|
|
180
|
+
|
|
181
|
+
AskUserQuestion ツール:
|
|
182
|
+
```json
|
|
183
|
+
{
|
|
184
|
+
"questions": [{
|
|
185
|
+
"question": "マイルストーン(途中で確認したいポイント)を設けますか?",
|
|
186
|
+
"options": [
|
|
187
|
+
{ "label": "設ける", "description": "一定の区切りで確認しながら進めたい" },
|
|
188
|
+
{ "label": "設けない", "description": "一気に完了まで進める" }
|
|
189
|
+
]
|
|
190
|
+
}]
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### C-2: plan-report の生成と承認
|
|
195
|
+
|
|
196
|
+
`.claude/reports/plan-report-YYYYMMDD-HHMMSS.md` に Write する。
|
|
197
|
+
内容を提示した後、AskUserQuestion で確認する:
|
|
198
|
+
|
|
199
|
+
```json
|
|
200
|
+
{
|
|
201
|
+
"questions": [{
|
|
202
|
+
"question": "plan-report の内容を確認してください。どうしますか?",
|
|
203
|
+
"options": [
|
|
204
|
+
{ "label": "承認", "description": "実装フェーズへ進む" },
|
|
205
|
+
{ "label": "否認・修正を依頼する", "description": "フィードバックを入力して計画をやり直す" },
|
|
206
|
+
{ "label": "否認・自分でファイルを編集する", "description": "reports/ のファイルを直接編集してから続ける" }
|
|
207
|
+
]
|
|
208
|
+
}]
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
承認後 → セッションファイルの `- [ ] 計画` を `- [x] 計画` に Edit して**フェーズ D** へ。
|
|
213
|
+
|
|
214
|
+
**知識蓄積:**
|
|
215
|
+
- 「否認・修正を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
|
|
216
|
+
- 承認かつ非自明なアプローチが有効だった場合: `## うまくいったアプローチ` に追記し `patterns` にも追加する
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## フェーズ D: TDD
|
|
221
|
+
|
|
222
|
+
**フェーズ C から続いている場合:** plan-report はコンテキスト内にあるため読み直し不要。
|
|
223
|
+
**直接開始の場合:** Glob で `.claude/reports/plan-report-*.md` の最新を Read する。存在しない場合はフェーズ C から始めるよう案内して終了する。
|
|
224
|
+
|
|
225
|
+
今日のセッションファイルに以下を追記する(未登録の場合のみ):
|
|
226
|
+
- `- [ ] tester: Red フェーズ`
|
|
227
|
+
- `- [ ] developer: Green フェーズ`
|
|
228
|
+
- `- [ ] developer: Refactor フェーズ`
|
|
229
|
+
- `- [ ] tester: 最終確認`
|
|
230
|
+
|
|
231
|
+
### D-0: 実行モード選択
|
|
232
|
+
|
|
233
|
+
AskUserQuestion ツール:
|
|
234
|
+
```json
|
|
235
|
+
{
|
|
236
|
+
"questions": [{
|
|
237
|
+
"question": "TDD サイクルの実行モードを選んでください",
|
|
238
|
+
"options": [
|
|
239
|
+
{ "label": "TDD 逐次実行", "description": "従来の D-1〜D-5(tester→developer→tester)で1タスクずつ進める" },
|
|
240
|
+
{ "label": "PO 並列実行", "description": "parallel-orchestra で plan-report の独立タスクを git worktree 並列実行する(PO のインストールが必要)" }
|
|
241
|
+
]
|
|
242
|
+
}]
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**「TDD 逐次実行」の場合:** D-1 へ進む。
|
|
247
|
+
|
|
248
|
+
**「PO 並列実行」の場合:**
|
|
249
|
+
1. **最初に必ず** `.claude/skills/parallel-execution.md` を Read する(記憶・推測で進めない)
|
|
250
|
+
2. セッションファイルに `- [ ] PO 並列実行` を追記する
|
|
251
|
+
3. `parallel-execution.md` の手順を完全に守る
|
|
252
|
+
4. 完了後はフェーズ E(レビュー)へ進む
|
|
253
|
+
|
|
254
|
+
### D-1: tester(Red フェーズ)
|
|
255
|
+
|
|
256
|
+
Agent ツールで `tester` エージェントを起動する。→ 失敗するテストを先に作成する。
|
|
257
|
+
|
|
258
|
+
完了後 → セッションファイルの `- [ ] tester: Red フェーズ` を `- [x]` に Edit する。
|
|
259
|
+
|
|
260
|
+
### D-2: developer(Green フェーズ)
|
|
261
|
+
|
|
262
|
+
Agent ツールで `developer` エージェントを起動する。→ テストが通る実装を行う。
|
|
263
|
+
|
|
264
|
+
AskUserQuestion で確認する:
|
|
265
|
+
```json
|
|
266
|
+
{
|
|
267
|
+
"questions": [{
|
|
268
|
+
"question": "実装内容を確認してください。どうしますか?",
|
|
269
|
+
"options": [
|
|
270
|
+
{ "label": "承認", "description": "テスト確認フェーズへ進む" },
|
|
271
|
+
{ "label": "否認・再実装を依頼する", "description": "フィードバックを入力して developer を再起動する" },
|
|
272
|
+
{ "label": "否認・自分でコードを修正する", "description": "自分でコードを修正してから続ける" }
|
|
273
|
+
]
|
|
274
|
+
}]
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
承認後 → セッションファイルの `- [ ] developer: Green フェーズ` を `- [x]` に Edit する。
|
|
279
|
+
|
|
280
|
+
**知識蓄積:**
|
|
281
|
+
- 「否認・再実装を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
|
|
282
|
+
|
|
283
|
+
### D-3: tester(確認)
|
|
284
|
+
|
|
285
|
+
Agent ツールで `tester` エージェントを起動する。→ 全テストの合否を確認する。
|
|
286
|
+
|
|
287
|
+
AskUserQuestion で確認する:
|
|
288
|
+
```json
|
|
289
|
+
{
|
|
290
|
+
"questions": [{
|
|
291
|
+
"question": "テスト結果を確認してください。どうしますか?",
|
|
292
|
+
"options": [
|
|
293
|
+
{ "label": "全合格・次へ進む", "description": "Refactor フェーズへ進む" },
|
|
294
|
+
{ "label": "不合格あり・再実装を依頼する", "description": "フィードバックを入力して developer を再起動する" },
|
|
295
|
+
{ "label": "不合格あり・自分でコードを修正する", "description": "自分で修正してから tester を再実行する" }
|
|
296
|
+
]
|
|
297
|
+
}]
|
|
298
|
+
}
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
不合格の場合: D-2(developer)に戻る。合格するまで繰り返す。
|
|
302
|
+
|
|
303
|
+
### D-4: developer(Refactor フェーズ)
|
|
304
|
+
|
|
305
|
+
Agent ツールで `developer` エージェントを起動する。→ テストを壊さずにコードを整理する。
|
|
306
|
+
|
|
307
|
+
完了後 → セッションファイルの `- [ ] developer: Refactor フェーズ` を `- [x]` に Edit する。
|
|
308
|
+
|
|
309
|
+
### D-5: tester(最終確認)
|
|
310
|
+
|
|
311
|
+
Agent ツールで `tester` エージェントを起動する。
|
|
312
|
+
|
|
313
|
+
AskUserQuestion で確認する:
|
|
314
|
+
```json
|
|
315
|
+
{
|
|
316
|
+
"questions": [{
|
|
317
|
+
"question": "最終テスト結果と実装内容を確認してください。どうしますか?",
|
|
318
|
+
"options": [
|
|
319
|
+
{ "label": "承認・レビューへ進む", "description": "レビューフェーズへ進む" },
|
|
320
|
+
{ "label": "否認・修正を依頼する", "description": "フィードバックを入力して再修正を依頼する" },
|
|
321
|
+
{ "label": "否認・自分でコードを修正する", "description": "自分で修正してから再テストする" }
|
|
322
|
+
]
|
|
323
|
+
}]
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
承認後 → セッションファイルの `- [ ] tester: 最終確認` を `- [x]` に Edit して**フェーズ E** へ。
|
|
328
|
+
|
|
329
|
+
**知識蓄積:**
|
|
330
|
+
- 「否認・修正を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## フェーズ E: レビュー
|
|
335
|
+
|
|
336
|
+
今日のセッションファイルに以下を追記する(未登録の場合のみ):
|
|
337
|
+
- `- [ ] code-review`
|
|
338
|
+
- `- [ ] security-review`
|
|
339
|
+
|
|
340
|
+
### E-1: code-reviewer エージェントの起動
|
|
341
|
+
|
|
342
|
+
Agent ツールで `code-reviewer` エージェントを起動する。
|
|
343
|
+
|
|
344
|
+
レポートの指摘の有無で分岐する。
|
|
345
|
+
|
|
346
|
+
**指摘がない場合:**
|
|
347
|
+
AskUserQuestion で確認する:
|
|
348
|
+
```json
|
|
349
|
+
{
|
|
350
|
+
"questions": [{
|
|
351
|
+
"question": "code-review-report を確認してください。どうしますか?",
|
|
352
|
+
"options": [
|
|
353
|
+
{ "label": "承認・セキュリティレビューへ進む", "description": "問題なし" },
|
|
354
|
+
{ "label": "否認・再レビューを依頼する", "description": "フィードバックを入力して再実行する" }
|
|
355
|
+
]
|
|
356
|
+
}]
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
承認後 → セッションファイルの `- [ ] code-review` を `- [x]` に Edit して E-2 へ。
|
|
361
|
+
|
|
362
|
+
**指摘がある場合:**
|
|
363
|
+
指摘一覧をテキストで提示してから AskUserQuestion で方針を確認する:
|
|
364
|
+
```json
|
|
365
|
+
{
|
|
366
|
+
"questions": [{
|
|
367
|
+
"question": "code-review-report に指摘があります。対応方針を選択してください。",
|
|
368
|
+
"options": [
|
|
369
|
+
{ "label": "全て対応する", "description": "全指摘を修正計画に含めてフェーズ C へ" },
|
|
370
|
+
{ "label": "対応する指摘を選ぶ", "description": "指摘ごとに対応する/許容するを決める" },
|
|
371
|
+
{ "label": "全て許容して進む", "description": "全指摘を許容してセキュリティレビューへ進む" },
|
|
372
|
+
{ "label": "否認・再レビューを依頼する", "description": "フィードバックを入力して再実行する" }
|
|
373
|
+
]
|
|
374
|
+
}]
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
**「全て対応する」の場合:**
|
|
379
|
+
全指摘に `> **[対応予定]**` をマークし、セッションファイルの `- [ ] code-review` を `- [x]` に Edit してから**フェーズ C** へ(内部遷移・Step 0 なし)。
|
|
380
|
+
|
|
381
|
+
**「対応する指摘を選ぶ」の場合:**
|
|
382
|
+
続けて AskUserQuestion で確認する:
|
|
383
|
+
```json
|
|
384
|
+
{
|
|
385
|
+
"questions": [{
|
|
386
|
+
"question": "どの指摘を対応しますか?対応する指摘番号と、許容する指摘の理由を教えてください。"
|
|
387
|
+
}]
|
|
388
|
+
}
|
|
389
|
+
```
|
|
390
|
+
1. 対応する指摘に `> **[対応予定]**` を追記する
|
|
391
|
+
2. 許容する指摘の直下に `> **[許容]** {理由}` を Edit で追記する(検出記録は削除しない)
|
|
392
|
+
3. セッションファイルの `## うまくいったアプローチ` に `[許容例外] {指摘内容} → {許容理由}` の形式で追記し `patterns` に記録する
|
|
393
|
+
4. セッションファイルの `- [ ] code-review` を `- [x]` に Edit してから**フェーズ C** へ(内部遷移・Step 0 なし)。
|
|
394
|
+
|
|
395
|
+
**「全て許容して進む」の場合:**
|
|
396
|
+
AskUserQuestion で許容理由を確認する:
|
|
397
|
+
```json
|
|
398
|
+
{
|
|
399
|
+
"questions": [{
|
|
400
|
+
"question": "全指摘を許容する理由を教えてください。"
|
|
401
|
+
}]
|
|
402
|
+
}
|
|
403
|
+
```
|
|
404
|
+
1. 全指摘の直下に `> **[許容]** {理由}` を Edit で追記する(検出記録は削除しない)
|
|
405
|
+
2. セッションファイルの `## うまくいったアプローチ` に `[許容例外] {指摘内容} → {許容理由}` の形式で追記し `patterns` に記録する
|
|
406
|
+
3. セッションファイルの `- [ ] code-review` を `- [x]` に Edit して E-2 へ。
|
|
407
|
+
|
|
408
|
+
**「否認・再レビューを依頼する」の場合:**
|
|
409
|
+
追加の AskUserQuestion でフィードバックを確認し再実行する。
|
|
410
|
+
セッションファイルの `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する。
|
|
411
|
+
|
|
412
|
+
---
|
|
413
|
+
|
|
414
|
+
### E-2: security-reviewer エージェントの起動
|
|
415
|
+
|
|
416
|
+
Agent ツールで `security-reviewer` エージェントを起動する。
|
|
417
|
+
|
|
418
|
+
レポートの指摘の有無で分岐する。
|
|
419
|
+
|
|
420
|
+
**指摘がない場合:**
|
|
421
|
+
AskUserQuestion で確認する:
|
|
422
|
+
```json
|
|
423
|
+
{
|
|
424
|
+
"questions": [{
|
|
425
|
+
"question": "security-review-report を確認してください。どうしますか?",
|
|
426
|
+
"options": [
|
|
427
|
+
{ "label": "承認・完了", "description": "問題なし。コミットを提案する" },
|
|
428
|
+
{ "label": "否認・再診断を依頼する", "description": "フィードバックを入力して再実行する" }
|
|
429
|
+
]
|
|
430
|
+
}]
|
|
431
|
+
}
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
承認後 → セッションファイルの `- [ ] security-review` を `- [x]` に Edit してコミットを提案する。
|
|
435
|
+
|
|
436
|
+
**指摘がある場合:**
|
|
437
|
+
指摘一覧をテキストで提示してから AskUserQuestion で方針を確認する:
|
|
438
|
+
```json
|
|
439
|
+
{
|
|
440
|
+
"questions": [{
|
|
441
|
+
"question": "security-review-report に指摘があります。対応方針を選択してください。",
|
|
442
|
+
"options": [
|
|
443
|
+
{ "label": "全て対応する", "description": "全指摘を修正計画に含めてフェーズ C へ" },
|
|
444
|
+
{ "label": "対応する指摘を選ぶ", "description": "指摘ごとに対応する/許容するを決める" },
|
|
445
|
+
{ "label": "全て許容して完了", "description": "全指摘を許容してコミットを提案する" },
|
|
446
|
+
{ "label": "否認・再診断を依頼する", "description": "フィードバックを入力して再実行する" }
|
|
447
|
+
]
|
|
448
|
+
}]
|
|
449
|
+
}
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
**「全て対応する」の場合:**
|
|
453
|
+
全指摘に `> **[対応予定]**` をマークし、セッションファイルの `- [ ] security-review` を `- [x]` に Edit してから**フェーズ C** へ(内部遷移・Step 0 なし)。
|
|
454
|
+
|
|
455
|
+
**「対応する指摘を選ぶ」の場合:**
|
|
456
|
+
続けて AskUserQuestion で確認する:
|
|
457
|
+
```json
|
|
458
|
+
{
|
|
459
|
+
"questions": [{
|
|
460
|
+
"question": "どの指摘を対応しますか?対応する指摘番号と、許容する指摘の理由を教えてください。"
|
|
461
|
+
}]
|
|
462
|
+
}
|
|
463
|
+
```
|
|
464
|
+
1. 対応する指摘に `> **[対応予定]**` を追記する
|
|
465
|
+
2. 許容する指摘の直下に `> **[許容]** {理由}` を Edit で追記する(検出記録は削除しない)
|
|
466
|
+
3. セッションファイルの `## うまくいったアプローチ` に `[許容例外] {指摘内容} → {許容理由}` の形式で追記し `patterns` に記録する
|
|
467
|
+
4. セッションファイルの `- [ ] security-review` を `- [x]` に Edit してから**フェーズ C** へ(内部遷移・Step 0 なし)。
|
|
468
|
+
|
|
469
|
+
**「全て許容して完了」の場合:**
|
|
470
|
+
AskUserQuestion で許容理由を確認する:
|
|
471
|
+
```json
|
|
472
|
+
{
|
|
473
|
+
"questions": [{
|
|
474
|
+
"question": "全指摘を許容する理由を教えてください。"
|
|
475
|
+
}]
|
|
476
|
+
}
|
|
477
|
+
```
|
|
478
|
+
1. 全指摘の直下に `> **[許容]** {理由}` を Edit で追記する(検出記録は削除しない)
|
|
479
|
+
2. セッションファイルの `## うまくいったアプローチ` に `[許容例外] {指摘内容} → {許容理由}` の形式で追記し `patterns` に記録する
|
|
480
|
+
3. セッションファイルの `- [ ] security-review` を `- [x]` に Edit してコミットを提案する。
|
|
481
|
+
|
|
482
|
+
**「否認・再診断を依頼する」の場合:**
|
|
483
|
+
追加の AskUserQuestion でフィードバックを確認し再実行する。
|
|
484
|
+
セッションファイルの `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する。
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Parallel Execution (parallel-orchestra)
|
|
2
|
+
|
|
3
|
+
`/develop` の **D-0** で「PO 並列実行」が選ばれたときに Read される手順。
|
|
4
|
+
parallel-orchestra (PO) を subprocess で起動し、plan-report を YAML フロントマター付きマニフェストとして並列実行する。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 前提条件
|
|
9
|
+
|
|
10
|
+
- `.claude/reports/plan-report-*.md` の最新ファイルに YAML フロントマター(`po_plan_version: "0.1"` を含む)が付いていること
|
|
11
|
+
- `claude-code-conductor` がインストール済みで `c3` コマンドが PATH 上にあること
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Step 0: PO の利用可否を確認する
|
|
16
|
+
|
|
17
|
+
Bash ツールで以下を実行する:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
c3 doctor --check po-only --quiet
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- 終了コード `0`(出力なし)= PO 利用可能 → Step 1 へ
|
|
24
|
+
- 終了コード `1` = PO 未インストール → 以下の案内文を**そのまま提示**してこのスキルを終了する:
|
|
25
|
+
|
|
26
|
+
> 並列実行を使うには `pip install parallel-orchestra` を実行してください。
|
|
27
|
+
> 詳細: https://pypi.org/project/parallel-orchestra/
|
|
28
|
+
|
|
29
|
+
**注意:** 案内はエラーではなく **情報メッセージ**として出すこと。`/develop` 全体は失敗扱いにせず、ユーザーに「逐次実行(D-0 の選択肢 [A])に切り替える」または「PO をインストールして再実行する」のいずれかを選んでもらう。
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Step 1: マニフェストの妥当性確認
|
|
34
|
+
|
|
35
|
+
1. Glob で `.claude/reports/plan-report-*.md` の最新ファイルパスを取得
|
|
36
|
+
2. Read で内容(フロントマター含む)を確認
|
|
37
|
+
3. Bash で以下を実行:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
c3 po dry-run <plan-report-path>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- 終了コード `0` = マニフェスト妥当 → Step 2 へ
|
|
44
|
+
- 終了コード `2` = マニフェストエラー(フィールド欠損・agent 不在等)→ stderr のメッセージを整形してユーザーに提示し、`/start` の **フェーズ C(計画)** を再実行するか手動で plan-report を編集するよう案内してこのスキルを終了する
|
|
45
|
+
- 終了コード `1` = PO 未インストール(Step 0 をすり抜けた場合のフォールバック)→ Step 0 と同じ案内文を出して終了
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Step 2: ユーザー承認
|
|
50
|
+
|
|
51
|
+
承認なしで先に進まない。並列実行は git worktree を作って auto-commit するため副作用が大きい。
|
|
52
|
+
|
|
53
|
+
1. 親 Claude が plan-report の **フロントマター** を Read で再パースし、以下を要約してテキストで提示:
|
|
54
|
+
- タスク総数
|
|
55
|
+
- うち `read_only: false` のタスク数(= 作成される worktree 数)
|
|
56
|
+
- 各タスクの `id` / `agent` / `writes`(あれば)の表
|
|
57
|
+
2. AskUserQuestion ツールで実行可否を確認:
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"questions": [{
|
|
62
|
+
"question": "並列実行を開始してよいですか?",
|
|
63
|
+
"options": [
|
|
64
|
+
{ "label": "承認", "description": "parallel-orchestra で実行を開始する" },
|
|
65
|
+
{ "label": "max_workers を変更して承認", "description": "次の入力で並列度を指定する(デフォルトは PO 側で 3)" },
|
|
66
|
+
{ "label": "キャンセル", "description": "並列実行を中止する。/develop の D-0 から逐次実行に切り替えられる" }
|
|
67
|
+
]
|
|
68
|
+
}]
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
- 「max_workers を変更して承認」が選ばれた場合、追加 AskUserQuestion で並列度(整数)を聞く
|
|
73
|
+
- 「キャンセル」の場合、セッションファイルに `## 試みたが失敗したアプローチ` として理由を追記してスキル終了
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Step 3: parallel-orchestra を起動する
|
|
78
|
+
|
|
79
|
+
Bash で以下を実行:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
c3 po run <plan-report-path> --report .claude/reports/po-run-report-{timestamp}.json [--max-workers N]
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
- `{timestamp}` は `YYYYMMDD-HHMMSS` 形式。Bash で `python -c "from datetime import datetime; print(datetime.now().strftime('%Y%m%d-%H%M%S'))"` を実行して取得
|
|
86
|
+
- `--max-workers` は Step 2 でユーザーが指定した場合のみ付与
|
|
87
|
+
- 進捗ダッシュボードはターミナルに直接出力される(親 Claude のコンテキストには末尾の状態のみ流れる)
|
|
88
|
+
|
|
89
|
+
終了コードと意味:
|
|
90
|
+
|
|
91
|
+
| exit code | 意味 | 次のアクション |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| `0` | 全タスク成功 | Step 4 へ |
|
|
94
|
+
| `1` | 1件以上のタスクが失敗 | Step 4 へ(失敗タスクの再実行案内を出す) |
|
|
95
|
+
| `2` | マニフェストエラー(Step 1 をすり抜けた) | エラー内容を提示し計画フェーズへ戻るよう案内してスキル終了 |
|
|
96
|
+
| `3` | runner エラー(claude バイナリ不在等) | `c3 doctor` の結果を提示してスキル終了 |
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Step 4: レポートの要約とセッション更新
|
|
101
|
+
|
|
102
|
+
1. Step 3 で生成された `.claude/reports/po-run-report-{timestamp}.json` を Read
|
|
103
|
+
2. 親 Claude がタスクごとのステータスを Markdown 表に整形してユーザーに提示する:
|
|
104
|
+
- 列: `id` / `agent` / `status` / `worktree` / `duration` / 失敗時は `last_error_summary`
|
|
105
|
+
3. 失敗タスクがある場合、該当タスクのみ `/develop` の D-A 経路(逐次実行)で再実行する選択肢を AskUserQuestion で提示:
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
{
|
|
109
|
+
"questions": [{
|
|
110
|
+
"question": "失敗タスクをどうしますか?",
|
|
111
|
+
"options": [
|
|
112
|
+
{ "label": "逐次実行で再修正する", "description": "失敗タスクのみ /develop の D-A(TDD 逐次)で再実行する" },
|
|
113
|
+
{ "label": "計画フェーズへ戻る", "description": "失敗の原因が設計レベルなら /start のフェーズ C で再計画する" },
|
|
114
|
+
{ "label": "ここで終わる", "description": "現状で停止し、フェーズ E(レビュー)には進まない" }
|
|
115
|
+
]
|
|
116
|
+
}]
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
4. セッションファイル(`.claude/memory/sessions/YYYYMMDD.tmp`)の `- [ ] PO 並列実行` を `- [x]` に Edit する。失敗タスクが残った場合は `- [ ]` のままにし、失敗内容を `## 試みたが失敗したアプローチ` に追記する
|
|
121
|
+
5. 全タスク成功した場合のみ、フェーズ E(レビュー)へ進む案内を出す
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Worktree TDD Workflow
|
|
2
|
+
|
|
3
|
+
ヘッドレス専用の TDD 1サイクル定義。AskUserQuestion を含まない。
|
|
4
|
+
`.claude/agents/tdd-develop.md` から呼び出されることを前提とする。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 前提条件
|
|
9
|
+
|
|
10
|
+
- `.claude/reports/plan-report-*.md` が存在すること
|
|
11
|
+
- プロダクションコードが worktree 内に配置済みであること
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Step 1: tester(現状確認フェーズ)
|
|
16
|
+
|
|
17
|
+
以下を順番に実行する:
|
|
18
|
+
|
|
19
|
+
1. `.claude/agents/tester.md` を Read してペルソナ・制約・手順を把握する
|
|
20
|
+
2. Glob で `.claude/reports/plan-report-*.md` の最新ファイルパスを取得し、Read する
|
|
21
|
+
3. Agent ツールを起動する。**subagent_type は指定しない**。プロンプトに以下を注入する:
|
|
22
|
+
- tester.md の内容(ペルソナ・制約・手順)
|
|
23
|
+
- plan-report の内容(テスト対象・受け入れ条件)
|
|
24
|
+
- 「テストが存在しない場合は Red フェーズとして失敗するテストを先に作成してから実行すること」
|
|
25
|
+
- 以下の手順を必ず守ること:
|
|
26
|
+
1. Bash ツールでタイムスタンプを取得する:
|
|
27
|
+
`python -c "from datetime import datetime; print(datetime.now().strftime('%Y%m%d-%H%M%S'))"`
|
|
28
|
+
2. **Write ツールを呼び出して** `.claude/reports/test-report-{タイムスタンプ}.md` を作成する。テキストで返すだけでは不十分。合格/不合格/スキップ件数・不合格テストのエラーを記載すること
|
|
29
|
+
|
|
30
|
+
完了後: Glob で `.claude/reports/test-report-*.md` の最新ファイルパスを取得する。
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Step 2: 全合格チェック
|
|
35
|
+
|
|
36
|
+
取得した test-report を Read して合否を確認する。
|
|
37
|
+
|
|
38
|
+
- **全合格の場合**: 呼び出し元(tdd-develop)に `PASS` と test-report パスを返してワークフローを終了する
|
|
39
|
+
- **不合格あり**: Step 3 へ進む
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Step 3: developer(Green フェーズ)
|
|
44
|
+
|
|
45
|
+
以下を順番に実行する:
|
|
46
|
+
|
|
47
|
+
1. `.claude/agents/developer.md` を Read してペルソナ・制約・手順を把握する
|
|
48
|
+
2. Agent ツールを起動する。**subagent_type は指定しない**。プロンプトに以下を注入する:
|
|
49
|
+
- developer.md の内容(ペルソナ・制約・手順)
|
|
50
|
+
- plan-report の内容
|
|
51
|
+
- test-report の内容(不合格テストの詳細)
|
|
52
|
+
- 「test-report の不合格テストをすべて通過させるよう実装すること。テストコードは編集しないこと」
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Step 4: tester(Green 確認フェーズ)
|
|
57
|
+
|
|
58
|
+
以下を順番に実行する:
|
|
59
|
+
|
|
60
|
+
1. `.claude/agents/tester.md` を Read してペルソナ・制約・手順を把握する(Step 1 のコンテキストが残っていれば省略可)
|
|
61
|
+
2. Agent ツールを起動する。**subagent_type は指定しない**。プロンプトに以下を注入する:
|
|
62
|
+
- tester.md の内容(ペルソナ・制約・手順)
|
|
63
|
+
- plan-report の内容
|
|
64
|
+
- 「developer の実装後のテストを全件実行すること」
|
|
65
|
+
- 以下の手順を必ず守ること:
|
|
66
|
+
1. Bash ツールでタイムスタンプを取得する:
|
|
67
|
+
`python -c "from datetime import datetime; print(datetime.now().strftime('%Y%m%d-%H%M%S'))"`
|
|
68
|
+
2. **Write ツールを呼び出して** `.claude/reports/test-report-{タイムスタンプ}.md` を作成する。テキストで返すだけでは不十分。合格/不合格/スキップ件数・不合格テストのエラーを記載すること
|
|
69
|
+
|
|
70
|
+
完了後: Glob で最新 test-report を取得し、合否を確認する。
|
|
71
|
+
呼び出し元(tdd-develop)に結果(`PASS` または `FAIL`)と test-report パスを返してワークフローを終了する。
|