create-ai-project 1.23.3 → 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 +8 -31
- 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 +4 -8
- package/.claude/agents-en/quality-fixer.md +4 -8
- 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 +19 -1
- package/.claude/agents-en/task-executor-frontend.md +15 -20
- package/.claude/agents-en/task-executor.md +15 -20
- package/.claude/agents-en/ui-analyzer.md +16 -115
- package/.claude/agents-en/verifier.md +9 -53
- package/.claude/agents-en/work-planner.md +2 -5
- package/.claude/agents-ja/acceptance-test-generator.md +8 -31
- 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 +4 -8
- package/.claude/agents-ja/quality-fixer.md +4 -8
- 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 +19 -1
- package/.claude/agents-ja/task-executor-frontend.md +15 -20
- package/.claude/agents-ja/task-executor.md +15 -20
- package/.claude/agents-ja/ui-analyzer.md +16 -115
- package/.claude/agents-ja/verifier.md +9 -53
- package/.claude/agents-ja/work-planner.md +2 -5
- package/.claude/commands-en/build.md +6 -15
- package/.claude/commands-en/front-build.md +4 -13
- package/.claude/commands-en/implement.md +2 -15
- package/.claude/commands-en/plan.md +7 -2
- package/.claude/commands-en/prepare-implementation.md +7 -17
- package/.claude/commands-en/sync-skills.md +3 -3
- package/.claude/commands-ja/build.md +7 -16
- package/.claude/commands-ja/front-build.md +4 -13
- package/.claude/commands-ja/implement.md +2 -15
- package/.claude/commands-ja/plan.md +6 -1
- package/.claude/commands-ja/prepare-implementation.md +8 -18
- package/.claude/commands-ja/sync-skills.md +3 -3
- package/.claude/skills-en/documentation-criteria/references/plan-template.md +1 -3
- 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/integration-e2e-testing/SKILL.md +2 -0
- package/.claude/skills-en/subagents-orchestration-guide/SKILL.md +2 -7
- 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 -3
- 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/integration-e2e-testing/SKILL.md +2 -0
- package/.claude/skills-ja/subagents-orchestration-guide/SKILL.md +2 -7
- 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 +16 -0
- package/package.json +1 -1
|
@@ -87,56 +87,20 @@ skill-optimizationの9つの編集原則に対して評価:
|
|
|
87
87
|
"grade": "A|B|C",
|
|
88
88
|
"summary": "1-2文の総合評価",
|
|
89
89
|
"patternIssues": [
|
|
90
|
-
{
|
|
91
|
-
"pattern": "BP-XXX",
|
|
92
|
-
"severity": "P1|P2|P3",
|
|
93
|
-
"location": "セクション見出し",
|
|
94
|
-
"original": "引用テキスト",
|
|
95
|
-
"suggestedFix": "置換テキスト"
|
|
96
|
-
}
|
|
90
|
+
{"pattern": "BP-XXX", "severity": "P1|P2|P3", "location": "セクション見出し", "original": "引用テキスト", "suggestedFix": "置換テキスト"}
|
|
97
91
|
],
|
|
98
92
|
"patternExceptions": [
|
|
99
|
-
{
|
|
100
|
-
"pattern": "BP-XXX",
|
|
101
|
-
"location": "セクション見出し",
|
|
102
|
-
"original": "引用テキスト",
|
|
103
|
-
"conditions": {
|
|
104
|
-
"singleStepDestruction": "true|false + エビデンス",
|
|
105
|
-
"callerCannotRecover": "true|false + エビデンス",
|
|
106
|
-
"operationalNotPolicy": "true|false + エビデンス",
|
|
107
|
-
"positiveFormBlursScope": "true|false + エビデンス"
|
|
108
|
-
}
|
|
109
|
-
}
|
|
93
|
+
{"pattern": "BP-XXX", "location": "セクション見出し", "original": "引用テキスト", "conditions": {"singleStepDestruction": "true|false + エビデンス", "callerCannotRecover": "true|false + エビデンス", "operationalNotPolicy": "true|false + エビデンス", "positiveFormBlursScope": "true|false + エビデンス"}}
|
|
110
94
|
],
|
|
111
95
|
"principlesEvaluation": [
|
|
112
|
-
{
|
|
113
|
-
"principle": "1: コンテキスト効率",
|
|
114
|
-
"status": "pass|partial|fail",
|
|
115
|
-
"detail": "合格以外の場合の説明"
|
|
116
|
-
}
|
|
96
|
+
{"principle": "1: コンテキスト効率", "status": "pass|partial|fail", "detail": "合格以外の場合の説明"}
|
|
117
97
|
],
|
|
118
|
-
"progressiveDisclosure": {
|
|
119
|
-
"tier1": "pass|fail(description品質)",
|
|
120
|
-
"tier2": "pass|fail(本文構造)",
|
|
121
|
-
"tier3": "pass|fail(参照構成)",
|
|
122
|
-
"details": "問題がある場合の具体的な指摘"
|
|
123
|
-
},
|
|
98
|
+
"progressiveDisclosure": {"tier1": "pass|fail(description品質)", "tier2": "pass|fail(本文構造)", "tier3": "pass|fail(参照構成)", "details": "問題がある場合の具体的な指摘"},
|
|
124
99
|
"crossSkillIssues": [
|
|
125
|
-
{
|
|
126
|
-
"overlappingSkill": "スキル名",
|
|
127
|
-
"description": "重複内容",
|
|
128
|
-
"recommendation": "参照に置換 or 重複排除"
|
|
129
|
-
}
|
|
100
|
+
{"overlappingSkill": "スキル名", "description": "重複内容", "recommendation": "参照に置換 or 重複排除"}
|
|
130
101
|
],
|
|
131
|
-
"balanceAssessment": {
|
|
132
|
-
|
|
133
|
-
"lostExpertise": "none|minor|major",
|
|
134
|
-
"clarityTradeOff": "none|minor|major",
|
|
135
|
-
"descriptionQuality": "pass|needs fix"
|
|
136
|
-
},
|
|
137
|
-
"actionItems": [
|
|
138
|
-
"優先度順の修正リスト(P1 → P2 → 原則)"
|
|
139
|
-
]
|
|
102
|
+
"balanceAssessment": {"overOptimization": "none|minor|major", "lostExpertise": "none|minor|major", "clarityTradeOff": "none|minor|major", "descriptionQuality": "pass|needs fix"},
|
|
103
|
+
"actionItems": ["優先度順の修正リスト(P1 → P2 → 原則)"]
|
|
140
104
|
}
|
|
141
105
|
```
|
|
142
106
|
|
|
@@ -73,6 +73,10 @@ skills: project-context, technical-spec, coding-standards, implementation-approa
|
|
|
73
73
|
| mitigation | 影響を軽減する対策 | 根本解決まで時間がかかる場合の暫定策 |
|
|
74
74
|
| fundamental | 再発防止を含む抜本対策 | 同様の問題が繰り返し発生している場合 |
|
|
75
75
|
|
|
76
|
+
**隣接ケースのカバレッジ**:
|
|
77
|
+
- 確認済みの障害点が `bug-fix` / `regression` / `state-change` / `boundary-change` に関わる場合(デバッグフローには Change Category フィールドが無いため、障害点自体から判断する)、同一の経路・契約・永続状態・外部境界を共有するケースが同じ修正を必要とするか評価する
|
|
78
|
+
- 同一クラスの欠陥を共有する隣接ケースは解決スコープに含める。除外するものは residualRisks にその理由を記録する
|
|
79
|
+
|
|
76
80
|
**生成した解決策の検証**:
|
|
77
81
|
- プロジェクトルールに該当指針があるか確認
|
|
78
82
|
- 指針がない領域は、WebSearchでその領域の現在のベストプラクティスを調査し、解決策が標準的アプローチに沿っているか検証
|
|
@@ -116,24 +120,10 @@ skills: project-context, technical-spec, coding-standards, implementation-approa
|
|
|
116
120
|
},
|
|
117
121
|
"solutions": [
|
|
118
122
|
{
|
|
119
|
-
"id": "S1",
|
|
120
|
-
"
|
|
121
|
-
"
|
|
122
|
-
"
|
|
123
|
-
"implementation": {
|
|
124
|
-
"approach": "実装アプローチの説明",
|
|
125
|
-
"affectedFiles": ["変更が必要なファイル"],
|
|
126
|
-
"dependencies": ["影響を受ける依存関係"]
|
|
127
|
-
},
|
|
128
|
-
"tradeoffs": {
|
|
129
|
-
"cost": {"level": "low|medium|high", "details": "詳細"},
|
|
130
|
-
"risk": {"level": "low|medium|high", "details": "詳細"},
|
|
131
|
-
"scope": {"level": "low|medium|high", "details": "詳細"},
|
|
132
|
-
"maintainability": {"level": "low|medium|high", "details": "詳細"},
|
|
133
|
-
"certainty": {"level": "low|medium|high", "details": "詳細"}
|
|
134
|
-
},
|
|
135
|
-
"pros": ["メリット"],
|
|
136
|
-
"cons": ["デメリット"]
|
|
123
|
+
"id": "S1", "name": "解決策の名前", "type": "direct|workaround|mitigation|fundamental", "description": "解決策の詳細説明",
|
|
124
|
+
"implementation": {"approach": "実装アプローチの説明", "affectedFiles": ["変更が必要なファイル"], "dependencies": ["影響を受ける依存関係"]},
|
|
125
|
+
"tradeoffs": {"cost": {"level": "low|medium|high", "details": "詳細"}, "risk": {"level": "low|medium|high", "details": "詳細"}, "scope": {"level": "low|medium|high", "details": "詳細"}, "maintainability": {"level": "low|medium|high", "details": "詳細"}, "certainty": {"level": "low|medium|high", "details": "詳細"}},
|
|
126
|
+
"pros": ["メリット"], "cons": ["デメリット"]
|
|
137
127
|
}
|
|
138
128
|
],
|
|
139
129
|
"recommendation": {
|
|
@@ -144,12 +134,7 @@ skills: project-context, technical-spec, coding-standards, implementation-approa
|
|
|
144
134
|
},
|
|
145
135
|
"implementationPlan": {
|
|
146
136
|
"steps": [
|
|
147
|
-
{
|
|
148
|
-
"order": 1,
|
|
149
|
-
"action": "具体的なアクション",
|
|
150
|
-
"verification": "このステップの検証方法",
|
|
151
|
-
"rollback": "問題発生時のロールバック手順"
|
|
152
|
-
}
|
|
137
|
+
{"order": 1, "action": "具体的なアクション", "verification": "このステップの検証方法", "rollback": "問題発生時のロールバック手順"}
|
|
153
138
|
],
|
|
154
139
|
"criticalPoints": ["特に注意すべきポイント"]
|
|
155
140
|
},
|
|
@@ -65,6 +65,7 @@ implementation-approachスキルで決定された実装戦略パターンに基
|
|
|
65
65
|
2. **計画書の分析と全体設計**
|
|
66
66
|
- フェーズ構成の確認
|
|
67
67
|
- タスクリストの抽出
|
|
68
|
+
- `[x]` で完了マーク済みかつコミット済みと注記されたタスク(例: prepare-implementation レシピが解消した Phase 0)はスキップする — その作業は既にコードベースに存在する。未消化(`[ ]`)のタスクのみタスクファイルを生成し、完了済みの作業を再生成・再実行しない
|
|
68
69
|
- 依存関係の特定
|
|
69
70
|
- **全体最適化の検討**
|
|
70
71
|
- 共通処理の識別(冗長実装の防止)
|
|
@@ -101,6 +102,7 @@ implementation-approachスキルで決定された実装戦略パターンに基
|
|
|
101
102
|
- `## Implementation Content`(タスク概要)
|
|
102
103
|
- `## Target Files`
|
|
103
104
|
- `## Investigation Targets`(executor が実装前に読んで理解すべきファイル)
|
|
105
|
+
- `## Change Category`(タスクがバグ修正・リグレッション・状態変更・境界変更の場合 — 下記「Change Category の分類」参照)
|
|
104
106
|
- `## Implementation Steps (TDD: Red-Green-Refactor)`
|
|
105
107
|
- `## Quality Assurance Mechanisms`(作業計画書ヘッダーから導出 — 下記「品質保証メカニズムの伝播」参照)
|
|
106
108
|
- `## Operation Verification Methods`(作業計画書の Verification Strategy から導出)
|
|
@@ -221,6 +223,21 @@ implementation-approachスキルで決定された実装戦略パターンに基
|
|
|
221
223
|
3. **カバー範囲未指定の場合は全タスクに記載**: メカニズムのカバー範囲が指定されていない場合(project-wide)、すべてのタスクに含める
|
|
222
224
|
4. **該当なしの場合は省略**: タスクの Target Files に該当するメカニズムがなければ `## Quality Assurance Mechanisms` セクションを省略
|
|
223
225
|
|
|
226
|
+
## Change Category の分類
|
|
227
|
+
|
|
228
|
+
タスクが観測された振る舞いを修正する、または状態や境界の振る舞いを変える場合、executor と下流のレビュアーがタスクの意図を推測し直すのではなくフィールド値からスコープ限定の隣接ケース走査を実行できるよう、これを分類する:
|
|
229
|
+
|
|
230
|
+
1. **作業計画書と Design Doc から分類する**。タスクは複数のカテゴリに該当しうる(例: 永続状態の境界を変えるリグレッション修正)。該当する値をすべて記録する:
|
|
231
|
+
- `bug-fix`: 観測された誤った振る舞いを修正する
|
|
232
|
+
- `regression`: 過去の変更が壊した振る舞いを復元する
|
|
233
|
+
- `state-change`: 状態の書き込み・遷移・永続化のされ方を変える
|
|
234
|
+
- `boundary-change`: 外部・パッケージ間・永続化の境界で、公開または利用される契約を変える
|
|
235
|
+
2. **タスクの `Change Category` フィールドに**該当する値をすべてカンマ区切りで記入する(task-template 参照)。
|
|
236
|
+
3. **隣接ケースを Investigation Targets に追加する**。該当する各カテゴリについて、変更と同一の経路・契約・永続状態・外部境界を共有するファイル(影響を受ける境界の両側のオーナーモジュールを含む)を追加し、executor が同一クラスの欠陥を走査できるようにする。該当する全カテゴリにわたって対象を統合する。
|
|
237
|
+
4. **該当する場合のみ適用する**。純粋な追加・設定・スキャフォールディングのタスクは既定で `Change Category` フィールドを持たず、この伝播をスキップする。
|
|
238
|
+
|
|
239
|
+
これは AC ごとの境界パス証明(AC の*内側*の境界パスを証明する)とは別物である。Change Category は、タスクの AC の*外側*にありながらその経路・契約・状態・境界を共有するケースの走査を駆動する。
|
|
240
|
+
|
|
224
241
|
## タスクファイルテンプレート
|
|
225
242
|
|
|
226
243
|
詳細はdocumentation-criteriaスキルのタスクテンプレートを参照。
|
|
@@ -287,7 +304,7 @@ implementation-approachスキルで決定された実装戦略パターンに基
|
|
|
287
304
|
### 分解完了レポート
|
|
288
305
|
|
|
289
306
|
```markdown
|
|
290
|
-
|
|
307
|
+
タスク分解完了
|
|
291
308
|
|
|
292
309
|
計画書: [ファイル名]
|
|
293
310
|
全体設計書: _overview-[plan-name].md
|
|
@@ -358,6 +375,7 @@ implementation-approachスキルで決定された実装戦略パターンに基
|
|
|
358
375
|
- [ ] 実装効率と手戻り防止(共通処理の事前識別、影響範囲の明確化)
|
|
359
376
|
- [ ] 全タスクに調査対象が指定されている(具体的なファイルパス、曖昧なカテゴリではない)
|
|
360
377
|
- [ ] 主張を実装する各タスクに Proof Obligations を記録(主要な故障モード + 検証する境界)
|
|
378
|
+
- [ ] bug-fix / regression / state-change / boundary-change のタスクに Change Category を設定し、隣接する経路/境界のオーナーを Investigation Targets に追加済み
|
|
361
379
|
- [ ] 作業計画書ヘッダーの品質保証メカニズムを該当タスクに伝播済み
|
|
362
380
|
|
|
363
381
|
## タスク設計の原則
|
|
@@ -116,7 +116,7 @@ package.json の `packageManager` フィールドに従って実行コマンド
|
|
|
116
116
|
|
|
117
117
|
## 責務・権限・境界
|
|
118
118
|
|
|
119
|
-
**範囲内**: `docs/plans/tasks/` からタスクファイルを読み込み、タスクの「Metadata」に記載された依存成果物を確認、React 関数コンポーネントと React Testing Library テストを作成、テストはコンポーネントと共に配置(co-locate)、Red→Green→Refactor のTDDを適用、進捗チェックボックスを更新(タスクファイルは常時更新。作業計画書と全体設計書は存在する場合のみ更新 — 小規模単一タスクではタスクファイルのみ存在)、`Provides` に指定された調査成果物を作成。状態遷移: `[ ]` → `[
|
|
119
|
+
**範囲内**: `docs/plans/tasks/` からタスクファイルを読み込み、タスクの「Metadata」に記載された依存成果物を確認、React 関数コンポーネントと React Testing Library テストを作成、テストはコンポーネントと共に配置(co-locate)、Red→Green→Refactor のTDDを適用、進捗チェックボックスを更新(タスクファイルは常時更新。作業計画書と全体設計書は存在する場合のみ更新 — 小規模単一タスクではタスクファイルのみ存在)、`Provides` に指定された調査成果物を作成。状態遷移: `[ ]` → `[x]`。
|
|
120
120
|
|
|
121
121
|
**範囲外(常に)**: 全体品質チェック(品質保証工程に委譲)、コミット作成(品質チェック後に実施)、Design Doc を満たせない場合の強行(必ずエスカレーション)、クラスコンポーネント(モダン React では非推奨)。
|
|
122
122
|
|
|
@@ -183,6 +183,17 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
|
|
|
183
183
|
2. **既存実装調査**:同ドメイン・責務で類似コンポーネント・hook を検索
|
|
184
184
|
3. **判定実行**:上記「必須判断基準」に従い継続・エスカレーション判定
|
|
185
185
|
|
|
186
|
+
#### 隣接ケース走査(タスクファイルの `Change Category` フィールドが `bug-fix` / `regression` / `state-change` / `boundary-change` のいずれかに設定されている場合は必須)
|
|
187
|
+
|
|
188
|
+
実装前確認の後、Binding Decision チェックの前に実行する。このステップはタスク分解が書き込んだフィールド値で発火する — フィールド値を読み、走査を適用するかの判断はそれを正本とする。
|
|
189
|
+
|
|
190
|
+
1. Investigation Targets(分解時に隣接ファイルが既に追加されている)から、変更と同一の経路・契約・永続状態・外部境界を共有するケースを特定する — 変更に関連するフォールバック描画、stale な状態、リトライ、外部呼び出しなど。
|
|
191
|
+
2. それぞれが、このタスクが修正するのと同一クラスの欠陥を抱えているか確認する。
|
|
192
|
+
3. 各残余をスコープに応じて処理する:
|
|
193
|
+
- **Target Files スコープ内** → 残余をこのタスクの失敗するテストと実装に取り込む。
|
|
194
|
+
- **修正を要すると確認できたスコープ外の兄弟ケース** → `out_of_scope_file` エスカレーション(Target Files 外のファイルに触れる際の標準経路)を発行し、ユーザーが Target Files を拡張するか follow-up タスクに切り出すかを判断できるようにする。これにより、確認済みの隣接欠陥は明示的な判断に回される。
|
|
195
|
+
- **修正を要するか確認できない関連残余** → タスクファイルの Investigation Notes に記録し、code-reviewer の隣接ケースチェックが実装に対して検証できるようにする。
|
|
196
|
+
|
|
186
197
|
#### Binding Decision チェック(タスクファイルに Binding Decisions セクションがある場合は必須)
|
|
187
198
|
|
|
188
199
|
このチェックは実装前確認の後、TDDサイクルの前に実行される。タスクファイルに1行以上を持つ Binding Decisions セクションがある場合のみ適用される。
|
|
@@ -278,20 +289,8 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
|
|
|
278
289
|
"testsAdded": ["src/components/Button/Button.test.tsx"],
|
|
279
290
|
"requiresTestReview": false,
|
|
280
291
|
"newTestsPassed": true,
|
|
281
|
-
"progressUpdated": {
|
|
282
|
-
|
|
283
|
-
"workPlan": "該当箇所更新済み",
|
|
284
|
-
"designDoc": "進捗セクション更新済み or N/A"
|
|
285
|
-
},
|
|
286
|
-
"runnableCheck": {
|
|
287
|
-
"level": "L1: 単体テスト (React Testing Library) / L2: 統合テスト / L3: E2Eテスト",
|
|
288
|
-
"executed": true,
|
|
289
|
-
"command": "test -- Button.test.tsx",
|
|
290
|
-
"result": "passed / failed / skipped",
|
|
291
|
-
"substance": "substantive | non_substantive | null (非テスト系の検証)",
|
|
292
|
-
"substanceIssue": "substantive または非テスト系の場合は null。non_substantive の場合は原因と位置を記載",
|
|
293
|
-
"reason": "テスト実行理由・確認内容"
|
|
294
|
-
},
|
|
292
|
+
"progressUpdated": {"taskFile": "完了項目5/8", "workPlan": "該当箇所更新済み", "designDoc": "進捗セクション更新済み or N/A"},
|
|
293
|
+
"runnableCheck": {"level": "L1: 単体テスト (React Testing Library) / L2: 統合テスト / L3: E2Eテスト", "executed": true, "command": "test -- Button.test.tsx", "result": "passed / failed / skipped", "substance": "substantive | non_substantive | null (非テスト系の検証)", "substanceIssue": "substantive または非テスト系の場合は null。non_substantive の場合は原因と位置を記載", "reason": "テスト実行理由・確認内容"},
|
|
295
294
|
"readyForQualityCheck": true,
|
|
296
295
|
"nextActions": "品質チェック工程による全体品質検証"
|
|
297
296
|
}
|
|
@@ -334,11 +333,7 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
|
|
|
334
333
|
"reason": "Out of scope file",
|
|
335
334
|
"taskName": "[タスク名]",
|
|
336
335
|
"escalation_type": "out_of_scope_file",
|
|
337
|
-
"details": {
|
|
338
|
-
"file_path": "[変更を試みたパス]",
|
|
339
|
-
"allowed_list": ["[Target Files / タスクファイル / 作業計画書 / Provides の和集合]"],
|
|
340
|
-
"modification_reason": "[なぜ変更を試みたか]"
|
|
341
|
-
},
|
|
336
|
+
"details": {"file_path": "[変更を試みたパス]", "allowed_list": ["[Target Files / タスクファイル / 作業計画書 / Provides の和集合]"], "modification_reason": "[なぜ変更を試みたか]"},
|
|
342
337
|
"user_decision_required": true,
|
|
343
338
|
"suggested_options": ["Target Files に追加してリトライ", "別タスクに分割", "アプローチを再検討"]
|
|
344
339
|
}
|
|
@@ -116,7 +116,7 @@ package.json の `packageManager` フィールドに従って実行コマンド
|
|
|
116
116
|
|
|
117
117
|
## 責務・権限・境界
|
|
118
118
|
|
|
119
|
-
**範囲内**: `docs/plans/tasks/` からタスクファイルを読み込み、タスクの「Metadata」に記載された依存成果物を確認、実装とテストを作成、Red→Green→Refactor のTDDを適用、進捗チェックボックスを更新(タスクファイルは常時更新。作業計画書と全体設計書は存在する場合のみ更新 — 小規模単一タスクではタスクファイルのみ存在)、`Provides` に指定された調査成果物を作成。状態遷移: `[ ]` → `[
|
|
119
|
+
**範囲内**: `docs/plans/tasks/` からタスクファイルを読み込み、タスクの「Metadata」に記載された依存成果物を確認、実装とテストを作成、Red→Green→Refactor のTDDを適用、進捗チェックボックスを更新(タスクファイルは常時更新。作業計画書と全体設計書は存在する場合のみ更新 — 小規模単一タスクではタスクファイルのみ存在)、`Provides` に指定された調査成果物を作成。状態遷移: `[ ]` → `[x]`。
|
|
120
120
|
|
|
121
121
|
**範囲外(常に)**: 全体品質チェック(品質保証工程に委譲)、コミット作成(品質チェック後に実施)、Design Doc を満たせない場合の強行(必ずエスカレーション)。
|
|
122
122
|
|
|
@@ -183,6 +183,17 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
|
|
|
183
183
|
2. **既存実装調査**:同ドメイン・責務で類似機能を検索
|
|
184
184
|
3. **判定実行**:上記「必須判断基準」に従い継続・エスカレーション判定
|
|
185
185
|
|
|
186
|
+
#### 隣接ケース走査(タスクファイルの `Change Category` フィールドが `bug-fix` / `regression` / `state-change` / `boundary-change` のいずれかに設定されている場合は必須)
|
|
187
|
+
|
|
188
|
+
実装前確認の後、Binding Decision チェックの前に実行する。このステップはタスク分解が書き込んだフィールド値で発火する — フィールド値を読み、走査を適用するかの判断はそれを正本とする。
|
|
189
|
+
|
|
190
|
+
1. Investigation Targets(分解時に隣接ファイルが既に追加されている)から、変更と同一の経路・契約・永続状態・外部境界を共有するケースを特定する — 変更に関連するフォールバックの振る舞い、stale な状態、リトライ、外部呼び出しなど。
|
|
191
|
+
2. それぞれが、このタスクが修正するのと同一クラスの欠陥を抱えているか確認する。
|
|
192
|
+
3. 各残余をスコープに応じて処理する:
|
|
193
|
+
- **Target Files スコープ内** → 残余をこのタスクの失敗するテストと実装に取り込む。
|
|
194
|
+
- **修正を要すると確認できたスコープ外の兄弟ケース** → `out_of_scope_file` エスカレーション(Target Files 外のファイルに触れる際の標準経路)を発行し、ユーザーが Target Files を拡張するか follow-up タスクに切り出すかを判断できるようにする。これにより、確認済みの隣接欠陥は明示的な判断に回される。
|
|
195
|
+
- **修正を要するか確認できない関連残余** → タスクファイルの Investigation Notes に記録し、code-reviewer の隣接ケースチェックが実装に対して検証できるようにする。
|
|
196
|
+
|
|
186
197
|
#### Binding Decision チェック(タスクファイルに Binding Decisions セクションがある場合は必須)
|
|
187
198
|
|
|
188
199
|
このチェックは実装前確認の後、TDDサイクルの前に実行される。タスクファイルに1行以上を持つ Binding Decisions セクションがある場合のみ適用される。
|
|
@@ -281,20 +292,8 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
|
|
|
281
292
|
"testsAdded": ["作成したテストファイルパス"],
|
|
282
293
|
"requiresTestReview": true,
|
|
283
294
|
"newTestsPassed": true,
|
|
284
|
-
"progressUpdated": {
|
|
285
|
-
|
|
286
|
-
"workPlan": "該当箇所更新済み",
|
|
287
|
-
"designDoc": "進捗セクション更新済み or N/A"
|
|
288
|
-
},
|
|
289
|
-
"runnableCheck": {
|
|
290
|
-
"level": "L1: 単体テスト / L2: 統合テスト / L3: E2Eテスト",
|
|
291
|
-
"executed": true,
|
|
292
|
-
"command": "実行したテストコマンド",
|
|
293
|
-
"result": "passed / failed / skipped",
|
|
294
|
-
"substance": "substantive | non_substantive | null (非テスト系の検証)",
|
|
295
|
-
"substanceIssue": "substantive または非テスト系の場合は null。non_substantive の場合は原因と位置を記載",
|
|
296
|
-
"reason": "テスト実行理由・確認内容"
|
|
297
|
-
},
|
|
295
|
+
"progressUpdated": {"taskFile": "完了項目5/8", "workPlan": "該当箇所更新済み", "designDoc": "進捗セクション更新済み or N/A"},
|
|
296
|
+
"runnableCheck": {"level": "L1: 単体テスト / L2: 統合テスト / L3: E2Eテスト", "executed": true, "command": "実行したテストコマンド", "result": "passed / failed / skipped", "substance": "substantive | non_substantive | null (非テスト系の検証)", "substanceIssue": "substantive または非テスト系の場合は null。non_substantive の場合は原因と位置を記載", "reason": "テスト実行理由・確認内容"},
|
|
298
297
|
"readyForQualityCheck": true,
|
|
299
298
|
"nextActions": "品質チェック工程による全体品質検証"
|
|
300
299
|
}
|
|
@@ -337,11 +336,7 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
|
|
|
337
336
|
"reason": "Out of scope file",
|
|
338
337
|
"taskName": "[タスク名]",
|
|
339
338
|
"escalation_type": "out_of_scope_file",
|
|
340
|
-
"details": {
|
|
341
|
-
"file_path": "[変更を試みたパス]",
|
|
342
|
-
"allowed_list": ["[Target Files / タスクファイル / 作業計画書 / Provides の和集合]"],
|
|
343
|
-
"modification_reason": "[なぜ変更を試みたか]"
|
|
344
|
-
},
|
|
339
|
+
"details": {"file_path": "[変更を試みたパス]", "allowed_list": ["[Target Files / タスクファイル / 作業計画書 / Provides の和集合]"], "modification_reason": "[なぜ変更を試みたか]"},
|
|
345
340
|
"user_decision_required": true,
|
|
346
341
|
"suggested_options": ["Target Files に追加してリトライ", "別タスクに分割", "アプローチを再検討"]
|
|
347
342
|
}
|
|
@@ -165,142 +165,43 @@ skills: frontend-typescript-rules, frontend-technical-spec, project-context
|
|
|
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
|
|
|
@@ -61,7 +61,8 @@ skills: project-context, technical-spec, coding-standards
|
|
|
61
61
|
|
|
62
62
|
1. **未トレースパス**: 症状が到達しうるのに調査でトレースされていないコードパスはないか(例: エラーハンドリング分岐、非同期フォーク、フォールバックパス)
|
|
63
63
|
2. **未チェックノード**: トレース済みパス上でチェックされていないノードはないか
|
|
64
|
-
3.
|
|
64
|
+
3. **隣接ケース**: 調査が `bug-fix` / `regression` / `state-change` / `boundary-change` に関わる場合(デバッグフローには Change Category フィールドが無いため、調査自体から判断する)、同一の経路・契約・永続状態・外部境界を共有し同じ障害を抱えうるケースはないか。妥当な隣接ケースをすべてトレースするか、トレースしないものは明示的に正当化する
|
|
65
|
+
4. **追加の障害点**: 未トレースパス・未チェックノード・隣接ケースから新たな障害が見つかった場合は記録する
|
|
65
66
|
|
|
66
67
|
目的は、調査のパスカバレッジが十分であるかを検証すること。
|
|
67
68
|
|
|
@@ -115,78 +116,33 @@ skills: project-context, technical-spec, coding-standards
|
|
|
115
116
|
"identifiedGaps": ["未トレースパスや未チェックノード"]
|
|
116
117
|
},
|
|
117
118
|
"triangulationSupplements": [
|
|
118
|
-
{
|
|
119
|
-
"source": "追加で調査した情報源",
|
|
120
|
-
"findings": "発見した内容",
|
|
121
|
-
"impactOnFailurePoints": "既存の障害点への影響"
|
|
122
|
-
}
|
|
119
|
+
{"source": "追加で調査した情報源", "findings": "発見した内容", "impactOnFailurePoints": "既存の障害点への影響"}
|
|
123
120
|
],
|
|
124
121
|
"externalResearch": [
|
|
125
|
-
{
|
|
126
|
-
"query": "検索したクエリ",
|
|
127
|
-
"source": "情報源",
|
|
128
|
-
"findings": "発見した関連情報",
|
|
129
|
-
"impactOnFailurePoints": "障害点への影響"
|
|
130
|
-
}
|
|
122
|
+
{"query": "検索したクエリ", "source": "情報源", "findings": "発見した関連情報", "impactOnFailurePoints": "障害点への影響"}
|
|
131
123
|
],
|
|
132
124
|
"coverageCheck": {
|
|
133
125
|
"missingPaths": ["調査入力でトレースされていないパス"],
|
|
134
126
|
"uncheckedNodes": ["トレース済みパス上の未チェックノード"],
|
|
135
127
|
"additionalFailurePoints": [
|
|
136
|
-
{
|
|
137
|
-
"id": "AFP1",
|
|
138
|
-
"nodeId": "ノード参照",
|
|
139
|
-
"symptomId": "症状参照",
|
|
140
|
-
"description": "新たに発見された障害",
|
|
141
|
-
"checkStatus": "supported|weakened|blocked|not_reached",
|
|
142
|
-
"evidence": [
|
|
143
|
-
{"type": "supporting", "detail": "証拠の詳細", "source": "file:line"}
|
|
144
|
-
]
|
|
145
|
-
}
|
|
128
|
+
{"id": "AFP1", "nodeId": "ノード参照", "symptomId": "症状参照", "description": "新たに発見された障害", "checkStatus": "supported|weakened|blocked|not_reached", "evidence": [{"type": "supporting", "detail": "証拠の詳細", "source": "file:line"}]}
|
|
146
129
|
]
|
|
147
130
|
},
|
|
148
131
|
"devilsAdvocateFindings": [
|
|
149
|
-
{
|
|
150
|
-
"targetFailurePoint": "FP1",
|
|
151
|
-
"alternativeExplanation": "正常な動作である可能性は?",
|
|
152
|
-
"hiddenAssumptions": ["暗黙の前提"],
|
|
153
|
-
"potentialCounterEvidence": ["見落とされている可能性のある反証"]
|
|
154
|
-
}
|
|
132
|
+
{"targetFailurePoint": "FP1", "alternativeExplanation": "正常な動作である可能性は?", "hiddenAssumptions": ["暗黙の前提"], "potentialCounterEvidence": ["見落とされている可能性のある反証"]}
|
|
155
133
|
],
|
|
156
134
|
"failurePointEvaluation": [
|
|
157
|
-
{
|
|
158
|
-
"failurePointId": "FP1またはAFP1",
|
|
159
|
-
"description": "障害点の記述",
|
|
160
|
-
"originalCheckStatus": "調査入力のcheckStatus(検証段階で発見されたAFPはnull)",
|
|
161
|
-
"finalStatus": "supported|weakened|blocked|not_reached",
|
|
162
|
-
"statusChangeReason": "ステータスが変更された理由(変更があった場合)",
|
|
163
|
-
"remainingUncertainty": ["残る不確実性"]
|
|
164
|
-
}
|
|
135
|
+
{"failurePointId": "FP1またはAFP1", "description": "障害点の記述", "originalCheckStatus": "調査入力のcheckStatus(検証段階で発見されたAFPはnull)", "finalStatus": "supported|weakened|blocked|not_reached", "statusChangeReason": "ステータスが変更された理由(変更があった場合)", "remainingUncertainty": ["残る不確実性"]}
|
|
165
136
|
],
|
|
166
137
|
"conclusion": {
|
|
167
138
|
"confirmedFailurePoints": [
|
|
168
|
-
{
|
|
169
|
-
"failurePointId": "FP1",
|
|
170
|
-
"description": "障害の内容",
|
|
171
|
-
"location": "file:line",
|
|
172
|
-
"symptomId": "S1",
|
|
173
|
-
"symptomExplained": "この障害が観察された症状にどうつながるか",
|
|
174
|
-
"causeCategory": "typo|logic_error|missing_constraint|design_gap|external_factor",
|
|
175
|
-
"finalStatus": "supported|weakened",
|
|
176
|
-
"causalChain": ["現象", "→ 直接原因", "→ 根本原因"],
|
|
177
|
-
"impactScope": ["影響を受けるファイルパス"],
|
|
178
|
-
"recurrenceRisk": "low|medium|high"
|
|
179
|
-
}
|
|
139
|
+
{"failurePointId": "FP1", "description": "障害の内容", "location": "file:line", "symptomId": "S1", "symptomExplained": "この障害が観察された症状にどうつながるか", "causeCategory": "typo|logic_error|missing_constraint|design_gap|external_factor", "finalStatus": "supported|weakened", "causalChain": ["現象", "→ 直接原因", "→ 根本原因"], "impactScope": ["影響を受けるファイルパス"], "recurrenceRisk": "low|medium|high"}
|
|
180
140
|
],
|
|
181
141
|
"refutedFailurePoints": [
|
|
182
142
|
{"failurePointId": "FP2", "reason": "反証された理由"}
|
|
183
143
|
],
|
|
184
144
|
"failurePointRelationships": [
|
|
185
|
-
{
|
|
186
|
-
"points": ["FP1", "FP3"],
|
|
187
|
-
"relationship": "independent|dependent|same_chain",
|
|
188
|
-
"detail": "障害点間の関係の説明"
|
|
189
|
-
}
|
|
145
|
+
{"points": ["FP1", "FP3"], "relationship": "independent|dependent|same_chain", "detail": "障害点間の関係の説明"}
|
|
190
146
|
],
|
|
191
147
|
"coverageAssessment": "sufficient|partial|insufficient",
|
|
192
148
|
"unresolvedSymptoms": ["確認された障害点で完全に説明できない症状"],
|
|
@@ -55,7 +55,7 @@ fixture-e2e gap:
|
|
|
55
55
|
AND e2eAbsenceReason.fixtureE2eが伝達されていない
|
|
56
56
|
AND Design DocまたはUI Specにユーザー向けマルチステップジャーニーが含まれる
|
|
57
57
|
THEN 作業計画書ヘッダーに追記:
|
|
58
|
-
|
|
58
|
+
fixture-e2e Gap: この機能にはユーザー向けマルチステップジャーニーが含まれますが、
|
|
59
59
|
fixture-e2eスケルトンが提供されていません。UI実装フェーズの前に、受入テスト生成
|
|
60
60
|
へ差し戻して fixture-e2e 候補を評価する。
|
|
61
61
|
検出されたジャーニー: [ジャーニーの説明とAC参照のリスト]
|
|
@@ -66,7 +66,7 @@ service-integration-e2e gap:
|
|
|
66
66
|
AND Design Docがジャーニーに実サービス間検証(複数サービスをまたぐデータ永続化、
|
|
67
67
|
トランザクション整合性、外部サービスコントラクト)を要求する
|
|
68
68
|
THEN 作業計画書ヘッダーに追記:
|
|
69
|
-
|
|
69
|
+
service-integration-e2e Gap: この機能はサービス境界をまたぎ、正しさが
|
|
70
70
|
実サービス間挙動に依存しますが、service-integration-e2eスケルトンが
|
|
71
71
|
提供されていません。
|
|
72
72
|
検出された境界: [境界の記述とAC参照のリスト]
|
|
@@ -157,8 +157,6 @@ ADRが入力に含まれる場合、またはDesign Docが「Prerequisite ADRs
|
|
|
157
157
|
- **`scale: medium` / `scale: large`**: documentation-criteria スキルの **plan-template** に従って作業計画書を記述。フェーズ構成図とタスク依存関係図(mermaid)を含める。
|
|
158
158
|
- **`scale: small`**: documentation-criteria スキルの **task-template** に従って単一タスクファイルを出力(後述「scale 別の出力モード」を参照)。フェーズ構成図・タスク依存関係図はスキップ。タスクファイルの `## Implementation Steps` セクションが実行を駆動する。
|
|
159
159
|
|
|
160
|
-
`scale: medium` / `scale: large` の場合、計画書ヘッダーには `Implementation Readiness: pending` の行を必ず含める。マーカーの契約: 値は `pending`(初期。本エージェントが設定)、`ready`(検証完了、残存ギャップなし)、`escalated`(検証完了、残存ギャップあり)の3つのいずれか。`pending` から先へマーカーを昇格させるプロデューサと、実行前にマーカーを読むコンシューマは、本エージェントの外側で扱われる外部オーケストレーションの関心事である。
|
|
161
|
-
|
|
162
160
|
## Input Parameters
|
|
163
161
|
|
|
164
162
|
- **mode**: `create`(デフォルト)| `update`
|
|
@@ -362,7 +360,6 @@ Design Docの技術的依存関係と実装アプローチに基づいてフェ
|
|
|
362
360
|
- [ ] 各行の `Axis` 値が `placement` | `dependency_direction` | `contract_schema` | `data_flow` | `persistence` のちょうど1つである
|
|
363
361
|
- [ ] 各行の `Source Section` が、ADR内の決定の実際の所在に一致する `Decision` または `Implementation Guidance` に設定されている
|
|
364
362
|
- [ ] 全行が少なくとも1つのカバータスクにマッピングされている
|
|
365
|
-
- [ ] 計画書ヘッダーに `Implementation Readiness: pending` を含める(medium / large のみ)
|
|
366
363
|
- [ ] Design Docから検証戦略を抽出し計画書ヘッダーに記載
|
|
367
364
|
- [ ] 計画書ヘッダーに証明戦略を記載(証明義務の出所 + タスクごとの伝播ルール)
|
|
368
365
|
- [ ] 計画書ヘッダーにレビュースコープを記録(ベースブランチ / diff範囲 / 変更ファイル範囲)
|