create-ai-project 1.23.4 → 1.23.5

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 (59) hide show
  1. package/.claude/agents-en/acceptance-test-generator.md +6 -30
  2. package/.claude/agents-en/code-reviewer.md +15 -24
  3. package/.claude/agents-en/code-verifier.md +3 -32
  4. package/.claude/agents-en/codebase-analyzer.md +10 -78
  5. package/.claude/agents-en/document-reviewer.md +10 -57
  6. package/.claude/agents-en/integration-test-reviewer.md +6 -37
  7. package/.claude/agents-en/investigator.md +6 -59
  8. package/.claude/agents-en/quality-fixer-frontend.md +1 -5
  9. package/.claude/agents-en/quality-fixer.md +1 -5
  10. package/.claude/agents-en/requirement-analyzer.md +3 -14
  11. package/.claude/agents-en/rule-advisor.md +3 -16
  12. package/.claude/agents-en/scope-discoverer.md +5 -29
  13. package/.claude/agents-en/security-reviewer.md +2 -13
  14. package/.claude/agents-en/skill-creator.md +3 -6
  15. package/.claude/agents-en/skill-reviewer.md +7 -43
  16. package/.claude/agents-en/solver.md +9 -24
  17. package/.claude/agents-en/task-decomposer.md +17 -0
  18. package/.claude/agents-en/task-executor-frontend.md +14 -19
  19. package/.claude/agents-en/task-executor.md +14 -19
  20. package/.claude/agents-en/ui-analyzer.md +16 -115
  21. package/.claude/agents-en/verifier.md +9 -53
  22. package/.claude/agents-ja/acceptance-test-generator.md +6 -30
  23. package/.claude/agents-ja/code-reviewer.md +15 -24
  24. package/.claude/agents-ja/code-verifier.md +3 -32
  25. package/.claude/agents-ja/codebase-analyzer.md +10 -78
  26. package/.claude/agents-ja/document-reviewer.md +10 -57
  27. package/.claude/agents-ja/integration-test-reviewer.md +6 -37
  28. package/.claude/agents-ja/investigator.md +6 -59
  29. package/.claude/agents-ja/quality-fixer-frontend.md +1 -5
  30. package/.claude/agents-ja/quality-fixer.md +1 -5
  31. package/.claude/agents-ja/requirement-analyzer.md +3 -14
  32. package/.claude/agents-ja/rule-advisor.md +3 -16
  33. package/.claude/agents-ja/scope-discoverer.md +5 -29
  34. package/.claude/agents-ja/security-reviewer.md +2 -13
  35. package/.claude/agents-ja/skill-creator.md +3 -6
  36. package/.claude/agents-ja/skill-reviewer.md +7 -43
  37. package/.claude/agents-ja/solver.md +9 -24
  38. package/.claude/agents-ja/task-decomposer.md +17 -0
  39. package/.claude/agents-ja/task-executor-frontend.md +14 -19
  40. package/.claude/agents-ja/task-executor.md +14 -19
  41. package/.claude/agents-ja/ui-analyzer.md +16 -115
  42. package/.claude/agents-ja/verifier.md +9 -53
  43. package/.claude/skills-en/documentation-criteria/references/plan-template.md +1 -1
  44. package/.claude/skills-en/documentation-criteria/references/task-template.md +8 -0
  45. package/.claude/skills-en/frontend-technical-spec/SKILL.md +4 -8
  46. package/.claude/skills-en/frontend-typescript-rules/SKILL.md +4 -2
  47. package/.claude/skills-en/frontend-typescript-testing/SKILL.md +5 -11
  48. package/.claude/skills-en/technical-spec/SKILL.md +4 -3
  49. package/.claude/skills-en/typescript-testing/SKILL.md +4 -4
  50. package/.claude/skills-ja/documentation-criteria/references/plan-template.md +1 -1
  51. package/.claude/skills-ja/documentation-criteria/references/task-template.md +8 -0
  52. package/.claude/skills-ja/frontend-technical-spec/SKILL.md +4 -8
  53. package/.claude/skills-ja/frontend-typescript-rules/SKILL.md +4 -2
  54. package/.claude/skills-ja/frontend-typescript-testing/SKILL.md +5 -11
  55. package/.claude/skills-ja/task-analyzer/references/skills-index.yaml +3 -3
  56. package/.claude/skills-ja/technical-spec/SKILL.md +4 -3
  57. package/.claude/skills-ja/typescript-testing/SKILL.md +4 -4
  58. package/CHANGELOG.md +8 -0
  59. package/package.json +1 -1
@@ -61,7 +61,8 @@ Check the input `pathMap` for completeness:
61
61
 
62
62
  1. **Missing paths**: Are there code paths the symptom could traverse that the investigation did not trace? (e.g., error handling branches, async forks, fallback paths)
63
63
  2. **Unchecked nodes**: Are there nodes on traced paths that were not checked for faults?
64
- 3. **Additional failure points**: If missing paths or unchecked nodes reveal new faults, record them
64
+ 3. **Adjacent cases**: When the investigation concerns a `bug-fix`, `regression`, `state-change`, or `boundary-change` (the debugging flow carries no Change Category field, so judge these from the investigation itself), are there cases sharing the same path, contract, persisted state, or external boundary that could carry the same fault? Trace all plausible adjacent cases, or explicitly justify any left untraced
65
+ 4. **Additional failure points**: If missing paths, unchecked nodes, or adjacent cases reveal new faults, record them
65
66
 
66
67
  The goal is to verify that the investigation's path coverage is sufficient.
67
68
 
@@ -115,78 +116,33 @@ Final message: exactly one JSON object matching the schema below (begins with `{
115
116
  "identifiedGaps": ["Missing paths or unchecked nodes"]
116
117
  },
117
118
  "triangulationSupplements": [
118
- {
119
- "source": "Additional information source investigated",
120
- "findings": "Content discovered",
121
- "impactOnFailurePoints": "Impact on existing failure points"
122
- }
119
+ {"source": "Additional information source investigated", "findings": "Content discovered", "impactOnFailurePoints": "Impact on existing failure points"}
123
120
  ],
124
121
  "externalResearch": [
125
- {
126
- "query": "Search query used",
127
- "source": "Information source",
128
- "findings": "Related information discovered",
129
- "impactOnFailurePoints": "Impact on failure points"
130
- }
122
+ {"query": "Search query used", "source": "Information source", "findings": "Related information discovered", "impactOnFailurePoints": "Impact on failure points"}
131
123
  ],
132
124
  "coverageCheck": {
133
125
  "missingPaths": ["Paths not traced in the investigation input"],
134
126
  "uncheckedNodes": ["Nodes on traced paths that were not checked"],
135
127
  "additionalFailurePoints": [
136
- {
137
- "id": "AFP1",
138
- "nodeId": "Node reference",
139
- "symptomId": "Symptom reference",
140
- "description": "Newly discovered fault",
141
- "checkStatus": "supported|weakened|blocked|not_reached",
142
- "evidence": [
143
- {"type": "supporting", "detail": "Evidence detail", "source": "file:line"}
144
- ]
145
- }
128
+ {"id": "AFP1", "nodeId": "Node reference", "symptomId": "Symptom reference", "description": "Newly discovered fault", "checkStatus": "supported|weakened|blocked|not_reached", "evidence": [{"type": "supporting", "detail": "Evidence detail", "source": "file:line"}]}
146
129
  ]
147
130
  },
148
131
  "devilsAdvocateFindings": [
149
- {
150
- "targetFailurePoint": "FP1",
151
- "alternativeExplanation": "Could this be correct behavior?",
152
- "hiddenAssumptions": ["Implicit assumptions"],
153
- "potentialCounterEvidence": ["Potentially overlooked counter-evidence"]
154
- }
132
+ {"targetFailurePoint": "FP1", "alternativeExplanation": "Could this be correct behavior?", "hiddenAssumptions": ["Implicit assumptions"], "potentialCounterEvidence": ["Potentially overlooked counter-evidence"]}
155
133
  ],
156
134
  "failurePointEvaluation": [
157
- {
158
- "failurePointId": "FP1 or AFP1",
159
- "description": "Failure point description",
160
- "originalCheckStatus": "checkStatus from the investigation input (null when the AFP is discovered during verification)",
161
- "finalStatus": "supported|weakened|blocked|not_reached",
162
- "statusChangeReason": "Why status changed (if changed)",
163
- "remainingUncertainty": ["Remaining uncertainty"]
164
- }
135
+ {"failurePointId": "FP1 or AFP1", "description": "Failure point description", "originalCheckStatus": "checkStatus from the investigation input (null when the AFP is discovered during verification)", "finalStatus": "supported|weakened|blocked|not_reached", "statusChangeReason": "Why status changed (if changed)", "remainingUncertainty": ["Remaining uncertainty"]}
165
136
  ],
166
137
  "conclusion": {
167
138
  "confirmedFailurePoints": [
168
- {
169
- "failurePointId": "FP1",
170
- "description": "What the fault is",
171
- "location": "file:line",
172
- "symptomId": "S1",
173
- "symptomExplained": "How this fault leads to the observed symptom",
174
- "causeCategory": "typo|logic_error|missing_constraint|design_gap|external_factor",
175
- "finalStatus": "supported|weakened",
176
- "causalChain": ["Phenomenon", "→ Direct cause", "→ Root cause"],
177
- "impactScope": ["Affected file paths"],
178
- "recurrenceRisk": "low|medium|high"
179
- }
139
+ {"failurePointId": "FP1", "description": "What the fault is", "location": "file:line", "symptomId": "S1", "symptomExplained": "How this fault leads to the observed symptom", "causeCategory": "typo|logic_error|missing_constraint|design_gap|external_factor", "finalStatus": "supported|weakened", "causalChain": ["Phenomenon", "→ Direct cause", "→ Root cause"], "impactScope": ["Affected file paths"], "recurrenceRisk": "low|medium|high"}
180
140
  ],
181
141
  "refutedFailurePoints": [
182
142
  {"failurePointId": "FP2", "reason": "Reason for refutation"}
183
143
  ],
184
144
  "failurePointRelationships": [
185
- {
186
- "points": ["FP1", "FP3"],
187
- "relationship": "independent|dependent|same_chain",
188
- "detail": "Description of how the failure points relate"
189
- }
145
+ {"points": ["FP1", "FP3"], "relationship": "independent|dependent|same_chain", "detail": "Description of how the failure points relate"}
190
146
  ],
191
147
  "coverageAssessment": "sufficient|partial|insufficient",
192
148
  "unresolvedSymptoms": ["Symptoms not fully explained by confirmed failure points"],
@@ -269,16 +269,8 @@ it.todo('[AC番号]-property: [不変条件を自然言語で記述]')
269
269
  {
270
270
  "status": "completed",
271
271
  "feature": "payment",
272
- "generatedFiles": {
273
- "integration": "tests/payment.int.test.[ext]",
274
- "fixtureE2e": "tests/payment.fixture-e2e.test.[ext]",
275
- "serviceE2e": "tests/payment.service-e2e.test.[ext]"
276
- },
277
- "budgetUsage": {
278
- "integration": "2/3",
279
- "fixtureE2e": "1/3",
280
- "serviceE2e": "1/2"
281
- },
272
+ "generatedFiles": {"integration": "tests/payment.int.test.[ext]", "fixtureE2e": "tests/payment.fixture-e2e.test.[ext]", "serviceE2e": "tests/payment.service-e2e.test.[ext]"},
273
+ "budgetUsage": {"integration": "2/3", "fixtureE2e": "1/3", "serviceE2e": "1/2"},
282
274
  "e2eAbsenceReason": { "fixtureE2e": null, "serviceE2e": null }
283
275
  }
284
276
  ```
@@ -288,16 +280,8 @@ it.todo('[AC番号]-property: [不変条件を自然言語で記述]')
288
280
  {
289
281
  "status": "completed",
290
282
  "feature": "checkout-ui",
291
- "generatedFiles": {
292
- "integration": "tests/checkout.int.test.[ext]",
293
- "fixtureE2e": "tests/checkout.fixture-e2e.test.[ext]",
294
- "serviceE2e": null
295
- },
296
- "budgetUsage": {
297
- "integration": "1/3",
298
- "fixtureE2e": "1/3",
299
- "serviceE2e": "0/2"
300
- },
283
+ "generatedFiles": {"integration": "tests/checkout.int.test.[ext]", "fixtureE2e": "tests/checkout.fixture-e2e.test.[ext]", "serviceE2e": null},
284
+ "budgetUsage": {"integration": "1/3", "fixtureE2e": "1/3", "serviceE2e": "0/2"},
301
285
  "e2eAbsenceReason": { "fixtureE2e": null, "serviceE2e": "no_real_service_dependency" }
302
286
  }
303
287
  ```
@@ -307,16 +291,8 @@ it.todo('[AC番号]-property: [不変条件を自然言語で記述]')
307
291
  {
308
292
  "status": "completed",
309
293
  "feature": "config-update",
310
- "generatedFiles": {
311
- "integration": "tests/config.int.test.[ext]",
312
- "fixtureE2e": null,
313
- "serviceE2e": null
314
- },
315
- "budgetUsage": {
316
- "integration": "1/3",
317
- "fixtureE2e": "0/3",
318
- "serviceE2e": "0/2"
319
- },
294
+ "generatedFiles": {"integration": "tests/config.int.test.[ext]", "fixtureE2e": null, "serviceE2e": null},
295
+ "budgetUsage": {"integration": "1/3", "fixtureE2e": "0/3", "serviceE2e": "0/2"},
320
296
  "e2eAbsenceReason": { "fixtureE2e": "no_multi_step_journey", "serviceE2e": "no_multi_step_journey" }
321
297
  }
322
298
  ```
@@ -39,6 +39,7 @@ skills: coding-standards, typescript-rules, typescript-testing, project-context,
39
39
  - **designDoc**: Design Docのパス(フルスタック機能の場合は複数パス)
40
40
  - **implementationFiles**: レビュー対象ファイルリスト(またはgit diff範囲)
41
41
  - **reviewMode**: `full`(デフォルト)| `acceptance` | `architecture`
42
+ - **taskFiles**(任意): 実装の元となったタスクファイルのパス(`docs/plans/tasks/…`)。各タスクの `Change Category` と `Investigation Notes` の取得元。省略された場合は後述の「基準の読み込み」のフォールバックを行う。
42
43
 
43
44
  ## 検証プロセス
44
45
 
@@ -53,6 +54,11 @@ Design Docを**全文**読み込み、以下を抽出:
53
54
  - 非機能要件
54
55
  - **Fact Disposition Tableの行**(該当セクションがある場合): 各行を `{fact_id, disposition, rationale, evidence, relatedFiles}` として記録する。Related Files列は設計者が検証すべきパスを保持しており、ステップ4-1で各パスのファイルを読む。これらの行はステップ2〜4の検証対象となる。
55
56
 
57
+ 続いて、隣接ケースのレビュー(ステップ2-1)を駆動するタスクコンテキストを読み込む:
58
+
59
+ - `taskFiles` が与えられた場合、各ファイルを読み、その `Change Category` 値(変更の種別: `bug-fix` / `regression` / `state-change` / `boundary-change`)と、executor が `Investigation Notes` に記録したスコープ外の隣接残余を抽出する。両者をステップ2-1に持ち込む。記録された各残余は、実装に対して確認すべき `adjacent_residual` 検出事項の候補となる。
60
+ - `taskFiles` がない、または `Change Category` を持たない場合はフォールバックする: レビュー対象の変更を diff と Design Doc から自分で分類し(観測された振る舞いを修正するか、壊れた振る舞いを復元するか、永続状態を変更するか、公開/利用される契約を変更するか)、その分類をステップ2-1の隣接ケースチェックのトリガーとして扱う。
61
+
56
62
  ### 2. 実装とDesign Docのマッピング
57
63
 
58
64
  #### 2-1. 受入条件の検証
@@ -65,6 +71,7 @@ Step 1で抽出した各受入条件について:
65
71
  - 振る舞いを変えるACでは、エビデンスがメインパスだけでなく境界パスもカバーしていることを確認する。別個の分岐・状態・入力クラス・ライフサイクルステップ・フォールバックが振る舞いを左右する箇所では、それが実際に通過されていることを検証する。参照元(source)/参照先の振る舞いと実装された振る舞いを同一粒度で比較し、境界次元における根拠のない変更は `dd_violation` とする
66
72
  - 実装が AC・Design Doc・参照資料が明示的に要求する中核メカニズムを保持していることを確認し、出所となる文言を引用する。テストは通るが要求された中核メカニズムを落とす単純な代替は `dd_violation` とする
67
73
  - 永続化・共有・外部から観測可能な状態への変更では、公開境界(新しい状態が別プロセス・コンポーネント・ユーザー・後続ステップから観測可能になる箇所)を特定する。部分的・未初期化・stale・ロールバックのみでありながら完了として観測可能な状態は `reliability` の検出事項とする。下流の利用者が不完全な状態を完了とみなして失敗しうるためである
74
+ - レビュー対象の変更が `bug-fix` / `regression` / `state-change` / `boundary-change` に分類される場合(タスクの `Change Category`、またはタスクコンテキストが与えられなかったときは「基準の読み込み」のフォールバック分類による)、その経路・契約・永続状態・外部境界を共有するケースを確認する。まずタスクの `Investigation Notes` に記録されたスコープ外の各残余を確認し、次に executor が記録しなかった兄弟ケースを走査する。変更が対処したのと同一クラスの欠陥を依然として抱える兄弟ケースは `adjacent_residual` の検出事項とする
68
75
 
69
76
  #### 2-2. 識別子の検証
70
77
 
@@ -125,6 +132,7 @@ Step 1で抽出した各識別子仕様(リソース名、エンドポイン
125
132
  | **maintainability** | コード構造が将来の変更や理解を妨げる | 長い関数、深いネスト、複数の責務、不明瞭な命名 |
126
133
  | **reliability** | 実行時障害を引き起こし得る安全策の欠如 | 未処理のエラーパス、境界での検証漏れ、黙殺されるエラー |
127
134
  | **coverage_gap** | 受入条件に対応するテスト検証が存在しない | コードでは充足されているがテストで検証されていないAC |
135
+ | **adjacent_residual** | 変更の経路・契約・永続状態・外部境界を共有するケースが、変更が対処した欠陥と同一クラスの欠陥を依然として抱えている | フォールバックパスが未修正、兄弟の状態遷移が依然 stale、変更された契約の別の利用者が未更新 |
128
136
 
129
137
  各検出事項に`rationale`フィールドを含めること:
130
138
 
@@ -134,6 +142,7 @@ Step 1で抽出した各識別子仕様(リソース名、エンドポイン
134
142
  | **maintainability** | どのような保守・理解上のリスクが生じるか |
135
143
  | **reliability** | どのような障害シナリオが保護されておらず、どの条件で発生し得るか |
136
144
  | **coverage_gap** | どのACがテストされておらず、なぜこのケースでテストカバレッジが重要か |
145
+ | **adjacent_residual** | どの隣接ケースが経路/契約/状態/境界を共有し、どのように欠陥クラスを依然として示しているか |
137
146
 
138
147
  ### 4. アーキテクチャ準拠の確認
139
148
 
@@ -194,7 +203,7 @@ identifierVerification[].codeValue: string (見つからない場合は "not
194
203
  identifierVerification[].location: string (file:line; 見つからない場合は null)
195
204
  identifierVerification[].match: boolean
196
205
 
197
- qualityFindings[].category: string ("dd_violation" | "maintainability" | "reliability" | "coverage_gap")
206
+ qualityFindings[].category: string ("dd_violation" | "maintainability" | "reliability" | "coverage_gap" | "adjacent_residual")
198
207
  qualityFindings[].location: string (file:line または file:function)
199
208
  qualityFindings[].description: string
200
209
  qualityFindings[].rationale: string (カテゴリ固有)
@@ -212,6 +221,7 @@ summary.findingsByCategory.dd_violation: number (整数 >= 0)
212
221
  summary.findingsByCategory.maintainability: number (整数 >= 0)
213
222
  summary.findingsByCategory.reliability: number (整数 >= 0)
214
223
  summary.findingsByCategory.coverage_gap: number (整数 >= 0)
224
+ summary.findingsByCategory.adjacent_residual: number (整数 >= 0)
215
225
  ```
216
226
 
217
227
  ### 最小形状の例
@@ -222,33 +232,14 @@ summary.findingsByCategory.coverage_gap: number (整数 >= 0)
222
232
  "identifierMatchRate": 95,
223
233
  "verdict": "needs-improvement",
224
234
  "acceptanceCriteria": [
225
- {
226
- "item": "User can log in with valid credentials",
227
- "status": "fulfilled",
228
- "confidence": "high",
229
- "location": "src/auth/login.ts:42",
230
- "evidence": ["impl: src/auth/login.ts:42", "test: src/auth/login.test.ts:18"],
231
- "evidence_source": "Grep found handler at src/auth/login.ts:42; Read confirmed flow",
232
- "gap": null,
233
- "suggestion": null
234
- }
235
+ {"item": "User can log in with valid credentials", "status": "fulfilled", "confidence": "high", "location": "src/auth/login.ts:42", "evidence": ["impl: src/auth/login.ts:42", "test: src/auth/login.test.ts:18"], "evidence_source": "Grep found handler at src/auth/login.ts:42; Read confirmed flow", "gap": null, "suggestion": null}
235
236
  ],
236
237
  "identifierVerification": [{"identifier": "AUTH_TOKEN_TTL", "designDocValue": "3600", "codeValue": "1800", "location": "src/auth/config.ts:8", "match": false}],
237
238
  "qualityFindings": [{"category": "reliability", "location": "src/auth/login.ts:55", "description": "Error from token signer is swallowed silently", "rationale": "When jwt.sign throws, the catch block returns null without logging; downstream sees auth failure indistinguishable from invalid credentials", "evidence_source": "Read confirmed empty catch at src/auth/login.ts:55-58", "suggestion": "Re-throw with context or log error then propagate to caller"}],
238
239
  "summary": {
239
- "acsTotal": 12,
240
- "acsFulfilled": 10,
241
- "acsPartial": 1,
242
- "acsUnfulfilled": 1,
243
- "identifiersTotal": 20,
244
- "identifiersMatched": 19,
245
- "lowConfidenceItems": 2,
246
- "findingsByCategory": {
247
- "dd_violation": 1,
248
- "maintainability": 0,
249
- "reliability": 1,
250
- "coverage_gap": 0
251
- }
240
+ "acsTotal": 12, "acsFulfilled": 10, "acsPartial": 1, "acsUnfulfilled": 1,
241
+ "identifiersTotal": 20, "identifiersMatched": 19, "lowConfidenceItems": 2,
242
+ "findingsByCategory": {"dd_violation": 1, "maintainability": 0, "reliability": 1, "coverage_gap": 0, "adjacent_residual": 0}
252
243
  }
253
244
  }
254
245
  ```
@@ -188,41 +188,12 @@ limitations: string[] (検証できなかった内容とその理由)
188
188
 
189
189
  ```json
190
190
  {
191
- "summary": {
192
- "docType": "design-doc",
193
- "documentPath": "docs/design/auth-design.md",
194
- "verifiableClaimCount": 28,
195
- "matchCount": 22,
196
- "consistencyScore": 78,
197
- "status": "mostly_consistent"
198
- },
191
+ "summary": {"docType": "design-doc", "documentPath": "docs/design/auth-design.md", "verifiableClaimCount": 28, "matchCount": 22, "consistencyScore": 78, "status": "mostly_consistent"},
199
192
  "claimCoverage": { "sectionsAnalyzed": 9, "sectionsWithClaims": 8, "sectionsWithZeroClaims": ["Future Work"] },
200
193
  "discrepancies": [
201
- {
202
- "id": "D001",
203
- "status": "drift",
204
- "severity": "major",
205
- "claim": "Login endpoint accepts POST /api/auth/login",
206
- "documentLocation": "auth-design.md:45",
207
- "codeLocation": "src/auth/router.ts:120",
208
- "evidence": "Grep found POST /api/v2/auth/login in src/auth/router.ts:120",
209
- "classification": "Path version mismatch"
210
- }
194
+ {"id": "D001", "status": "drift", "severity": "major", "claim": "Login endpoint accepts POST /api/auth/login", "documentLocation": "auth-design.md:45", "codeLocation": "src/auth/router.ts:120", "evidence": "Grep found POST /api/v2/auth/login in src/auth/router.ts:120", "classification": "Path version mismatch"}
211
195
  ],
212
- "reverseCoverage": {
213
- "routesInCode": 12,
214
- "routesDocumented": 10,
215
- "undocumentedRoutes": ["DELETE /api/auth/sessions (src/auth/router.ts:88)"],
216
- "testFilesFound": 6,
217
- "testFilesDocumented": 5,
218
- "exportsInCode": 18,
219
- "exportsDocumented": 15,
220
- "undocumentedExports": ["AuthSession (src/auth/types.ts:12)"],
221
- "dataOperationsInCode": 9,
222
- "dataOperationsDocumented": 7,
223
- "undocumentedDataOperations": ["sessions table SELECT (src/auth/repo.ts:42)"],
224
- "testBoundariesSectionPresent": true
225
- },
196
+ "reverseCoverage": {"routesInCode": 12, "routesDocumented": 10, "undocumentedRoutes": ["DELETE /api/auth/sessions (src/auth/router.ts:88)"], "testFilesFound": 6, "testFilesDocumented": 5, "exportsInCode": 18, "exportsDocumented": 15, "undocumentedExports": ["AuthSession (src/auth/types.ts:12)"], "dataOperationsInCode": 9, "dataOperationsDocumented": 7, "undocumentedDataOperations": ["sessions table SELECT (src/auth/repo.ts:42)"], "testBoundariesSectionPresent": true},
226
197
  "coverage": { "documented": ["login flow", "token refresh"], "undocumented": ["session deletion endpoint"], "unimplemented": ["MFA challenge response"] },
227
198
  "limitations": ["Could not verify token refresh against running redis instance"]
228
199
  }
@@ -109,106 +109,38 @@ skills: coding-standards, project-context, technical-spec
109
109
 
110
110
  ```json
111
111
  {
112
- "analysisScope": {
113
- "filesAnalyzed": ["path/to/file1"],
114
- "tracedDependencies": ["path/to/dep1"],
115
- "categoriesDetected": ["data_layer", "external_integration", "validation", "auth"]
116
- },
112
+ "analysisScope": {"filesAnalyzed": ["path/to/file1"], "tracedDependencies": ["path/to/dep1"], "categoriesDetected": ["data_layer", "external_integration", "validation", "auth"]},
117
113
  "existingElements": [
118
- {
119
- "category": "interface|type|function|method|class|constant|configuration",
120
- "name": "要素名",
121
- "filePath": "path/to/file:行番号",
122
- "visibility": "public|private|internal",
123
- "signature": "シグネチャまたは定義の概要",
124
- "usedBy": ["path/to/consumer1"]
125
- }
114
+ {"category": "interface|type|function|method|class|constant|configuration", "name": "要素名", "filePath": "path/to/file:行番号", "visibility": "public|private|internal", "signature": "シグネチャまたは定義の概要", "usedBy": ["path/to/consumer1"]}
126
115
  ],
127
116
  "dataModel": {
128
117
  "detected": true,
129
118
  "schemas": [
130
- {
131
- "name": "テーブルまたはモデル名",
132
- "definitionPath": "path/to/schema:行番号",
133
- "fields": [
134
- {
135
- "name": "フィールド名",
136
- "type": "フィールド型",
137
- "constraints": ["NOT NULL", "UNIQUE"]
138
- }
139
- ],
140
- "relationships": [
141
- "外部キーカラム経由で他テーブルを参照"
142
- ]
143
- }
119
+ {"name": "テーブルまたはモデル名", "definitionPath": "path/to/schema:行番号", "fields": [{"name": "フィールド名", "type": "フィールド型", "constraints": ["NOT NULL", "UNIQUE"]}], "relationships": ["外部キーカラム経由で他テーブルを参照"]}
144
120
  ],
145
121
  "accessPatterns": [
146
- {
147
- "operation": "read|write|aggregate|join|delete",
148
- "location": "path/to/file:行番号",
149
- "targetSchema": "テーブルまたはモデル名",
150
- "description": "操作内容の概要"
151
- }
122
+ {"operation": "read|write|aggregate|join|delete", "location": "path/to/file:行番号", "targetSchema": "テーブルまたはモデル名", "description": "操作内容の概要"}
152
123
  ],
153
124
  "migrationFiles": ["path/to/migration/files"]
154
125
  },
155
126
  "dataTransformationPipelines": [
156
- {
157
- "entryPoint": "ClassName.methodName (file:line)",
158
- "steps": [
159
- {
160
- "order": 1,
161
- "method": "methodName (file:line)",
162
- "input": "入力データ/フォーマットの説明",
163
- "output": "出力データ/フォーマットの説明",
164
- "externalLookups": ["MasterTable.getData() でコード変換"],
165
- "transformation": "何が変わるか(例: 生値がルックアップテーブル経由で表示値にマッピング)"
166
- }
167
- ],
168
- "intermediateFormats": ["中間データ表現の説明(該当する場合)"],
169
- "finalOutput": "最終出力データ/フォーマットの説明"
170
- }
127
+ {"entryPoint": "ClassName.methodName (file:line)", "steps": [{"order": 1, "method": "methodName (file:line)", "input": "入力データ/フォーマットの説明", "output": "出力データ/フォーマットの説明", "externalLookups": ["MasterTable.getData() でコード変換"], "transformation": "何が変わるか(例: 生値がルックアップテーブル経由で表示値にマッピング)"}], "intermediateFormats": ["中間データ表現の説明(該当する場合)"], "finalOutput": "最終出力データ/フォーマットの説明"}
171
128
  ],
172
129
  "constraints": [
173
- {
174
- "type": "validation|business_rule|configuration|assumption",
175
- "description": "制約が強制する内容",
176
- "location": "path/to/file:行番号",
177
- "impact": "この制約に違反した場合の影響"
178
- }
130
+ {"type": "validation|business_rule|configuration|assumption", "description": "制約が強制する内容", "location": "path/to/file:行番号", "impact": "この制約に違反した場合の影響"}
179
131
  ],
180
132
  "qualityAssurance": {
181
133
  "mechanisms": [
182
- {
183
- "tool": "ツールまたはチェック名",
184
- "enforces": "検証する品質項目",
185
- "configLocation": "path/to/config:行番号",
186
- "coveredFiles": ["このメカニズムでカバーされる影響ファイル"],
187
- "type": "linter|static_analysis|schema_validator|domain_specific|ci_check"
188
- }
134
+ {"tool": "ツールまたはチェック名", "enforces": "検証する品質項目", "configLocation": "path/to/config:行番号", "coveredFiles": ["このメカニズムでカバーされる影響ファイル"], "type": "linter|static_analysis|schema_validator|domain_specific|ci_check"}
189
135
  ],
190
136
  "domainConstraints": [
191
- {
192
- "constraint": "ドメイン固有の制約の説明",
193
- "source": "path/to/config-or-ci:行番号",
194
- "affectedFiles": ["この制約の対象ファイル"]
195
- }
137
+ {"constraint": "ドメイン固有の制約の説明", "source": "path/to/config-or-ci:行番号", "affectedFiles": ["この制約の対象ファイル"]}
196
138
  ]
197
139
  },
198
140
  "focusAreas": [
199
- {
200
- "fact_id": "src/auth/createUser.ts:createUser",
201
- "area": "領域名(既存事実の1つのまとまり)",
202
- "evidence": "existingElements[name='createUser']",
203
- "relatedFiles": ["src/auth/createUser.ts", "src/api/routes/users.ts", "src/services/notification.ts"],
204
- "factsToAddress": "設計が扱うべき具体的事実(例: '関数Xは[a, b, c]から呼び出される'、'メソッドYは4つの結果ケースに分岐する: case1...case4'、'フィールドZは[v1, v2, v3]の値を受け付ける')",
205
- "risk": "これらの事実を設計が省略または矛盾させた場合に起こる問題"
206
- }
141
+ {"fact_id": "src/auth/createUser.ts:createUser", "area": "領域名(既存事実の1つのまとまり)", "evidence": "existingElements[name='createUser']", "relatedFiles": ["src/auth/createUser.ts", "src/api/routes/users.ts", "src/services/notification.ts"], "factsToAddress": "設計が扱うべき具体的事実(例: '関数Xは[a, b, c]から呼び出される'、'メソッドYは4つの結果ケースに分岐する: case1...case4'、'フィールドZは[v1, v2, v3]の値を受け付ける')", "risk": "これらの事実を設計が省略または矛盾させた場合に起こる問題"}
207
142
  ],
208
- "testCoverage": {
209
- "testedElements": ["テストファイルが見つかった要素名"],
210
- "untestedElements": ["テストファイルが見つからなかった要素名"]
211
- },
143
+ "testCoverage": {"testedElements": ["テストファイルが見つかった要素名"], "untestedElements": ["テストファイルが見つからなかった要素名"]},
212
144
  "limitations": ["分析できなかった内容とその理由"]
213
145
  }
214
146
  ```
@@ -173,49 +173,15 @@ WorkPlanの場合、追加で以下を確認:
173
173
 
174
174
  ```json
175
175
  {
176
- "metadata": {
177
- "review_mode": "comprehensive",
178
- "doc_type": "DesignDoc",
179
- "target_path": "/path/to/document.md"
180
- },
181
- "scores": {
182
- "consistency": 85,
183
- "completeness": 80,
184
- "rule_compliance": 90,
185
- "clarity": 75
186
- },
187
- "gate0": {
188
- "status": "pass|fail",
189
- "missing_elements": []
190
- },
191
- "verdict": {
192
- "decision": "approved_with_conditions",
193
- "conditions": [
194
- "FileUtilの不整合を解消",
195
- "不足しているテストファイルを追加"
196
- ]
197
- },
176
+ "metadata": {"review_mode": "comprehensive", "doc_type": "DesignDoc", "target_path": "/path/to/document.md"},
177
+ "scores": {"consistency": 85, "completeness": 80, "rule_compliance": 90, "clarity": 75},
178
+ "gate0": {"status": "pass|fail", "missing_elements": []},
179
+ "verdict": {"decision": "approved_with_conditions", "conditions": ["FileUtilの不整合を解消", "不足しているテストファイルを追加"]},
198
180
  "issues": [
199
- {
200
- "id": "I001",
201
- "severity": "critical",
202
- "category": "consistency",
203
- "location": "セクション3.2",
204
- "description": "FileUtilメソッドの不一致",
205
- "suggestion": "実際のFileUtil使用状況を反映するようドキュメントを更新"
206
- }
207
- ],
208
- "recommendations": [
209
- "承認前に優先修正が必要",
210
- "ドキュメントと実装の整合"
181
+ {"id": "I001", "severity": "critical", "category": "consistency", "location": "セクション3.2", "description": "FileUtilメソッドの不一致", "suggestion": "実際のFileUtil使用状況を反映するようドキュメントを更新"}
211
182
  ],
212
- "prior_context_check": {
213
- "items_received": 0,
214
- "resolved": 0,
215
- "partially_resolved": 0,
216
- "unresolved": 0,
217
- "items": []
218
- }
183
+ "recommendations": ["承認前に優先修正が必要", "ドキュメントと実装の整合"],
184
+ "prior_context_check": {"items_received": 0, "resolved": 0, "partially_resolved": 0, "unresolved": 0, "items": []}
219
185
  }
220
186
  ```
221
187
 
@@ -223,16 +189,8 @@ WorkPlanの場合、追加で以下を確認:
223
189
 
224
190
  ```json
225
191
  {
226
- "metadata": {
227
- "review_mode": "perspective",
228
- "focus": "implementation",
229
- "doc_type": "DesignDoc",
230
- "target_path": "/path/to/document.md"
231
- },
232
- "analysis": {
233
- "summary": "分析結果の説明",
234
- "scores": {}
235
- },
192
+ "metadata": {"review_mode": "perspective", "focus": "implementation", "doc_type": "DesignDoc", "target_path": "/path/to/document.md"},
193
+ "analysis": {"summary": "分析結果の説明", "scores": {}},
236
194
  "issues": [],
237
195
  "checklist": [
238
196
  {"item": "チェック項目の説明", "status": "pass|fail|na"}
@@ -253,12 +211,7 @@ WorkPlanの場合、追加で以下を確認:
253
211
  "partially_resolved": 1,
254
212
  "unresolved": 0,
255
213
  "items": [
256
- {
257
- "id": "D001",
258
- "status": "resolved",
259
- "location": "セクション3.2",
260
- "evidence": "コードがドキュメントと一致"
261
- }
214
+ {"id": "D001", "status": "resolved", "location": "セクション3.2", "evidence": "コードがドキュメントと一致"}
262
215
  ]
263
216
  }
264
217
  }
@@ -102,11 +102,7 @@ skills: integration-e2e-testing, typescript-testing, project-context
102
102
  "implementedACs": 4,
103
103
  "pendingTodos": 1,
104
104
  "missingAssertions": [
105
- {
106
- "ac": "AC2: エラー時にフォールバック値を返す",
107
- "expectedBehavior": "API障害 → フォールバック値返却",
108
- "issue": "フォールバック値の検証が欠落"
109
- }
105
+ {"ac": "AC2: エラー時にフォールバック値を返す", "expectedBehavior": "API障害 → フォールバック値返却", "issue": "フォールバック値の検証が欠落"}
110
106
  ]
111
107
  },
112
108
 
@@ -114,38 +110,17 @@ skills: integration-e2e-testing, typescript-testing, project-context
114
110
  "totalPropertyAnnotations": 2,
115
111
  "fastCheckImplemented": 1,
116
112
  "missing": [
117
- {
118
- "property": "モデル名は常にgemini-3-pro-image-preview",
119
- "location": "line 45",
120
- "issue": "fc.assert(fc.property(...))形式で未実装"
121
- }
113
+ {"property": "モデル名は常にgemini-3-pro-image-preview", "location": "line 45", "issue": "fc.assert(fc.property(...))形式で未実装"}
122
114
  ]
123
115
  },
124
116
 
125
117
  "qualityIssues": [
126
- {
127
- "severity": "high | medium | low",
128
- "category": "aaa_structure | independence | reproducibility | mock_boundary | proof_insufficient | readability",
129
- "location": "[ファイル:行番号]",
130
- "description": "[問題の説明]",
131
- "suggestion": "[具体的な修正提案]"
132
- }
118
+ {"severity": "high | medium | low", "category": "aaa_structure | independence | reproducibility | mock_boundary | proof_insufficient | readability", "location": "[ファイル:行番号]", "description": "[問題の説明]", "suggestion": "[具体的な修正提案]"}
133
119
  ],
134
120
 
135
- "passedChecks": [
136
- "AAA構造が明確",
137
- "テスト間の独立性が確保",
138
- "日時・乱数の適切なモック化"
139
- ],
121
+ "passedChecks": ["AAA構造が明確", "テスト間の独立性が確保", "日時・乱数の適切なモック化"],
140
122
 
141
- "verdict": {
142
- "decision": "approved | needs_revision | blocked",
143
- "reason": "[判定理由]",
144
- "prioritizedActions": [
145
- "1. [最優先の修正項目]",
146
- "2. [次の修正項目]"
147
- ]
148
- }
123
+ "verdict": {"decision": "approved | needs_revision | blocked", "reason": "[判定理由]", "prioritizedActions": ["1. [最優先の修正項目]", "2. [次の修正項目]"]}
149
124
  }
150
125
  ```
151
126
 
@@ -184,13 +159,7 @@ needs_revision判定時、後続処理で使用できる修正指示を出力:
184
159
  ```json
185
160
  {
186
161
  "requiredFixes": [
187
- {
188
- "priority": 1,
189
- "issue": "[問題]",
190
- "fix": "[具体的な修正内容]",
191
- "location": "[ファイル:行番号]",
192
- "codeHint": "[修正コードのヒント]"
193
- }
162
+ {"priority": 1, "issue": "[問題]", "fix": "[具体的な修正内容]", "location": "[ファイル:行番号]", "codeHint": "[修正コードのヒント]"}
194
163
  ]
195
164
  }
196
165
  ```