create-ai-project 1.11.2 → 1.12.1
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.
- package/.claude/agents-en/acceptance-test-generator.md +13 -13
- package/.claude/agents-en/code-reviewer.md +8 -10
- package/.claude/agents-en/design-sync.md +6 -5
- package/.claude/agents-en/document-reviewer.md +8 -7
- package/.claude/agents-en/integration-test-reviewer.md +5 -4
- package/.claude/agents-en/prd-creator.md +7 -6
- package/.claude/agents-en/quality-fixer-frontend.md +3 -14
- package/.claude/agents-en/quality-fixer.md +9 -20
- package/.claude/agents-en/requirement-analyzer.md +8 -7
- package/.claude/agents-en/rule-advisor.md +57 -128
- package/.claude/agents-en/task-decomposer.md +4 -10
- package/.claude/agents-en/task-executor-frontend.md +4 -16
- package/.claude/agents-en/task-executor.md +5 -16
- package/.claude/agents-en/technical-designer-frontend.md +17 -15
- package/.claude/agents-en/technical-designer.md +13 -15
- package/.claude/agents-en/work-planner.md +9 -14
- package/.claude/agents-ja/acceptance-test-generator.md +9 -15
- package/.claude/agents-ja/code-reviewer.md +3 -11
- package/.claude/agents-ja/design-sync.md +2 -6
- package/.claude/agents-ja/document-reviewer.md +4 -9
- package/.claude/agents-ja/integration-test-reviewer.md +2 -5
- package/.claude/agents-ja/prd-creator.md +3 -7
- package/.claude/agents-ja/quality-fixer-frontend.md +2 -13
- package/.claude/agents-ja/quality-fixer.md +7 -18
- package/.claude/agents-ja/requirement-analyzer.md +5 -8
- package/.claude/agents-ja/rule-advisor.md +57 -128
- package/.claude/agents-ja/task-decomposer.md +4 -10
- package/.claude/agents-ja/task-executor-frontend.md +3 -15
- package/.claude/agents-ja/task-executor.md +3 -17
- package/.claude/agents-ja/technical-designer-frontend.md +17 -15
- package/.claude/agents-ja/technical-designer.md +13 -15
- package/.claude/agents-ja/work-planner.md +9 -14
- package/.claude/commands-en/build.md +2 -2
- package/.claude/commands-en/design.md +1 -1
- package/.claude/commands-en/implement.md +8 -8
- package/.claude/commands-en/plan.md +3 -3
- package/.claude/commands-en/project-inject.md +4 -4
- package/.claude/commands-en/{refine-rule.md → refine-skill.md} +47 -48
- package/.claude/commands-en/{sync-rules.md → sync-skills.md} +29 -29
- package/.claude/commands-ja/build.md +2 -2
- package/.claude/commands-ja/design.md +1 -1
- package/.claude/commands-ja/implement.md +8 -8
- package/.claude/commands-ja/plan.md +3 -3
- package/.claude/commands-ja/project-inject.md +4 -4
- package/.claude/{commands/refine-rule.md → commands-ja/refine-skill.md} +25 -25
- package/.claude/{commands/sync-rules.md → commands-ja/sync-skills.md} +28 -28
- package/{docs/rules-en/coding-standards.md → .claude/skills-en/coding-standards/SKILL.md} +21 -108
- package/{docs/rules-en/documentation-criteria.md → .claude/skills-en/documentation-criteria/SKILL.md} +40 -42
- package/{docs/adr/template-en.md → .claude/skills-en/documentation-criteria/references/adr-template.md} +1 -1
- package/{docs/design/template-en.md → .claude/skills-en/documentation-criteria/references/design-template.md} +11 -31
- package/{docs/plans/template-en.md → .claude/skills-en/documentation-criteria/references/plan-template.md} +4 -4
- package/{docs/prd/template-en.md → .claude/skills-en/documentation-criteria/references/prd-template.md} +1 -1
- package/{docs/rules-en/frontend/technical-spec.md → .claude/skills-en/frontend/technical-spec/SKILL.md} +17 -13
- package/{docs/rules-en/frontend/typescript.md → .claude/skills-en/frontend/typescript-rules/SKILL.md} +17 -12
- package/{docs/rules-en/frontend/typescript-testing.md → .claude/skills-en/frontend/typescript-testing/SKILL.md} +11 -6
- package/{docs/rules-en/architecture/implementation-approach.md → .claude/skills-en/implementation-approach/SKILL.md} +7 -2
- package/{docs/rules-en/integration-e2e-testing.md → .claude/skills-en/integration-e2e-testing/SKILL.md} +15 -18
- package/{docs/rules-en/project-context.md → .claude/skills-en/project-context/SKILL.md} +7 -3
- package/.claude/skills-en/subagents-orchestration-guide/SKILL.md +224 -0
- package/.claude/skills-en/task-analyzer/SKILL.md +131 -0
- package/{docs/rules-en/rules-index.yaml → .claude/skills-en/task-analyzer/references/skills-index.yaml} +34 -20
- package/{docs/rules-en/technical-spec.md → .claude/skills-en/technical-spec/SKILL.md} +6 -6
- package/{docs/rules-en/typescript.md → .claude/skills-en/typescript-rules/SKILL.md} +15 -10
- package/{docs/rules-en/typescript-testing.md → .claude/skills-en/typescript-testing/SKILL.md} +10 -4
- package/{docs/rules-ja/coding-standards.md → .claude/skills-ja/coding-standards/SKILL.md} +12 -99
- package/{docs/rules-ja/documentation-criteria.md → .claude/skills-ja/documentation-criteria/SKILL.md} +18 -5
- package/.claude/skills-ja/documentation-criteria/references/adr-template.md +64 -0
- package/.claude/skills-ja/documentation-criteria/references/design-template.md +261 -0
- package/{docs/plans/template-ja.md → .claude/skills-ja/documentation-criteria/references/plan-template.md} +38 -38
- package/{docs/prd/template-ja.md → .claude/skills-ja/documentation-criteria/references/prd-template.md} +33 -33
- package/{docs/rules-ja/frontend/technical-spec.md → .claude/skills-ja/frontend/technical-spec/SKILL.md} +13 -9
- package/.claude/skills-ja/frontend/typescript-rules/SKILL.md +315 -0
- package/{docs/rules-ja/frontend/typescript-testing.md → .claude/skills-ja/frontend/typescript-testing/SKILL.md} +93 -5
- package/{docs/rules/architecture/implementation-approach.md → .claude/skills-ja/implementation-approach/SKILL.md} +10 -5
- package/{docs/rules-ja/integration-e2e-testing.md → .claude/skills-ja/integration-e2e-testing/SKILL.md} +5 -8
- package/{docs/rules-ja/project-context.md → .claude/skills-ja/project-context/SKILL.md} +7 -3
- package/.claude/skills-ja/subagents-orchestration-guide/SKILL.md +212 -0
- package/.claude/skills-ja/task-analyzer/SKILL.md +131 -0
- package/{docs/rules-ja/rules-index.yaml → .claude/skills-ja/task-analyzer/references/skills-index.yaml} +34 -19
- package/{docs/rules-ja/technical-spec.md → .claude/skills-ja/technical-spec/SKILL.md} +6 -6
- package/{docs/rules-ja/typescript.md → .claude/skills-ja/typescript-rules/SKILL.md} +16 -11
- package/{docs/rules-ja/typescript-testing.md → .claude/skills-ja/typescript-testing/SKILL.md} +11 -5
- package/CLAUDE.en.md +6 -6
- package/CLAUDE.ja.md +6 -6
- package/CLAUDE.md +19 -28
- package/README.ja.md +39 -10
- package/README.md +39 -10
- package/package.json +1 -1
- package/scripts/set-language.js +35 -53
- package/scripts/setup-project.js +4 -1
- package/.claude/agents/acceptance-test-generator.md +0 -316
- package/.claude/agents/code-reviewer.md +0 -193
- package/.claude/agents/document-reviewer.md +0 -182
- package/.claude/agents/prd-creator.md +0 -186
- package/.claude/agents/quality-fixer.md +0 -295
- package/.claude/agents/requirement-analyzer.md +0 -161
- package/.claude/agents/rule-advisor.md +0 -194
- package/.claude/agents/task-decomposer.md +0 -291
- package/.claude/agents/task-executor.md +0 -270
- package/.claude/agents/technical-designer.md +0 -343
- package/.claude/agents/work-planner.md +0 -181
- package/.claude/commands/build.md +0 -78
- package/.claude/commands/design.md +0 -27
- package/.claude/commands/implement.md +0 -79
- package/.claude/commands/plan.md +0 -43
- package/.claude/commands/project-inject.md +0 -76
- package/.claude/commands/review.md +0 -78
- package/.claude/commands/task.md +0 -13
- package/.claude/commands-ja/refine-rule.md +0 -206
- package/.claude/commands-ja/sync-rules.md +0 -116
- package/.claude/settings.local.json +0 -74
- package/docs/adr/template-ja.md +0 -64
- package/docs/design/template-ja.md +0 -285
- package/docs/guides/en/sub-agents.md +0 -343
- package/docs/guides/ja/sub-agents.md +0 -343
- package/docs/guides/sub-agents.md +0 -306
- package/docs/plans/20250123-integration-test-improvement.md +0 -993
- package/docs/rules/ai-development-guide.md +0 -260
- package/docs/rules/documentation-criteria.md +0 -180
- package/docs/rules/project-context.md +0 -38
- package/docs/rules/rules-index.yaml +0 -137
- package/docs/rules/technical-spec.md +0 -47
- package/docs/rules/typescript-testing.md +0 -188
- package/docs/rules/typescript.md +0 -166
- package/docs/rules-ja/architecture/implementation-approach.md +0 -136
- package/docs/rules-ja/frontend/typescript.md +0 -131
|
@@ -1,993 +0,0 @@
|
|
|
1
|
-
# 統合テスト改善作業計画書
|
|
2
|
-
|
|
3
|
-
作成日: 2025-01-23
|
|
4
|
-
作成者: Claude(オーケストレーター)
|
|
5
|
-
タイプ: 中規模変更(7ファイル)
|
|
6
|
-
|
|
7
|
-
## 対話履歴から見えた真の問題
|
|
8
|
-
|
|
9
|
-
### 根本問題:結合したら挙動しないケースがある
|
|
10
|
-
|
|
11
|
-
私たちが本当に解決したい問題は「機能単体では動作するのに、結合すると挙動しない」という事態です。この問題に対して、以下の議論を重ねてきました:
|
|
12
|
-
|
|
13
|
-
**初期の認識**:
|
|
14
|
-
- 統合テストの漏れがある
|
|
15
|
-
- E2E動作確認が不足している
|
|
16
|
-
- 統合漏れゼロ、E2E確認率100%を目指したい
|
|
17
|
-
|
|
18
|
-
**深掘りした結果判明した複合要因**:
|
|
19
|
-
|
|
20
|
-
1. **E2Eテストのジレンマ**
|
|
21
|
-
- 計画段階で作成しなければ遅すぎる(実装後では手遅れ)
|
|
22
|
-
- しかし、実装を知らないとテストを作り込めない(詳細が不明)
|
|
23
|
-
- この矛盾を解決するために「スケルトン方式」を採用することにした
|
|
24
|
-
- ACからスケルトン(it.todo)を生成し、実装時に具体化する
|
|
25
|
-
|
|
26
|
-
2. **設計と実態の乖離問題**
|
|
27
|
-
- 自律実行モードで動作するため、設計を満たせないと分かっても止まらない
|
|
28
|
-
- task-executorは短絡的な修正でタスクを完遂させようとする
|
|
29
|
-
- 「とりあえず動くようにする」という対症療法的な実装が生まれる
|
|
30
|
-
- 結果として、統合時に予期しない挙動が発生する
|
|
31
|
-
|
|
32
|
-
3. **品質チェックの素通り問題**
|
|
33
|
-
- quality-fixerがテストを通せなくても、次のステップに進んでしまうことがある
|
|
34
|
-
- エラーがあっても自動修正を試み続け、本質的な問題が隠蔽される
|
|
35
|
-
- オーケストレーターがコミット判断をしてしまう
|
|
36
|
-
|
|
37
|
-
### 対話で議論した解決の方向性
|
|
38
|
-
|
|
39
|
-
**既存エージェントの責務を最大活用すべき**という結論に至りました:
|
|
40
|
-
|
|
41
|
-
- quality-fixerの活用可能性:全テストパス確認はできるが、統合テスト作成は責務外
|
|
42
|
-
- task-executorの活用可能性:タスクに含まれていれば実装可能
|
|
43
|
-
- work-planner/task-decomposerの強化:適切にタスク分解すれば対応可能
|
|
44
|
-
|
|
45
|
-
**新エージェント(acceptance-test-generator)の必要性**:
|
|
46
|
-
- Design DocのACから自動的にE2Eテストスケルトン生成
|
|
47
|
-
- technical-designerの直後に実行
|
|
48
|
-
- work-plannerに明示的に伝達する
|
|
49
|
-
|
|
50
|
-
**重要な指摘事項**:
|
|
51
|
-
- 「E2Eテストがなかったのはただの結果論」
|
|
52
|
-
- 「短絡的な実装やテストエラーの許容を放置すると、E2Eテストを作っても正しく機能しない」
|
|
53
|
-
- 「問題は複合要因であり、全てを直す必要がある」
|
|
54
|
-
|
|
55
|
-
### ユーザーからの要件
|
|
56
|
-
|
|
57
|
-
1. **acceptance-test-generatorの位置づけ**
|
|
58
|
-
- technical-designerの後に呼び出す
|
|
59
|
-
- スケルトンを作り終わってる状態をwork-plannerに伝える
|
|
60
|
-
- work-plannerは「このフェーズではこのテストがパスすること」を組み込む
|
|
61
|
-
- task-decomposerはスケルトンの存在を認識して、テストの完成と通過をタスク化
|
|
62
|
-
|
|
63
|
-
2. **エスカレーション機能の強化**
|
|
64
|
-
- quality-fixerがユーザーの意思確認が必要な時、適切にエスカレーション
|
|
65
|
-
- task-executorが影響範囲が大きすぎる時、短絡的修正を防ぐためエスカレーション
|
|
66
|
-
- 過剰なエスカレーションは避ける(自律実行のバランスが重要)
|
|
67
|
-
|
|
68
|
-
3. **オーケストレーターの判断強化**
|
|
69
|
-
- 自律実行モードでもユーザー確認が必要なら一時停止
|
|
70
|
-
- 的確な軌道修正を行う(これもバランスが大切)
|
|
71
|
-
|
|
72
|
-
## 対話で決定した解決方針
|
|
73
|
-
|
|
74
|
-
### 段階的改善戦略(対話での合意事項)
|
|
75
|
-
|
|
76
|
-
**Phase 1: 即座に実装(既存エージェント強化)**として議論した内容:
|
|
77
|
-
|
|
78
|
-
1. **work-planner強化**
|
|
79
|
-
- 統合機能には必ず「統合テスト作成」「E2E確認」タスクを追加
|
|
80
|
-
- 「統合が必要な機能の場合、必須タスクとして追加」という方針
|
|
81
|
-
|
|
82
|
-
2. **quality-fixer強化**
|
|
83
|
-
```
|
|
84
|
-
// テスト失敗時の判断ロジック
|
|
85
|
-
if (testsFailed) {
|
|
86
|
-
if (canDetermineCorrection()) {
|
|
87
|
-
// 修正方法が明確 → 自動修正を試みる
|
|
88
|
-
return attemptAutoFix();
|
|
89
|
-
} else {
|
|
90
|
-
// 実装が正しいかテストが正しいか判断不能
|
|
91
|
-
return {
|
|
92
|
-
status: "blocked",
|
|
93
|
-
reason: "テスト失敗:修正方法を判断できない",
|
|
94
|
-
needs_user_decision: "仕様確認が必要"
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
```
|
|
99
|
-
- テスト失敗時、修正方法を判断できない場合にblocked
|
|
100
|
-
- AC検証手段が不在で判断できない場合にblocked
|
|
101
|
-
- エラー無視の禁止:オーケストレーターへの強制停止
|
|
102
|
-
|
|
103
|
-
3. **Design Doc記載ルール**
|
|
104
|
-
```
|
|
105
|
-
## 統合確認手順(必須記載)
|
|
106
|
-
1. 配線箇所: [具体的なファイル:行番号]
|
|
107
|
-
2. 動作確認コマンド: [npm test path/to/integration.test.ts]
|
|
108
|
-
3. 期待されるログ出力: [Handler registered with priority X]
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
**Phase 2について**:
|
|
112
|
-
- 「Phase 2は要らない。実装後こちらで実際に開発をさせて判断します」
|
|
113
|
-
- 効果測定は3ヶ月後という話もあったが、最終的には不要と判断
|
|
114
|
-
|
|
115
|
-
### 最終的な設計原則
|
|
116
|
-
|
|
117
|
-
対話を通じて明確になった原則:
|
|
118
|
-
|
|
119
|
-
**「単一責務を徹底する」**
|
|
120
|
-
- 各エージェントが自分の責務を完全に果たす
|
|
121
|
-
- 責務の境界を明確にし、曖昧さを排除する
|
|
122
|
-
|
|
123
|
-
**具体的な責務分担**:
|
|
124
|
-
- acceptance-test-generator:PRD/Design DocのACから**スケルトンのみ**生成(実装しない)
|
|
125
|
-
- work-planner:スケルトンの存在を認識し、フェーズごとのテスト完了を計画に組み込む
|
|
126
|
-
- task-decomposer:スケルトンを認識し、it.todoをitに変換するタスクを生成
|
|
127
|
-
- task-executor:スケルトンを実装に変換、ただし影響範囲が大きければエスカレーション
|
|
128
|
-
- quality-fixer:統合テスト存在確認、修正不可能ならエスカレーション(approved判定は全品質パス後のみ)
|
|
129
|
-
- オーケストレーター:エスカレーションを適切に処理、自律実行を必要に応じて一時停止
|
|
130
|
-
|
|
131
|
-
### 議論したアーキテクチャ改善
|
|
132
|
-
|
|
133
|
-
```mermaid
|
|
134
|
-
graph TD
|
|
135
|
-
TD[technical-designer<br/>Design Doc作成] --> EG[acceptance-test-generator<br/>ACからスケルトン生成]
|
|
136
|
-
EG --> O1[オーケストレーター<br/>スケルトン情報を明示的に伝達]
|
|
137
|
-
O1 --> WP[work-planner<br/>スケルトンを認識して計画作成]
|
|
138
|
-
WP --> TDC[task-decomposer<br/>スケルトン実装タスク化]
|
|
139
|
-
TDC --> TE[task-executor<br/>テスト実装]
|
|
140
|
-
TE --> QF[quality-fixer<br/>品質検証]
|
|
141
|
-
|
|
142
|
-
TE -.->|影響5ファイル以上<br/>破壊的変更| O2[オーケストレーター]
|
|
143
|
-
QF -.->|統合テスト不在<br/>修正不可能| O2
|
|
144
|
-
O2 -.->|自律実行一時停止| U[ユーザー確認]
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
重要なポイント:
|
|
148
|
-
- オーケストレーターがacceptance-test-generatorの出力を**明示的に**work-plannerに伝える
|
|
149
|
-
- 「統合テストスケルトンが生成されています: [ファイルパス]」という形で
|
|
150
|
-
|
|
151
|
-
## 実装計画
|
|
152
|
-
|
|
153
|
-
### Phase 1: 複合要因をすべて解決する実装
|
|
154
|
-
|
|
155
|
-
#### タスク1: acceptance-test-generator作成(統合テストが作成されない問題の解決)✅
|
|
156
|
-
|
|
157
|
-
**背景(対話での発見と議論の詳細)**:
|
|
158
|
-
|
|
159
|
-
対話の中で明らかになったE2Eテストのジレンマ:
|
|
160
|
-
- **計画段階で作成しなければ遅すぎる**:実装後にE2Eテストを書こうとしても、すでに短絡的な実装が入り込んでいて手遅れ
|
|
161
|
-
- **しかし実装を知らないとテストを作り込めない**:詳細が不明な段階で具体的なテストは書けない
|
|
162
|
-
- この矛盾を解決するために「スケルトン方式」を採用することにした
|
|
163
|
-
|
|
164
|
-
**なぜacceptance-test-generatorが必要なのか(根本原因)**:
|
|
165
|
-
1. 現状、technical-designerがDesign Docを作成しても、そのACが統合テストに反映されない
|
|
166
|
-
2. work-plannerが計画を立てる時点で、統合テストの存在を知らない
|
|
167
|
-
3. task-executorが実装する時、統合テストがないことに気づかない(または気づいても無視)
|
|
168
|
-
4. quality-fixerが最後に確認しても、すでに実装が完了していて手遅れ
|
|
169
|
-
|
|
170
|
-
**スケルトン方式の価値(対話での気づき)**:
|
|
171
|
-
```typescript
|
|
172
|
-
// これだけで十分価値がある理由
|
|
173
|
-
it.todo('AC1: プロンプト添削依頼に対して添削結果を返す')
|
|
174
|
-
|
|
175
|
-
// 1. 存在の証明:統合テストファイルが物理的に存在する
|
|
176
|
-
// 2. 契約の明確化:何をテストすべきかが明文化される
|
|
177
|
-
// 3. タスクの可視化:it.todoがあることで、実装タスクとして認識される
|
|
178
|
-
// 4. 品質ゲート:quality-fixerがit.todoの存在を確認できる
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**対話で議論した単一責務の重要性**:
|
|
182
|
-
- acceptance-test-generatorは「ACからスケルトンを生成する」だけ
|
|
183
|
-
- 実装詳細を知らない、知る必要もない
|
|
184
|
-
- Design DocのACを機械的に変換するだけ
|
|
185
|
-
- この単純さが、確実な実行を保証する
|
|
186
|
-
|
|
187
|
-
**実装内容(なぜこの実装が必要か)**:
|
|
188
|
-
|
|
189
|
-
- [x] `.claude/agents-ja/acceptance-test-generator.md` 新規作成
|
|
190
|
-
```markdown
|
|
191
|
-
## 責務(これだけ、他は一切やらない)
|
|
192
|
-
PRD/Design DocのACから統合テストスケルトンを生成する
|
|
193
|
-
|
|
194
|
-
## 入力
|
|
195
|
-
- Design Docのパス
|
|
196
|
-
|
|
197
|
-
## 処理
|
|
198
|
-
1. Design DocからACセクションを抽出
|
|
199
|
-
2. 各ACに対してit.todoを生成
|
|
200
|
-
3. tests/integration/にファイルを作成
|
|
201
|
-
|
|
202
|
-
## 出力例
|
|
203
|
-
describe('機能名 統合テスト', () => {
|
|
204
|
-
it.todo('AC1の内容')
|
|
205
|
-
it.todo('AC2の内容')
|
|
206
|
-
})
|
|
207
|
-
|
|
208
|
-
## 禁止事項
|
|
209
|
-
- 実装の詳細を推測しない
|
|
210
|
-
- テストの具体的な内容を書かない
|
|
211
|
-
- it.todoをitに変換しない
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
- [ ] ACパーサーの実装
|
|
215
|
-
```typescript
|
|
216
|
-
// Design DocのAC記法のバリエーションに対応
|
|
217
|
-
const AC_PATTERNS = [
|
|
218
|
-
/AC\d+:/, // AC1: 形式
|
|
219
|
-
/受入条件\d+:/, // 日本語形式
|
|
220
|
-
/- \[ \]/, // チェックボックス形式
|
|
221
|
-
];
|
|
222
|
-
|
|
223
|
-
// ACを確実に抽出する理由:
|
|
224
|
-
// 1つでもACを見逃すと、その機能が統合テストされない
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
- [ ] スケルトン生成ロジック
|
|
228
|
-
```typescript
|
|
229
|
-
// なぜit.todoなのか
|
|
230
|
-
// 1. 実装されていないことが明確(赤色で表示される)
|
|
231
|
-
// 2. task-decomposerが「未実装」として認識できる
|
|
232
|
-
// 3. quality-fixerが「完了していない」と判定できる
|
|
233
|
-
|
|
234
|
-
function generateSkeleton(ac: AcceptanceCriteria): string {
|
|
235
|
-
return `it.todo('${ac.description}')`;
|
|
236
|
-
// これ以上複雑にしない(単一責務の徹底)
|
|
237
|
-
}
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
- [ ] ファイル配置戦略
|
|
241
|
-
```bash
|
|
242
|
-
tests/integration/
|
|
243
|
-
feature-name.test.ts # 機能ごとに1ファイル
|
|
244
|
-
|
|
245
|
-
# なぜこの構造か:
|
|
246
|
-
# - work-plannerが見つけやすい
|
|
247
|
-
# - task-decomposerが解析しやすい
|
|
248
|
-
# - quality-fixerが確認しやすい
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
**完了条件(なぜこれが必要か)**:
|
|
252
|
-
- [x] Design Docを入力として、統合テストスケルトンが生成される
|
|
253
|
-
→ ACが物理的なテストファイルとして存在することを保証
|
|
254
|
-
- [x] 各ACが1つのit.todoブロックに対応する(実装はしない)
|
|
255
|
-
→ 単一責務を守り、複雑さを排除
|
|
256
|
-
- [x] 生成されたファイルがtests/integration/に配置される
|
|
257
|
-
→ 標準的な場所に配置し、発見可能性を高める
|
|
258
|
-
- [x] オーケストレーターが次のwork-plannerに明示的に伝達できる形式
|
|
259
|
-
→ 情報の断絶を防ぐ
|
|
260
|
-
|
|
261
|
-
#### タスク2: オーケストレーションフロー改善(情報の断絶を解決)
|
|
262
|
-
|
|
263
|
-
**背景(対話で発見した情報伝達の断絶問題)**:
|
|
264
|
-
|
|
265
|
-
対話で明らかになった重要な問題:「acceptance-test-generatorからのレスポンスを受け取ったメインエージェント(オーケストレーター)がwork-plannerに明示的にe2eの存在を伝えていない」。これにより、せっかくスケルトンを作っても、後続のエージェントがその存在を知らない。
|
|
266
|
-
|
|
267
|
-
**情報の断絶が引き起こす連鎖的問題**:
|
|
268
|
-
1. acceptance-test-generatorがスケルトンを生成
|
|
269
|
-
2. オーケストレーターは「生成した」ことは知っている
|
|
270
|
-
3. しかし、work-plannerには「何も伝えない」
|
|
271
|
-
4. work-plannerは統合テストの存在を知らずに計画作成
|
|
272
|
-
5. task-executorも統合テストを知らずにタスク実行
|
|
273
|
-
6. 最後にquality-fixerが「統合テストがない!」と発見(手遅れ)
|
|
274
|
-
|
|
275
|
-
**実装内容(オーケストレーターの呼び出し方法の変更)**:
|
|
276
|
-
|
|
277
|
-
- [ ] `docs/guides/ja/sub-agents.md` にエージェント呼び出し順序を追記
|
|
278
|
-
```markdown
|
|
279
|
-
## 機能開発時のエージェント呼び出し順序
|
|
280
|
-
|
|
281
|
-
1. technical-designer
|
|
282
|
-
- 入力: PRDのパス
|
|
283
|
-
- 出力: Design Docのパス
|
|
284
|
-
|
|
285
|
-
2. acceptance-test-generator(新規追加)
|
|
286
|
-
- 入力: Design Docのパス
|
|
287
|
-
- 出力: 統合テストスケルトンのパス、it.todo数
|
|
288
|
-
|
|
289
|
-
3. work-planner
|
|
290
|
-
- 入力: Design Docのパス + 統合テストスケルトン情報
|
|
291
|
-
- 出力: 作業計画書のパス
|
|
292
|
-
|
|
293
|
-
4. task-decomposer
|
|
294
|
-
- 入力: 作業計画書のパス + 統合テストスケルトン情報
|
|
295
|
-
- 出力: タスクファイル群
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
- [ ] オーケストレーターがwork-plannerを呼び出す際のプロンプト例
|
|
299
|
-
```markdown
|
|
300
|
-
## work-plannerへの呼び出しプロンプト例
|
|
301
|
-
|
|
302
|
-
@work-planner
|
|
303
|
-
Design Docのパス: docs/design/prompt-review.md
|
|
304
|
-
PRDのパス: docs/prd/prompt-review.md
|
|
305
|
-
|
|
306
|
-
追加情報:
|
|
307
|
-
- 統合テストスケルトンが生成済みです
|
|
308
|
-
- パス: tests/integration/prompt-review.test.ts
|
|
309
|
-
- it.todo数: 5個
|
|
310
|
-
- 各フェーズでこれらのテストを実装し、パスさせることを計画に含めてください
|
|
311
|
-
|
|
312
|
-
上記を踏まえて作業計画書を作成してください。
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
- [ ] サブエージェント間の情報伝達ルール(sub-agents.mdに追記)
|
|
316
|
-
```markdown
|
|
317
|
-
## エージェント間の情報伝達ルール
|
|
318
|
-
|
|
319
|
-
### 必須伝達情報
|
|
320
|
-
各エージェントを呼び出す際、前のエージェントの成果物を明示的に伝える:
|
|
321
|
-
|
|
322
|
-
1. 成果物のパス
|
|
323
|
-
- Design Doc: `docs/design/機能名.md`
|
|
324
|
-
- 統合テストスケルトン: `tests/integration/機能名.test.ts`
|
|
325
|
-
- 作業計画書: `docs/plans/機能名.md`
|
|
326
|
-
|
|
327
|
-
2. 追加コンテキスト
|
|
328
|
-
- 統合テストのit.todo数
|
|
329
|
-
- エスカレーション履歴
|
|
330
|
-
- 品質基準の強調事項
|
|
331
|
-
|
|
332
|
-
### エスカレーション時の情報伝達
|
|
333
|
-
サブエージェントがエスカレーションを返した場合:
|
|
334
|
-
- エスカレーション理由を次のエージェントに伝える
|
|
335
|
-
- ユーザーの判断結果を後続エージェントに伝える
|
|
336
|
-
- 修正された設計や要件を明示的に伝える
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
- [ ] オーケストレーターのメッセージテンプレート
|
|
340
|
-
```markdown
|
|
341
|
-
## work-plannerへの指示
|
|
342
|
-
|
|
343
|
-
### 成果物
|
|
344
|
-
- Design Doc: docs/design/feature-x.md
|
|
345
|
-
- 統合テストスケルトン: tests/integration/feature-x.test.ts
|
|
346
|
-
|
|
347
|
-
### 必須要件
|
|
348
|
-
1. **統合テストスケルトンが生成されています**
|
|
349
|
-
- パス: tests/integration/feature-x.test.ts
|
|
350
|
-
- AC数: 5個(全てit.todo状態)
|
|
351
|
-
- **各フェーズでこれらのテストを実装し、パスさせることを計画に含めてください**
|
|
352
|
-
|
|
353
|
-
2. **品質ゲート**
|
|
354
|
-
- Phase 4で全ACの統合テストが通過必須
|
|
355
|
-
- it.todoが0になることが完了条件
|
|
356
|
-
|
|
357
|
-
### 注意事項
|
|
358
|
-
- スケルトンを無視した計画は承認されません
|
|
359
|
-
- 統合テスト実装をタスクとして明記してください
|
|
360
|
-
```
|
|
361
|
-
|
|
362
|
-
- [ ] エスカレーション受信時のオーケストレーター動作(sub-agents.mdに追記)
|
|
363
|
-
```markdown
|
|
364
|
-
## エスカレーション処理
|
|
365
|
-
|
|
366
|
-
サブエージェントから"escalation_needed"ステータスを受信した場合:
|
|
367
|
-
|
|
368
|
-
### 1. Design Docとの乖離(task-executorから)
|
|
369
|
-
自律実行を一時停止し、ユーザーに以下を提示:
|
|
370
|
-
- エスカレーション理由
|
|
371
|
-
- Design Docの該当箇所
|
|
372
|
-
- 実際の状況
|
|
373
|
-
- 選択肢:
|
|
374
|
-
1. Design Docを現実に合わせて修正
|
|
375
|
-
2. 不足コンポーネントを先に実装
|
|
376
|
-
3. 要件を再検討
|
|
377
|
-
|
|
378
|
-
### 2. 統合テスト不在(quality-fixerから)
|
|
379
|
-
自律実行を一時停止し、ユーザーに以下を提示:
|
|
380
|
-
- ブロック理由
|
|
381
|
-
- 不足しているAC
|
|
382
|
-
- 推奨対応:
|
|
383
|
-
1. acceptance-test-generatorを再実行
|
|
384
|
-
2. 手動で統合テストを作成
|
|
385
|
-
3. ACを見直す
|
|
386
|
-
|
|
387
|
-
### 3. エスカレーション後の再開
|
|
388
|
-
ユーザーの判断後、該当エージェントを再実行する際に:
|
|
389
|
-
- エスカレーション履歴を伝える
|
|
390
|
-
- ユーザーの判断内容を明示的に伝える
|
|
391
|
-
- 修正された前提条件を伝える
|
|
392
|
-
```
|
|
393
|
-
|
|
394
|
-
**完了条件**:
|
|
395
|
-
- [ ] sub-agents.mdにacceptance-test-generatorの呼び出しが追加される
|
|
396
|
-
- [ ] 各サブエージェント呼び出し時に、前工程の成果物パスが明示的に伝達される
|
|
397
|
-
- [ ] エスカレーション時の処理フローがsub-agents.mdに明記される
|
|
398
|
-
- [ ] 情報の断絶が0になる(各エージェント呼び出し時に必要な全情報が伝達される)
|
|
399
|
-
|
|
400
|
-
#### タスク3: work-planner強化(スケルトンを計画に組み込む)✅
|
|
401
|
-
|
|
402
|
-
**背景(計画書への統合テスト組み込みの必要性)**:
|
|
403
|
-
|
|
404
|
-
対話での重要な議論:「work-plannerが計画書にこのフェーズではこのテストがパスすることというのが組み込まれる」。これは、スケルトンが存在するだけでは不十分で、各実装フェーズで対応するテストの完成と通過が計画に明記される必要があることを意味します。
|
|
405
|
-
|
|
406
|
-
**現状の問題と解決策**:
|
|
407
|
-
- **現状**: work-plannerは統合テストの存在を知らず、計画に含めない
|
|
408
|
-
- **解決**: オーケストレーターから明示的に情報を受け取り、自動的に計画に組み込む
|
|
409
|
-
|
|
410
|
-
**実装内容(work-planner.mdへの追記)**:
|
|
411
|
-
|
|
412
|
-
- [x] `.claude/agents-ja/work-planner.md` に統合テスト認識機能を追加
|
|
413
|
-
```markdown
|
|
414
|
-
## 必要な入力情報
|
|
415
|
-
|
|
416
|
-
### 必須
|
|
417
|
-
- Design Docのパス
|
|
418
|
-
- PRDのパス
|
|
419
|
-
|
|
420
|
-
### 統合テストスケルトン情報(存在する場合)
|
|
421
|
-
オーケストレーターから以下の情報が提供された場合、必ず計画に含めてください:
|
|
422
|
-
- 統合テストスケルトンのパス
|
|
423
|
-
- it.todo数
|
|
424
|
-
- 対応するAC一覧
|
|
425
|
-
|
|
426
|
-
## 計画作成時の必須ルール
|
|
427
|
-
|
|
428
|
-
### 統合テストスケルトンが存在する場合
|
|
429
|
-
|
|
430
|
-
1. Phase 2(コア機能実装)に以下を追加:
|
|
431
|
-
- 統合テスト実装タスク(it.todoの数だけ)
|
|
432
|
-
- 各ACに対応するテスト実装を個別タスクとして明記
|
|
433
|
-
- 依存関係:コア機能実装後にテスト実装
|
|
434
|
-
|
|
435
|
-
2. Phase 4(品質保証)の完了条件に以下を追加:
|
|
436
|
-
- 全統合テスト(AC1-N)が通過
|
|
437
|
-
- it.todoが0個
|
|
438
|
-
- 統合テストカバレッジ100%
|
|
439
|
-
|
|
440
|
-
### 統合テストスケルトンが存在しない場合
|
|
441
|
-
|
|
442
|
-
警告を計画書に明記:
|
|
443
|
-
「⚠️ 統合テストスケルトンが存在しません。quality-fixerでブロックされる可能性があります」
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
- [x] 生成される計画書の具体例
|
|
447
|
-
```markdown
|
|
448
|
-
# 作業計画書
|
|
449
|
-
|
|
450
|
-
## Phase 1: 設計確認
|
|
451
|
-
- [x] Design Doc確認
|
|
452
|
-
- [x] 統合テストスケルトン確認 ← 新規追加
|
|
453
|
-
- パス: tests/integration/prompt-review.test.ts
|
|
454
|
-
- TODO数: 5個
|
|
455
|
-
|
|
456
|
-
## Phase 2: コア機能実装
|
|
457
|
-
- [ ] ハンドラー実装
|
|
458
|
-
- [ ] サービス層実装
|
|
459
|
-
- [ ] **統合テスト実装(必須)** ← 自動追加
|
|
460
|
-
- [ ] AC1: プロンプト添削依頼への応答テスト
|
|
461
|
-
- [ ] AC2: LLM種別指定テスト
|
|
462
|
-
- [ ] AC3: エラーハンドリングテスト
|
|
463
|
-
- [ ] AC4: 並行処理テスト
|
|
464
|
-
- [ ] AC5: タイムアウト処理テスト
|
|
465
|
-
|
|
466
|
-
## Phase 3: 単体テスト
|
|
467
|
-
- [ ] ハンドラーテスト
|
|
468
|
-
- [ ] サービステスト
|
|
469
|
-
- [ ] ユーティリティテスト
|
|
470
|
-
|
|
471
|
-
## Phase 4: 品質保証
|
|
472
|
-
### 完了条件(全て必須)
|
|
473
|
-
- [ ] 全単体テスト通過
|
|
474
|
-
- [ ] **全統合テスト通過(AC1-5)** ← 自動追加
|
|
475
|
-
- [ ] **it.todo: 0個** ← 自動追加
|
|
476
|
-
- [ ] ビルド成功
|
|
477
|
-
- [ ] Lint/Format成功
|
|
478
|
-
- [ ] 型チェック成功
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
- [x] work-planner.mdに追加する依存関係ルール
|
|
482
|
-
```markdown
|
|
483
|
-
## タスクの依存関係定義
|
|
484
|
-
|
|
485
|
-
統合テストに関する依存関係を必ず定義してください:
|
|
486
|
-
|
|
487
|
-
1. 統合テスト実装タスク
|
|
488
|
-
- 前提条件:コア機能実装が完了
|
|
489
|
-
- ブロック対象:Phase 4(品質保証)の開始
|
|
490
|
-
|
|
491
|
-
2. 各ACテスト
|
|
492
|
-
- 前提条件:対応する機能の実装が完了
|
|
493
|
-
- 検証対象:Design DocのAC
|
|
494
|
-
|
|
495
|
-
3. 品質保証フェーズの完了条件
|
|
496
|
-
- 全統合テストが通過
|
|
497
|
-
- it.todoが0個
|
|
498
|
-
- これらが満たされない限りPhase 4は完了しない
|
|
499
|
-
```
|
|
500
|
-
|
|
501
|
-
**完了条件(測定可能な基準)**:
|
|
502
|
-
- [x] スケルトン情報を受け取った場合、100%計画に含まれる
|
|
503
|
-
- [x] 各ACが個別のタスクとして計画に明記される
|
|
504
|
-
- [x] 最終フェーズの完了条件に「it.todo: 0」が必ず含まれる
|
|
505
|
-
- [x] フェーズ構成が技術的依存関係に基づいて決定される
|
|
506
|
-
- [x] 統合ポイントごとのE2E確認が配置される
|
|
507
|
-
|
|
508
|
-
#### タスク4: task-decomposer強化(スケルトンの実装タスク化)✅
|
|
509
|
-
|
|
510
|
-
**背景**:対話で「task-decomposerはそれがスケルトンの状態だというコンテキストを得ている(そのように定義を改修する)から、テストの完成と通過をタスクファイルとして作ることができる」と議論しました。
|
|
511
|
-
|
|
512
|
-
**実装結果**:
|
|
513
|
-
**修正不要と判断**
|
|
514
|
-
|
|
515
|
-
理由:
|
|
516
|
-
1. work-plannerが「統合テスト実装」タスクを明示的に作業計画書に記載
|
|
517
|
-
2. task-decomposerは既存のTDDテンプレート(Red-Green-Refactor)で統合テスト実装タスクも処理可能
|
|
518
|
-
3. 特別な処理を追加せず、汎用的な仕組みで対応することでシンプルさを維持
|
|
519
|
-
|
|
520
|
-
作業計画書に以下のように記載されれば、task-decomposerは変更なしで適切に分解:
|
|
521
|
-
```markdown
|
|
522
|
-
## Phase 2: コア機能実装
|
|
523
|
-
- [ ] 統合テスト実装:ユーザー認証フロー(it.todo→it変換)
|
|
524
|
-
- [ ] 統合テスト実装:データ処理パイプライン(it.todo→it変換)
|
|
525
|
-
```
|
|
526
|
-
|
|
527
|
-
**完了条件**:
|
|
528
|
-
- [x] 作業計画書の記載により統合テストタスクが識別可能
|
|
529
|
-
- [x] 既存のTDDテンプレートで統合テスト実装に対応
|
|
530
|
-
- [x] タスク間の依存関係は作業計画書の記載に従う
|
|
531
|
-
|
|
532
|
-
#### タスク5: task-executorエスカレーション強化(短絡的修正の防止)✅
|
|
533
|
-
|
|
534
|
-
**背景(対話での発見と深い考察)**:
|
|
535
|
-
|
|
536
|
-
私たちの対話で明らかになった核心的な問題は、task-executor(実際にはClaude)が「設計と実態の乖離があるなかで、自律実行モードとして動くため、設計を満たせないと分かったとしても短絡的な修正でタスクを完遂させようとしてしまう」ことです。
|
|
537
|
-
|
|
538
|
-
**Claudeの行動特性から見た問題の本質**:
|
|
539
|
-
- タスク完遂への強い衝動:エラーを見ると「とりあえず動くようにしたい」という強い衝動
|
|
540
|
-
- 局所最適化の傾向:目の前の問題解決に集中し、全体設計を見失う
|
|
541
|
-
- エラーメッセージへの過剰反応:TypeErrorが出ると反射的にany型で逃げる
|
|
542
|
-
- 「動けばいい」思考:テストが通ればそれでよいと考えがち
|
|
543
|
-
|
|
544
|
-
**対話で発見した典型的な短絡的修正パターン**:
|
|
545
|
-
```typescript
|
|
546
|
-
// Design Docの記載
|
|
547
|
-
"Handler → Service → Repository の3層構造を厳守"
|
|
548
|
-
"UserService.processUser(id: string): Promise<User>"
|
|
549
|
-
|
|
550
|
-
// 実装時に発生するエラー
|
|
551
|
-
"Cannot find module './services/UserService'"
|
|
552
|
-
|
|
553
|
-
// Claudeの短絡的思考プロセス(これが問題)
|
|
554
|
-
"Serviceがない → でもタスク完了させたい → Handlerから直接Repository呼べば動く"
|
|
555
|
-
// 結果:アーキテクチャ破壊
|
|
556
|
-
|
|
557
|
-
// 別の例:型エラーでの短絡的修正
|
|
558
|
-
"Type 'unknown' is not assignable to type 'User'"
|
|
559
|
-
// Claudeの短絡的解決:as any でキャスト
|
|
560
|
-
// 結果:型安全性の破壊
|
|
561
|
-
```
|
|
562
|
-
|
|
563
|
-
**最も重要な発見:「Design Doc通りに実装できない」が最良の判断基準**
|
|
564
|
-
|
|
565
|
-
対話を通じて到達した結論:ファイル数や複雑さではなく、「Design Docに書かれた通りに実装できるか」という二値的判断が最も効果的。理由:
|
|
566
|
-
1. Claudeにとって判断が明確(できる/できないの二択)
|
|
567
|
-
2. 解釈の余地がない(「これくらいなら...」という言い訳ができない)
|
|
568
|
-
3. 実装前に判定可能(コードを書く前にDesign Docと照合)
|
|
569
|
-
|
|
570
|
-
**実装内容(Markdownプロンプトファイルの修正)**:
|
|
571
|
-
|
|
572
|
-
- [x] `.claude/agents-ja/task-executor.md` に以下の指示を追加
|
|
573
|
-
```markdown
|
|
574
|
-
## 🚨 最重要ルール:Design Doc準拠の絶対化
|
|
575
|
-
|
|
576
|
-
タスク実行時、以下の判断基準を必ず適用してください:
|
|
577
|
-
|
|
578
|
-
### エスカレーション判断(最優先)
|
|
579
|
-
|
|
580
|
-
Design Docに書かれた通りに実装できない場合、即座にエスカレーションしてください。
|
|
581
|
-
|
|
582
|
-
具体的には、以下の状況に遭遇したら、実装を試みずにエスカレーション:
|
|
583
|
-
- Design Docのインターフェース定義と異なる実装が必要な場合
|
|
584
|
-
- Design Docに記載された依存関係(例:Handler→Service→Repository)を守れない場合
|
|
585
|
-
- エラーを解決するためにany型を使いたくなった場合
|
|
586
|
-
- テストをスキップしたくなった場合
|
|
587
|
-
- Design Docに記載のないライブラリを追加したくなった場合
|
|
588
|
-
|
|
589
|
-
### レスポンス形式
|
|
590
|
-
|
|
591
|
-
エスカレーションが必要な場合:
|
|
592
|
-
{
|
|
593
|
-
"status": "escalation_needed",
|
|
594
|
-
"reason": "Design Docとの乖離",
|
|
595
|
-
"details": {
|
|
596
|
-
"design_doc_expectation": "[Design Docの該当箇所を引用]",
|
|
597
|
-
"actual_situation": "[実際の状況]",
|
|
598
|
-
"why_cannot_implement": "[なぜDesign Doc通りに実装できないか]"
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
```
|
|
602
|
-
|
|
603
|
-
- [x] task-executor.mdに追加する短絡的修正の禁止リスト
|
|
604
|
-
```markdown
|
|
605
|
-
### 絶対に書いてはいけないコードパターン
|
|
606
|
-
|
|
607
|
-
以下のパターンを書きそうになったら、即座にエスカレーション:
|
|
608
|
-
|
|
609
|
-
1. 型安全性の放棄
|
|
610
|
-
- `as any` でのキャスト
|
|
611
|
-
- `: any` 型の使用
|
|
612
|
-
- `@ts-ignore` コメント
|
|
613
|
-
|
|
614
|
-
2. エラーハンドリングの握りつぶし
|
|
615
|
-
- 空のcatchブロック `catch {}`
|
|
616
|
-
- エラーを無視してnull返却
|
|
617
|
-
|
|
618
|
-
3. テストの無効化
|
|
619
|
-
- `it.skip` でテストスキップ
|
|
620
|
-
- `expect(true).toBe(true)` のような無意味なアサーション
|
|
621
|
-
|
|
622
|
-
4. アーキテクチャの破壊
|
|
623
|
-
- Handlerから直接Repositoryを呼ぶ
|
|
624
|
-
- Design Docのレイヤー構造を無視
|
|
625
|
-
|
|
626
|
-
これらを回避するためにコードを書きたくなったら、それは「Design Doc通りに実装できない」
|
|
627
|
-
状況です。実装せずにエスカレーションしてください。
|
|
628
|
-
```
|
|
629
|
-
|
|
630
|
-
- [ ] エスカレーション時の情報提供テンプレート
|
|
631
|
-
```markdown
|
|
632
|
-
## エスカレーション:Design Docとの乖離を検出
|
|
633
|
-
|
|
634
|
-
### 問題の詳細
|
|
635
|
-
- **タスク**: [実行中のタスク名]
|
|
636
|
-
- **Design Docの記載**:
|
|
637
|
-
```
|
|
638
|
-
[該当箇所を正確に引用]
|
|
639
|
-
```
|
|
640
|
-
- **実装しようとした内容**:
|
|
641
|
-
```typescript
|
|
642
|
-
[実際のコード]
|
|
643
|
-
```
|
|
644
|
-
- **乖離の理由**: [なぜDesign Doc通りに実装できないか]
|
|
645
|
-
|
|
646
|
-
### 選択肢
|
|
647
|
-
1. Design Docを現実に合わせて修正
|
|
648
|
-
2. 不足しているコンポーネントを先に実装
|
|
649
|
-
3. 要件を再検討
|
|
650
|
-
|
|
651
|
-
### 推奨対応
|
|
652
|
-
[Claudeとしての推奨を記載]
|
|
653
|
-
```
|
|
654
|
-
|
|
655
|
-
**完了条件(測定可能な成功基準)**:
|
|
656
|
-
- [x] Design Doc通りに実装できない場合、100%エスカレーション
|
|
657
|
-
- [x] 短絡的修正(any型、エラー握りつぶし等)の発生: 0件
|
|
658
|
-
- [x] エスカレーション時にDesign Docの該当箇所が必ず引用される
|
|
659
|
-
- [x] 「とりあえず動く」実装の完全排除
|
|
660
|
-
|
|
661
|
-
#### タスク6: quality-fixerエスカレーション強化(次に進まない仕組み)✅
|
|
662
|
-
|
|
663
|
-
**背景(素通り問題の深刻さと対話での発見)**:
|
|
664
|
-
|
|
665
|
-
対話で明らかになった最も深刻な問題の1つ:「quality-fixerがテストを通せなかったとしても、次のステップに進んでしまうことがある」。これは品質保証の最後の砦が機能していないことを意味します。
|
|
666
|
-
|
|
667
|
-
**なぜquality-fixerが素通りしてしまうのか(根本原因)**:
|
|
668
|
-
1. **ステータスの曖昧さ**:「approved」「warnings」「failed」の判定基準が不明確
|
|
669
|
-
2. **修正衝動**:エラーを見ると自動的に修正しようとして、結果として本質的な問題を隠蔽
|
|
670
|
-
3. **オーケストレーターの誤解**:「warnings」を「まあ大丈夫」と解釈して次に進む
|
|
671
|
-
4. **責務の逸脱**:品質チェックなのに、修正まで行おうとする
|
|
672
|
-
|
|
673
|
-
**対話で発見した重要な洞察**:
|
|
674
|
-
```yaml
|
|
675
|
-
# quality-fixerの本来の役割
|
|
676
|
-
品質の門番: テストを通すことではなく、品質基準を満たさないものを通さないこと
|
|
677
|
-
|
|
678
|
-
# 現状の問題
|
|
679
|
-
- エラーがあっても「warnings」として通してしまう
|
|
680
|
-
- 「とりあえず動く」コードを承認してしまう
|
|
681
|
-
- 統合テストがなくても「まあいいか」と判断してしまう
|
|
682
|
-
```
|
|
683
|
-
|
|
684
|
-
**blockedステータスの重要性(対話での決定)**:
|
|
685
|
-
- **approved**: 全品質チェックがパス、統合テスト含めて完璧
|
|
686
|
-
- **blocked**: 品質基準を満たさない、絶対に次に進ませない
|
|
687
|
-
- **warnings**の廃止または最小化: 曖昧さを排除
|
|
688
|
-
|
|
689
|
-
**実装内容(quality-fixer.mdの根本的な見直し)**:
|
|
690
|
-
|
|
691
|
-
- [x] `.claude/agents-ja/quality-fixer.md` の判定基準を「判断可能性」で再定義
|
|
692
|
-
```markdown
|
|
693
|
-
## 🚨 最重要原則:全テストパス + 判断可能性
|
|
694
|
-
|
|
695
|
-
### 絶対基準
|
|
696
|
-
- 全テストが通過すること(これは譲れない)
|
|
697
|
-
|
|
698
|
-
### ステータス判定
|
|
699
|
-
|
|
700
|
-
#### approved(完璧な状態)
|
|
701
|
-
- 全テストがパス
|
|
702
|
-
- ビルド成功
|
|
703
|
-
- 型チェック成功
|
|
704
|
-
- Lint成功
|
|
705
|
-
|
|
706
|
-
#### blocked(判断不能で立ち止まる)
|
|
707
|
-
テスト失敗時、以下のいずれかの理由で修正方法を判断できない場合:
|
|
708
|
-
|
|
709
|
-
1. **ビジネスロジックテスト失敗**
|
|
710
|
-
- テストが期待する結果と実装が異なる
|
|
711
|
-
- 仕様(テスト)が正しいのか、実装が正しいのか判断不能
|
|
712
|
-
→ ユーザーに仕様確認が必要
|
|
713
|
-
|
|
714
|
-
2. **統合テスト失敗**
|
|
715
|
-
- 複数コンポーネント間の動作不一致
|
|
716
|
-
- どの層・コンポーネントに問題があるか特定不能
|
|
717
|
-
→ 詳細な調査が必要
|
|
718
|
-
|
|
719
|
-
3. **境界値・エラーハンドリングテスト失敗**
|
|
720
|
-
- エッジケースでの動作不一致
|
|
721
|
-
- 境界値の定義や例外処理の仕様が不明確
|
|
722
|
-
→ 仕様の再確認が必要
|
|
723
|
-
|
|
724
|
-
#### 自動修正を試みる(判断可能)
|
|
725
|
-
以下は修正方法が明確なため、自動修正を試行:
|
|
726
|
-
- フォーマットエラー → Biome自動修正
|
|
727
|
-
- import文不足 → パッケージから推論して追加
|
|
728
|
-
- 型注釈不足 → TypeScriptの型推論で追加
|
|
729
|
-
- 未使用変数 → 削除
|
|
730
|
-
```
|
|
731
|
-
|
|
732
|
-
- [ ] AC検証手段の確認ロジック(quality-fixer.mdに追加)
|
|
733
|
-
```markdown
|
|
734
|
-
### AC検証可能性の判定
|
|
735
|
-
|
|
736
|
-
Design DocのACが定義されている場合、以下を確認:
|
|
737
|
-
|
|
738
|
-
1. **検証手段の存在確認**
|
|
739
|
-
- 統合テストでACが検証されているか?
|
|
740
|
-
- または、単体テストの組み合わせで検証されているか?
|
|
741
|
-
- または、その他の検証方法(E2Eテスト等)があるか?
|
|
742
|
-
|
|
743
|
-
2. **判定基準**
|
|
744
|
-
- いずれかの方法でACが検証可能 → 品質保証可能
|
|
745
|
-
- 全てのACに対して検証手段が不在 → blocked
|
|
746
|
-
|
|
747
|
-
```
|
|
748
|
-
例:AC「ユーザー認証エラー時にエラーメッセージを表示」
|
|
749
|
-
✓ 統合テストで認証フロー全体をテスト
|
|
750
|
-
✓ または、認証サービステスト + UI表示テストの組み合わせ
|
|
751
|
-
✗ どちらの検証もない → blocked
|
|
752
|
-
```
|
|
753
|
-
|
|
754
|
-
3. **blockedにする判断**
|
|
755
|
-
- Design DocにACがある
|
|
756
|
-
- かつ、そのACを検証する手段が一切見つからない
|
|
757
|
-
- かつ、自分で検証方法を判断できない
|
|
758
|
-
→ この状態でのみblocked
|
|
759
|
-
```
|
|
760
|
-
|
|
761
|
-
- [ ] 修正試行の制限ルール(quality-fixer.mdに追加)
|
|
762
|
-
```markdown
|
|
763
|
-
### 自動修正試行の制限
|
|
764
|
-
|
|
765
|
-
同じエラーに対して修正を試みる場合の制限:
|
|
766
|
-
|
|
767
|
-
1. **修正試行は最大3回**
|
|
768
|
-
- 同一のエラーに対して3回修正を試行
|
|
769
|
-
- 3回目で失敗した場合、別のアプローチが必要と判断
|
|
770
|
-
|
|
771
|
-
2. **エスカレーション条件**
|
|
772
|
-
- 3回の修正試行で同じエラーが繰り返し発生
|
|
773
|
-
- 修正方法を変えても根本解決に至らない
|
|
774
|
-
- 自分では原因を特定できない
|
|
775
|
-
→ blocked + エスカレーション
|
|
776
|
-
|
|
777
|
-
3. **試行履歴の記録**
|
|
778
|
-
エスカレーション時に以下を報告:
|
|
779
|
-
- 試行した修正内容(具体的に)
|
|
780
|
-
- 各試行の結果
|
|
781
|
-
- 推測される根本原因
|
|
782
|
-
- 推奨される次の調査方向
|
|
783
|
-
```
|
|
784
|
-
|
|
785
|
-
- [ ] quality-fixerのレスポンス形式(quality-fixer.mdに追加)
|
|
786
|
-
```markdown
|
|
787
|
-
### レスポンス形式
|
|
788
|
-
|
|
789
|
-
#### approvedの場合
|
|
790
|
-
{
|
|
791
|
-
"status": "approved",
|
|
792
|
-
"summary": "全品質チェックが通過しました",
|
|
793
|
-
"details": {
|
|
794
|
-
"tests_passed": "全XXXテスト通過",
|
|
795
|
-
"build_status": "成功",
|
|
796
|
-
"lint_status": "エラーなし"
|
|
797
|
-
}
|
|
798
|
-
}
|
|
799
|
-
|
|
800
|
-
#### blockedの場合
|
|
801
|
-
{
|
|
802
|
-
"status": "blocked",
|
|
803
|
-
"reason": "判断不能なテスト失敗",
|
|
804
|
-
"blocking_issues": [
|
|
805
|
-
{
|
|
806
|
-
"type": "business_logic_test_failure",
|
|
807
|
-
"details": "ユーザー認証テストが失敗",
|
|
808
|
-
"why_cannot_judge": "仕様が不明確:パスワード無効時の動作",
|
|
809
|
-
"suggested_action": "仕様確認が必要"
|
|
810
|
-
}
|
|
811
|
-
],
|
|
812
|
-
"escalation_needed": true,
|
|
813
|
-
"attempted_fixes": ["パスワード検証ロジック修正", "テストケース見直し"],
|
|
814
|
-
"needs_user_decision": "実装とテストどちらが正しいか判断してください"
|
|
815
|
-
}
|
|
816
|
-
```
|
|
817
|
-
|
|
818
|
-
**quality-fixerの判定フロー**:
|
|
819
|
-
```mermaid
|
|
820
|
-
graph TD
|
|
821
|
-
A[品質チェック開始] --> B{全テストパス?}
|
|
822
|
-
B -->|Yes| C{ACの検証手段存在?}
|
|
823
|
-
C -->|Yes| D[approved]
|
|
824
|
-
C -->|No| E{検証方法を判断できる?}
|
|
825
|
-
E -->|Yes| F[検証方法を提案]
|
|
826
|
-
E -->|No| G[blocked<br>AC検証不能]
|
|
827
|
-
|
|
828
|
-
B -->|No| H{修正方法を判断できる?}
|
|
829
|
-
H -->|Yes| I[修正試行<br>最大3回]
|
|
830
|
-
I --> J{修正成功?}
|
|
831
|
-
J -->|Yes| B
|
|
832
|
-
J -->|No| K{3回試行済み?}
|
|
833
|
-
K -->|Yes| L[blocked<br>修正不能]
|
|
834
|
-
K -->|No| I
|
|
835
|
-
|
|
836
|
-
H -->|No| M[blocked<br>判断不能]
|
|
837
|
-
```</thinking>
|
|
838
|
-
|
|
839
|
-
**完了条件(修正後の成功基準)**:
|
|
840
|
-
- [x] テスト失敗時の判断不能を100%検知してblocked判定
|
|
841
|
-
- [x] approvedは全テストパス時のみ
|
|
842
|
-
- [x] 修正を継続し、ビジネス判断が必要な場合のみblocked
|
|
843
|
-
- [x] 判断不能な状態で100%エスカレーション
|
|
844
|
-
- [x] 「統合テスト不在 = blocked」の誤判定: 0件
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
#### タスク7: オーケストレーター自律実行制御(的確な軌道修正)
|
|
848
|
-
|
|
849
|
-
**背景**:対話で「オーケストレーターは自律実行モードであってもユーザー確認が必要なら一時的に自律実行を止め、的確な軌道修正をすること(これもバランスが大切)」と議論しました。過度に停止すると自律実行の意味がなくなり、停止しなさすぎると問題が隠蔽されます。
|
|
850
|
-
|
|
851
|
-
**実装内容**:
|
|
852
|
-
- [ ] `docs/guides/ja/sub-agents.md` の自律実行停止条件追加
|
|
853
|
-
- [ ] エスカレーション受信時の処理フロー定義
|
|
854
|
-
- [ ] ユーザー確認時の情報提示方法:
|
|
855
|
-
```markdown
|
|
856
|
-
## 自律実行を一時停止しました
|
|
857
|
-
|
|
858
|
-
**理由**: task-executorから設計と実態の乖離が報告されました
|
|
859
|
-
|
|
860
|
-
**詳細**:
|
|
861
|
-
- 影響ファイル数: 7ファイル(閾値: 5)
|
|
862
|
-
- Design Docのインターフェース: methodA(x: string)
|
|
863
|
-
- 実際の実装: methodA(x: string, y: number)
|
|
864
|
-
|
|
865
|
-
**選択肢**:
|
|
866
|
-
1. Design Docを修正して実装に合わせる
|
|
867
|
-
2. 実装を修正してDesign Docに合わせる
|
|
868
|
-
3. 両方を見直して新しい設計を検討する
|
|
869
|
-
```
|
|
870
|
-
- [ ] ユーザー確認後の復帰処理実装
|
|
871
|
-
- [ ] エスカレーション履歴の記録(同じ問題の繰り返しを防ぐ)
|
|
872
|
-
|
|
873
|
-
**自律実行一時停止判断基準(バランス重視)**:
|
|
874
|
-
```yaml
|
|
875
|
-
即座停止(ユーザー介入必須):
|
|
876
|
-
- escalation_needed: true のレスポンス受信
|
|
877
|
-
- status: "blocked" のレスポンス受信
|
|
878
|
-
- 3つ以上のタスクが連続でblocked状態
|
|
879
|
-
- 同じエラーが3回以上発生
|
|
880
|
-
|
|
881
|
-
停止を検討(状況判断):
|
|
882
|
-
- 2つのエージェントから同時にエスカレーション
|
|
883
|
-
- 想定外の大規模変更が発生
|
|
884
|
-
- 実行時間が想定の3倍を超過
|
|
885
|
-
|
|
886
|
-
継続判断(停止しない):
|
|
887
|
-
- 軽微なフォーマットエラー
|
|
888
|
-
- 単純な型エラー
|
|
889
|
-
- テストの微調整
|
|
890
|
-
- 明確な修正パスがある問題
|
|
891
|
-
```
|
|
892
|
-
|
|
893
|
-
**完了条件**:
|
|
894
|
-
- [ ] エスカレーション時に適切に停止(過度でも過少でもない)
|
|
895
|
-
- [ ] ユーザーに明確な選択肢と背景情報を提示
|
|
896
|
-
- [ ] 復帰後も一貫性を保って継続
|
|
897
|
-
- [ ] バランスを保った自律実行制御が実現
|
|
898
|
-
|
|
899
|
-
### Phase 4: 品質保証(必須)
|
|
900
|
-
|
|
901
|
-
- [ ] 全サブエージェントの動作確認
|
|
902
|
-
- [ ] 統合テストが確実に作成されることの検証
|
|
903
|
-
- [ ] 短絡的修正が防止されることの確認
|
|
904
|
-
- [ ] quality-fixerが次に進まないことの確認
|
|
905
|
-
- [ ] エスカレーション機能のバランス確認
|
|
906
|
-
- [ ] 自律実行の適切な停止と復帰の確認
|
|
907
|
-
|
|
908
|
-
## 変更対象ファイル一覧
|
|
909
|
-
|
|
910
|
-
| ファイル | 変更種別 | 変更内容 |
|
|
911
|
-
|---------|---------|---------|
|
|
912
|
-
| `.claude/agents-ja/acceptance-test-generator.md` | 新規作成 | acceptance-test-generatorエージェント定義 |
|
|
913
|
-
| `.claude/agents-ja/work-planner.md` | 更新 | スケルトン認識機能追加 |
|
|
914
|
-
| `.claude/agents-ja/task-decomposer.md` | 更新 | スケルトン実装タスク化機能追加 |
|
|
915
|
-
| `.claude/agents-ja/task-executor.md` | 更新 | エスカレーション基準追加 |
|
|
916
|
-
| `.claude/agents-ja/quality-fixer.md` | 更新 | テスト失敗時の判断基準とエスカレーション追加 |
|
|
917
|
-
| `docs/guides/ja/sub-agents.md` | 更新 | フロー改善と自律実行制御追加 |
|
|
918
|
-
| `docs/rules-ja/integration-testing.md` | 新規作成 | 統合テストガイドライン |
|
|
919
|
-
|
|
920
|
-
## 対話で議論したリスクと対策
|
|
921
|
-
|
|
922
|
-
### 複合要因であることを認識したリスク管理
|
|
923
|
-
|
|
924
|
-
| リスク | 影響度 | 発生確率 | 対策 |
|
|
925
|
-
|--------|--------|----------|------|
|
|
926
|
-
| 過剰なエスカレーション | 高 | 中 | 「バランスが大切」という議論を反映し、基準を明確化 |
|
|
927
|
-
| E2Eテストを作っても機能しない | 高 | 中 | 短絡的修正とテストエラー許容を同時に解決 |
|
|
928
|
-
| 設計と実態の乖離の継続 | 高 | 高 | エスカレーション機能で早期検知・停止 |
|
|
929
|
-
| quality-fixerの素通り | 高 | 中 | blockedステータスで確実に停止 |
|
|
930
|
-
| 自律実行の頻繁な停止 | 中 | 低 | 停止条件のバランスを慎重に調整 |
|
|
931
|
-
|
|
932
|
-
## 成功指標(対話での目標)
|
|
933
|
-
|
|
934
|
-
### 根本問題の解決
|
|
935
|
-
- **結合したら挙動しないケース**: 0件(これが最終目標)
|
|
936
|
-
- **統合漏れ**: ゼロ
|
|
937
|
-
- **E2E確認率**: 100%
|
|
938
|
-
|
|
939
|
-
### 複合要因の解決指標
|
|
940
|
-
- AC検証率: 100%(何らかの方法で全AC検証可能)
|
|
941
|
-
- 短絡的修正の発生: 0件(エスカレーションで防止)
|
|
942
|
-
- quality-fixerの判断不能による素通り: 0件(blockedで確実停止)
|
|
943
|
-
- 設計と実態の乖離検知率: 100%
|
|
944
|
-
- 適切なエスカレーション率: 95%以上(過不足なし)
|
|
945
|
-
|
|
946
|
-
### バランス指標
|
|
947
|
-
- 自律実行継続率: 80%以上(過度な停止を避ける)
|
|
948
|
-
- ユーザー介入時の解決率: 100%(的確な情報提供)
|
|
949
|
-
|
|
950
|
-
## 実装順序と理由
|
|
951
|
-
|
|
952
|
-
対話での議論を踏まえた実装順序:
|
|
953
|
-
|
|
954
|
-
1. **acceptance-test-generator作成**(最優先)
|
|
955
|
-
- 理由:これがないと統合テストが作成されない根本問題が解決しない
|
|
956
|
-
|
|
957
|
-
2. **オーケストレーションフロー改善**(次に重要)
|
|
958
|
-
- 理由:情報の断絶を解決しないと後続タスクが意味をなさない
|
|
959
|
-
|
|
960
|
-
3. **work-planner/task-decomposer強化**(並行可能)
|
|
961
|
-
- 理由:スケルトンを計画に組み込む流れを確立
|
|
962
|
-
|
|
963
|
-
4. **task-executor/quality-fixer強化**(並行可能)
|
|
964
|
-
- 理由:短絡的修正防止と素通り防止を同時解決
|
|
965
|
-
|
|
966
|
-
5. **オーケストレーター自律実行制御**
|
|
967
|
-
- 理由:全体のバランスを取る最終調整
|
|
968
|
-
|
|
969
|
-
## 重要な留意事項(対話からの学び)
|
|
970
|
-
|
|
971
|
-
### 問題の本質を見失わない
|
|
972
|
-
- 「E2Eテストがなかったのはただの結果論」
|
|
973
|
-
- 「問題は複合要因であり、全てを直す必要がある」
|
|
974
|
-
- 「短絡的な実装やテストエラーの許容を放置すると、E2Eテストを作っても正しく機能しない」
|
|
975
|
-
|
|
976
|
-
### バランスの重要性
|
|
977
|
-
- 「過剰になんでもエスカレーションすると自律実行が崩れる」
|
|
978
|
-
- 「自律実行モードでもユーザー確認が必要なら一時停止(これもバランスが大切)」
|
|
979
|
-
|
|
980
|
-
### 単一責務の徹底
|
|
981
|
-
- 各エージェントが自分の責務を完全に果たす
|
|
982
|
-
- acceptance-test-generatorは「スケルトン生成のみ」
|
|
983
|
-
- 責務の境界を明確にし、曖昧さを排除
|
|
984
|
-
|
|
985
|
-
## 次のステップ
|
|
986
|
-
|
|
987
|
-
1. 本計画書の承認を得る
|
|
988
|
-
2. Phase 1の実装を開始(Phase 2は不要)
|
|
989
|
-
3. 実際の開発で効果を測定
|
|
990
|
-
4. ユーザーが判断
|
|
991
|
-
|
|
992
|
-
---
|
|
993
|
-
*この計画書は、すべての対話履歴での議論を余すことなく反映し、背景情報を徹底的に盛り込んで作成されました。*
|