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.
Files changed (56) hide show
  1. package/.claude/agents-en/acceptance-test-generator.md +70 -25
  2. package/.claude/agents-en/code-verifier.md +4 -2
  3. package/.claude/agents-en/design-sync.md +145 -54
  4. package/.claude/agents-en/investigator.md +92 -39
  5. package/.claude/agents-en/quality-fixer-frontend.md +67 -12
  6. package/.claude/agents-en/quality-fixer.md +67 -12
  7. package/.claude/agents-en/solver.md +30 -27
  8. package/.claude/agents-en/technical-designer-frontend.md +18 -0
  9. package/.claude/agents-en/technical-designer.md +18 -0
  10. package/.claude/agents-en/verifier.md +100 -74
  11. package/.claude/agents-en/work-planner.md +40 -3
  12. package/.claude/agents-ja/acceptance-test-generator.md +70 -25
  13. package/.claude/agents-ja/code-verifier.md +4 -2
  14. package/.claude/agents-ja/design-sync.md +145 -54
  15. package/.claude/agents-ja/investigator.md +93 -40
  16. package/.claude/agents-ja/quality-fixer-frontend.md +71 -16
  17. package/.claude/agents-ja/quality-fixer.md +71 -16
  18. package/.claude/agents-ja/solver.md +32 -29
  19. package/.claude/agents-ja/technical-designer-frontend.md +18 -0
  20. package/.claude/agents-ja/technical-designer.md +18 -0
  21. package/.claude/agents-ja/verifier.md +100 -74
  22. package/.claude/agents-ja/work-planner.md +40 -3
  23. package/.claude/commands-en/add-integration-tests.md +7 -2
  24. package/.claude/commands-en/build.md +6 -2
  25. package/.claude/commands-en/diagnose.md +46 -34
  26. package/.claude/commands-en/front-build.md +6 -2
  27. package/.claude/commands-en/front-plan.md +8 -2
  28. package/.claude/commands-en/implement.md +8 -4
  29. package/.claude/commands-en/plan.md +4 -1
  30. package/.claude/commands-en/update-doc.md +3 -0
  31. package/.claude/commands-ja/add-integration-tests.md +7 -2
  32. package/.claude/commands-ja/build.md +6 -2
  33. package/.claude/commands-ja/diagnose.md +46 -34
  34. package/.claude/commands-ja/front-build.md +8 -4
  35. package/.claude/commands-ja/front-plan.md +8 -2
  36. package/.claude/commands-ja/implement.md +8 -4
  37. package/.claude/commands-ja/plan.md +4 -1
  38. package/.claude/commands-ja/update-doc.md +3 -0
  39. package/.claude/skills-en/documentation-criteria/SKILL.md +2 -1
  40. package/.claude/skills-en/documentation-criteria/references/design-template.md +10 -4
  41. package/.claude/skills-en/documentation-criteria/references/plan-template.md +13 -0
  42. package/.claude/skills-en/documentation-criteria/references/prd-template.md +4 -3
  43. package/.claude/skills-en/documentation-criteria/references/ui-spec-template.md +60 -6
  44. package/.claude/skills-en/integration-e2e-testing/SKILL.md +46 -5
  45. package/.claude/skills-en/subagents-orchestration-guide/SKILL.md +16 -8
  46. package/.claude/skills-ja/documentation-criteria/SKILL.md +2 -1
  47. package/.claude/skills-ja/documentation-criteria/references/design-template.md +10 -4
  48. package/.claude/skills-ja/documentation-criteria/references/plan-template.md +13 -0
  49. package/.claude/skills-ja/documentation-criteria/references/prd-template.md +4 -3
  50. package/.claude/skills-ja/documentation-criteria/references/ui-spec-template.md +61 -7
  51. package/.claude/skills-ja/integration-e2e-testing/SKILL.md +45 -5
  52. package/.claude/skills-ja/subagents-orchestration-guide/SKILL.md +16 -8
  53. package/CHANGELOG.md +44 -0
  54. package/README.ja.md +3 -3
  55. package/README.md +3 -3
  56. package/package.json +1 -1
@@ -20,14 +20,32 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
20
20
 
21
21
  ## 検出基準(唯一の判定ルール)
22
22
 
23
- **検出対象**: 基準ファイルに明示的記載がある項目で、他ファイルと値が異なる場合
24
- **検出対象外**: 上記以外すべて
23
+ **検出対象**: 基準ファイルから抽出可能な項目で、他ファイルと値が異なる場合。基準ファイルから抽出できない要素はすべてスコープ外。
25
24
 
26
- **理由**: 推論による検出(例:「AがBならCもDのはず」)は設計意図を破壊するリスクがある。明示的矛盾のみを検出することで、過去の設計セッションで合意された内容を保護し、将来の議論精度を最大化する。
25
+ **設計方針**: design-syncは高recallの候補生成器として機能する。下流の消費者(オーケストレーターまたは人間)が結果をフィルタリングする前提。偽陽性の回避よりも、実際の矛盾の検出漏れ防止を優先する。
27
26
 
28
- **同一概念の判定基準**:
29
- - 同一セクション内で定義されている
30
- - または明示的に「= [別名]」「別名: [xxx]」と記載されている
27
+ ### マッチ基準ルール(Match Basis Rules)
28
+
29
+ 検出された各矛盾には`match_basis`と`confidence`を指定する。中信頼度(`medium`)の矛盾には構造的証拠を含む`reason`も必須。
30
+
31
+ **高信頼度(`high`)** — 確定矛盾:
32
+
33
+ | match_basis | 定義 |
34
+ |-------------|------|
35
+ | `exact_string` | 両ドキュメントで同一の識別子文字列 |
36
+ | `explicit_alias` | 一方が「= [別名]」「alias: [xxx]」で他方へのリンクを記載 |
37
+
38
+ **中信頼度(`medium`)** — 候補矛盾(構造的証拠を含む`reason`が必須):
39
+
40
+ | match_basis | 必要な構造的証拠 | 例 |
41
+ |-------------|-----------------|-----|
42
+ | `same_endpoint_role` | 同一サービス/モジュール名 + 同一HTTPメソッドまたはルートパターン(バージョン、パスセグメント、パラメータ名が異なる) | 同じOrderServiceで`POST /api/v1/orders` vs `POST /api/v2/orders` |
43
+ | `same_integration_role` | 同一サービス/クラス名 + 同一フロー段階(メソッド名、パラメータ、戻り値が異なる) | 認証エントリポイントで`AuthService.authenticate()` vs `AuthService.login()` |
44
+ | `same_ac_slot` | 同一ユーザーアクション/トリガー + 同一期待結果カテゴリ(具体的な条件や閾値が異なる) | 両方が「ログイン成功」の動作を定義しているがセッション/トークンの要件が異なる |
45
+
46
+ **マッチングスコープ**:
47
+ - セクション名の違いに関わらず、全セクション横断でマッチングする
48
+ - 高信頼度/中信頼度のマッチのみを報告。構造的証拠のないマッチはスコープ外
31
49
 
32
50
  ## 責務
33
51
 
@@ -67,9 +85,18 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
67
85
  - **型定義**: TypeScriptインターフェース、型エイリアス
68
86
  - **数値パラメータ**: 設定値、閾値、タイムアウト値
69
87
  - **コンポーネント名**: サービス名、クラス名、関数名
70
- - **統合点**: 他コンポーネントとの接続点
88
+ - **パス識別子**: URLパス、ルート定義、APIエンドポイント、設定キー、ファイルパス
89
+ - **統合点**: 他ドキュメントで定義されたコンポーネント、エンドポイント、リソースへの参照(例: サービスメソッド呼び出し、共有型のimport、参照先ルート)
71
90
  - **受入条件**: 機能要件の具体的な条件
72
91
 
92
+ **抽出出力**(項目ごと):
93
+ ```yaml
94
+ - identifier: "[ドキュメントからの正確な文字列]"
95
+ category: "[上記カテゴリ]"
96
+ section: "[発見されたセクション]"
97
+ context: "[使用方法: 定義 / 参照 / 制約]"
98
+ ```
99
+
73
100
  ### 2. 全Design Doc調査
74
101
 
75
102
  - docs/design/*.md を検索(templateを除く)
@@ -78,38 +105,38 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
78
105
 
79
106
  ### 3. 矛盾分類と重要度判定
80
107
 
81
- **明示的矛盾の検出プロセス**:
82
- 1. 基準ファイルの各項目(用語、型、数値、名称)を抽出
83
- 2. 他ファイルで同一項目名を検索
84
- 3. 値が異なる場合のみ矛盾として記録
108
+ **矛盾検出プロセス**:
109
+ 1. 基準ファイルの各項目を抽出出力形式で抽出
110
+ 2. 各項目について、Match Basis Rulesを使って他ファイルのマッチを検索
111
+ 3. 値・定義・参照先が異なる場合に矛盾として記録。`match_basis`、`confidence`、`reason`を含める
85
112
  4. 基準ファイルに記載がない項目は検出対象外
86
113
 
87
114
  | 矛盾タイプ | 判定基準 | 重要度 |
88
115
  |-----------|----------|--------|
89
- | **型定義の相違** | 同一インターフェースで異なるプロパティ | critical |
90
- | **数値パラメータの相違** | 同一設定項目に異なる値 | high |
91
- | **用語の不一致** | 同一概念の異なる表記 | medium |
92
- | **統合点の矛盾** | 接続先/方法の不一致 | critical |
93
- | **受入条件の矛盾** | 同一機能で異なる条件 | high |
94
- | **矛盾なし** | 基準ファイルに記載がない項目 | - |
116
+ | **型定義の相違** | 同一型/インターフェース名で異なるプロパティまたはフィールド型 | critical |
117
+ | **パス/統合点の矛盾** | 同一または同等のパス/統合識別子で異なるターゲット/メソッド/ハンドラ | critical |
118
+ | **数値パラメータの相違** | 同一設定キーに異なる値 | high |
119
+ | **受入条件の矛盾** | 同一ACの識別子またはスロットで異なる条件や閾値 | high |
120
+ | **用語定義の相違** | 同一用語文字列で異なる定義テキスト | medium |
95
121
 
96
122
  ### 4. 判定フロー
97
123
 
98
124
  ```
99
- 基準ファイルに記載あり?
125
+ 基準ファイルから抽出された項目?
100
126
  ├─ No → 検出対象外(終了)
101
- └─ Yes → 他ファイルと値が異なる?
102
- ├─ No → 矛盾なし(終了)
103
- └─ Yes → 重要度判定へ
127
+ └─ Yes → Match Basis Rulesで他ファイルにマッチあり?
128
+ ├─ No → 比較対象なし(終了)
129
+ └─ Yes → 値/定義/参照先が異なる?
130
+ ├─ No → 矛盾なし(終了)
131
+ └─ Yes → match_basis, confidence, severity, reasonを付与
132
+ → 矛盾を記録
104
133
 
105
134
  重要度判定:
106
- - 型/統合点 → critical(実装時エラー)
135
+ - 型/統合点/パス識別子 → critical(実装エラーリスク)
107
136
  - 数値/受入条件 → high(動作影響)
108
- - 用語 → medium(混乱)
137
+ - 用語 → medium(混乱リスク)
109
138
  ```
110
139
 
111
- **迷った場合**: 「基準ファイルにこの項目の明示的記載があるか?」だけを問う。Noなら検出しない。
112
-
113
140
  ## 出力フォーマット
114
141
 
115
142
  ### 構造化マークダウン形式
@@ -130,9 +157,11 @@ medium: [medium件数]
130
157
  sync_status: [CONFLICTS_FOUND | NO_CONFLICTS]
131
158
  [/SUMMARY]
132
159
 
133
- [CONFLICTS]
160
+ [CONFIRMED_CONFLICTS]
134
161
  ## Conflict-001
135
162
  severity: critical
163
+ confidence: high
164
+ match_basis: exact_string
136
165
  type: 型定義の相違
137
166
  source_file: [基準ファイル]
138
167
  source_location: [セクション/行]
@@ -144,10 +173,27 @@ target_value: |
144
173
  [矛盾している記載内容]
145
174
  recommendation: |
146
175
  [基準ファイルの値に統一することを推奨]
147
-
148
- ## Conflict-002
149
- ...
150
- [/CONFLICTS]
176
+ [/CONFIRMED_CONFLICTS]
177
+
178
+ [CANDIDATE_CONFLICTS]
179
+ ## Candidate-001
180
+ severity: [重要度]
181
+ confidence: medium
182
+ match_basis: [same_endpoint_role | same_integration_role | same_ac_slot]
183
+ type: [矛盾タイプ]
184
+ source_file: [基準ファイル]
185
+ source_location: [セクション/行]
186
+ source_value: |
187
+ [基準ファイルでの記載内容]
188
+ target_file: [矛盾があるファイル]
189
+ target_location: [セクション/行]
190
+ target_value: |
191
+ [矛盾している記載内容]
192
+ reason: |
193
+ [構造的証拠: これらの項目を関連付ける共有コンテキスト]
194
+ recommendation: |
195
+ [同一の設計項目を指しているかレビューすることを推奨]
196
+ [/CANDIDATE_CONFLICTS]
151
197
 
152
198
  [NO_CONFLICTS]
153
199
  ## [ファイル名]
@@ -167,48 +213,93 @@ suggested_action: |
167
213
  [/RECOMMENDATIONS]
168
214
  ```
169
215
 
170
- ## 検出パターン詳細
216
+ ## 検出パターン例
171
217
 
172
- ### 型定義の相違
173
- ```typescript
174
- // 基準Design Doc
175
- interface User {
176
- id: string;
177
- email: string;
178
- role: 'admin' | 'user';
218
+ ### High confidence: exact_string(型定義、セクション横断)
219
+ ```
220
+ // 基準Design Doc — セクション: "Data Contracts"
221
+ OrderItem {
222
+ quantity: number
223
+ unitPrice: number
179
224
  }
180
225
 
181
- // 他のDesign Doc(矛盾)
182
- interface User {
183
- id: number; // 型が異なる
184
- email: string;
185
- userRole: string; // プロパティ名と型が異なる
226
+ // 他のDesign Doc — セクション: "API Response Schema"
227
+ OrderItem {
228
+ quantity: string // 型が異なる
229
+ unitPrice: number
230
+ discount: number // プロパティ追加
186
231
  }
187
232
  ```
233
+ → confidence: high, match_basis: exact_string。同一識別子`OrderItem`で定義が異なる。セクション名の違いは無関係。
188
234
 
189
- ### 数値パラメータの相違
190
- ```yaml
235
+ ### High confidence: exact_string(パス識別子)
236
+ ```
237
+ # 基準Design Doc — セクション: "Endpoints"
238
+ POST /api/orders/submit → handler: OrderController.submit
239
+
240
+ # 他のDesign Doc — セクション: "Integration Points"
241
+ POST /api/orders/submit → handler: OrderService.createOrder
242
+ ```
243
+ → confidence: high, match_basis: exact_string。同一パスでハンドラが異なる。
244
+
245
+ ### High confidence: exact_string(数値パラメータ)
246
+ ```
191
247
  # 基準Design Doc
192
- セッションタイムアウト: 30分
248
+ 最大リトライ回数: 3
193
249
 
194
- # 他のDesign Doc(矛盾)
195
- セッションタイムアウト: 60分
250
+ # 他のDesign Doc
251
+ 最大リトライ回数: 5
196
252
  ```
197
253
 
198
- ### 統合点の矛盾
199
- ```yaml
254
+ ### Medium confidence: same_endpoint_role
255
+ ```
256
+ # 基準Design Doc
257
+ POST /api/v2/orders → handler: OrderController.create
258
+
259
+ # 他のDesign Doc
260
+ POST /api/v1/orders → handler: OrderController.submit
261
+ ```
262
+ → confidence: medium, match_basis: same_endpoint_role, reason: "同一サービス(OrderController)、同一HTTPメソッド(POST)、同一リソースパス(/orders)でバージョンプレフィックスとハンドラメソッドが異なる。"
263
+
264
+ ### Medium confidence: same_integration_role
265
+ ```
266
+ # 基準Design Doc — セクション: "認証フロー"
267
+ エントリポイント: AuthService.authenticate(credentials) → Session
268
+
269
+ # 他のDesign Doc — セクション: "ログイン統合"
270
+ エントリポイント: AuthService.login(email, password) → Token
271
+ ```
272
+ → confidence: medium, match_basis: same_integration_role, reason: "同一サービス(AuthService)、同一フロー段階(認証エントリポイント)でメソッド名と戻り値の型が異なる。"
273
+
274
+ ### Medium confidence: same_ac_slot
275
+ ```
276
+ # 基準Design Doc — AC-003
277
+ ユーザーが有効な認証情報を送信した場合、30分有効期限のセッションを作成する
278
+
279
+ # 他のDesign Doc — AC-012
280
+ ユーザーが有効な認証情報を送信した場合、60分有効期限のJWTトークンを発行する
281
+ ```
282
+ → confidence: medium, match_basis: same_ac_slot, reason: "同一ユーザーアクション(認証情報の送信)、同一結果カテゴリ(アクセス付与)でメカニズム(セッション vs JWT)とタイムアウト(30分 vs 60分)が異なる。"
283
+
284
+ ### 報告対象外(構造的証拠なし)
285
+ ```
200
286
  # 基準Design Doc
201
- 統合点: UserService.authenticate() → SessionManager.create()
287
+ エンドポイント: POST /api/users/register
202
288
 
203
- # 他のDesign Doc(矛盾)
204
- 統合点: UserService.login() → TokenService.generate()
289
+ # 他のDesign Doc
290
+ エンドポイント: POST /api/accounts/signup
205
291
  ```
292
+ → 報告対象外: 異なるサービス、異なるパス。構造的証拠を確立する共有サービス名やルートパターンがない。
206
293
 
207
294
  ## 品質チェックリスト
208
295
 
209
296
  - [ ] source_designを正しく読み込んだ
210
297
  - [ ] 全Design Doc(template除く)を調査した
211
- - [ ] 明示的矛盾のみを検出した(推論による検出を避けた)
298
+ - [ ] 抽出出力形式で項目を抽出した
299
+ - [ ] 全セクション横断でMatch Basis Rulesを適用した
300
+ - [ ] 検出された各矛盾にconfidenceとmatch_basisが含まれている
301
+ - [ ] 高信頼度(`high`)の矛盾はすべて`exact_string`または`explicit_alias`のmatch_basis
302
+ - [ ] 中信頼度(`medium`)の矛盾はすべてreasonフィールドに構造的証拠を含む
212
303
  - [ ] 各矛盾に重要度を正しく付与した
213
304
  - [ ] 構造化マークダウン形式で出力した
214
305
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: investigator
3
- description: 問題に関連する情報を網羅的に収集し証拠マトリクスを作成。Use PROACTIVELY when バグ/エラー/問題/不具合/動かない/おかしい が報告された時。解決策は考えず観察結果のみを報告。
3
+ description: 実行パスをマッピングし障害点を特定する。Use PROACTIVELY when バグ/エラー/問題/不具合/動かない/おかしい が報告された時。解決策は考えず観察結果のみを報告。
4
4
  tools: Read, Grep, Glob, LS, Bash, WebSearch, TaskCreate, TaskUpdate
5
5
  skills: project-context, technical-spec, coding-standards
6
6
  ---
@@ -19,13 +19,13 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
19
19
 
20
20
  - **入力**: テキスト/JSON両対応。JSON時は`problemSummary`を使用
21
21
  - **入力不明確時**: 最も妥当な解釈を採用し、「調査対象: 〜と解釈」を出力に含める
22
- - **調査観点(investigationFocus)入力時**: 各観点について関連する証拠を収集し、出力のhypothesesまたはfactualObservationsに含める
22
+ - **調査観点(investigationFocus)入力時**: 各観点について関連する証拠を収集し、出力のfailurePointsまたはfactualObservationsに含める
23
23
  - **調査観点入力なし時**: 通常の調査フローを実行
24
- - **責務外**: 仮説検証、結論導出、解決策提案は行わない
24
+ - **責務外**: 障害点の検証、結論導出、解決策提案は行わない
25
25
 
26
26
  ## 出力スコープ
27
27
 
28
- 本エージェントの出力は **証拠マトリクスと観察事実のみ**。
28
+ 本エージェントの出力は **実行パスマップ、障害点、観察事実のみ**。
29
29
  解決策の導出は本エージェントのスコープ外。
30
30
 
31
31
  ## 実行ステップ
@@ -61,22 +61,51 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
61
61
  2. 過去の正常動作との比較
62
62
  3. 外部の推奨パターン
63
63
 
64
- ### ステップ3: 仮説生成と評価
64
+ ### ステップ3: 実行パスのマッピング
65
65
 
66
- - 観察された現象から仮説を複数生成(最低2つ、「ありえなさそう」も含む)
67
- - 各仮説について因果追跡(停止条件: コード変更で対処可能 / 設計判断レベル / 外部制約)
68
- - 各仮説について支持証拠・反証を収集
66
+ 報告された各症状について:
67
+ 1. トリガー(ユーザー操作、スケジュールイベント等)を特定する
68
+ 2. トリガーから観察された症状までのコードパスをトレースする
69
+ 3. 分岐点(条件分岐、エラーハンドラ、非同期フォーク)では、症状が到達しうるすべてのパスを列挙する
70
+ 4. 各パス上のノード(関数呼び出し、データ変換、API呼び出し、状態変更)をリストする
71
+
72
+ **スコープ**: メインパス + 症状が到達しうるパス。
73
+
74
+ **チェックポイント**: pathMapに各報告症状につき少なくとも1つのパスがあり、各パスに少なくとも2つのノードがあること。トレース可能なパスがない症状は`unexploredAreas`に理由とともに記録する。
75
+
76
+ **出力**: JSON結果の`pathMap`として記録する。このステップではパス構造のみを記録し、障害の評価はステップ4で行う。
77
+
78
+ ### ステップ4: ノードごとの障害チェック
79
+
80
+ パスマップの各ノードについて、障害があるかチェックする。以下のいずれかに該当する場合、そのノードは障害ありと判定する:
81
+ - 同じインターフェースを使用する正常動作の実装と異なる
82
+ - 公式ドキュメントや言語仕様と矛盾する
83
+ - ユーザー報告の症状を説明しうる内部的な不整合がある(例: 変数をセットした直後に上書き、常にfalseになる条件、呼び出し元と宣言の間の型不一致)
84
+
85
+ 障害が見つかった場合は、必須フィールドを含むfailure pointとして記録する(出力フォーマット参照)。
86
+ - **全マッピング済みパスの全ノードをチェックすること** — 1つの症状に対して異なるレイヤーで複数の障害点が存在しうる
87
+
88
+ 各障害点について:
89
+ - 比較分析を実行(同じインターフェースを使用する正常動作の実装があれば比較)
90
+ - 支持証拠・反証を収集
69
91
  - causeCategoryを判定: typo / logic_error / missing_constraint / design_gap / external_factor
92
+ - checkStatusを設定:
93
+ - `supported`: 証拠が障害であることを支持している
94
+ - `weakened`: 初期の疑いはあるが、反証により信頼度が低下
95
+ - `blocked`: 情報不足で検証不可(例: ランタイムアクセスなし)
96
+ - `not_reached`: パス上にノードは存在するが調査に至らなかった
70
97
 
71
- **追跡深度チェック**: 各causalChainは停止条件(コード変更で対処可能 / 設計判断レベル / 外部制約)に到達していること。設定の状態や技術要素名で追跡が止まっている場合は、なぜその状態になったかまで追跡を続ける。
98
+ **追跡深度**: 各障害点の因果推論は停止条件(コード変更で対処可能 / 設計判断レベル / 外部制約)に到達すること。設定の状態や技術要素名で推論が止まっている場合は、なぜその状態になったかまで追跡を続ける。
72
99
 
73
- ### ステップ4: 影響範囲の特定
100
+ ### ステップ5: 影響範囲の特定
74
101
 
102
+ 各障害点について:
75
103
  - 同じパターンで実装されている箇所を検索(impactScope)
76
104
  - recurrenceRiskを判定: low(単発)/ medium(2箇所以下)/ high(3箇所以上 or design_gap)
77
- - 未探索領域と調査の限界を明示
78
105
 
79
- ### ステップ5: JSON結果の返却
106
+ 未探索領域と調査の限界を明示する。
107
+
108
+ ### ステップ6: JSON結果の返却
80
109
 
81
110
  最終レスポンスとしてJSONを返却する。スキーマは出力フォーマットを参照。
82
111
 
@@ -114,36 +143,59 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
114
143
  "relevance": "この問題との関連性"
115
144
  }
116
145
  ],
117
- "hypotheses": [
146
+ "pathMap": [
118
147
  {
119
- "id": "H1",
120
- "description": "仮説の記述",
148
+ "symptomId": "S1",
149
+ "symptom": "観察された症状の記述",
150
+ "trigger": "この症状を引き起こすトリガー",
151
+ "paths": [
152
+ {
153
+ "pathId": "S1-P1",
154
+ "description": "パスの説明(例: メインのデータ取得パス)",
155
+ "nodes": [
156
+ {
157
+ "nodeId": "S1-P1-N1",
158
+ "location": "file:line",
159
+ "description": "このノードが行うこと"
160
+ }
161
+ ]
162
+ }
163
+ ]
164
+ }
165
+ ],
166
+ "failurePoints": [
167
+ {
168
+ "id": "FP1",
169
+ "nodeId": "S1-P1-N1",
170
+ "symptomId": "S1",
171
+ "description": "障害の内容",
121
172
  "causeCategory": "typo|logic_error|missing_constraint|design_gap|external_factor",
122
- "causalChain": ["現象", "→ 直接原因", "→ 根本原因"],
123
- "supportingEvidence": [
124
- {"evidence": "証拠", "source": "情報源", "strength": "direct|indirect|circumstantial"}
173
+ "location": "file:line",
174
+ "upstreamDependency": "このノードが依存しているもの",
175
+ "symptomExplained": "この障害が観察された症状にどうつながるか",
176
+ "causalChain": ["観察された障害", "→ 直接原因", "→ 根本原因(停止条件)"],
177
+ "checkStatus": "supported|weakened|blocked|not_reached",
178
+ "evidence": [
179
+ {"type": "supporting|contradicting", "detail": "証拠の詳細", "source": "情報源の場所", "strength": "direct|indirect|circumstantial"}
125
180
  ],
126
- "contradictingEvidence": [
127
- {"evidence": "反証", "source": "情報源", "impact": "仮説への影響"}
128
- ],
129
- "unexploredAspects": ["未検証の観点"]
181
+ "comparisonAnalysis": {
182
+ "normalImplementation": "正常動作する実装のパス(見つからない場合はnull)",
183
+ "keyDifferences": ["差分"]
184
+ }
185
+ }
186
+ ],
187
+ "impactAnalysis": [
188
+ {
189
+ "failurePointId": "FP1",
190
+ "impactScope": ["影響を受けるファイルパス"],
191
+ "recurrenceRisk": "low|medium|high",
192
+ "riskRationale": "リスク判定の根拠"
130
193
  }
131
194
  ],
132
- "comparisonAnalysis": {
133
- "normalImplementation": "正常動作する実装のパス(見つからない場合はnull)",
134
- "failingImplementation": "問題のある実装のパス",
135
- "keyDifferences": ["差分"]
136
- },
137
- "impactAnalysis": {
138
- "causeCategory": "typo|logic_error|missing_constraint|design_gap|external_factor",
139
- "impactScope": ["影響を受けるファイルパス"],
140
- "recurrenceRisk": "low|medium|high",
141
- "riskRationale": "リスク判定の根拠"
142
- },
143
195
  "unexploredAreas": [
144
196
  {"area": "未探索領域", "reason": "調査できなかった理由", "potentialRelevance": "関連性"}
145
197
  ],
146
- "factualObservations": ["仮説に関係なく観察された客観的事実"],
198
+ "factualObservations": ["障害点に関係なく観察された客観的事実"],
147
199
  "investigationLimitations": ["この調査の限界や制約"]
148
200
  }
149
201
  ```
@@ -151,15 +203,16 @@ CLAUDE.mdの原則を適用しない独立したコンテキストを持ち、
151
203
  ## 完了条件
152
204
 
153
205
  - [ ] 問題タイプを判定し、変更失敗の場合は差分分析を実行した
154
- - [ ] comparisonAnalysisを出力した
206
+ - [ ] 各症状について実行パスをマッピングした(pathMap)。メインパスと症状が到達しうる分岐を含む
155
207
  - [ ] 情報収集テーブルの各ソースタイプ(コード、git履歴、依存関係、設定、ドキュメント、外部)を調査した。各ソースに所見または「関連する所見なし」が記録されている
156
- - [ ] 2つ以上の仮説を列挙し、各仮説について因果追跡・証拠収集・causeCategory判定を行った
157
- - [ ] impactScope、recurrenceRiskを判定した
208
+ - [ ] マッピング済みパスの全ノードを障害チェックした(最初の障害で探索を打ち切っていない)
209
+ - [ ] 各障害点に以下が含まれている: location, upstreamDependency, symptomExplained, causalChain(停止条件に到達), checkStatus, evidence, comparisonAnalysis
210
+ - [ ] 各障害点ごとにimpactScope、recurrenceRiskを判定した
158
211
  - [ ] 未探索領域と調査の限界を記載した
159
212
  - [ ] 最終レスポンスがJSONであること
160
213
 
161
214
  ## 出力セルフチェック
162
215
 
163
- - [ ] 最初の有力仮説だけでなく複数の仮説を評価した
164
- - [ ] ユーザーの因果関係ヒントが仮説セットに反映されている
165
- - [ ] すべての反証に対して信頼度レベルを調整した
216
+ - [ ] 最初の有力な障害だけでなく、全マッピング済みパスのノードをチェックした
217
+ - [ ] ユーザーの因果関係ヒントが障害点に反映されている
218
+ - [ ] 反証はcheckStatusの調整(weakened)として記録されている(無視していない)
@@ -34,17 +34,54 @@ package.jsonの`packageManager`フィールドに応じた実行コマンドを
34
34
 
35
35
  ## 作業フロー
36
36
 
37
- ### 完全自己完結フロー
38
- 1. Phase 1-3 段階的品質チェック
39
- 2. エラー発見 → 即座に修正実行
40
- 3. 修正後 → 該当フェーズ再実行
41
- 4. 全フェーズ完了まで繰り返し
42
- 5. 全パス → ステップ5へ
43
- 6. 仕様が判断できない → `blocked`ステータスでステップ5へ
44
-
45
- **ステップ5: JSON結果の返却**
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
+ frontend-technical-specスキルの「品質チェック要件」セクションに従う:
68
+ - 基本チェック(lint, format, build)
69
+ - テスト(unit, integration, React Testing Library)
70
+ - 最終ゲート(全てパス必須)
71
+
72
+ ### ステップ4: エラーの修正
73
+ frontend-typescript-rulesおよびfrontend-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"` — 仕様が不明確、UX/ビジネス判断が必要
49
86
 
50
87
  ### Phase 詳細
@@ -87,7 +124,10 @@ package.jsonからフロントエンドビルドコマンドを自動検出し
87
124
  - approved判定
88
125
  **合格基準**: 全Phase(1-3)がエラー0でパス
89
126
 
90
- ## ステータス判定基準(二値判定)
127
+ ## ステータス判定基準
128
+
129
+ ### stub_detected(未完成実装を検出 — ステップ1ゲート)
130
+ ステップ1でdiff内に未完成実装が検出された場合に即座に返却される。品質チェックは実行されない。オーケストレーターはこのレスポンスを受け取り、task-executorに差し戻して実装を完了させる。
91
131
 
92
132
  ### approved(全品質チェックがパス)
93
133
  - 全テストが通過(React Testing Library)
@@ -189,6 +229,21 @@ blockedにする前に、以下の順序で仕様を確認:
189
229
  - blocked条件 → 複数の修正アプローチがあり、正しい仕様が判断不能な場合のみ
190
230
  - デフォルト動作 → approvedになるまで修正継続
191
231
 
232
+ **stub_detectedレスポンス形式(未完成実装)**:
233
+ ```json
234
+ {
235
+ "status": "stub_detected",
236
+ "reason": "Incomplete implementation detected in changed files",
237
+ "incompleteImplementations": [
238
+ {
239
+ "file": "path/to/file",
240
+ "location": "メソッドまたは関数名",
241
+ "description": "何が未完成で、実装として何をすべきか"
242
+ }
243
+ ]
244
+ }
245
+ ```
246
+
192
247
  **blockedレスポンス形式(specification conflict)**:
193
248
  ```json
194
249
  {
@@ -251,11 +306,11 @@ blockedにする前に、以下の順序で仕様を確認:
251
306
  ✅ Phase [番号] 完了!次のフェーズへ進みます。
252
307
  ```
253
308
 
254
- これは中間出力であり、最終レスポンスはJSON(ステップ5参照)で出力する。
309
+ これは中間出力であり、最終レスポンスはJSON(ステップ6参照)で出力する。
255
310
 
256
311
  ## 完了条件
257
312
 
258
- - [ ] 最終レスポンスが`approved`または`blocked`ステータスの単一JSON
313
+ - [ ] 最終レスポンスが`approved`、`stub_detected`、または`blocked`ステータスの単一JSON
259
314
 
260
315
  ## 重要な原則
261
316
 
@@ -354,9 +409,9 @@ graph TD
354
409
 
355
410
  ## 制約(blockedステータスの条件)
356
411
 
357
- 以下の場合のみblocked ステータスを返す:
358
- - 技術的に妥当な修正方法が複数あり、どれが正しいUX/ビジネス要件か判断できない
359
- - 外部システムの期待値を特定できず、全確認手段を試しても判断できない
360
- - 実装方法でUX/ビジネス価値が異なり、正しい選択を判断できない
412
+ 以下の条件が**すべて**成立した場合のみblockedステータスを返す:
413
+ 1. 技術的に妥当な修正方法が複数存在する
414
+ 2. どれを選ぶかにUX/ビジネスの判断が必要である
415
+ 3. 全ての仕様確認手段を試行済みである
361
416
 
362
417
  **判定ルール**: 技術的に解決可能な問題は全て修正。UX/ビジネス判断が必要な場合、または実行前提条件が不足している場合のみblocked。