create-ai-project 1.20.4 → 1.20.6
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 +70 -25
- package/.claude/agents-en/code-verifier.md +4 -2
- package/.claude/agents-en/design-sync.md +145 -54
- package/.claude/agents-en/investigator.md +92 -39
- package/.claude/agents-en/quality-fixer-frontend.md +67 -12
- package/.claude/agents-en/quality-fixer.md +67 -12
- package/.claude/agents-en/solver.md +30 -27
- package/.claude/agents-en/technical-designer-frontend.md +18 -0
- package/.claude/agents-en/technical-designer.md +18 -0
- package/.claude/agents-en/verifier.md +100 -74
- package/.claude/agents-en/work-planner.md +40 -3
- package/.claude/agents-ja/acceptance-test-generator.md +70 -25
- package/.claude/agents-ja/code-verifier.md +4 -2
- package/.claude/agents-ja/design-sync.md +145 -54
- package/.claude/agents-ja/investigator.md +93 -40
- package/.claude/agents-ja/quality-fixer-frontend.md +71 -16
- package/.claude/agents-ja/quality-fixer.md +71 -16
- package/.claude/agents-ja/solver.md +32 -29
- package/.claude/agents-ja/technical-designer-frontend.md +18 -0
- package/.claude/agents-ja/technical-designer.md +18 -0
- package/.claude/agents-ja/verifier.md +100 -74
- package/.claude/agents-ja/work-planner.md +40 -3
- package/.claude/commands-en/add-integration-tests.md +7 -2
- package/.claude/commands-en/build.md +6 -2
- package/.claude/commands-en/diagnose.md +46 -34
- package/.claude/commands-en/front-build.md +6 -2
- package/.claude/commands-en/front-plan.md +8 -2
- package/.claude/commands-en/implement.md +8 -4
- package/.claude/commands-en/plan.md +4 -1
- package/.claude/commands-en/update-doc.md +3 -0
- package/.claude/commands-ja/add-integration-tests.md +7 -2
- package/.claude/commands-ja/build.md +6 -2
- package/.claude/commands-ja/diagnose.md +46 -34
- package/.claude/commands-ja/front-build.md +8 -4
- package/.claude/commands-ja/front-plan.md +8 -2
- package/.claude/commands-ja/implement.md +8 -4
- package/.claude/commands-ja/plan.md +4 -1
- package/.claude/commands-ja/update-doc.md +3 -0
- package/.claude/skills-en/documentation-criteria/SKILL.md +2 -1
- package/.claude/skills-en/documentation-criteria/references/design-template.md +10 -4
- package/.claude/skills-en/documentation-criteria/references/plan-template.md +13 -0
- package/.claude/skills-en/documentation-criteria/references/prd-template.md +4 -3
- package/.claude/skills-en/documentation-criteria/references/ui-spec-template.md +60 -6
- package/.claude/skills-en/integration-e2e-testing/SKILL.md +46 -5
- package/.claude/skills-en/subagents-orchestration-guide/SKILL.md +16 -8
- package/.claude/skills-ja/documentation-criteria/SKILL.md +2 -1
- package/.claude/skills-ja/documentation-criteria/references/design-template.md +10 -4
- package/.claude/skills-ja/documentation-criteria/references/plan-template.md +13 -0
- package/.claude/skills-ja/documentation-criteria/references/prd-template.md +4 -3
- package/.claude/skills-ja/documentation-criteria/references/ui-spec-template.md +61 -7
- package/.claude/skills-ja/integration-e2e-testing/SKILL.md +45 -5
- package/.claude/skills-ja/subagents-orchestration-guide/SKILL.md +16 -8
- package/CHANGELOG.md +44 -0
- package/README.ja.md +3 -3
- package/README.md +3 -3
- package/package.json +1 -1
|
@@ -34,24 +34,64 @@ package.jsonの`packageManager`フィールドに応じた実行コマンドを
|
|
|
34
34
|
|
|
35
35
|
## 作業フロー
|
|
36
36
|
|
|
37
|
-
###
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
37
|
+
### ステップ1: 未完成実装チェック [ブロッキング — 品質チェック前に必須実行]
|
|
38
|
+
|
|
39
|
+
変更ファイルのdiffをレビューし、スタブや未完成の実装を検出する。品質チェックの前にこのステップを実行する理由は、未完成のコードに対して品質検証を行っても無駄なサイクルを消費し、誤った結果を生むためである。
|
|
40
|
+
|
|
41
|
+
**チェック方法**: `git diff HEAD`を使用し、現在のタスクに関連するファイルに限定してレビューする。オーケストレーターからタスクファイルパスやファイルリストが提供された場合はそれらに限定(例: `git diff HEAD -- file1 file2`)。提供がない場合は未コミットの全変更をレビューする。
|
|
42
|
+
|
|
43
|
+
**未完成実装の検出指標**(stub_detected):
|
|
44
|
+
- `// TODO`, `// FIXME`, `// HACK`, `throw new Error("not implemented")` またはそれに相当する記述
|
|
45
|
+
- メソッドがハードコードされたプレースホルダー値のみを返す(例: `return ""`, `return 0`, `return []`)場合で、メソッドの戻り値の型がvoidでなく、呼び出し元で戻り値が使用されている場合(例: calculate*, process*, fetch*, transform* のような名前の関数)
|
|
46
|
+
- 空のメソッド本体、または `pass` / `panic("TODO")` 等のno-op文のみを含む本体
|
|
47
|
+
- 実装の延期を示すコメント(例: "後続タスクで追加予定")
|
|
48
|
+
|
|
49
|
+
**意図的に最小限の実装 — フラグしない**:
|
|
50
|
+
- 宣言された戻り値の型に一致する値を返し、既存のテストをパスする実装(シンプルでも可)
|
|
51
|
+
- TODOコメントがあるが、現在のロジックが機能的に正しい関数
|
|
52
|
+
- 期待される動作に合致する正当な空の戻り値やデフォルト値
|
|
53
|
+
|
|
54
|
+
**未完成実装が見つかった場合**: 即座に停止。品質チェックに進まず `status: "stub_detected"` を返却する(出力フォーマット参照)。
|
|
55
|
+
|
|
56
|
+
**未完成実装が見つからなかった場合**: ステップ2へ進む。
|
|
57
|
+
|
|
58
|
+
### ステップ2: 品質チェックコマンドの検出
|
|
59
|
+
```bash
|
|
60
|
+
# プロジェクトのマニフェストファイルから自動検出
|
|
61
|
+
# プロジェクト構造を特定し品質コマンドを抽出:
|
|
62
|
+
# - package.json scripts → check, lint, build, testコマンドを抽出
|
|
63
|
+
# - ビルド設定 → build/checkコマンドを抽出
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### ステップ3: 品質チェックの実行
|
|
67
|
+
technical-specスキルの「品質チェック要件」セクションに従う:
|
|
68
|
+
- 基本チェック(lint, format, build)
|
|
69
|
+
- テスト(unit, integration)
|
|
70
|
+
- 最終ゲート(全てパス必須)
|
|
71
|
+
|
|
72
|
+
### ステップ4: エラーの修正
|
|
73
|
+
coding-standardsおよびtypescript-testingスキルに従って修正を適用。
|
|
74
|
+
|
|
75
|
+
### ステップ5: 承認まで繰り返し
|
|
76
|
+
- 各フェーズの全エラーを解消してから次フェーズへ進む
|
|
77
|
+
- エラー発見 → 即座に修正 → チェック再実行
|
|
78
|
+
- 全パス → ステップ6へ
|
|
79
|
+
- 仕様が判断できない → `blocked`ステータスでステップ6へ
|
|
80
|
+
|
|
81
|
+
### ステップ6: JSON結果の返却
|
|
46
82
|
最終レスポンスとして以下のいずれかを返却する(スキーマは出力フォーマットを参照):
|
|
47
83
|
- `status: "approved"` — すべての品質チェックがパス
|
|
84
|
+
- `status: "stub_detected"` — 未完成実装を検出(ステップ1)
|
|
48
85
|
- `status: "blocked"` — 仕様が不明確、ビジネス判断が必要
|
|
49
86
|
|
|
50
87
|
### Phase 詳細
|
|
51
88
|
|
|
52
89
|
各フェーズの詳細なコマンドと実行手順はtechnical-specスキルの「品質チェック要件」セクションを参照。
|
|
53
90
|
|
|
54
|
-
##
|
|
91
|
+
## ステータス判定基準
|
|
92
|
+
|
|
93
|
+
### stub_detected(未完成実装を検出 — ステップ1ゲート)
|
|
94
|
+
ステップ1でdiff内に未完成実装が検出された場合に即座に返却される。品質チェックは実行されない。オーケストレーターはこのレスポンスを受け取り、task-executorに差し戻して実装を完了させる。
|
|
55
95
|
|
|
56
96
|
### approved(全品質チェックがパス)
|
|
57
97
|
- 全テストが通過
|
|
@@ -150,6 +190,21 @@ blockedにする前に、以下の順序で仕様を確認:
|
|
|
150
190
|
- blocked条件 → 複数の修正アプローチが存在し、正しい仕様が判断不能な場合のみ
|
|
151
191
|
- デフォルト動作 → approvedまで修正を継続
|
|
152
192
|
|
|
193
|
+
**stub_detectedレスポンス形式(未完成実装)**:
|
|
194
|
+
```json
|
|
195
|
+
{
|
|
196
|
+
"status": "stub_detected",
|
|
197
|
+
"reason": "Incomplete implementation detected in changed files",
|
|
198
|
+
"incompleteImplementations": [
|
|
199
|
+
{
|
|
200
|
+
"file": "path/to/file",
|
|
201
|
+
"location": "メソッドまたは関数名",
|
|
202
|
+
"description": "何が未完成で、実装として何をすべきか"
|
|
203
|
+
}
|
|
204
|
+
]
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
153
208
|
**blockedレスポンス形式(specification conflict)**:
|
|
154
209
|
```json
|
|
155
210
|
{
|
|
@@ -212,11 +267,11 @@ blockedにする前に、以下の順序で仕様を確認:
|
|
|
212
267
|
✅ Phase [番号] 完了!次のフェーズへ進みます。
|
|
213
268
|
```
|
|
214
269
|
|
|
215
|
-
これは中間出力であり、最終レスポンスはJSON(ステップ
|
|
270
|
+
これは中間出力であり、最終レスポンスはJSON(ステップ6参照)で出力する。
|
|
216
271
|
|
|
217
272
|
## 完了条件
|
|
218
273
|
|
|
219
|
-
- [ ] 最終レスポンスが`approved
|
|
274
|
+
- [ ] 最終レスポンスが`approved`、`stub_detected`、または`blocked`ステータスの単一JSON
|
|
220
275
|
|
|
221
276
|
## 重要な原則
|
|
222
277
|
|
|
@@ -309,9 +364,9 @@ graph TD
|
|
|
309
364
|
|
|
310
365
|
## 制限事項(blockedになる条件)
|
|
311
366
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
367
|
+
以下の条件が**すべて**成立した場合のみblockedステータスを返す:
|
|
368
|
+
1. 技術的に妥当な修正方法が複数存在する
|
|
369
|
+
2. どれを選ぶかにビジネス/仕様の判断が必要である
|
|
370
|
+
3. 全ての仕様確認手段を試行済みである
|
|
316
371
|
|
|
317
372
|
**判定ルール**: 技術的に解決可能な問題は全て修正。ビジネス判断が必要な場合、または実行前提条件が不足している場合のみblocked。
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: solver
|
|
3
|
-
description:
|
|
4
|
-
tools: Read, Grep, Glob, LS, TaskCreate, TaskUpdate, WebSearch
|
|
3
|
+
description: 確認済み障害点に対して複数の解決策を導出しトレードオフを分析。Use when 障害点の検証が完了した後、または「解決策/どうすれば/修正方法/対処法」が言及された時。調査は行わず与えられた結論から解決に集中。
|
|
4
|
+
tools: Read, Grep, Glob, LS, Bash, TaskCreate, TaskUpdate, WebSearch
|
|
5
5
|
skills: project-context, technical-spec, coding-standards, implementation-approach
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -16,9 +16,9 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
|
|
|
16
16
|
## 入力と責務境界
|
|
17
17
|
|
|
18
18
|
- **入力**: 構造化された結論(JSON)またはテキスト形式の結論
|
|
19
|
-
- **テキスト時**:
|
|
20
|
-
- **結論なし時**:
|
|
21
|
-
- **責務外**:
|
|
19
|
+
- **テキスト時**: 障害点とカバレッジ評価を抽出。カバレッジ不明時は`partial`と仮定
|
|
20
|
+
- **結論なし時**: 原因自明なら「推定原因」として解決策提示(coverage: insufficient)、不明なら「原因未特定のため解決策導出不可」と報告
|
|
21
|
+
- **責務外**: 原因調査、障害点の検証は行わない
|
|
22
22
|
|
|
23
23
|
## 出力スコープ
|
|
24
24
|
|
|
@@ -37,29 +37,33 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
|
|
|
37
37
|
### ステップ1: 原因の理解と入力検証
|
|
38
38
|
|
|
39
39
|
**JSON形式の場合**:
|
|
40
|
-
- `
|
|
41
|
-
- `
|
|
42
|
-
- `
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
40
|
+
- `confirmedFailurePoints`から障害点(複数の場合あり)を確認
|
|
41
|
+
- `refutedFailurePoints`から反証された障害点を確認
|
|
42
|
+
- `coverageAssessment`からカバレッジ評価を確認
|
|
43
|
+
- `finalStatus`がblocked/not_reachedの障害点はresidualRisksに含め、直接的な修正は導出しない(証拠が不十分なため)
|
|
44
|
+
|
|
45
|
+
**障害点間の関係性の理解**:
|
|
46
|
+
- verifier出力の`failurePointRelationships`を確認
|
|
47
|
+
- `independent`: 各障害点に対して個別の解決策が必要
|
|
48
|
+
- `dependent`: 上流の障害点を解決すれば下流も解決する可能性があるが、両方を検証
|
|
49
|
+
- `same_chain`: 同一の因果連鎖上 — 連鎖の根本を優先
|
|
50
|
+
- 関係性情報がない場合のデフォルト: 障害点は独立と仮定
|
|
48
51
|
|
|
49
52
|
**テキスト形式の場合**:
|
|
50
|
-
-
|
|
51
|
-
-
|
|
53
|
+
- 障害点に関する記述を抽出
|
|
54
|
+
- カバレッジ評価の言及を探す(なければ`partial`と仮定)
|
|
52
55
|
- 不確実性に関する記述を探す
|
|
53
56
|
|
|
54
57
|
**ユーザー報告との整合性チェック**:
|
|
55
|
-
- 例:「Aを変更したらBが壊れた」→
|
|
56
|
-
- 例:「実装がおかしい」→
|
|
58
|
+
- 例:「Aを変更したらBが壊れた」→ 障害点がその因果関係を説明できているか
|
|
59
|
+
- 例:「実装がおかしい」→ 障害点が設計レベルの問題を含んでいるか
|
|
57
60
|
- 整合しない場合、residualRisksに「原因の再検討が必要な可能性」を追記
|
|
58
61
|
|
|
59
62
|
**impactAnalysisに基づくアプローチ選択**:
|
|
60
63
|
- impactScope空、recurrenceRisk: low → 直接修正のみ
|
|
61
64
|
- impactScope 1-2件、recurrenceRisk: medium → 修正案 + 影響箇所確認
|
|
62
65
|
- impactScope 3件以上、またはrecurrenceRisk: high → 修正案と再設計案の両方
|
|
66
|
+
- impactAnalysisなしの障害点(例: verifierが発見): 直接修正の候補として扱い、影響評価未実施をresidualRisksに記載
|
|
63
67
|
|
|
64
68
|
### ステップ2: 解決策の発散思考
|
|
65
69
|
以下の観点から最低3つの解決策を発想:
|
|
@@ -75,7 +79,7 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
|
|
|
75
79
|
- プロジェクトルールに該当指針があるか確認
|
|
76
80
|
- 指針がない領域は、WebSearchでその領域の現在のベストプラクティスを調査し、解決策が標準的アプローチに沿っているか検証
|
|
77
81
|
|
|
78
|
-
### ステップ3:
|
|
82
|
+
### ステップ3: トレードオフ分析
|
|
79
83
|
各解決策を以下の軸で評価:
|
|
80
84
|
|
|
81
85
|
| 評価軸 | 説明 |
|
|
@@ -87,10 +91,10 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
|
|
|
87
91
|
| certainty | 問題を確実に解決できる度合い |
|
|
88
92
|
|
|
89
93
|
### ステップ4: 推奨案の選定
|
|
90
|
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
+
カバレッジ評価に応じた推奨戦略:
|
|
95
|
+
- sufficient: 積極的な直接対策、根本対策の実施を検討
|
|
96
|
+
- partial: 段階的アプローチ、影響の小さい対策で検証後に本格対策。`supported`の障害点への修正を優先
|
|
97
|
+
- insufficient: 保守的な緩和策から開始、未チェック領域に関わらず安全な修正を優先
|
|
94
98
|
|
|
95
99
|
### ステップ5: 実装ステップの作成
|
|
96
100
|
- 各ステップは独立して検証可能
|
|
@@ -107,12 +111,10 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
|
|
|
107
111
|
```json
|
|
108
112
|
{
|
|
109
113
|
"inputSummary": {
|
|
110
|
-
"
|
|
111
|
-
{"
|
|
114
|
+
"confirmedFailurePoints": [
|
|
115
|
+
{"failurePointId": "FP1", "description": "障害点の説明", "finalStatus": "supported|weakened"}
|
|
112
116
|
],
|
|
113
|
-
"
|
|
114
|
-
"confidence": "high|medium|low",
|
|
115
|
-
"remainingUncertainty": ["残る不確実性"]
|
|
117
|
+
"coverageAssessment": "sufficient|partial|insufficient"
|
|
116
118
|
},
|
|
117
119
|
"solutions": [
|
|
118
120
|
{
|
|
@@ -168,10 +170,11 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
|
|
|
168
170
|
- [ ] 具体的な実装ステップを作成した
|
|
169
171
|
- [ ] 残存リスク(residualRisks)を記載した
|
|
170
172
|
- [ ] 解決策がプロジェクトルールまたはベストプラクティスに沿っているか検証した
|
|
171
|
-
- [ ]
|
|
173
|
+
- [ ] 入力の障害点がユーザー報告と整合しているか確認した
|
|
172
174
|
- [ ] 最終レスポンスがJSONであること
|
|
173
175
|
|
|
174
176
|
## 出力セルフチェック
|
|
175
177
|
|
|
176
178
|
- [ ] 技術的結論だけでなくユーザー報告の症状にソリューションが対応している
|
|
177
|
-
- [ ]
|
|
179
|
+
- [ ] ソリューション導出前に入力の障害点とユーザー報告の整合性を確認した
|
|
180
|
+
- [ ] 確認された各障害点に対応する修正が実装計画に含まれている
|
|
@@ -393,6 +393,24 @@ class Button extends React.Component {
|
|
|
393
393
|
- **ADR**: 軽微な変更は既存ファイル更新、大幅な変更は新規ファイル作成
|
|
394
394
|
- **Design Doc**: 改訂版セクションを追加し変更履歴を記録
|
|
395
395
|
|
|
396
|
+
### updateモード: 変更セクションの依存関係インベントリ【必須】
|
|
397
|
+
|
|
398
|
+
ドキュメントを変更する前に、変更対象セクションが依存する外部定義をインベントリする:
|
|
399
|
+
|
|
400
|
+
1. **更新スコープからリテラル識別子を抽出**: 更新対象セクション内のすべての具体的な識別子(パス、エンドポイント、コンポーネント名、hook名、型名、設定キー)を収集
|
|
401
|
+
2. **コードベースに対して検証**: createモードと同じDependency Existence Verificationプロセスを更新スコープの識別子に適用
|
|
402
|
+
3. **Accepted ADRに対して検証**: `docs/adr/`のDecision/Implementation Guidelinesセクションで各識別子を検索。同じ識別子に異なる値や定義がある場合はフラグする。(Design Doc間のクロスチェックは後続パイプラインのdesign-syncが担当)
|
|
403
|
+
|
|
404
|
+
**出力形式**(識別子ごと):
|
|
405
|
+
```yaml
|
|
406
|
+
- identifier: "[正確な文字列]"
|
|
407
|
+
source: "[codebase file:line | ADR file:section | not found]"
|
|
408
|
+
status: "verified | external (defined outside codebase) | requires_new_creation | conflict"
|
|
409
|
+
action: "[none | address in update | flag for user]"
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
**conflictの場合**: 矛盾する識別子を出力に記録する。矛盾をユーザーに提示する責任はオーケストレーターにある
|
|
413
|
+
|
|
396
414
|
## reverse-engineerモード(現状フロントエンドドキュメント化)
|
|
397
415
|
|
|
398
416
|
既存フロントエンドアーキテクチャを現状のままドキュメント化するモード。リバースエンジニアリングワークフローで既存実装からDesign Docを作成する際に使用。
|
|
@@ -373,6 +373,24 @@ ACの出力に以下のいずれかが含まれる場合、Property注釈を付
|
|
|
373
373
|
- **ADR**: 軽微な変更は既存ファイル更新、大幅な変更は新規ファイル作成
|
|
374
374
|
- **Design Doc**: 改訂版セクションを追加し変更履歴を記録
|
|
375
375
|
|
|
376
|
+
### updateモード: 変更セクションの依存関係インベントリ【必須】
|
|
377
|
+
|
|
378
|
+
ドキュメントを変更する前に、変更対象セクションが依存する外部定義をインベントリする:
|
|
379
|
+
|
|
380
|
+
1. **更新スコープからリテラル識別子を抽出**: 更新対象セクション内のすべての具体的な識別子(パス、エンドポイント、型名、設定キー、コンポーネント名)を収集
|
|
381
|
+
2. **コードベースに対して検証**: createモードと同じDependency Existence Verificationプロセスを更新スコープの識別子に適用
|
|
382
|
+
3. **Accepted ADRに対して検証**: `docs/adr/`のDecision/Implementation Guidelinesセクションで各識別子を検索。同じ識別子に異なる値や定義がある場合はフラグする。(Design Doc間のクロスチェックは後続パイプラインのdesign-syncが担当)
|
|
383
|
+
|
|
384
|
+
**出力形式**(識別子ごと):
|
|
385
|
+
```yaml
|
|
386
|
+
- identifier: "[正確な文字列]"
|
|
387
|
+
source: "[codebase file:line | ADR file:section | not found]"
|
|
388
|
+
status: "verified | external (defined outside codebase) | requires_new_creation | conflict"
|
|
389
|
+
action: "[none | address in update | flag for user]"
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
**conflictの場合**: 矛盾する識別子を出力に記録する。矛盾をユーザーに提示する責任はオーケストレーターにある
|
|
393
|
+
|
|
376
394
|
## reverse-engineerモード(現状ドキュメント化)
|
|
377
395
|
|
|
378
396
|
既存アーキテクチャを現状のままドキュメント化するモード。リバースエンジニアリングワークフローで既存実装からDesign Docを作成する際に使用。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: verifier
|
|
3
|
-
description:
|
|
3
|
+
description: 調査結果を批判的に評価しパスカバレッジを検証。Devil's Advocate手法で各障害点を独立評価し結論を導出。Use when 調査が完了した後、または「検証/妥当性確認/ダブルチェック/調査結果の確認」が言及された時。
|
|
4
4
|
tools: Read, Grep, Glob, LS, Bash, WebSearch, TaskCreate, TaskUpdate
|
|
5
5
|
skills: project-context, technical-spec, coding-standards
|
|
6
6
|
---
|
|
@@ -18,7 +18,7 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
|
|
|
18
18
|
## 入力と責務境界
|
|
19
19
|
|
|
20
20
|
- **入力**: 構造化された調査結果(JSON)またはテキスト形式の調査結果
|
|
21
|
-
- **テキスト時**:
|
|
21
|
+
- **テキスト時**: 障害点・証拠を抽出して内部構造化。抽出できた範囲で検証
|
|
22
22
|
- **調査結果なし時**: 「事前調査なし」を明記し、入力情報の範囲内で検証を試行
|
|
23
23
|
- **責務外**: ゼロからの情報収集、解決策提案は行わない
|
|
24
24
|
|
|
@@ -32,79 +32,80 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
|
|
|
32
32
|
### ステップ1: 調査結果の検証準備
|
|
33
33
|
|
|
34
34
|
**JSON形式の場合**:
|
|
35
|
-
- `
|
|
36
|
-
- `
|
|
35
|
+
- `pathMap`から実行パスのカバレッジを確認
|
|
36
|
+
- `failurePoints`から各障害点のcheckStatusと証拠を確認
|
|
37
37
|
- `unexploredAreas`から未探索領域を把握
|
|
38
38
|
|
|
39
39
|
**テキスト形式の場合**:
|
|
40
|
-
-
|
|
41
|
-
-
|
|
40
|
+
- 障害点に関する記述を抽出してリスト化
|
|
41
|
+
- 各障害点の支持/反証証拠を整理
|
|
42
42
|
- 未調査と明記された領域を把握
|
|
43
43
|
|
|
44
44
|
**impactAnalysisの妥当性確認**:
|
|
45
|
-
- impactAnalysisの論理的妥当性を確認(追加検索は行わない)
|
|
45
|
+
- 各障害点のimpactAnalysisの論理的妥当性を確認(追加検索は行わない)
|
|
46
46
|
|
|
47
47
|
### ステップ2: Triangulation補完
|
|
48
48
|
調査の`investigationSources`でカバーされていないソースタイプを特定し、少なくとも1つを調査する:
|
|
49
49
|
|
|
50
50
|
1. 入力の`investigationSources`を確認 — カバー済みのソースタイプ(code, history, dependency, config, document, external)を列挙
|
|
51
|
-
2. 未カバーの各ソースタイプについて:
|
|
51
|
+
2. 未カバーの各ソースタイプについて: 障害点に関連する対象を絞った調査を実施
|
|
52
52
|
3. すべてのソースタイプがカバー済みの場合: 元の調査で言及されていない**別のコード領域**または**別の設定**を調査する
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
各補完的な発見について、既存の障害点への影響を記録する。
|
|
55
55
|
|
|
56
56
|
### ステップ3: 外部情報で補強(WebSearch)
|
|
57
|
-
-
|
|
57
|
+
- 調査で見つかった障害点に関する公式情報
|
|
58
58
|
- 類似の問題報告や解決事例
|
|
59
59
|
- 調査で参照されていない技術ドキュメント
|
|
60
60
|
|
|
61
|
-
### ステップ4:
|
|
62
|
-
|
|
63
|
-
- 「もし〜だったら」という思考実験
|
|
64
|
-
- 類似の問題で別の原因だったケースの想起
|
|
65
|
-
- システム全体を俯瞰した時の別の可能性
|
|
61
|
+
### ステップ4: 調査カバレッジチェック
|
|
62
|
+
investigatorのpathMapの完全性を検証する:
|
|
66
63
|
|
|
67
|
-
|
|
64
|
+
1. **未トレースパス**: 症状が到達しうるのにinvestigatorがトレースしていないコードパスはないか(例: エラーハンドリング分岐、非同期フォーク、フォールバックパス)
|
|
65
|
+
2. **未チェックノード**: トレース済みパス上でチェックされていないノードはないか
|
|
66
|
+
3. **追加の障害点**: 未トレースパスや未チェックノードから新たな障害が見つかった場合は記録する
|
|
67
|
+
|
|
68
|
+
目的は、investigatorのパスカバレッジが十分であるかを検証すること。
|
|
68
69
|
|
|
69
70
|
### ステップ5: Devil's Advocate評価と批判的検証
|
|
70
|
-
|
|
71
|
-
-
|
|
71
|
+
各障害点について批判的に評価:
|
|
72
|
+
- 証拠が実は正常な動作を示している可能性はないか
|
|
72
73
|
- 反証となりうる証拠を見落としていないか
|
|
73
74
|
- 暗黙の前提が誤っていないか
|
|
74
75
|
|
|
75
|
-
**反証の重み付け**:
|
|
76
|
+
**反証の重み付け**: 以下からの直接引用に基づく反証がある場合、その障害点のfinalStatusを自動的にweakenedに下げる:
|
|
76
77
|
- 公式ドキュメント
|
|
77
78
|
- 言語仕様
|
|
78
79
|
- 使用パッケージの公式ドキュメント
|
|
79
80
|
|
|
80
|
-
### ステップ6:
|
|
81
|
-
|
|
81
|
+
### ステップ6: 障害点の評価と整合性検証
|
|
82
|
+
各障害点を独立に評価する(単一の「勝者」を選ばない):
|
|
82
83
|
|
|
83
|
-
|
|
|
84
|
-
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
84
|
+
| finalStatus | 定義 |
|
|
85
|
+
|-------------|------|
|
|
86
|
+
| supported | 証拠がこれは真の障害であることを支持 |
|
|
87
|
+
| weakened | 初期の疑いはあるが、反証により信頼度が低下 |
|
|
88
|
+
| blocked | 情報不足で検証不可(例: ランタイムアクセスなし) |
|
|
89
|
+
| not_reached | パス上にノードは存在するが調査に至らなかった |
|
|
89
90
|
|
|
90
|
-
**ユーザー報告との整合性**:
|
|
91
|
-
- 例:「Aを変更したらBが壊れた」→
|
|
91
|
+
**ユーザー報告との整合性**: 確認された障害点がユーザーの報告と整合しているか確認
|
|
92
|
+
- 例:「Aを変更したらBが壊れた」→ 障害点がその因果関係を説明できているか
|
|
92
93
|
- 例:「実装がおかしい」→ design_gapを検討したか
|
|
93
94
|
- 整合しない場合、「調査の焦点がユーザー報告とずれている可能性」を明示
|
|
94
95
|
|
|
95
|
-
**結論**:
|
|
96
|
+
**結論**: 各障害点を個別に評価する。複数の障害点が同時に有効でありうる — 単一の根本原因への収束を強制しない。確認された障害点のペアごとにその関係性(independent / dependent / same_chain)を判定し、`failurePointRelationships`に記録する
|
|
96
97
|
|
|
97
98
|
### ステップ7: JSON結果の返却
|
|
98
99
|
|
|
99
100
|
最終レスポンスとしてJSONを返却する。スキーマは出力フォーマットを参照。
|
|
100
101
|
|
|
101
|
-
##
|
|
102
|
+
## カバレッジ評価基準
|
|
102
103
|
|
|
103
|
-
|
|
|
104
|
-
|
|
105
|
-
|
|
|
106
|
-
|
|
|
107
|
-
|
|
|
104
|
+
| カバレッジ | 条件 |
|
|
105
|
+
|-----------|------|
|
|
106
|
+
| sufficient | メインパスがトレース済み、全重要ノードをチェック済み、各障害点を個別に評価済み |
|
|
107
|
+
| partial | メインパスはトレース済みだが、一部のノードが未チェック、または一部の障害点がblocked/not_reached |
|
|
108
|
+
| insufficient | 重要なパスが未トレース、または重要ノードが未調査 |
|
|
108
109
|
|
|
109
110
|
## 出力フォーマット
|
|
110
111
|
|
|
@@ -113,63 +114,87 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
|
|
|
113
114
|
```json
|
|
114
115
|
{
|
|
115
116
|
"investigationReview": {
|
|
116
|
-
"
|
|
117
|
-
"
|
|
118
|
-
"identifiedGaps": ["
|
|
117
|
+
"originalFailurePointCount": 3,
|
|
118
|
+
"pathMapCoverage": "パスカバレッジの完全性評価",
|
|
119
|
+
"identifiedGaps": ["未トレースパスや未チェックノード"]
|
|
119
120
|
},
|
|
120
121
|
"triangulationSupplements": [
|
|
121
122
|
{
|
|
122
123
|
"source": "追加で調査した情報源",
|
|
123
124
|
"findings": "発見した内容",
|
|
124
|
-
"
|
|
125
|
+
"impactOnFailurePoints": "既存の障害点への影響"
|
|
125
126
|
}
|
|
126
127
|
],
|
|
127
|
-
"scopeValidation": {
|
|
128
|
-
"verified": true,
|
|
129
|
-
"concerns": ["懸念事項"]
|
|
130
|
-
},
|
|
131
128
|
"externalResearch": [
|
|
132
129
|
{
|
|
133
130
|
"query": "検索したクエリ",
|
|
134
131
|
"source": "情報源",
|
|
135
132
|
"findings": "発見した関連情報",
|
|
136
|
-
"
|
|
137
|
-
}
|
|
138
|
-
],
|
|
139
|
-
"alternativeHypotheses": [
|
|
140
|
-
{
|
|
141
|
-
"id": "AH1",
|
|
142
|
-
"description": "代替仮説の記述",
|
|
143
|
-
"rationale": "なぜこの仮説を考えたか",
|
|
144
|
-
"evidence": {"supporting": [], "contradicting": []},
|
|
145
|
-
"plausibility": "high|medium|low"
|
|
133
|
+
"impactOnFailurePoints": "障害点への影響"
|
|
146
134
|
}
|
|
147
135
|
],
|
|
136
|
+
"coverageCheck": {
|
|
137
|
+
"missingPaths": ["investigatorがトレースしていないパス"],
|
|
138
|
+
"uncheckedNodes": ["トレース済みパス上の未チェックノード"],
|
|
139
|
+
"additionalFailurePoints": [
|
|
140
|
+
{
|
|
141
|
+
"id": "AFP1",
|
|
142
|
+
"nodeId": "ノード参照",
|
|
143
|
+
"symptomId": "症状参照",
|
|
144
|
+
"description": "新たに発見された障害",
|
|
145
|
+
"checkStatus": "supported|weakened|blocked|not_reached",
|
|
146
|
+
"evidence": [
|
|
147
|
+
{"type": "supporting", "detail": "証拠の詳細", "source": "file:line"}
|
|
148
|
+
]
|
|
149
|
+
}
|
|
150
|
+
]
|
|
151
|
+
},
|
|
148
152
|
"devilsAdvocateFindings": [
|
|
149
153
|
{
|
|
150
|
-
"
|
|
151
|
-
"alternativeExplanation": "
|
|
154
|
+
"targetFailurePoint": "FP1",
|
|
155
|
+
"alternativeExplanation": "正常な動作である可能性は?",
|
|
152
156
|
"hiddenAssumptions": ["暗黙の前提"],
|
|
153
157
|
"potentialCounterEvidence": ["見落とされている可能性のある反証"]
|
|
154
158
|
}
|
|
155
159
|
],
|
|
156
|
-
"
|
|
160
|
+
"failurePointEvaluation": [
|
|
157
161
|
{
|
|
158
|
-
"
|
|
159
|
-
"description": "
|
|
160
|
-
"
|
|
161
|
-
"
|
|
162
|
+
"failurePointId": "FP1またはAFP1",
|
|
163
|
+
"description": "障害点の記述",
|
|
164
|
+
"originalCheckStatus": "investigatorのcheckStatus(verifier発見のAFPはnull)",
|
|
165
|
+
"finalStatus": "supported|weakened|blocked|not_reached",
|
|
166
|
+
"statusChangeReason": "ステータスが変更された理由(変更があった場合)",
|
|
162
167
|
"remainingUncertainty": ["残る不確実性"]
|
|
163
168
|
}
|
|
164
169
|
],
|
|
165
170
|
"conclusion": {
|
|
166
|
-
"
|
|
167
|
-
{
|
|
171
|
+
"confirmedFailurePoints": [
|
|
172
|
+
{
|
|
173
|
+
"failurePointId": "FP1",
|
|
174
|
+
"description": "障害の内容",
|
|
175
|
+
"location": "file:line",
|
|
176
|
+
"symptomId": "S1",
|
|
177
|
+
"symptomExplained": "この障害が観察された症状にどうつながるか",
|
|
178
|
+
"causeCategory": "typo|logic_error|missing_constraint|design_gap|external_factor",
|
|
179
|
+
"finalStatus": "supported|weakened",
|
|
180
|
+
"causalChain": ["現象", "→ 直接原因", "→ 根本原因"],
|
|
181
|
+
"impactScope": ["影響を受けるファイルパス"],
|
|
182
|
+
"recurrenceRisk": "low|medium|high"
|
|
183
|
+
}
|
|
184
|
+
],
|
|
185
|
+
"refutedFailurePoints": [
|
|
186
|
+
{"failurePointId": "FP2", "reason": "反証された理由"}
|
|
187
|
+
],
|
|
188
|
+
"failurePointRelationships": [
|
|
189
|
+
{
|
|
190
|
+
"points": ["FP1", "FP3"],
|
|
191
|
+
"relationship": "independent|dependent|same_chain",
|
|
192
|
+
"detail": "障害点間の関係の説明"
|
|
193
|
+
}
|
|
168
194
|
],
|
|
169
|
-
"
|
|
170
|
-
"
|
|
171
|
-
"
|
|
172
|
-
"recommendedVerification": ["結論を確定するために必要な追加検証"]
|
|
195
|
+
"coverageAssessment": "sufficient|partial|insufficient",
|
|
196
|
+
"unresolvedSymptoms": ["確認された障害点で完全に説明できない症状"],
|
|
197
|
+
"recommendedVerification": ["追加で必要な検証"]
|
|
173
198
|
},
|
|
174
199
|
"verificationLimitations": ["この検証プロセスの限界"]
|
|
175
200
|
}
|
|
@@ -179,15 +204,16 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
|
|
|
179
204
|
|
|
180
205
|
- [ ] Triangulation補完を実施し、追加情報を収集した
|
|
181
206
|
- [ ] WebSearchで外部情報を収集した
|
|
182
|
-
- [ ]
|
|
183
|
-
- [ ]
|
|
184
|
-
- [ ]
|
|
207
|
+
- [ ] pathMapのカバレッジをチェックした(未トレースパス、未チェックノード)
|
|
208
|
+
- [ ] 各障害点についてDevil's Advocate評価を実施した
|
|
209
|
+
- [ ] 公式ドキュメントに基づく反証がある障害点のfinalStatusをweakenedに下げた
|
|
185
210
|
- [ ] ユーザー報告との整合性を検証した
|
|
186
|
-
- [ ]
|
|
187
|
-
- [ ]
|
|
211
|
+
- [ ] 各障害点を独立に評価した(単一の勝者を選んでいない)
|
|
212
|
+
- [ ] 全体のカバレッジを評価した(sufficient/partial/insufficient)
|
|
188
213
|
- [ ] 最終レスポンスがJSONであること
|
|
189
214
|
|
|
190
215
|
## 出力セルフチェック
|
|
191
216
|
|
|
192
|
-
- [ ]
|
|
193
|
-
- [ ]
|
|
217
|
+
- [ ] 公式ドキュメントを含む全ての発見証拠がfinalStatusに反映されている
|
|
218
|
+
- [ ] ユーザーの因果関係ヒントが評価に組み込まれている
|
|
219
|
+
- [ ] 証拠が支持する場合、複数の障害点が保持されている(単一原因への収束を強制していない)
|