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
|
@@ -59,24 +59,11 @@ Return structured JSON:
|
|
|
59
59
|
|
|
60
60
|
```json
|
|
61
61
|
{
|
|
62
|
-
"taskAnalysis": {
|
|
63
|
-
"taskType": "implementation|fix|refactoring|design|quality-improvement",
|
|
64
|
-
"essence": "Fundamental purpose", "estimatedFiles": 3, "scale": "small|medium|large",
|
|
65
|
-
"extractedTags": ["implementation", "testing", "security"]
|
|
66
|
-
},
|
|
62
|
+
"taskAnalysis": {"taskType": "implementation|fix|refactoring|design|quality-improvement", "essence": "Fundamental purpose", "estimatedFiles": 3, "scale": "small|medium|large", "extractedTags": ["implementation", "testing", "security"]},
|
|
67
63
|
"selectedSkills": [
|
|
68
|
-
{
|
|
69
|
-
"skill": "coding-standards",
|
|
70
|
-
"sections": [{"title": "Section Name", "content": "## Section content..."}],
|
|
71
|
-
"reason": "Why needed", "priority": "high"
|
|
72
|
-
}
|
|
64
|
+
{"skill": "coding-standards", "sections": [{"title": "Section Name", "content": "## Section content..."}], "reason": "Why needed", "priority": "high"}
|
|
73
65
|
],
|
|
74
|
-
"metaCognitiveGuidance": {
|
|
75
|
-
"taskEssence": "Understanding fundamental purpose, not surface work",
|
|
76
|
-
"pastFailures": ["error-fixing impulse", "large changes at once", "insufficient testing"],
|
|
77
|
-
"potentialPitfalls": ["No root cause analysis", "No phased approach", "No tests"],
|
|
78
|
-
"firstStep": {"action": "First action", "rationale": "Why first"}
|
|
79
|
-
},
|
|
66
|
+
"metaCognitiveGuidance": {"taskEssence": "Understanding fundamental purpose, not surface work", "pastFailures": ["error-fixing impulse", "large changes at once", "insufficient testing"], "potentialPitfalls": ["No root cause analysis", "No phased approach", "No tests"], "firstStep": {"action": "First action", "rationale": "Why first"}},
|
|
80
67
|
"metaCognitiveQuestions": ["Most important quality criterion?", "Past problems in similar tasks?", "Which part first?"],
|
|
81
68
|
"warningPatterns": [
|
|
82
69
|
{"pattern": "Large changes at once", "risk": "High complexity", "mitigation": "Split into phases"},
|
|
@@ -164,17 +164,8 @@ Final message: exactly one JSON object matching the schema below (begins with `{
|
|
|
164
164
|
"entryPoints": ["/path1", "/path2"],
|
|
165
165
|
"relatedFiles": ["src/feature/*"],
|
|
166
166
|
"dependencies": ["UNIT-002"],
|
|
167
|
-
"valueProfile": {
|
|
168
|
-
|
|
169
|
-
"userGoal": "What the user is trying to accomplish with this feature",
|
|
170
|
-
"valueCategory": "High-level capability this belongs to (e.g., 'Authentication', 'Content Management', 'Reporting')"
|
|
171
|
-
},
|
|
172
|
-
"technicalProfile": {
|
|
173
|
-
"primaryModules": ["src/<feature>/module-a.ts", "src/<feature>/module-b.ts"],
|
|
174
|
-
"publicInterfaces": ["ServiceA.operation()", "ModuleB.handle()"],
|
|
175
|
-
"dataFlowSummary": "Input source → core processing path → output destination",
|
|
176
|
-
"infrastructureDeps": ["external dependency list"]
|
|
177
|
-
},
|
|
167
|
+
"valueProfile": {"targetPersona": "Who this feature serves (e.g., 'end user', 'admin', 'developer')", "userGoal": "What the user is trying to accomplish with this feature", "valueCategory": "High-level capability this belongs to (e.g., 'Authentication', 'Content Management', 'Reporting')"},
|
|
168
|
+
"technicalProfile": {"primaryModules": ["src/<feature>/module-a.ts", "src/<feature>/module-b.ts"], "publicInterfaces": ["ServiceA.operation()", "ModuleB.handle()"], "dataFlowSummary": "Input source → core processing path → output destination", "infrastructureDeps": ["external dependency list"]},
|
|
178
169
|
"unitInventory": {
|
|
179
170
|
"routes": [
|
|
180
171
|
{"method": "POST", "path": "/api/auth/login", "handler": "AuthController.handleLogin", "file": "routes:15"}
|
|
@@ -189,28 +180,13 @@ Final message: exactly one JSON object matching the schema below (begins with `{
|
|
|
189
180
|
}
|
|
190
181
|
],
|
|
191
182
|
"relationships": [
|
|
192
|
-
{
|
|
193
|
-
"from": "UNIT-001",
|
|
194
|
-
"to": "UNIT-002",
|
|
195
|
-
"type": "depends_on|extends|shares_data"
|
|
196
|
-
}
|
|
183
|
+
{"from": "UNIT-001", "to": "UNIT-002", "type": "depends_on|extends|shares_data"}
|
|
197
184
|
],
|
|
198
185
|
"uncertainAreas": [
|
|
199
|
-
{
|
|
200
|
-
"area": "Area name",
|
|
201
|
-
"reason": "Why uncertain",
|
|
202
|
-
"suggestedAction": "What to do"
|
|
203
|
-
}
|
|
186
|
+
{"area": "Area name", "reason": "Why uncertain", "suggestedAction": "What to do"}
|
|
204
187
|
],
|
|
205
188
|
"prdUnits": [
|
|
206
|
-
{
|
|
207
|
-
"id": "PRD-001",
|
|
208
|
-
"name": "PRD unit name (user-value level)",
|
|
209
|
-
"description": "What this capability delivers to the user",
|
|
210
|
-
"sourceUnits": ["UNIT-001", "UNIT-003"],
|
|
211
|
-
"combinedRelatedFiles": ["src/feature-a/*", "src/feature-b/*"],
|
|
212
|
-
"combinedEntryPoints": ["/path1", "/path2", "/path3"]
|
|
213
|
-
}
|
|
189
|
+
{"id": "PRD-001", "name": "PRD unit name (user-value level)", "description": "What this capability delivers to the user", "sourceUnits": ["UNIT-001", "UNIT-003"], "combinedRelatedFiles": ["src/feature-a/*", "src/feature-b/*"], "combinedEntryPoints": ["/path1", "/path2", "/path3"]}
|
|
214
190
|
],
|
|
215
191
|
"limitations": ["What could not be discovered and why"]
|
|
216
192
|
}
|
|
@@ -100,22 +100,11 @@ Final message: exactly one JSON object matching the schema below (begins with `{
|
|
|
100
100
|
"summary": "[1-2 sentence summary]",
|
|
101
101
|
"filesReviewed": 5,
|
|
102
102
|
"findings": [
|
|
103
|
-
{
|
|
104
|
-
"category": "confirmed_risk|suspected_risk|defense_gap|hardening|policy",
|
|
105
|
-
"confidence": "high|medium|low",
|
|
106
|
-
"location": "[file:line]",
|
|
107
|
-
"description": "[specific issue found]",
|
|
108
|
-
"rationale": "[category-specific, see Category-Specific Rationale]",
|
|
109
|
-
"suggestion": "[specific fix]"
|
|
110
|
-
}
|
|
103
|
+
{"category": "confirmed_risk|suspected_risk|defense_gap|hardening|policy", "confidence": "high|medium|low", "location": "[file:line]", "description": "[specific issue found]", "rationale": "[category-specific, see Category-Specific Rationale]", "suggestion": "[specific fix]"}
|
|
111
104
|
],
|
|
112
105
|
"notes": "[summary of hardening/policy findings for completion report, present when status is approved_with_notes]",
|
|
113
106
|
"requiredFixes": [
|
|
114
|
-
{
|
|
115
|
-
"location": "[file:line — parseable as file[:line] for Fix Mode allowed-list expansion]",
|
|
116
|
-
"issue": "[specific issue to fix — drawn from the corresponding finding]",
|
|
117
|
-
"fix": "[specific fix instruction]"
|
|
118
|
-
}
|
|
107
|
+
{"location": "[file:line — parseable as file[:line] for Fix Mode allowed-list expansion]", "issue": "[specific issue to fix — drawn from the corresponding finding]", "fix": "[specific fix instruction]"}
|
|
119
108
|
]
|
|
120
109
|
}
|
|
121
110
|
```
|
|
@@ -152,17 +152,14 @@ Return results as structured JSON:
|
|
|
152
152
|
{
|
|
153
153
|
"mode": "creation|modification",
|
|
154
154
|
"skillName": "...",
|
|
155
|
-
"frontmatter": {
|
|
156
|
-
"name": "...",
|
|
157
|
-
"description": "..."
|
|
158
|
-
},
|
|
155
|
+
"frontmatter": {"name": "...", "description": "..."},
|
|
159
156
|
"body": "full markdown content after frontmatter",
|
|
160
157
|
"references": [
|
|
161
|
-
{
|
|
158
|
+
{"filename": "...", "content": "..."}
|
|
162
159
|
],
|
|
163
160
|
"optimizationReport": {
|
|
164
161
|
"issuesFound": [
|
|
165
|
-
{
|
|
162
|
+
{"pattern": "BP-XXX", "severity": "P1/P2/P3", "location": "...", "transform": "..."}
|
|
166
163
|
],
|
|
167
164
|
"researchFindings": [],
|
|
168
165
|
"lineCount": 0,
|
|
@@ -87,56 +87,20 @@ Return results as structured JSON:
|
|
|
87
87
|
"grade": "A|B|C",
|
|
88
88
|
"summary": "1-2 sentence overall assessment",
|
|
89
89
|
"patternIssues": [
|
|
90
|
-
{
|
|
91
|
-
"pattern": "BP-XXX",
|
|
92
|
-
"severity": "P1|P2|P3",
|
|
93
|
-
"location": "section heading",
|
|
94
|
-
"original": "quoted text",
|
|
95
|
-
"suggestedFix": "replacement text"
|
|
96
|
-
}
|
|
90
|
+
{"pattern": "BP-XXX", "severity": "P1|P2|P3", "location": "section heading", "original": "quoted text", "suggestedFix": "replacement text"}
|
|
97
91
|
],
|
|
98
92
|
"patternExceptions": [
|
|
99
|
-
{
|
|
100
|
-
"pattern": "BP-XXX",
|
|
101
|
-
"location": "section heading",
|
|
102
|
-
"original": "quoted text",
|
|
103
|
-
"conditions": {
|
|
104
|
-
"singleStepDestruction": "true|false + evidence",
|
|
105
|
-
"callerCannotRecover": "true|false + evidence",
|
|
106
|
-
"operationalNotPolicy": "true|false + evidence",
|
|
107
|
-
"positiveFormBlursScope": "true|false + evidence"
|
|
108
|
-
}
|
|
109
|
-
}
|
|
93
|
+
{"pattern": "BP-XXX", "location": "section heading", "original": "quoted text", "conditions": {"singleStepDestruction": "true|false + evidence", "callerCannotRecover": "true|false + evidence", "operationalNotPolicy": "true|false + evidence", "positiveFormBlursScope": "true|false + evidence"}}
|
|
110
94
|
],
|
|
111
95
|
"principlesEvaluation": [
|
|
112
|
-
{
|
|
113
|
-
"principle": "1: Context efficiency",
|
|
114
|
-
"status": "pass|partial|fail",
|
|
115
|
-
"detail": "explanation if not pass"
|
|
116
|
-
}
|
|
96
|
+
{"principle": "1: Context efficiency", "status": "pass|partial|fail", "detail": "explanation if not pass"}
|
|
117
97
|
],
|
|
118
|
-
"progressiveDisclosure": {
|
|
119
|
-
"tier1": "pass|fail (description quality)",
|
|
120
|
-
"tier2": "pass|fail (body structure)",
|
|
121
|
-
"tier3": "pass|fail (reference organization)",
|
|
122
|
-
"details": "specific issues if any"
|
|
123
|
-
},
|
|
98
|
+
"progressiveDisclosure": {"tier1": "pass|fail (description quality)", "tier2": "pass|fail (body structure)", "tier3": "pass|fail (reference organization)", "details": "specific issues if any"},
|
|
124
99
|
"crossSkillIssues": [
|
|
125
|
-
{
|
|
126
|
-
"overlappingSkill": "skill-name",
|
|
127
|
-
"description": "what overlaps",
|
|
128
|
-
"recommendation": "reference or deduplicate"
|
|
129
|
-
}
|
|
100
|
+
{"overlappingSkill": "skill-name", "description": "what overlaps", "recommendation": "reference or deduplicate"}
|
|
130
101
|
],
|
|
131
|
-
"balanceAssessment": {
|
|
132
|
-
|
|
133
|
-
"lostExpertise": "none|minor|major",
|
|
134
|
-
"clarityTradeOff": "none|minor|major",
|
|
135
|
-
"descriptionQuality": "pass|needs fix"
|
|
136
|
-
},
|
|
137
|
-
"actionItems": [
|
|
138
|
-
"Prioritized list of fixes (P1 first, then P2, then principles)"
|
|
139
|
-
]
|
|
102
|
+
"balanceAssessment": {"overOptimization": "none|minor|major", "lostExpertise": "none|minor|major", "clarityTradeOff": "none|minor|major", "descriptionQuality": "pass|needs fix"},
|
|
103
|
+
"actionItems": ["Prioritized list of fixes (P1 first, then P2, then principles)"]
|
|
140
104
|
}
|
|
141
105
|
```
|
|
142
106
|
|
|
@@ -73,6 +73,10 @@ Generate at least 3 solutions from the following perspectives:
|
|
|
73
73
|
| mitigation | Measures to reduce impact | Temporary measure while waiting for root fix |
|
|
74
74
|
| fundamental | Comprehensive fix including recurrence prevention | When similar problems have occurred repeatedly |
|
|
75
75
|
|
|
76
|
+
**Adjacent Case Coverage**:
|
|
77
|
+
- When the confirmed failure point concerns a `bug-fix`, `regression`, `state-change`, or `boundary-change` (the debugging flow carries no Change Category field, so judge these from the failure point itself), evaluate whether cases sharing the same path, contract, persisted state, or external boundary need the same fix
|
|
78
|
+
- Include those adjacent cases in the solution scope when they share the same class of defect; record in residualRisks why any are excluded
|
|
79
|
+
|
|
76
80
|
**Generated Solution Verification**:
|
|
77
81
|
- Check if project rules have applicable guidelines
|
|
78
82
|
- For areas without guidelines, research current best practices via WebSearch to verify solutions align with standard approaches
|
|
@@ -116,24 +120,10 @@ Final message: exactly one JSON object matching the schema below (begins with `{
|
|
|
116
120
|
},
|
|
117
121
|
"solutions": [
|
|
118
122
|
{
|
|
119
|
-
"id": "S1",
|
|
120
|
-
"
|
|
121
|
-
"
|
|
122
|
-
"
|
|
123
|
-
"implementation": {
|
|
124
|
-
"approach": "Implementation approach description",
|
|
125
|
-
"affectedFiles": ["Files requiring changes"],
|
|
126
|
-
"dependencies": ["Affected dependencies"]
|
|
127
|
-
},
|
|
128
|
-
"tradeoffs": {
|
|
129
|
-
"cost": {"level": "low|medium|high", "details": "Details"},
|
|
130
|
-
"risk": {"level": "low|medium|high", "details": "Details"},
|
|
131
|
-
"scope": {"level": "low|medium|high", "details": "Details"},
|
|
132
|
-
"maintainability": {"level": "low|medium|high", "details": "Details"},
|
|
133
|
-
"certainty": {"level": "low|medium|high", "details": "Details"}
|
|
134
|
-
},
|
|
135
|
-
"pros": ["Advantages"],
|
|
136
|
-
"cons": ["Disadvantages"]
|
|
123
|
+
"id": "S1", "name": "Solution name", "type": "direct|workaround|mitigation|fundamental", "description": "Detailed solution description",
|
|
124
|
+
"implementation": {"approach": "Implementation approach description", "affectedFiles": ["Files requiring changes"], "dependencies": ["Affected dependencies"]},
|
|
125
|
+
"tradeoffs": {"cost": {"level": "low|medium|high", "details": "Details"}, "risk": {"level": "low|medium|high", "details": "Details"}, "scope": {"level": "low|medium|high", "details": "Details"}, "maintainability": {"level": "low|medium|high", "details": "Details"}, "certainty": {"level": "low|medium|high", "details": "Details"}},
|
|
126
|
+
"pros": ["Advantages"], "cons": ["Disadvantages"]
|
|
137
127
|
}
|
|
138
128
|
],
|
|
139
129
|
"recommendation": {
|
|
@@ -144,12 +134,7 @@ Final message: exactly one JSON object matching the schema below (begins with `{
|
|
|
144
134
|
},
|
|
145
135
|
"implementationPlan": {
|
|
146
136
|
"steps": [
|
|
147
|
-
{
|
|
148
|
-
"order": 1,
|
|
149
|
-
"action": "Specific action",
|
|
150
|
-
"verification": "How to verify this step",
|
|
151
|
-
"rollback": "Rollback procedure if problems occur"
|
|
152
|
-
}
|
|
137
|
+
{"order": 1, "action": "Specific action", "verification": "How to verify this step", "rollback": "Rollback procedure if problems occur"}
|
|
153
138
|
],
|
|
154
139
|
"criticalPoints": ["Points requiring special attention"]
|
|
155
140
|
},
|
|
@@ -102,6 +102,7 @@ Decompose tasks based on implementation strategy patterns determined in implemen
|
|
|
102
102
|
- Task overview
|
|
103
103
|
- Target files
|
|
104
104
|
- **Investigation Targets** (what the executor must read and understand before implementing)
|
|
105
|
+
- **Change Category** (when the task is a bug fix / regression / state-change / boundary-change — see Change Category Classification below)
|
|
105
106
|
- Concrete implementation steps
|
|
106
107
|
- **Quality Assurance Mechanisms** (derived from work plan header — see Quality Assurance Mechanism Propagation below)
|
|
107
108
|
- **Operation Verification Methods** (derived from Verification Strategy in work plan)
|
|
@@ -222,6 +223,21 @@ When the work plan header includes a Quality Assurance Mechanisms table, propaga
|
|
|
222
223
|
3. **Include all if coverage is unspecified**: If a mechanism has no specific file coverage (applies project-wide), include it in every task
|
|
223
224
|
4. **Omit when no match**: If no mechanisms match a task's target files, omit the "Quality Assurance Mechanisms" section from that task
|
|
224
225
|
|
|
226
|
+
## Change Category Classification
|
|
227
|
+
|
|
228
|
+
When a task corrects observed behavior or alters how state or a boundary behaves, classify it so the executor and downstream reviewers run a scoped adjacent-case sweep from the field value, rather than re-inferring the task's intent:
|
|
229
|
+
|
|
230
|
+
1. **Classify from the work plan and Design Doc**. A task can match more than one category (e.g., a regression fix that changes a persisted-state boundary); record every value that applies:
|
|
231
|
+
- `bug-fix`: corrects observed incorrect behavior
|
|
232
|
+
- `regression`: restores behavior a prior change broke
|
|
233
|
+
- `state-change`: alters how state is written, transitioned, or persisted
|
|
234
|
+
- `boundary-change`: changes a published or consumed contract at an external, cross-package, or persisted boundary
|
|
235
|
+
2. **Populate the task's `Change Category` field** with all matched values, comma-separated (see task template).
|
|
236
|
+
3. **Extend Investigation Targets with the adjacent cases**. For every matched category, add the files sharing the same path, contract, persisted state, or external boundary as the change — including the owner module on both sides of an affected boundary — so the executor can sweep them for the same class of defect. Union the targets across all matched categories.
|
|
237
|
+
4. **Apply only on a match**. Purely additive, config, or scaffolding tasks default to no `Change Category` field and skip this propagation.
|
|
238
|
+
|
|
239
|
+
This is distinct from per-AC boundary-path proof (which proves a boundary path *within* an AC): Change Category drives a sweep of cases that sit *outside* the task's ACs but share its path, contract, state, or boundary.
|
|
240
|
+
|
|
225
241
|
## Task File Template
|
|
226
242
|
|
|
227
243
|
See task template in documentation-criteria skill for details.
|
|
@@ -359,6 +375,7 @@ Please execute decomposed tasks according to the order.
|
|
|
359
375
|
- [ ] Implementation efficiency and rework prevention (pre-identification of common processing, clarification of impact scope)
|
|
360
376
|
- [ ] Investigation Targets specified for every task (specific file paths, not vague categories)
|
|
361
377
|
- [ ] Proof Obligations recorded for each claim-implementing task (primary failure mode + boundary to exercise)
|
|
378
|
+
- [ ] Change Category set for bug-fix / regression / state-change / boundary-change tasks, with adjacent path/boundary owners added to Investigation Targets
|
|
362
379
|
- [ ] Quality Assurance Mechanisms from work plan header propagated to relevant tasks
|
|
363
380
|
|
|
364
381
|
## Task Design Principles
|
|
@@ -183,6 +183,17 @@ This gate runs only when the task file's "Investigation Targets" section lists a
|
|
|
183
183
|
2. **Investigate existing implementations**: Search for similar components/hooks in same domain/responsibility
|
|
184
184
|
3. **Execute determination**: Determine continue/escalation per "Mandatory Judgment Criteria" above
|
|
185
185
|
|
|
186
|
+
#### Adjacent Case Sweep (Required when the task file has a `Change Category` field set to one or more of `bug-fix`, `regression`, `state-change`, `boundary-change`)
|
|
187
|
+
|
|
188
|
+
Runs after Pre-implementation Verification, before the Binding Decision Check. This step fires on the field value the task decomposition wrote — read the field value and treat it as authoritative for whether the sweep applies.
|
|
189
|
+
|
|
190
|
+
1. From the Investigation Targets (the decomposition already extended them with the adjacent files), identify the cases sharing the same path, contract, persisted state, or external boundary as the change — fallback rendering, stale state, retries, and external calls related to the change.
|
|
191
|
+
2. Check each for the same class of defect this task corrects.
|
|
192
|
+
3. Disposition each residual by scope:
|
|
193
|
+
- **Within Target Files scope** → fold the residual into this task's failing tests and implementation.
|
|
194
|
+
- **A confirmed out-of-scope sibling that needs the same fix** → raise the `out_of_scope_file` escalation (the standard path for a file outside Target Files), letting the user expand Target Files or split off a follow-up task. This routes a confirmed adjacent defect to an explicit decision.
|
|
195
|
+
- **A related residual not confirmed to need the same fix** → record it in the task file's Investigation Notes so code-reviewer's adjacent-case check verifies it against the implementation.
|
|
196
|
+
|
|
186
197
|
#### Binding Decision Check (Required when the task file has a Binding Decisions section)
|
|
187
198
|
|
|
188
199
|
This check runs after Pre-implementation Verification and before the TDD cycle. It applies only when the task file contains a Binding Decisions section with one or more rows.
|
|
@@ -278,20 +289,8 @@ Report in the following JSON format upon task completion (**without executing qu
|
|
|
278
289
|
"testsAdded": ["src/components/Button/Button.test.tsx"],
|
|
279
290
|
"requiresTestReview": false,
|
|
280
291
|
"newTestsPassed": true,
|
|
281
|
-
"progressUpdated": {
|
|
282
|
-
|
|
283
|
-
"workPlan": "Relevant sections updated",
|
|
284
|
-
"designDoc": "Progress section updated or N/A"
|
|
285
|
-
},
|
|
286
|
-
"runnableCheck": {
|
|
287
|
-
"level": "L1: Unit test (React Testing Library) / L2: Integration test / L3: E2E test",
|
|
288
|
-
"executed": true,
|
|
289
|
-
"command": "test -- Button.test.tsx",
|
|
290
|
-
"result": "passed / failed / skipped",
|
|
291
|
-
"substance": "substantive | non_substantive | null (non-test verification)",
|
|
292
|
-
"substanceIssue": "null when substantive or non-test; cause and location when non_substantive",
|
|
293
|
-
"reason": "Test execution reason/verification content"
|
|
294
|
-
},
|
|
292
|
+
"progressUpdated": {"taskFile": "5/8 items completed", "workPlan": "Relevant sections updated", "designDoc": "Progress section updated or N/A"},
|
|
293
|
+
"runnableCheck": {"level": "L1: Unit test (React Testing Library) / L2: Integration test / L3: E2E test", "executed": true, "command": "test -- Button.test.tsx", "result": "passed / failed / skipped", "substance": "substantive | non_substantive | null (non-test verification)", "substanceIssue": "null when substantive or non-test; cause and location when non_substantive", "reason": "Test execution reason/verification content"},
|
|
295
294
|
"readyForQualityCheck": true,
|
|
296
295
|
"nextActions": "Overall quality verification by quality assurance process"
|
|
297
296
|
}
|
|
@@ -334,11 +333,7 @@ Minimal example (out_of_scope_file):
|
|
|
334
333
|
"reason": "Out of scope file",
|
|
335
334
|
"taskName": "[task name]",
|
|
336
335
|
"escalation_type": "out_of_scope_file",
|
|
337
|
-
"details": {
|
|
338
|
-
"file_path": "[path attempted]",
|
|
339
|
-
"allowed_list": ["[union of Target Files, task file, work plan, Provides]"],
|
|
340
|
-
"modification_reason": "[why modification was attempted]"
|
|
341
|
-
},
|
|
336
|
+
"details": {"file_path": "[path attempted]", "allowed_list": ["[union of Target Files, task file, work plan, Provides]"], "modification_reason": "[why modification was attempted]"},
|
|
342
337
|
"user_decision_required": true,
|
|
343
338
|
"suggested_options": ["Add to Target files and retry", "Split into separate task", "Reconsider approach"]
|
|
344
339
|
}
|
|
@@ -183,6 +183,17 @@ This gate runs only when the task file's "Investigation Targets" section lists a
|
|
|
183
183
|
2. **Investigate existing implementations**: Search for similar functions in same domain/responsibility
|
|
184
184
|
3. **Execute determination**: Determine continue/escalation per "Mandatory Judgment Criteria" above
|
|
185
185
|
|
|
186
|
+
#### Adjacent Case Sweep (Required when the task file has a `Change Category` field set to one or more of `bug-fix`, `regression`, `state-change`, `boundary-change`)
|
|
187
|
+
|
|
188
|
+
Runs after Pre-implementation Verification, before the Binding Decision Check. This step fires on the field value the task decomposition wrote — read the field value and treat it as authoritative for whether the sweep applies.
|
|
189
|
+
|
|
190
|
+
1. From the Investigation Targets (the decomposition already extended them with the adjacent files), identify the cases sharing the same path, contract, persisted state, or external boundary as the change — fallback behavior, stale state, retries, and external calls related to the change.
|
|
191
|
+
2. Check each for the same class of defect this task corrects.
|
|
192
|
+
3. Disposition each residual by scope:
|
|
193
|
+
- **Within Target Files scope** → fold the residual into this task's failing tests and implementation.
|
|
194
|
+
- **A confirmed out-of-scope sibling that needs the same fix** → raise the `out_of_scope_file` escalation (the standard path for a file outside Target Files), letting the user expand Target Files or split off a follow-up task. This routes a confirmed adjacent defect to an explicit decision.
|
|
195
|
+
- **A related residual not confirmed to need the same fix** → record it in the task file's Investigation Notes so code-reviewer's adjacent-case check verifies it against the implementation.
|
|
196
|
+
|
|
186
197
|
#### Binding Decision Check (Required when the task file has a Binding Decisions section)
|
|
187
198
|
|
|
188
199
|
This check runs after Pre-implementation Verification and before the TDD cycle. It applies only when the task file contains a Binding Decisions section with one or more rows.
|
|
@@ -281,20 +292,8 @@ Report in the following JSON format upon task completion (**without executing qu
|
|
|
281
292
|
"testsAdded": ["created/test/file/path"],
|
|
282
293
|
"requiresTestReview": true,
|
|
283
294
|
"newTestsPassed": true,
|
|
284
|
-
"progressUpdated": {
|
|
285
|
-
|
|
286
|
-
"workPlan": "Relevant sections updated",
|
|
287
|
-
"designDoc": "Progress section updated or N/A"
|
|
288
|
-
},
|
|
289
|
-
"runnableCheck": {
|
|
290
|
-
"level": "L1: Unit test / L2: Integration test / L3: E2E test",
|
|
291
|
-
"executed": true,
|
|
292
|
-
"command": "Executed test command",
|
|
293
|
-
"result": "passed / failed / skipped",
|
|
294
|
-
"substance": "substantive | non_substantive | null (non-test verification)",
|
|
295
|
-
"substanceIssue": "null when substantive or non-test; cause and location when non_substantive",
|
|
296
|
-
"reason": "Test execution reason/verification content"
|
|
297
|
-
},
|
|
295
|
+
"progressUpdated": {"taskFile": "5/8 items completed", "workPlan": "Relevant sections updated", "designDoc": "Progress section updated or N/A"},
|
|
296
|
+
"runnableCheck": {"level": "L1: Unit test / L2: Integration test / L3: E2E test", "executed": true, "command": "Executed test command", "result": "passed / failed / skipped", "substance": "substantive | non_substantive | null (non-test verification)", "substanceIssue": "null when substantive or non-test; cause and location when non_substantive", "reason": "Test execution reason/verification content"},
|
|
298
297
|
"readyForQualityCheck": true,
|
|
299
298
|
"nextActions": "Overall quality verification by quality assurance process"
|
|
300
299
|
}
|
|
@@ -337,11 +336,7 @@ Minimal example (out_of_scope_file):
|
|
|
337
336
|
"reason": "Out of scope file",
|
|
338
337
|
"taskName": "[task name]",
|
|
339
338
|
"escalation_type": "out_of_scope_file",
|
|
340
|
-
"details": {
|
|
341
|
-
"file_path": "[path attempted]",
|
|
342
|
-
"allowed_list": ["[union of Target Files, task file, work plan, Provides]"],
|
|
343
|
-
"modification_reason": "[why modification was attempted]"
|
|
344
|
-
},
|
|
339
|
+
"details": {"file_path": "[path attempted]", "allowed_list": ["[union of Target Files, task file, work plan, Provides]"], "modification_reason": "[why modification was attempted]"},
|
|
345
340
|
"user_decision_required": true,
|
|
346
341
|
"suggested_options": ["Add to Target files and retry", "Split into separate task", "Reconsider approach"]
|
|
347
342
|
}
|
|
@@ -165,142 +165,43 @@ Produce `candidateWriteSet[]` listing the files most likely to require modificat
|
|
|
165
165
|
|
|
166
166
|
```json
|
|
167
167
|
{
|
|
168
|
-
"analysisScope": {
|
|
169
|
-
"filesAnalyzed": ["path/to/component.tsx"],
|
|
170
|
-
"stylesAnalyzed": ["path/to/styles.module.css"],
|
|
171
|
-
"uiConventions": {
|
|
172
|
-
"componentExtension": ".tsx",
|
|
173
|
-
"styleStrategy": "css-modules|vanilla-css|css-in-js|utility-classes",
|
|
174
|
-
"storybook": true,
|
|
175
|
-
"testRunner": "vitest|jest|other"
|
|
176
|
-
}
|
|
177
|
-
},
|
|
168
|
+
"analysisScope": {"filesAnalyzed": ["path/to/component.tsx"], "stylesAnalyzed": ["path/to/styles.module.css"], "uiConventions": {"componentExtension": ".tsx", "styleStrategy": "css-modules|vanilla-css|css-in-js|utility-classes", "storybook": true, "testRunner": "vitest|jest|other"}},
|
|
178
169
|
"externalResources": {
|
|
179
170
|
"status": "fetched|partial|not_recorded",
|
|
180
|
-
"designOrigin": {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
},
|
|
185
|
-
"designSystem": {
|
|
186
|
-
"fetch_status": "fetched|mcp_unavailable|skipped|not_applicable",
|
|
187
|
-
"accessMethod": "...",
|
|
188
|
-
"fetched_summary": "components catalogued, tokens captured, anti-pattern identifiers"
|
|
189
|
-
},
|
|
190
|
-
"guidelines": {
|
|
191
|
-
"fetch_status": "fetched|skipped|not_applicable",
|
|
192
|
-
"accessMethod": "...",
|
|
193
|
-
"fetched_summary": "rule categories captured (CSS, accessibility, i18n, etc.)"
|
|
194
|
-
},
|
|
195
|
-
"visualVerification": {
|
|
196
|
-
"fetch_status": "available|mcp_unavailable|not_applicable",
|
|
197
|
-
"accessMethod": "...",
|
|
198
|
-
"notes": "how rendered output is verified during implementation"
|
|
199
|
-
}
|
|
171
|
+
"designOrigin": {"fetch_status": "fetched|mcp_unavailable|skipped|not_applicable", "accessMethod": "MCP name | URL | file path | existing-implementation-only", "fetched_summary": "brief description of fetched content (e.g., screen names, frame ids, token snapshot)"},
|
|
172
|
+
"designSystem": {"fetch_status": "fetched|mcp_unavailable|skipped|not_applicable", "accessMethod": "...", "fetched_summary": "components catalogued, tokens captured, anti-pattern identifiers"},
|
|
173
|
+
"guidelines": {"fetch_status": "fetched|skipped|not_applicable", "accessMethod": "...", "fetched_summary": "rule categories captured (CSS, accessibility, i18n, etc.)"},
|
|
174
|
+
"visualVerification": {"fetch_status": "available|mcp_unavailable|not_applicable", "accessMethod": "...", "notes": "how rendered output is verified during implementation"}
|
|
200
175
|
},
|
|
201
176
|
"componentStructure": [
|
|
202
|
-
{
|
|
203
|
-
"name": "ComponentName",
|
|
204
|
-
"filePath": "path/to/file:lineNumber",
|
|
205
|
-
"propsInterface": "name and brief shape",
|
|
206
|
-
"topLevelElement": "tag or component name",
|
|
207
|
-
"domOrder": ["child1", "child2", "child3"],
|
|
208
|
-
"conditionalBranches": [
|
|
209
|
-
{"predicate": "condition expression", "renderedSubtree": "brief description"}
|
|
210
|
-
],
|
|
211
|
-
"callSites": ["path/to/consumer:line"]
|
|
212
|
-
}
|
|
177
|
+
{"name": "ComponentName", "filePath": "path/to/file:lineNumber", "propsInterface": "name and brief shape", "topLevelElement": "tag or component name", "domOrder": ["child1", "child2", "child3"], "conditionalBranches": [{"predicate": "condition expression", "renderedSubtree": "brief description"}], "callSites": ["path/to/consumer:line"]}
|
|
213
178
|
],
|
|
214
179
|
"propsPatterns": [
|
|
215
|
-
{
|
|
216
|
-
"component": "ComponentName",
|
|
217
|
-
"callSite": "path/to/file:line",
|
|
218
|
-
"props": {"variant": "primary", "size": "md"},
|
|
219
|
-
"computedProps": ["onClick (useCallback)"],
|
|
220
|
-
"groupKey": "primary-md"
|
|
221
|
-
}
|
|
180
|
+
{"component": "ComponentName", "callSite": "path/to/file:line", "props": {"variant": "primary", "size": "md"}, "computedProps": ["onClick (useCallback)"], "groupKey": "primary-md"}
|
|
222
181
|
],
|
|
223
182
|
"cssLayout": [
|
|
224
|
-
{
|
|
225
|
-
"filePath": "path/to/styles.module.css",
|
|
226
|
-
"classNamingConvention": "camelCase|kebab-case|BEM",
|
|
227
|
-
"baseClass": "root",
|
|
228
|
-
"layouts": [
|
|
229
|
-
{
|
|
230
|
-
"selector": ".className",
|
|
231
|
-
"display": "flex|grid|block",
|
|
232
|
-
"direction": "row|column|grid-template",
|
|
233
|
-
"gap": "8px|none",
|
|
234
|
-
"wrap": "wrap|nowrap|absent",
|
|
235
|
-
"logicalProperties": true,
|
|
236
|
-
"stateSelectors": ["[data-state=active]", "[aria-selected=true]"]
|
|
237
|
-
}
|
|
238
|
-
],
|
|
239
|
-
"responsiveBreakpoints": ["768px", "1024px"]
|
|
240
|
-
}
|
|
183
|
+
{"filePath": "path/to/styles.module.css", "classNamingConvention": "camelCase|kebab-case|BEM", "baseClass": "root", "layouts": [{"selector": ".className", "display": "flex|grid|block", "direction": "row|column|grid-template", "gap": "8px|none", "wrap": "wrap|nowrap|absent", "logicalProperties": true, "stateSelectors": ["[data-state=active]", "[aria-selected=true]"]}], "responsiveBreakpoints": ["768px", "1024px"]}
|
|
241
184
|
],
|
|
242
185
|
"stateDisplay": [
|
|
243
|
-
{
|
|
244
|
-
"component": "ComponentName",
|
|
245
|
-
"states": [
|
|
246
|
-
{"name": "loading|empty|partial|error|ready|disabled", "trigger": "what causes this state", "renders": "brief description"}
|
|
247
|
-
],
|
|
248
|
-
"unsupportedStates": ["states the component does not currently express"]
|
|
249
|
-
}
|
|
186
|
+
{"component": "ComponentName", "states": [{"name": "loading|empty|partial|error|ready|disabled", "trigger": "what causes this state", "renders": "brief description"}], "unsupportedStates": ["states the component does not currently express"]}
|
|
250
187
|
],
|
|
251
188
|
"displayConditions": [
|
|
252
|
-
{
|
|
253
|
-
"component": "ComponentName",
|
|
254
|
-
"condition": "feature_flag|role|route|region|tenant|page_context",
|
|
255
|
-
"predicateLocation": "path/to/file:line",
|
|
256
|
-
"predicate": "expression",
|
|
257
|
-
"gatedSubtree": "brief description"
|
|
258
|
-
}
|
|
189
|
+
{"component": "ComponentName", "condition": "feature_flag|role|route|region|tenant|page_context", "predicateLocation": "path/to/file:line", "predicate": "expression", "gatedSubtree": "brief description"}
|
|
259
190
|
],
|
|
260
|
-
"i18n": {
|
|
261
|
-
"format": "csv|json|code-catalog|other",
|
|
262
|
-
"structuralConventions": {"csvColumns": 2, "trailingComma": false, "jsonNestingDepth": 1},
|
|
263
|
-
"keyNamingConvention": "pattern with examples",
|
|
264
|
-
"locales": ["ja-JP", "en-US"],
|
|
265
|
-
"localeGaps": ["keys present in one locale only"],
|
|
266
|
-
"generatedTypings": {"command": "generator command", "outputPath": "path/to/output"}
|
|
267
|
-
},
|
|
191
|
+
"i18n": {"format": "csv|json|code-catalog|other", "structuralConventions": {"csvColumns": 2, "trailingComma": false, "jsonNestingDepth": 1}, "keyNamingConvention": "pattern with examples", "locales": ["ja-JP", "en-US"], "localeGaps": ["keys present in one locale only"], "generatedTypings": {"command": "generator command", "outputPath": "path/to/output"}},
|
|
268
192
|
"accessibility": [
|
|
269
|
-
{
|
|
270
|
-
"component": "ComponentName",
|
|
271
|
-
"ariaAttributes": ["role=button", "aria-label fed by prop accessibleName"],
|
|
272
|
-
"keyboardHandling": "Enter and Space mapped to onClick",
|
|
273
|
-
"focusStyling": "focus-visible outline",
|
|
274
|
-
"testCoverage": "axe checks present|absent"
|
|
275
|
-
}
|
|
193
|
+
{"component": "ComponentName", "ariaAttributes": ["role=button", "aria-label fed by prop accessibleName"], "keyboardHandling": "Enter and Space mapped to onClick", "focusStyling": "focus-visible outline", "testCoverage": "axe checks present|absent"}
|
|
276
194
|
],
|
|
277
195
|
"generatedArtifacts": [
|
|
278
|
-
{
|
|
279
|
-
"kind": "css-module-typings|message-catalog-typings|route-typings|other",
|
|
280
|
-
"command": "generator command",
|
|
281
|
-
"trigger": "on *.module.css change|manual|other",
|
|
282
|
-
"consumers": ["typecheck", "test", "build", "runtime"]
|
|
283
|
-
}
|
|
196
|
+
{"kind": "css-module-typings|message-catalog-typings|route-typings|other", "command": "generator command", "trigger": "on *.module.css change|manual|other", "consumers": ["typecheck", "test", "build", "runtime"]}
|
|
284
197
|
],
|
|
285
198
|
"focusAreas": [
|
|
286
|
-
{
|
|
287
|
-
"fact_id": "src/components/Card/Card.tsx:Card",
|
|
288
|
-
"area": "Brief UI area name",
|
|
289
|
-
"evidence": "componentStructure[name=Card] | cssLayout[selector=.root] | propsPatterns[groupKey=...] | externalResources.designOrigin",
|
|
290
|
-
"factsToAddress": "Concrete UI facts the designer or implementer must respect",
|
|
291
|
-
"risk": "What inconsistency results if these facts are omitted"
|
|
292
|
-
}
|
|
199
|
+
{"fact_id": "src/components/Card/Card.tsx:Card", "area": "Brief UI area name", "evidence": "componentStructure[name=Card] | cssLayout[selector=.root] | propsPatterns[groupKey=...] | externalResources.designOrigin", "factsToAddress": "Concrete UI facts the designer or implementer must respect", "risk": "What inconsistency results if these facts are omitted"}
|
|
293
200
|
],
|
|
294
201
|
"candidateWriteSet": [
|
|
295
|
-
{
|
|
296
|
-
"path": "src/components/Card/Card.tsx",
|
|
297
|
-
"reasonRef": "focusAreas[fact_id=src/components/Card/Card.tsx:Card]",
|
|
298
|
-
"confidence": "high|medium|low"
|
|
299
|
-
}
|
|
202
|
+
{"path": "src/components/Card/Card.tsx", "reasonRef": "focusAreas[fact_id=src/components/Card/Card.tsx:Card]", "confidence": "high|medium|low"}
|
|
300
203
|
],
|
|
301
|
-
"limitations": [
|
|
302
|
-
"Areas the analysis could not reach with confidence"
|
|
303
|
-
]
|
|
204
|
+
"limitations": ["Areas the analysis could not reach with confidence"]
|
|
304
205
|
}
|
|
305
206
|
```
|
|
306
207
|
|