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.
- package/.claude/agents-en/acceptance-test-generator.md +6 -30
- package/.claude/agents-en/code-reviewer.md +15 -24
- package/.claude/agents-en/code-verifier.md +3 -32
- package/.claude/agents-en/codebase-analyzer.md +10 -78
- package/.claude/agents-en/document-reviewer.md +10 -57
- package/.claude/agents-en/integration-test-reviewer.md +6 -37
- package/.claude/agents-en/investigator.md +6 -59
- package/.claude/agents-en/quality-fixer-frontend.md +1 -5
- package/.claude/agents-en/quality-fixer.md +1 -5
- package/.claude/agents-en/requirement-analyzer.md +3 -14
- package/.claude/agents-en/rule-advisor.md +3 -16
- package/.claude/agents-en/scope-discoverer.md +5 -29
- package/.claude/agents-en/security-reviewer.md +2 -13
- package/.claude/agents-en/skill-creator.md +3 -6
- package/.claude/agents-en/skill-reviewer.md +7 -43
- package/.claude/agents-en/solver.md +9 -24
- package/.claude/agents-en/task-decomposer.md +17 -0
- package/.claude/agents-en/task-executor-frontend.md +14 -19
- package/.claude/agents-en/task-executor.md +14 -19
- package/.claude/agents-en/ui-analyzer.md +16 -115
- package/.claude/agents-en/verifier.md +9 -53
- package/.claude/agents-ja/acceptance-test-generator.md +6 -30
- package/.claude/agents-ja/code-reviewer.md +15 -24
- package/.claude/agents-ja/code-verifier.md +3 -32
- package/.claude/agents-ja/codebase-analyzer.md +10 -78
- package/.claude/agents-ja/document-reviewer.md +10 -57
- package/.claude/agents-ja/integration-test-reviewer.md +6 -37
- package/.claude/agents-ja/investigator.md +6 -59
- package/.claude/agents-ja/quality-fixer-frontend.md +1 -5
- package/.claude/agents-ja/quality-fixer.md +1 -5
- package/.claude/agents-ja/requirement-analyzer.md +3 -14
- package/.claude/agents-ja/rule-advisor.md +3 -16
- package/.claude/agents-ja/scope-discoverer.md +5 -29
- package/.claude/agents-ja/security-reviewer.md +2 -13
- package/.claude/agents-ja/skill-creator.md +3 -6
- package/.claude/agents-ja/skill-reviewer.md +7 -43
- package/.claude/agents-ja/solver.md +9 -24
- package/.claude/agents-ja/task-decomposer.md +17 -0
- package/.claude/agents-ja/task-executor-frontend.md +14 -19
- package/.claude/agents-ja/task-executor.md +14 -19
- package/.claude/agents-ja/ui-analyzer.md +16 -115
- package/.claude/agents-ja/verifier.md +9 -53
- package/.claude/skills-en/documentation-criteria/references/plan-template.md +1 -1
- package/.claude/skills-en/documentation-criteria/references/task-template.md +8 -0
- package/.claude/skills-en/frontend-technical-spec/SKILL.md +4 -8
- package/.claude/skills-en/frontend-typescript-rules/SKILL.md +4 -2
- package/.claude/skills-en/frontend-typescript-testing/SKILL.md +5 -11
- package/.claude/skills-en/technical-spec/SKILL.md +4 -3
- package/.claude/skills-en/typescript-testing/SKILL.md +4 -4
- package/.claude/skills-ja/documentation-criteria/references/plan-template.md +1 -1
- package/.claude/skills-ja/documentation-criteria/references/task-template.md +8 -0
- package/.claude/skills-ja/frontend-technical-spec/SKILL.md +4 -8
- package/.claude/skills-ja/frontend-typescript-rules/SKILL.md +4 -2
- package/.claude/skills-ja/frontend-typescript-testing/SKILL.md +5 -11
- package/.claude/skills-ja/task-analyzer/references/skills-index.yaml +3 -3
- package/.claude/skills-ja/technical-spec/SKILL.md +4 -3
- package/.claude/skills-ja/typescript-testing/SKILL.md +4 -4
- package/CHANGELOG.md +8 -0
- package/package.json +1 -1
|
@@ -267,16 +267,8 @@ Upon completion, report in the following JSON format. Detailed meta information
|
|
|
267
267
|
{
|
|
268
268
|
"status": "completed",
|
|
269
269
|
"feature": "payment",
|
|
270
|
-
"generatedFiles": {
|
|
271
|
-
|
|
272
|
-
"fixtureE2e": "tests/payment.fixture-e2e.test.[ext]",
|
|
273
|
-
"serviceE2e": "tests/payment.service-e2e.test.[ext]"
|
|
274
|
-
},
|
|
275
|
-
"budgetUsage": {
|
|
276
|
-
"integration": "2/3",
|
|
277
|
-
"fixtureE2e": "1/3",
|
|
278
|
-
"serviceE2e": "1/2"
|
|
279
|
-
},
|
|
270
|
+
"generatedFiles": {"integration": "tests/payment.int.test.[ext]", "fixtureE2e": "tests/payment.fixture-e2e.test.[ext]", "serviceE2e": "tests/payment.service-e2e.test.[ext]"},
|
|
271
|
+
"budgetUsage": {"integration": "2/3", "fixtureE2e": "1/3", "serviceE2e": "1/2"},
|
|
280
272
|
"e2eAbsenceReason": { "fixtureE2e": null, "serviceE2e": null }
|
|
281
273
|
}
|
|
282
274
|
```
|
|
@@ -286,16 +278,8 @@ Upon completion, report in the following JSON format. Detailed meta information
|
|
|
286
278
|
{
|
|
287
279
|
"status": "completed",
|
|
288
280
|
"feature": "checkout-ui",
|
|
289
|
-
"generatedFiles": {
|
|
290
|
-
|
|
291
|
-
"fixtureE2e": "tests/checkout.fixture-e2e.test.[ext]",
|
|
292
|
-
"serviceE2e": null
|
|
293
|
-
},
|
|
294
|
-
"budgetUsage": {
|
|
295
|
-
"integration": "1/3",
|
|
296
|
-
"fixtureE2e": "1/3",
|
|
297
|
-
"serviceE2e": "0/2"
|
|
298
|
-
},
|
|
281
|
+
"generatedFiles": {"integration": "tests/checkout.int.test.[ext]", "fixtureE2e": "tests/checkout.fixture-e2e.test.[ext]", "serviceE2e": null},
|
|
282
|
+
"budgetUsage": {"integration": "1/3", "fixtureE2e": "1/3", "serviceE2e": "0/2"},
|
|
299
283
|
"e2eAbsenceReason": { "fixtureE2e": null, "serviceE2e": "no_real_service_dependency" }
|
|
300
284
|
}
|
|
301
285
|
```
|
|
@@ -305,16 +289,8 @@ Upon completion, report in the following JSON format. Detailed meta information
|
|
|
305
289
|
{
|
|
306
290
|
"status": "completed",
|
|
307
291
|
"feature": "config-update",
|
|
308
|
-
"generatedFiles": {
|
|
309
|
-
|
|
310
|
-
"fixtureE2e": null,
|
|
311
|
-
"serviceE2e": null
|
|
312
|
-
},
|
|
313
|
-
"budgetUsage": {
|
|
314
|
-
"integration": "1/3",
|
|
315
|
-
"fixtureE2e": "0/3",
|
|
316
|
-
"serviceE2e": "0/2"
|
|
317
|
-
},
|
|
292
|
+
"generatedFiles": {"integration": "tests/config.int.test.[ext]", "fixtureE2e": null, "serviceE2e": null},
|
|
293
|
+
"budgetUsage": {"integration": "1/3", "fixtureE2e": "0/3", "serviceE2e": "0/2"},
|
|
318
294
|
"e2eAbsenceReason": { "fixtureE2e": "no_multi_step_journey", "serviceE2e": "no_multi_step_journey" }
|
|
319
295
|
}
|
|
320
296
|
```
|
|
@@ -39,6 +39,7 @@ You are a code review AI assistant specializing in Design Doc compliance validat
|
|
|
39
39
|
- **designDoc**: Path to the Design Doc (or multiple paths for fullstack features)
|
|
40
40
|
- **implementationFiles**: List of files to review (or git diff range)
|
|
41
41
|
- **reviewMode**: `full` (default) | `acceptance` | `architecture`
|
|
42
|
+
- **taskFiles** (optional): Paths to the task file(s) the implementation came from (`docs/plans/tasks/…`). Source of each task's `Change Category` and `Investigation Notes`. When omitted, run the fallback in Load Baseline below.
|
|
42
43
|
|
|
43
44
|
## Verification Process
|
|
44
45
|
|
|
@@ -53,6 +54,11 @@ Read the Design Doc **in full** and extract:
|
|
|
53
54
|
- Non-functional requirements
|
|
54
55
|
- **Fact Disposition Table rows** (when the section exists): record each row as `{fact_id, disposition, rationale, evidence, relatedFiles}` — the Related Files column carries the paths the designer must verify; read each listed file during Step 4-1. These rows become verification targets in Step 2-4.
|
|
55
56
|
|
|
57
|
+
Then load the task context that drives adjacent-case review (Step 2-1):
|
|
58
|
+
|
|
59
|
+
- When `taskFiles` are provided, read each and extract its `Change Category` value (the change kinds: `bug-fix` / `regression` / `state-change` / `boundary-change`) and the out-of-scope adjacent residuals the executor recorded in `Investigation Notes`. Carry both into Step 2-1: each recorded residual is a candidate `adjacent_residual` finding to confirm against the implementation.
|
|
60
|
+
- When `taskFiles` are absent or carry no `Change Category`, fall back: classify the reviewed change yourself from the diff and Design Doc (does it fix observed behavior, restore broken behavior, alter persisted state, or change a published/consumed contract?), and treat that classification as the trigger for the adjacent-case check in Step 2-1.
|
|
61
|
+
|
|
56
62
|
### 2. Map Implementation to Design Doc
|
|
57
63
|
|
|
58
64
|
#### 2-1. Acceptance Criteria Verification
|
|
@@ -65,6 +71,7 @@ For each acceptance criterion extracted in Step 1:
|
|
|
65
71
|
- For behavior-changing ACs, confirm the evidence covers the boundary paths, not only the main path: where a distinct branch, state, input class, lifecycle step, or fallback governs the behavior, verify it is exercised. Compare the source/referenced behavior and the implemented behavior at the same granularity; an unsupported change in a boundary dimension is a `dd_violation`
|
|
66
72
|
- Confirm the implementation keeps the core mechanism the AC, Design Doc, or referenced materials explicitly require; cite the source phrase. A simpler substitute that passes tests but drops the required mechanism is a `dd_violation`
|
|
67
73
|
- For changes to persisted, shared, or externally observable state, identify the publication boundary (where the new state becomes observable to another process, component, user, or later step). State that is observable as complete while still partial, uninitialized, stale, or rollback-only is a `reliability` finding, because a downstream consumer can treat the incomplete state as complete and fail
|
|
74
|
+
- When the reviewed change is classified as `bug-fix`, `regression`, `state-change`, or `boundary-change` (from the task's `Change Category`, or the Load Baseline fallback classification when no task context was provided), check the cases sharing its path, contract, persisted state, or external boundary. First confirm each out-of-scope residual the task's `Investigation Notes` recorded; then sweep for any sibling case the executor did not record. A sibling case still carrying the same class of defect the change addressed is an `adjacent_residual` finding
|
|
68
75
|
|
|
69
76
|
#### 2-2. Identifier Verification
|
|
70
77
|
|
|
@@ -125,6 +132,7 @@ Classify each quality finding into one of:
|
|
|
125
132
|
| **maintainability** | Code structure impedes future changes or comprehension | Long functions, deep nesting, multiple responsibilities, unclear naming |
|
|
126
133
|
| **reliability** | Missing safeguards that could cause runtime failures | Unhandled error paths, missing validation at boundaries, silent failures |
|
|
127
134
|
| **coverage_gap** | Acceptance criteria lack corresponding test verification | AC fulfilled in code but no test exercises it |
|
|
135
|
+
| **adjacent_residual** | A case sharing the change's path, contract, persisted state, or external boundary still carries the class of defect the change addressed | Fallback path left unfixed, sibling state transition still stale, another consumer of a changed contract not updated |
|
|
128
136
|
|
|
129
137
|
Each finding must include a `rationale` field:
|
|
130
138
|
|
|
@@ -134,6 +142,7 @@ Each finding must include a `rationale` field:
|
|
|
134
142
|
| **maintainability** | What specific maintenance or comprehension risk this creates |
|
|
135
143
|
| **reliability** | What failure scenario is unguarded and under what conditions it could occur |
|
|
136
144
|
| **coverage_gap** | Which AC is untested and why test coverage matters for this specific case |
|
|
145
|
+
| **adjacent_residual** | Which adjacent case shares the path/contract/state/boundary and how it still exhibits the defect class |
|
|
137
146
|
|
|
138
147
|
### 4. Check Architecture Compliance
|
|
139
148
|
|
|
@@ -194,7 +203,7 @@ identifierVerification[].codeValue: string (or "not found")
|
|
|
194
203
|
identifierVerification[].location: string (file:line; null if not found)
|
|
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 or file:function)
|
|
199
208
|
qualityFindings[].description: string
|
|
200
209
|
qualityFindings[].rationale: string (category-specific)
|
|
@@ -212,6 +221,7 @@ summary.findingsByCategory.dd_violation: number (integer >= 0)
|
|
|
212
221
|
summary.findingsByCategory.maintainability: number (integer >= 0)
|
|
213
222
|
summary.findingsByCategory.reliability: number (integer >= 0)
|
|
214
223
|
summary.findingsByCategory.coverage_gap: number (integer >= 0)
|
|
224
|
+
summary.findingsByCategory.adjacent_residual: number (integer >= 0)
|
|
215
225
|
```
|
|
216
226
|
|
|
217
227
|
### Minimal Shape Example
|
|
@@ -222,33 +232,14 @@ summary.findingsByCategory.coverage_gap: number (integer >= 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
|
-
"
|
|
241
|
-
"
|
|
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 @@ Minimal shape example:
|
|
|
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 @@ Final message: exactly one JSON object matching the schema below (begins with `{
|
|
|
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": "ElementName",
|
|
121
|
-
"filePath": "path/to/file:lineNumber",
|
|
122
|
-
"visibility": "public|private|internal",
|
|
123
|
-
"signature": "brief signature or definition",
|
|
124
|
-
"usedBy": ["path/to/consumer1"]
|
|
125
|
-
}
|
|
114
|
+
{"category": "interface|type|function|method|class|constant|configuration", "name": "ElementName", "filePath": "path/to/file:lineNumber", "visibility": "public|private|internal", "signature": "brief signature or definition", "usedBy": ["path/to/consumer1"]}
|
|
126
115
|
],
|
|
127
116
|
"dataModel": {
|
|
128
117
|
"detected": true,
|
|
129
118
|
"schemas": [
|
|
130
|
-
{
|
|
131
|
-
"name": "table_or_model_name",
|
|
132
|
-
"definitionPath": "path/to/schema:lineNumber",
|
|
133
|
-
"fields": [
|
|
134
|
-
{
|
|
135
|
-
"name": "field_name",
|
|
136
|
-
"type": "field_type",
|
|
137
|
-
"constraints": ["NOT NULL", "UNIQUE"]
|
|
138
|
-
}
|
|
139
|
-
],
|
|
140
|
-
"relationships": [
|
|
141
|
-
"references other_table via foreign_key_column"
|
|
142
|
-
]
|
|
143
|
-
}
|
|
119
|
+
{"name": "table_or_model_name", "definitionPath": "path/to/schema:lineNumber", "fields": [{"name": "field_name", "type": "field_type", "constraints": ["NOT NULL", "UNIQUE"]}], "relationships": ["references other_table via foreign_key_column"]}
|
|
144
120
|
],
|
|
145
121
|
"accessPatterns": [
|
|
146
|
-
{
|
|
147
|
-
"operation": "read|write|aggregate|join|delete",
|
|
148
|
-
"location": "path/to/file:lineNumber",
|
|
149
|
-
"targetSchema": "table_or_model_name",
|
|
150
|
-
"description": "Brief description of what the operation does"
|
|
151
|
-
}
|
|
122
|
+
{"operation": "read|write|aggregate|join|delete", "location": "path/to/file:lineNumber", "targetSchema": "table_or_model_name", "description": "Brief description of what the operation does"}
|
|
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": "description of input data/format",
|
|
163
|
-
"output": "description of output data/format",
|
|
164
|
-
"externalLookups": ["MasterTable.getData() for code conversion"],
|
|
165
|
-
"transformation": "what changes (e.g., raw value mapped to display value via lookup table)"
|
|
166
|
-
}
|
|
167
|
-
],
|
|
168
|
-
"intermediateFormats": ["description of intermediate data representation if any"],
|
|
169
|
-
"finalOutput": "description of final output data/format"
|
|
170
|
-
}
|
|
127
|
+
{"entryPoint": "ClassName.methodName (file:line)", "steps": [{"order": 1, "method": "methodName (file:line)", "input": "description of input data/format", "output": "description of output data/format", "externalLookups": ["MasterTable.getData() for code conversion"], "transformation": "what changes (e.g., raw value mapped to display value via lookup table)"}], "intermediateFormats": ["description of intermediate data representation if any"], "finalOutput": "description of final output data/format"}
|
|
171
128
|
],
|
|
172
129
|
"constraints": [
|
|
173
|
-
{
|
|
174
|
-
"type": "validation|business_rule|configuration|assumption",
|
|
175
|
-
"description": "What the constraint enforces",
|
|
176
|
-
"location": "path/to/file:lineNumber",
|
|
177
|
-
"impact": "What breaks if this constraint is violated"
|
|
178
|
-
}
|
|
130
|
+
{"type": "validation|business_rule|configuration|assumption", "description": "What the constraint enforces", "location": "path/to/file:lineNumber", "impact": "What breaks if this constraint is violated"}
|
|
179
131
|
],
|
|
180
132
|
"qualityAssurance": {
|
|
181
133
|
"mechanisms": [
|
|
182
|
-
{
|
|
183
|
-
"tool": "Tool or check name",
|
|
184
|
-
"enforces": "What quality aspect it enforces",
|
|
185
|
-
"configLocation": "path/to/config:lineNumber",
|
|
186
|
-
"coveredFiles": ["affected files covered by this mechanism"],
|
|
187
|
-
"type": "linter|static_analysis|schema_validator|domain_specific|ci_check"
|
|
188
|
-
}
|
|
134
|
+
{"tool": "Tool or check name", "enforces": "What quality aspect it enforces", "configLocation": "path/to/config:lineNumber", "coveredFiles": ["affected files covered by this mechanism"], "type": "linter|static_analysis|schema_validator|domain_specific|ci_check"}
|
|
189
135
|
],
|
|
190
136
|
"domainConstraints": [
|
|
191
|
-
{
|
|
192
|
-
"constraint": "Description of domain-specific constraint",
|
|
193
|
-
"source": "path/to/config-or-ci:lineNumber",
|
|
194
|
-
"affectedFiles": ["files subject to this constraint"]
|
|
195
|
-
}
|
|
137
|
+
{"constraint": "Description of domain-specific constraint", "source": "path/to/config-or-ci:lineNumber", "affectedFiles": ["files subject to this constraint"]}
|
|
196
138
|
]
|
|
197
139
|
},
|
|
198
140
|
"focusAreas": [
|
|
199
|
-
{
|
|
200
|
-
"fact_id": "src/auth/createUser.ts:createUser",
|
|
201
|
-
"area": "Brief area name (one coherent unit of existing facts)",
|
|
202
|
-
"evidence": "existingElements[name='createUser']",
|
|
203
|
-
"relatedFiles": ["src/auth/createUser.ts", "src/api/routes/users.ts", "src/services/notification.ts"],
|
|
204
|
-
"factsToAddress": "Concrete facts the designer must address (e.g., 'Function X is called by [a, b, c]'; 'Method Y branches into 4 outcome cases: case1...case4'; 'Field Z accepts values [v1, v2, v3]')",
|
|
205
|
-
"risk": "What goes wrong when these facts are omitted or contradicted by the design"
|
|
206
|
-
}
|
|
141
|
+
{"fact_id": "src/auth/createUser.ts:createUser", "area": "Brief area name (one coherent unit of existing facts)", "evidence": "existingElements[name='createUser']", "relatedFiles": ["src/auth/createUser.ts", "src/api/routes/users.ts", "src/services/notification.ts"], "factsToAddress": "Concrete facts the designer must address (e.g., 'Function X is called by [a, b, c]'; 'Method Y branches into 4 outcome cases: case1...case4'; 'Field Z accepts values [v1, v2, v3]')", "risk": "What goes wrong when these facts are omitted or contradicted by the design"}
|
|
207
142
|
],
|
|
208
|
-
"testCoverage": {
|
|
209
|
-
"testedElements": ["element names with test files found"],
|
|
210
|
-
"untestedElements": ["element names with no test files found"]
|
|
211
|
-
},
|
|
143
|
+
"testCoverage": {"testedElements": ["element names with test files found"], "untestedElements": ["element names with no test files found"]},
|
|
212
144
|
"limitations": ["What could not be analyzed and why"]
|
|
213
145
|
}
|
|
214
146
|
```
|
|
@@ -178,49 +178,15 @@ Final message: exactly one JSON object matching the schema below (begins with `{
|
|
|
178
178
|
|
|
179
179
|
```json
|
|
180
180
|
{
|
|
181
|
-
"metadata": {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
},
|
|
186
|
-
"scores": {
|
|
187
|
-
"consistency": 85,
|
|
188
|
-
"completeness": 80,
|
|
189
|
-
"rule_compliance": 90,
|
|
190
|
-
"clarity": 75
|
|
191
|
-
},
|
|
192
|
-
"gate0": {
|
|
193
|
-
"status": "pass|fail",
|
|
194
|
-
"missing_elements": []
|
|
195
|
-
},
|
|
196
|
-
"verdict": {
|
|
197
|
-
"decision": "approved_with_conditions",
|
|
198
|
-
"conditions": [
|
|
199
|
-
"Resolve FileUtil discrepancy",
|
|
200
|
-
"Add missing test files"
|
|
201
|
-
]
|
|
202
|
-
},
|
|
181
|
+
"metadata": {"review_mode": "comprehensive", "doc_type": "DesignDoc", "target_path": "/path/to/document.md"},
|
|
182
|
+
"scores": {"consistency": 85, "completeness": 80, "rule_compliance": 90, "clarity": 75},
|
|
183
|
+
"gate0": {"status": "pass|fail", "missing_elements": []},
|
|
184
|
+
"verdict": {"decision": "approved_with_conditions", "conditions": ["Resolve FileUtil discrepancy", "Add missing test files"]},
|
|
203
185
|
"issues": [
|
|
204
|
-
{
|
|
205
|
-
"id": "I001",
|
|
206
|
-
"severity": "critical",
|
|
207
|
-
"category": "consistency",
|
|
208
|
-
"location": "Section 3.2",
|
|
209
|
-
"description": "FileUtil method mismatch",
|
|
210
|
-
"suggestion": "Update document to reflect actual FileUtil usage"
|
|
211
|
-
}
|
|
212
|
-
],
|
|
213
|
-
"recommendations": [
|
|
214
|
-
"Priority fixes before approval",
|
|
215
|
-
"Documentation alignment with implementation"
|
|
186
|
+
{"id": "I001", "severity": "critical", "category": "consistency", "location": "Section 3.2", "description": "FileUtil method mismatch", "suggestion": "Update document to reflect actual FileUtil usage"}
|
|
216
187
|
],
|
|
217
|
-
"
|
|
218
|
-
|
|
219
|
-
"resolved": 0,
|
|
220
|
-
"partially_resolved": 0,
|
|
221
|
-
"unresolved": 0,
|
|
222
|
-
"items": []
|
|
223
|
-
}
|
|
188
|
+
"recommendations": ["Priority fixes before approval", "Documentation alignment with implementation"],
|
|
189
|
+
"prior_context_check": {"items_received": 0, "resolved": 0, "partially_resolved": 0, "unresolved": 0, "items": []}
|
|
224
190
|
}
|
|
225
191
|
```
|
|
226
192
|
|
|
@@ -228,16 +194,8 @@ Final message: exactly one JSON object matching the schema below (begins with `{
|
|
|
228
194
|
|
|
229
195
|
```json
|
|
230
196
|
{
|
|
231
|
-
"metadata": {
|
|
232
|
-
|
|
233
|
-
"focus": "implementation",
|
|
234
|
-
"doc_type": "DesignDoc",
|
|
235
|
-
"target_path": "/path/to/document.md"
|
|
236
|
-
},
|
|
237
|
-
"analysis": {
|
|
238
|
-
"summary": "Analysis results description",
|
|
239
|
-
"scores": {}
|
|
240
|
-
},
|
|
197
|
+
"metadata": {"review_mode": "perspective", "focus": "implementation", "doc_type": "DesignDoc", "target_path": "/path/to/document.md"},
|
|
198
|
+
"analysis": {"summary": "Analysis results description", "scores": {}},
|
|
241
199
|
"issues": [],
|
|
242
200
|
"checklist": [
|
|
243
201
|
{"item": "Check item description", "status": "pass|fail|na"}
|
|
@@ -258,12 +216,7 @@ Include in output when `prior_context_count > 0`:
|
|
|
258
216
|
"partially_resolved": 1,
|
|
259
217
|
"unresolved": 0,
|
|
260
218
|
"items": [
|
|
261
|
-
{
|
|
262
|
-
"id": "D001",
|
|
263
|
-
"status": "resolved",
|
|
264
|
-
"location": "Section 3.2",
|
|
265
|
-
"evidence": "Code now matches documentation"
|
|
266
|
-
}
|
|
219
|
+
{"id": "D001", "status": "resolved", "location": "Section 3.2", "evidence": "Code now matches documentation"}
|
|
267
220
|
]
|
|
268
221
|
}
|
|
269
222
|
}
|
|
@@ -102,11 +102,7 @@ Final message: exactly one JSON object matching the schema below (begins with `{
|
|
|
102
102
|
"implementedACs": 4,
|
|
103
103
|
"pendingTodos": 1,
|
|
104
104
|
"missingAssertions": [
|
|
105
|
-
{
|
|
106
|
-
"ac": "AC2: Return fallback value on error",
|
|
107
|
-
"expectedBehavior": "API failure → Return fallback value",
|
|
108
|
-
"issue": "Fallback value verification missing"
|
|
109
|
-
}
|
|
105
|
+
{"ac": "AC2: Return fallback value on error", "expectedBehavior": "API failure → Return fallback value", "issue": "Fallback value verification missing"}
|
|
110
106
|
]
|
|
111
107
|
},
|
|
112
108
|
|
|
@@ -114,38 +110,17 @@ Final message: exactly one JSON object matching the schema below (begins with `{
|
|
|
114
110
|
"totalPropertyAnnotations": 2,
|
|
115
111
|
"fastCheckImplemented": 1,
|
|
116
112
|
"missing": [
|
|
117
|
-
{
|
|
118
|
-
"property": "Model name is always gemini-3-pro-image-preview",
|
|
119
|
-
"location": "line 45",
|
|
120
|
-
"issue": "Not implemented in fc.assert(fc.property(...)) format"
|
|
121
|
-
}
|
|
113
|
+
{"property": "Model name is always gemini-3-pro-image-preview", "location": "line 45", "issue": "Not implemented in fc.assert(fc.property(...)) format"}
|
|
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": "[file:line number]",
|
|
130
|
-
"description": "[Problem description]",
|
|
131
|
-
"suggestion": "[Specific fix proposal]"
|
|
132
|
-
}
|
|
118
|
+
{"severity": "high | medium | low", "category": "aaa_structure | independence | reproducibility | mock_boundary | proof_insufficient | readability", "location": "[file:line number]", "description": "[Problem description]", "suggestion": "[Specific fix proposal]"}
|
|
133
119
|
],
|
|
134
120
|
|
|
135
|
-
"passedChecks": [
|
|
136
|
-
"AAA structure is clear",
|
|
137
|
-
"Test independence is ensured",
|
|
138
|
-
"Proper mocking of date/random"
|
|
139
|
-
],
|
|
121
|
+
"passedChecks": ["AAA structure is clear", "Test independence is ensured", "Proper mocking of date/random"],
|
|
140
122
|
|
|
141
|
-
"verdict": {
|
|
142
|
-
"decision": "approved | needs_revision | blocked",
|
|
143
|
-
"reason": "[Decision reason]",
|
|
144
|
-
"prioritizedActions": [
|
|
145
|
-
"1. [Highest priority fix item]",
|
|
146
|
-
"2. [Next fix item]"
|
|
147
|
-
]
|
|
148
|
-
}
|
|
123
|
+
"verdict": {"decision": "approved | needs_revision | blocked", "reason": "[Decision reason]", "prioritizedActions": ["1. [Highest priority fix item]", "2. [Next fix item]"]}
|
|
149
124
|
}
|
|
150
125
|
```
|
|
151
126
|
|
|
@@ -184,13 +159,7 @@ When needs_revision decision, output fix instructions usable in subsequent proce
|
|
|
184
159
|
```json
|
|
185
160
|
{
|
|
186
161
|
"requiredFixes": [
|
|
187
|
-
{
|
|
188
|
-
"priority": 1,
|
|
189
|
-
"issue": "[Problem]",
|
|
190
|
-
"fix": "[Specific fix content]",
|
|
191
|
-
"location": "[file:line number]",
|
|
192
|
-
"codeHint": "[Fix code hint]"
|
|
193
|
-
}
|
|
162
|
+
{"priority": 1, "issue": "[Problem]", "fix": "[Specific fix content]", "location": "[file:line number]", "codeHint": "[Fix code hint]"}
|
|
194
163
|
]
|
|
195
164
|
}
|
|
196
165
|
```
|
|
@@ -119,74 +119,21 @@ Final message: exactly one JSON object matching the schema below (begins with `{
|
|
|
119
119
|
|
|
120
120
|
```json
|
|
121
121
|
{
|
|
122
|
-
"problemSummary": {
|
|
123
|
-
"phenomenon": "Objective description of observed phenomenon",
|
|
124
|
-
"context": "Occurrence conditions, environment, timing",
|
|
125
|
-
"scope": "Impact range"
|
|
126
|
-
},
|
|
122
|
+
"problemSummary": {"phenomenon": "Objective description of observed phenomenon", "context": "Occurrence conditions, environment, timing", "scope": "Impact range"},
|
|
127
123
|
"investigationSources": [
|
|
128
|
-
{
|
|
129
|
-
"type": "code|history|dependency|config|document|external",
|
|
130
|
-
"location": "Location investigated",
|
|
131
|
-
"findings": "Facts discovered (without interpretation)"
|
|
132
|
-
}
|
|
124
|
+
{"type": "code|history|dependency|config|document|external", "location": "Location investigated", "findings": "Facts discovered (without interpretation)"}
|
|
133
125
|
],
|
|
134
126
|
"externalResearch": [
|
|
135
|
-
{
|
|
136
|
-
"query": "Search query used",
|
|
137
|
-
"source": "Information source",
|
|
138
|
-
"findings": "Related information discovered",
|
|
139
|
-
"relevance": "Relevance to this problem"
|
|
140
|
-
}
|
|
127
|
+
{"query": "Search query used", "source": "Information source", "findings": "Related information discovered", "relevance": "Relevance to this problem"}
|
|
141
128
|
],
|
|
142
129
|
"pathMap": [
|
|
143
|
-
{
|
|
144
|
-
"symptomId": "S1",
|
|
145
|
-
"symptom": "Description of observed symptom",
|
|
146
|
-
"trigger": "What triggers this symptom",
|
|
147
|
-
"paths": [
|
|
148
|
-
{
|
|
149
|
-
"pathId": "S1-P1",
|
|
150
|
-
"description": "Path description (e.g., main data fetch path)",
|
|
151
|
-
"nodes": [
|
|
152
|
-
{
|
|
153
|
-
"nodeId": "S1-P1-N1",
|
|
154
|
-
"location": "file:line",
|
|
155
|
-
"description": "What this node does"
|
|
156
|
-
}
|
|
157
|
-
]
|
|
158
|
-
}
|
|
159
|
-
]
|
|
160
|
-
}
|
|
130
|
+
{"symptomId": "S1", "symptom": "Description of observed symptom", "trigger": "What triggers this symptom", "paths": [{"pathId": "S1-P1", "description": "Path description (e.g., main data fetch path)", "nodes": [{"nodeId": "S1-P1-N1", "location": "file:line", "description": "What this node does"}]}]}
|
|
161
131
|
],
|
|
162
132
|
"failurePoints": [
|
|
163
|
-
{
|
|
164
|
-
"id": "FP1",
|
|
165
|
-
"nodeId": "S1-P1-N1",
|
|
166
|
-
"symptomId": "S1",
|
|
167
|
-
"description": "What the fault is",
|
|
168
|
-
"causeCategory": "typo|logic_error|missing_constraint|design_gap|external_factor",
|
|
169
|
-
"location": "file:line",
|
|
170
|
-
"upstreamDependency": "What this node depends on",
|
|
171
|
-
"symptomExplained": "How this fault leads to the observed symptom",
|
|
172
|
-
"causalChain": ["Observed fault", "→ Direct cause", "→ Root cause (stop condition)"],
|
|
173
|
-
"checkStatus": "supported|weakened|blocked|not_reached",
|
|
174
|
-
"evidence": [
|
|
175
|
-
{"type": "supporting|contradicting", "detail": "Evidence detail", "source": "Source location", "strength": "direct|indirect|circumstantial"}
|
|
176
|
-
],
|
|
177
|
-
"comparisonAnalysis": {
|
|
178
|
-
"normalImplementation": "Path to working implementation (null if not found)",
|
|
179
|
-
"keyDifferences": ["Differences"]
|
|
180
|
-
}
|
|
181
|
-
}
|
|
133
|
+
{"id": "FP1", "nodeId": "S1-P1-N1", "symptomId": "S1", "description": "What the fault is", "causeCategory": "typo|logic_error|missing_constraint|design_gap|external_factor", "location": "file:line", "upstreamDependency": "What this node depends on", "symptomExplained": "How this fault leads to the observed symptom", "causalChain": ["Observed fault", "→ Direct cause", "→ Root cause (stop condition)"], "checkStatus": "supported|weakened|blocked|not_reached", "evidence": [{"type": "supporting|contradicting", "detail": "Evidence detail", "source": "Source location", "strength": "direct|indirect|circumstantial"}], "comparisonAnalysis": {"normalImplementation": "Path to working implementation (null if not found)", "keyDifferences": ["Differences"]}}
|
|
182
134
|
],
|
|
183
135
|
"impactAnalysis": [
|
|
184
|
-
{
|
|
185
|
-
"failurePointId": "FP1",
|
|
186
|
-
"impactScope": ["Affected file paths"],
|
|
187
|
-
"recurrenceRisk": "low|medium|high",
|
|
188
|
-
"riskRationale": "Rationale for risk determination"
|
|
189
|
-
}
|
|
136
|
+
{"failurePointId": "FP1", "impactScope": ["Affected file paths"], "recurrenceRisk": "low|medium|high", "riskRationale": "Rationale for risk determination"}
|
|
190
137
|
],
|
|
191
138
|
"unexploredAreas": [
|
|
192
139
|
{"area": "Unexplored area", "reason": "Reason could not investigate", "potentialRelevance": "Relevance"}
|
|
@@ -199,11 +199,7 @@ Final message: exactly one JSON object matching the schema below (begins with `{
|
|
|
199
199
|
All responses share `status` plus a `taskFileMechanisms` object when `task_file` is provided:
|
|
200
200
|
|
|
201
201
|
```json
|
|
202
|
-
"taskFileMechanisms": {
|
|
203
|
-
"provided": true,
|
|
204
|
-
"executed": ["mechanism names that were found and executed"],
|
|
205
|
-
"skipped": [{"mechanism": "mechanism name", "reason": "tool not found | config not found | not executable"}]
|
|
206
|
-
}
|
|
202
|
+
"taskFileMechanisms": {"provided": true, "executed": ["mechanism names that were found and executed"], "skipped": [{"mechanism": "mechanism name", "reason": "tool not found | config not found | not executable"}]}
|
|
207
203
|
```
|
|
208
204
|
When `task_file` is not provided, set `"provided": false` and omit `executed`/`skipped`.
|
|
209
205
|
|
|
@@ -163,11 +163,7 @@ Final message: exactly one JSON object matching the schema below (begins with `{
|
|
|
163
163
|
All responses share `status` plus a `taskFileMechanisms` object when `task_file` is provided:
|
|
164
164
|
|
|
165
165
|
```json
|
|
166
|
-
"taskFileMechanisms": {
|
|
167
|
-
"provided": true,
|
|
168
|
-
"executed": ["mechanism names that were found and executed"],
|
|
169
|
-
"skipped": [{"mechanism": "mechanism name", "reason": "tool not found | config not found | not executable"}]
|
|
170
|
-
}
|
|
166
|
+
"taskFileMechanisms": {"provided": true, "executed": ["mechanism names that were found and executed"], "skipped": [{"mechanism": "mechanism name", "reason": "tool not found | config not found | not executable"}]}
|
|
171
167
|
```
|
|
172
168
|
When `task_file` is not provided, set `"provided": false` and omit `executed`/`skipped`.
|
|
173
169
|
|
|
@@ -116,23 +116,12 @@ Final message: exactly one JSON object matching the schema below (begins with `{
|
|
|
116
116
|
"fileCount": 3,
|
|
117
117
|
"adrRequired": true,
|
|
118
118
|
"adrReason": "specific condition met, or null if not required",
|
|
119
|
-
"technicalConsiderations": {
|
|
120
|
-
"constraints": ["list"],
|
|
121
|
-
"risks": ["list"],
|
|
122
|
-
"dependencies": ["list"]
|
|
123
|
-
},
|
|
119
|
+
"technicalConsiderations": {"constraints": ["list"], "risks": ["list"], "dependencies": ["list"]},
|
|
124
120
|
"scopeDependencies": [
|
|
125
|
-
{
|
|
126
|
-
"question": "specific question that affects scale",
|
|
127
|
-
"impact": { "if_yes": "large", "if_no": "medium" }
|
|
128
|
-
}
|
|
121
|
+
{"question": "specific question that affects scale", "impact": {"if_yes": "large", "if_no": "medium"}}
|
|
129
122
|
],
|
|
130
123
|
"questions": [
|
|
131
|
-
{
|
|
132
|
-
"category": "boundary|existing_code|dependencies",
|
|
133
|
-
"question": "specific question",
|
|
134
|
-
"options": ["A", "B", "C"]
|
|
135
|
-
}
|
|
124
|
+
{"category": "boundary|existing_code|dependencies", "question": "specific question", "options": ["A", "B", "C"]}
|
|
136
125
|
]
|
|
137
126
|
}
|
|
138
127
|
```
|