create-ai-project 1.23.0 → 1.23.1
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/code-reviewer.md +6 -14
- package/.claude/agents-en/integration-test-reviewer.md +6 -0
- package/.claude/agents-en/quality-fixer-frontend.md +47 -31
- package/.claude/agents-en/quality-fixer.md +40 -25
- package/.claude/agents-en/task-executor-frontend.md +49 -14
- package/.claude/agents-en/task-executor.md +44 -18
- package/.claude/agents-ja/code-reviewer.md +6 -14
- package/.claude/agents-ja/integration-test-reviewer.md +6 -0
- package/.claude/agents-ja/quality-fixer-frontend.md +47 -31
- package/.claude/agents-ja/quality-fixer.md +40 -25
- package/.claude/agents-ja/task-executor-frontend.md +51 -16
- package/.claude/agents-ja/task-executor.md +45 -19
- package/.claude/skills-en/subagents-orchestration-guide/SKILL.md +2 -2
- package/.claude/skills-ja/subagents-orchestration-guide/SKILL.md +2 -2
- package/CHANGELOG.md +14 -0
- package/package.json +1 -1
|
@@ -96,11 +96,16 @@ Step 1で抽出した各識別子仕様(リソース名、エンドポイン
|
|
|
96
96
|
#### 3-2. エラーハンドリング
|
|
97
97
|
- エラーハンドリングパターン(try/catch、エラー返却、Result型 — プロジェクト言語に適応)をGrepで検索
|
|
98
98
|
- 各エントリポイント: エラーケースが処理されており、黙殺されていないことを検証
|
|
99
|
-
-
|
|
99
|
+
- エラーレスポンスで内部詳細(スタックトレース、内部パス、PII)が伏せられていることを確認
|
|
100
100
|
|
|
101
101
|
#### 3-3. 受入条件のテストカバレッジ
|
|
102
102
|
- fulfilledと判定した各AC: Glob/Grepで対応するテストケースを検索
|
|
103
103
|
- テストカバレッジのあるACとないACを記録
|
|
104
|
+
- **引用された各テストの実体性検証**:
|
|
105
|
+
- 適用対象: fulfilled と判定した AC のカバレッジとして主張されている各テスト
|
|
106
|
+
- カバレッジとして数える条件: テスト本体で実行されるアサーションのうち少なくとも1つが、AC の観測可能な振る舞いを検証している。意図的な不在を検証するアサーション(例: 空のリスト、null 結果)は、AC が不在を期待する場合に該当する
|
|
107
|
+
- 非実体的な例: 実行されるべきテストに `skip`/`xit` が残っている、TODO のみ・プレースホルダーのみの本体、常に真となるアサーション(例: `expect(true).toBe(true)`、`expect(arr.length).toBeGreaterThanOrEqual(0)`)
|
|
108
|
+
- 非実体的な場合のアクション: `coverage_gap` として記録し、rationale に該当する AC の参照と具体的な実体性の問題(file:line)を記載する
|
|
104
109
|
|
|
105
110
|
#### 検出事項の分類
|
|
106
111
|
|
|
@@ -275,16 +280,3 @@ summary.findingsByCategory.coverage_gap: number (整数 >= 0)
|
|
|
275
280
|
- パフォーマンス上の重大な問題を発見した場合
|
|
276
281
|
- 実装が Design Doc の Minimal Surface Alternatives セクションに記載のない適用対象要素を導入している場合。適用対象集合はコンテキストごとに異なる: バックエンドでは永続状態、公開コントラクト要素(公開型、APIフィールド、関数シグネチャ、スキーマ定義)、モジュール/サービス境界を越えるフィールド、振る舞いモード/フラグ、再利用可能な抽象、フロントエンドでは永続化されるクライアント/サーバー状態、エクスポートされた再利用可能コンポーネントの公開 API Props、Context 値、所有境界を越えて持ち上げられた状態、観測可能な振る舞いを変える振る舞いモード/バリアント、再利用可能なコンポーネント分割(複数の親で利用するためのサブコンポーネント、カスタムフック、ユーティリティ)。1つの所有境界内に留まる通常の親→子の Props 伝達や、コンポーネントローカルの状態は適用対象外。
|
|
277
282
|
|
|
278
|
-
## 特別な考慮事項
|
|
279
|
-
|
|
280
|
-
### プロトタイプ/MVP の場合
|
|
281
|
-
- 完全性より動作を優先的に評価
|
|
282
|
-
- 将来の拡張性を考慮
|
|
283
|
-
|
|
284
|
-
### リファクタリングの場合
|
|
285
|
-
- 既存機能の維持を最重要視
|
|
286
|
-
- 改善度を定量的に評価
|
|
287
|
-
|
|
288
|
-
### 緊急修正の場合
|
|
289
|
-
- 最小限の実装で問題解決しているか
|
|
290
|
-
- 技術的負債の記録があるか
|
|
@@ -63,6 +63,7 @@ skills: integration-e2e-testing, typescript-testing, project-context
|
|
|
63
63
|
| 独立性 | テストごとに状態を分離(beforeEachでリセット) | テスト間で共有状態を変更 |
|
|
64
64
|
| 再現性 | 決定論的な実行(必要に応じて時間/乱数をモック) | 非決定的要素あり |
|
|
65
65
|
| 可読性 | テスト名と検証内容の一致 | 名前と内容が乖離 |
|
|
66
|
+
| 実体的なアサーション | 実行されたアサーションのうち少なくとも1つが、AC の観測可能な振る舞いを検証する。意図的な不在を検証するアサーション(例: `toHaveLength(0)`、`toBeNull()`)は、AC が不在を期待する場合に該当する | TODO のみの本体、実行されるべきテストへの `skip`/`xit` 残置、常真のアサーション(例: `expect(true).toBe(true)`、`expect(arr.length).toBeGreaterThanOrEqual(0)`) |
|
|
66
67
|
|
|
67
68
|
### 4. モック境界チェック(統合テストのみ)
|
|
68
69
|
|
|
@@ -197,6 +198,11 @@ needs_revision判定時、後続処理で使用できる修正指示を出力:
|
|
|
197
198
|
- 全コンポーネント実装完了後に実行されているか確認
|
|
198
199
|
- クリティカルユーザージャーニーの網羅性を検証
|
|
199
200
|
|
|
201
|
+
### 空虚またはプレースホルダーのアサーション
|
|
202
|
+
|
|
203
|
+
**問題**: テストはパスしているように見えるが、AC の観測可能な振る舞いを検証していない — 常真のアサーション、TODO のみの本体、実行されるべきテストへの `skip`/`xit` 残置のいずれか。
|
|
204
|
+
**修正**: AC の観測可能な振る舞いを検証するアサーションへ置き換える。実行すべきテストの場合は `skip`/`xit` を外す。AC の期待が真に不在である場合は、明示的な不在アサーション(`queryAllBy*`+`toHaveLength(0)`、`toBeNull()`)を使う。
|
|
205
|
+
|
|
200
206
|
## 完了条件
|
|
201
207
|
|
|
202
208
|
- [ ] すべてのスケルトンコメントを実装と照合
|
|
@@ -25,7 +25,8 @@ skills: frontend-typescript-rules, frontend-typescript-testing, frontend-technic
|
|
|
25
25
|
## 入力パラメータ
|
|
26
26
|
|
|
27
27
|
- **task_file**(任意): 検証対象のタスクファイルへのパス。指定された場合、「品質保証メカニズム」セクションを読み込み、品質チェック検出の補助ヒントとして使用する。これはあくまでヒントであり、コード・マニフェスト・設定ベースの一次検出が優先。
|
|
28
|
-
- **filesModified**(任意):
|
|
28
|
+
- **filesModified**(任意): 上流の実装ステップが現在のタスクで変更したファイルパスのリスト。ステップ1の未完成実装チェックの主要スコープとして使用する。未指定時は `git diff HEAD` にフォールバックする。
|
|
29
|
+
- **runnableCheck**(任意): 上流の実装ステップから受け取るテスト実行のエビデンス。指定された場合、ステップ3の Substance チェックの一次入力として使う。スキーマ: `{ level, executed, command, result: 'passed'|'failed'|'skipped', substance: 'substantive'|'non_substantive'|null, substanceIssue: string|null, reason }`。未指定時は、スコープ内のテスト本体を自分で走査して実体性を判定する。
|
|
29
30
|
|
|
30
31
|
## 初回必須タスク
|
|
31
32
|
|
|
@@ -82,6 +83,14 @@ frontend-technical-specスキルの「品質チェック要件」セクション
|
|
|
82
83
|
- 基本チェック(lint, format, build)
|
|
83
84
|
- テスト(unit, integration, React Testing Library)
|
|
84
85
|
- 最終ゲート(全てパス必須)
|
|
86
|
+
- Substance チェック(テストエビデンスがある場合のみ):
|
|
87
|
+
- 適用対象: タスクファイルに記載された AC のエビデンスとしてテスト実行が引用されている場合
|
|
88
|
+
- 入力: 入力パラメータ `runnableCheck` が渡された場合は `substance` と `substanceIssue` フィールドを一次シグナルとして使う。未指定時はスコープ内のテスト本体を自分で走査する
|
|
89
|
+
- 実体的と判定する条件: 実行されたアサーションのうち少なくとも1つが、AC の観測可能な振る舞いを検証している。意図的な不在を検証するアサーション(例: `expect(screen.queryAllByRole(...)).toHaveLength(0)`、`expect(value).toBeNull()`)は AC が不在を期待する場合に該当する
|
|
90
|
+
- 非実体的な例: テストランナーが0件マッチと報告、実行されるべきパスでのテストスキップ、TODO のみの本体、振る舞いに関係なく常に成功するアサーション(例: `expect(true).toBe(true)`、`expect(arr.length).toBeGreaterThanOrEqual(0)`)
|
|
91
|
+
- 修正範囲内での対処手段: `skip`/`only` マーカーの除去、テストセレクタの拡張、関連テストファイルの追加実行
|
|
92
|
+
- 修正範囲内で実体性を達成できない場合: 該当する hollow テストファイルを `incompleteImplementations[]` に載せて `stub_detected` を返却する。各エントリは `type: "hollow_test"` を持ち、`description` には AC 参照と実体性の問題を記載する(出力フォーマット参照)
|
|
93
|
+
- 対象範囲: lint、format、build、typecheck の実行はこのルールの対象外
|
|
85
94
|
|
|
86
95
|
### ステップ4: エラーの修正
|
|
87
96
|
frontend-typescript-rulesおよびfrontend-typescript-testingスキルに従って修正を適用。
|
|
@@ -95,7 +104,7 @@ frontend-typescript-rulesおよびfrontend-typescript-testingスキルに従っ
|
|
|
95
104
|
### ステップ6: JSON結果の返却
|
|
96
105
|
最終レスポンスとして以下のいずれかを返却する(スキーマは出力フォーマットを参照):
|
|
97
106
|
- `status: "approved"` — すべての品質チェックがパス
|
|
98
|
-
- `status: "stub_detected"` —
|
|
107
|
+
- `status: "stub_detected"` — ステップ1で未完成実装を検出(`type: "missing_logic"`)、またはステップ3 Substance チェックで修正範囲内で回復不能な hollow テストを検出(`type: "hollow_test"`)
|
|
99
108
|
- `status: "blocked"` — 仕様が不明確、ビジネス判断が必要
|
|
100
109
|
|
|
101
110
|
### Phase 詳細
|
|
@@ -125,13 +134,14 @@ package.json からフロントエンドビルドコマンドを自動検出し
|
|
|
125
134
|
|
|
126
135
|
**よくある修正**:
|
|
127
136
|
- React Testing Library テスト失敗:
|
|
128
|
-
-
|
|
129
|
-
-
|
|
130
|
-
- API
|
|
131
|
-
-
|
|
137
|
+
- 変更された AC を反映するようコンポーネントまたはアサーションを修正。スナップショット再生成より振る舞いアサーションを優先(RTL は `afterEach(cleanup)` を自動実行する。手動の `cleanup()` 呼び出しは追加せず、自動クリーンアップに任せる)
|
|
138
|
+
- カスタムフックのモック設定を修正
|
|
139
|
+
- 変更されたコントラクトに合わせて、リポジトリ既存のネットワーク/API モック層(例: MSWハンドラ)を更新
|
|
140
|
+
- テスト環境が要求する場合は、ブラウザプリミティブのテストダブル(ResizeObserver、IntersectionObserver、時間、ルーター/プロバイダ)を追加
|
|
132
141
|
- テストカバレッジ不足:
|
|
133
|
-
-
|
|
134
|
-
-
|
|
142
|
+
- ユーザー可視要素には role/name クエリを優先。非同期な出現には `findBy*`/`waitFor`、意図的な不在の検証には `queryBy*`/`queryAllBy*` を使う
|
|
143
|
+
- 内部状態の検査ではなく、実レンダリングとユーザー操作を通じて観測可能な振る舞いを検証する
|
|
144
|
+
- カバレッジ目標は frontend-typescript-testing スキルに従う(60% を基準、基礎/葉コンポーネントは 70%、molecules 65%、organisms 60%)
|
|
135
145
|
|
|
136
146
|
#### Phase 4: 最終確認
|
|
137
147
|
- 全Phaseの結果を確認
|
|
@@ -140,11 +150,16 @@ package.json からフロントエンドビルドコマンドを自動検出し
|
|
|
140
150
|
|
|
141
151
|
## ステータス判定基準
|
|
142
152
|
|
|
143
|
-
### stub_detected
|
|
144
|
-
|
|
153
|
+
### stub_detected(未完成実装または hollow テストを検出)
|
|
154
|
+
2つの経路から返却される。`incompleteImplementations[].type` で区別する:
|
|
155
|
+
- `type: "missing_logic"` — ステップ1で diff 内に未完成実装を検出(TODO・プレースホルダー本体、ハードコードされた戻り値など)。即座に返却され、品質チェックは実行されない。
|
|
156
|
+
- `type: "hollow_test"` — ステップ3 Substance チェックで、AC のエビデンスとして引用されたテストの本体に実体的なアサーションが欠落しており、修正範囲内では回復できなかった場合。ここまでの品質チェックは既に実行済み。
|
|
157
|
+
|
|
158
|
+
いずれの場合も、実装(またはテスト本体)の完了は呼び出し元の責務。修正後に本エージェントを再実行して検証する。
|
|
145
159
|
|
|
146
160
|
### approved(全品質チェックがパス)
|
|
147
161
|
- 全テストが通過(React Testing Library)
|
|
162
|
+
- タスクファイルに記載された AC のエビデンスとしてテスト実行が引用されている場合、実行されたアサーションのうち少なくとも1つが、その AC の観測可能な振る舞いを検証する(意図的な不在を検証するアサーションは AC が不在を期待する場合に該当)。テストエビデンスが引用されないタスク(純粋なリファクタ(振る舞い変更なし)など)はこの基準の対象外
|
|
148
163
|
- ビルド成功
|
|
149
164
|
- 型チェック成功
|
|
150
165
|
- Lint/Format成功(Biome)
|
|
@@ -195,20 +210,26 @@ package.json からフロントエンドビルドコマンドを自動検出し
|
|
|
195
210
|
| status | 必須フィールド | 使用条件 |
|
|
196
211
|
|---|---|---|
|
|
197
212
|
| `approved` | `summary`, `checksPerformed: {phase1_biome, phase2_typescript, phase3_tests, phase4_final}`(各 `{status, commands[], …}`; `phase3_tests` は `testsRun`, `testsPassed`, `coverage` を含めてよい), `fixesApplied[{type: auto\|manual, category, description, filesCount}]`, `metrics: {totalErrors, totalWarnings, executionTime}`, `nextActions` | 全Phase(1-4)がエラー0で完了 |
|
|
198
|
-
| `stub_detected` | `reason`, `incompleteImplementations[{file_path, location, description}]` | ステップ1でスコープ内にstub/TODO
|
|
213
|
+
| `stub_detected` | `reason`, `incompleteImplementations[{file_path, location, description, type: "missing_logic" \| "hollow_test"}]` | ステップ1でスコープ内に stub/TODO/プレースホルダーを検出(`type: "missing_logic"`、品質チェック前に即座に返却)、またはステップ3 Substance チェックで修正範囲内で回復不能な hollow テストを検出(`type: "hollow_test"`) |
|
|
199
214
|
| `blocked`(specification_conflict) | `reason: "Cannot determine due to unclear specification"`, `blockingIssues[{type: "ux_specification_conflict" \| "specification_conflict", details, test_expects, implementation_behavior, why_cannot_judge}]`, `attemptedFixes[]`, `needsUserDecision` | 以下の3条件が全て成立: 妥当な修正方法が複数存在; UX/仕様判断が必要; 全確認手段を試行済み |
|
|
200
215
|
| `blocked`(missing_prerequisites) | `reason: "Execution prerequisites not met"`, `missingPrerequisites[{type: seed_data\|library\|environment_variable\|running_service\|other, description, affectedTests[], resolutionSteps[]}]`, `testsSkipped`, `testsPassedWithoutPrerequisites` | 本エージェントのスコープ外の環境不足によりテスト実行不可 |
|
|
201
216
|
|
|
202
217
|
最小例(`stub_detected`; 簡潔のため `taskFileMechanisms` は省略 — `task_file` 提供時は必ず含める):
|
|
203
218
|
|
|
204
219
|
```json
|
|
205
|
-
{
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}
|
|
220
|
+
{ "status": "stub_detected", "reason": "Incomplete implementation detected in changed files", "incompleteImplementations": [{ "file_path": "src/components/Order/Total.tsx", "location": "calculateTotal", "description": "Returns hardcoded 0; should compute total from items", "type": "missing_logic" }] }
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
最小例(`blocked` — Variant A、UX/仕様矛盾):
|
|
224
|
+
|
|
225
|
+
```json
|
|
226
|
+
{ "status": "blocked", "reason": "Cannot determine due to unclear specification", "blockingIssues": [{ "type": "ux_specification_conflict", "details": "Test expectation and implementation contradict on user interaction behavior", "test_expects": "Button disabled on form error", "implementation_behavior": "Button enabled, shows error on click", "why_cannot_judge": "Correct UX specification unknown" }], "attemptedFixes": ["Tried aligning test to implementation", "Tried aligning implementation to test", "Tried inferring specification from Design Doc"], "needsUserDecision": "Confirm the correct button-disabled behavior" }
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
最小例(`blocked` — Variant B、前提条件の不足):
|
|
230
|
+
|
|
231
|
+
```json
|
|
232
|
+
{ "status": "blocked", "reason": "Execution prerequisites not met", "missingPrerequisites": [{ "type": "seed_data", "description": "E2E test environment has no test player with active subscription", "affectedTests": ["training.e2e.test.ts"], "resolutionSteps": ["Create seed script for the E2E test player", "Add subscription record to the seed"] }], "testsSkipped": 3, "testsPassedWithoutPrerequisites": 47, "needsUserDecision": "Confirm whether seed setup is in scope for this task" }
|
|
212
233
|
```
|
|
213
234
|
|
|
214
235
|
**処理ルール**(内部):
|
|
@@ -241,16 +262,16 @@ package.json からフロントエンドビルドコマンドを自動検出し
|
|
|
241
262
|
|
|
242
263
|
- [ ] 最終レスポンスが `approved`、`stub_detected`、または `blocked` ステータスの単一JSON
|
|
243
264
|
|
|
244
|
-
##
|
|
265
|
+
## 修正実行ポリシー
|
|
245
266
|
|
|
246
|
-
|
|
247
|
-
-
|
|
248
|
-
-
|
|
249
|
-
-
|
|
267
|
+
**参照すべきポリシー**(修正前に以下のスキルを参照する):
|
|
268
|
+
- ゼロエラーとコード品質: coding-standards スキル
|
|
269
|
+
- React/TS の型安全性(Props/State、型ガード等): frontend-typescript-rules スキル
|
|
270
|
+
- テスト修正判断、RTL/MSW 規約、実体性基準: frontend-typescript-testing スキル
|
|
250
271
|
|
|
251
|
-
|
|
272
|
+
**停止条件**: 全フェーズがパス、または blocked 条件のいずれかに該当した時点で停止する。
|
|
252
273
|
|
|
253
|
-
|
|
274
|
+
### 自動修正範囲
|
|
254
275
|
- **フォーマット・スタイル**: `check:fix` スクリプトでBiome自動修正
|
|
255
276
|
- インデント、セミコロン、クォート
|
|
256
277
|
- import文の並び順
|
|
@@ -266,7 +287,7 @@ package.json からフロントエンドビルドコマンドを自動検出し
|
|
|
266
287
|
- 到達不可能コードの削除
|
|
267
288
|
- console.log文の削除
|
|
268
289
|
|
|
269
|
-
|
|
290
|
+
### 手動修正範囲
|
|
270
291
|
- **React Testing Libraryテスト修正**: プロジェクトテストルールの判断基準に従う
|
|
271
292
|
- 実装が正しくテストが古い場合: テストを修正
|
|
272
293
|
- 実装にバグがある場合: Reactコンポーネントを修正
|
|
@@ -291,11 +312,6 @@ package.json からフロントエンドビルドコマンドを自動検出し
|
|
|
291
312
|
- 必要な Props 型定義を追加
|
|
292
313
|
- ジェネリクスやユニオン型で柔軟に対応
|
|
293
314
|
|
|
294
|
-
#### 修正継続の判定条件
|
|
295
|
-
- **継続**: いずれかのフェーズでエラー・警告・失敗が存在
|
|
296
|
-
- **完了**: 全フェーズがパス
|
|
297
|
-
- **停止**: blocked の3条件のいずれかに該当する場合のみ
|
|
298
|
-
|
|
299
315
|
## アンチパターン(問題を隠蔽してはならない)
|
|
300
316
|
|
|
301
317
|
| 失敗 | 必要なアクション | 禁止される近道 |
|
|
@@ -26,7 +26,8 @@ skills: typescript-rules, typescript-testing, technical-spec, coding-standards,
|
|
|
26
26
|
## 入力パラメータ
|
|
27
27
|
|
|
28
28
|
- **task_file**(任意): 検証対象のタスクファイルへのパス。指定された場合、「品質保証メカニズム」セクションを読み込み、品質チェック検出の補助ヒントとして使用する。これはあくまでヒントであり、コード・マニフェスト・設定ベースの一次検出が優先。
|
|
29
|
-
- **filesModified**(任意):
|
|
29
|
+
- **filesModified**(任意): 上流の実装ステップが現在のタスクで変更したファイルパスのリスト。ステップ1の未完成実装チェックの主要スコープとして使用する。未指定時は `git diff HEAD` にフォールバックする。
|
|
30
|
+
- **runnableCheck**(任意): 上流の実装ステップから受け取るテスト実行のエビデンス。指定された場合、ステップ3の Substance チェックの一次入力として使う。スキーマ: `{ level, executed, command, result: 'passed'|'failed'|'skipped', substance: 'substantive'|'non_substantive'|null, substanceIssue: string|null, reason }`。未指定時は、スコープ内のテスト本体を自分で走査して実体性を判定する。
|
|
30
31
|
|
|
31
32
|
## 初回必須タスク
|
|
32
33
|
|
|
@@ -83,6 +84,14 @@ technical-specスキルの「品質チェック要件」セクションに従う
|
|
|
83
84
|
- 基本チェック(lint, format, build)
|
|
84
85
|
- テスト(unit, integration)
|
|
85
86
|
- 最終ゲート(全てパス必須)
|
|
87
|
+
- Substance チェック(テストエビデンスがある場合のみ):
|
|
88
|
+
- 適用対象: タスクファイルに記載された AC のエビデンスとしてテスト実行が引用されている場合
|
|
89
|
+
- 入力: 入力パラメータ `runnableCheck` が渡された場合は `substance` と `substanceIssue` フィールドを一次シグナルとして使う。未指定時はスコープ内のテスト本体を自分で走査する
|
|
90
|
+
- 実体的と判定する条件: 実行されたアサーションのうち少なくとも1つが、AC の観測可能な振る舞いを検証している。意図的な不在を検証するアサーション(例: 空の結果、null 戻り値)は AC が不在を期待する場合に該当する
|
|
91
|
+
- 非実体的な例: テストランナーが0件マッチと報告、実行されるべきパスでのテストスキップ、TODO のみの本体、振る舞いに関係なく常に成功するアサーション(例: `expect(true).toBe(true)`、`expect(arr.length).toBeGreaterThanOrEqual(0)`)
|
|
92
|
+
- 修正範囲内での対処手段: `skip`/`only` マーカーの除去、テストセレクタの拡張、関連テストファイルの追加実行
|
|
93
|
+
- 修正範囲内で実体性を達成できない場合: 該当する hollow テストファイルを `incompleteImplementations[]` に載せて `stub_detected` を返却する。各エントリは `type: "hollow_test"` を持ち、`description` には AC 参照と実体性の問題を記載する(出力フォーマット参照)
|
|
94
|
+
- 対象範囲: lint、format、build、typecheck の実行はこのルールの対象外
|
|
86
95
|
|
|
87
96
|
### ステップ4: エラーの修正
|
|
88
97
|
coding-standardsおよびtypescript-testingスキルに従って修正を適用。
|
|
@@ -96,7 +105,7 @@ coding-standardsおよびtypescript-testingスキルに従って修正を適用
|
|
|
96
105
|
### ステップ6: JSON結果の返却
|
|
97
106
|
最終レスポンスとして以下のいずれかを返却する(スキーマは出力フォーマットを参照):
|
|
98
107
|
- `status: "approved"` — すべての品質チェックがパス
|
|
99
|
-
- `status: "stub_detected"` —
|
|
108
|
+
- `status: "stub_detected"` — ステップ1で未完成実装を検出(`type: "missing_logic"`)、またはステップ3 Substance チェックで修正範囲内で回復不能な hollow テストを検出(`type: "hollow_test"`)
|
|
100
109
|
- `status: "blocked"` — 仕様が不明確、ビジネス判断が必要
|
|
101
110
|
|
|
102
111
|
### Phase 詳細
|
|
@@ -105,11 +114,16 @@ coding-standardsおよびtypescript-testingスキルに従って修正を適用
|
|
|
105
114
|
|
|
106
115
|
## ステータス判定基準
|
|
107
116
|
|
|
108
|
-
### stub_detected
|
|
109
|
-
|
|
117
|
+
### stub_detected(未完成実装または hollow テストを検出)
|
|
118
|
+
2つの経路から返却される。`incompleteImplementations[].type` で区別する:
|
|
119
|
+
- `type: "missing_logic"` — ステップ1で diff 内に未完成実装を検出(TODO・プレースホルダー本体、ハードコードされた戻り値など)。即座に返却され、品質チェックは実行されない。
|
|
120
|
+
- `type: "hollow_test"` — ステップ3 Substance チェックで、AC のエビデンスとして引用されたテストの本体に実体的なアサーションが欠落しており、修正範囲内では回復できなかった場合。ここまでの品質チェックは既に実行済み。
|
|
121
|
+
|
|
122
|
+
いずれの場合も、実装(またはテスト本体)の完了は呼び出し元の責務。修正後に本エージェントを再実行して検証する。
|
|
110
123
|
|
|
111
124
|
### approved(全品質チェックがパス)
|
|
112
125
|
- 全テストが通過
|
|
126
|
+
- タスクファイルに記載された AC のエビデンスとしてテスト実行が引用されている場合、実行されたアサーションのうち少なくとも1つが、その AC の観測可能な振る舞いを検証する(意図的な不在を検証するアサーションは AC が不在を期待する場合に該当)。テストエビデンスが引用されないタスク(純粋なリファクタ(振る舞い変更なし)など)はこの基準の対象外
|
|
113
127
|
- ビルド成功
|
|
114
128
|
- 型チェック成功
|
|
115
129
|
- Lint/Format成功
|
|
@@ -160,20 +174,26 @@ coding-standardsおよびtypescript-testingスキルに従って修正を適用
|
|
|
160
174
|
| status | 必須フィールド | 使用条件 |
|
|
161
175
|
|---|---|---|
|
|
162
176
|
| `approved` | `summary`, `checksPerformed: {phase1_biome, phase2_structure, phase3_typescript, phase4_tests, phase5_code_recheck}`(各 `{status, commands[], …}`), `fixesApplied[{type: auto\|manual, category, description, filesCount}]`, `metrics: {totalErrors, totalWarnings, executionTime}`, `nextActions` | 全Phase(1-5)がエラー0で完了 |
|
|
163
|
-
| `stub_detected` | `reason`, `incompleteImplementations[{file_path, location, description}]` | ステップ1でスコープ内にstub/TODO
|
|
177
|
+
| `stub_detected` | `reason`, `incompleteImplementations[{file_path, location, description, type: "missing_logic" \| "hollow_test"}]` | ステップ1でスコープ内に stub/TODO/プレースホルダーを検出(`type: "missing_logic"`、品質チェック前に即座に返却)、またはステップ3 Substance チェックで修正範囲内で回復不能な hollow テストを検出(`type: "hollow_test"`) |
|
|
164
178
|
| `blocked`(specification_conflict) | `reason: "Cannot determine due to unclear specification"`, `blockingIssues[{type: "specification_conflict", details, test_expects, implementation_returns, why_cannot_judge}]`, `attemptedFixes[]`, `needsUserDecision` | 以下の3条件が全て成立: 妥当な修正方法が複数存在; 仕様判断が必要; 全確認手段を試行済み |
|
|
165
179
|
| `blocked`(missing_prerequisites) | `reason: "Execution prerequisites not met"`, `missingPrerequisites[{type: seed_data\|library\|environment_variable\|running_service\|other, description, affectedTests[], resolutionSteps[]}]`, `testsSkipped`, `testsPassedWithoutPrerequisites` | 本エージェントのスコープ外の環境不足によりテスト実行不可 |
|
|
166
180
|
|
|
167
181
|
最小例(`stub_detected`; 簡潔のため `taskFileMechanisms` は省略 — `task_file` 提供時は必ず含める):
|
|
168
182
|
|
|
169
183
|
```json
|
|
170
|
-
{
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
184
|
+
{ "status": "stub_detected", "reason": "Incomplete implementation detected in changed files", "incompleteImplementations": [{ "file_path": "src/svc/order.ts", "location": "calculateTotal", "description": "Returns hardcoded 0; should compute total from items", "type": "missing_logic" }] }
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
最小例(`blocked` — Variant A、仕様矛盾):
|
|
188
|
+
|
|
189
|
+
```json
|
|
190
|
+
{ "status": "blocked", "reason": "Cannot determine due to unclear specification", "blockingIssues": [{ "type": "specification_conflict", "details": "Test expectation and implementation contradict", "test_expects": "500 error", "implementation_returns": "400 error", "why_cannot_judge": "Correct specification unknown" }], "attemptedFixes": ["Tried aligning test to implementation", "Tried aligning implementation to test", "Tried inferring specification from related documentation"], "needsUserDecision": "Confirm the correct error code" }
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
最小例(`blocked` — Variant B、前提条件の不足):
|
|
194
|
+
|
|
195
|
+
```json
|
|
196
|
+
{ "status": "blocked", "reason": "Execution prerequisites not met", "missingPrerequisites": [{ "type": "seed_data", "description": "Integration test database has no seed records for the new flow", "affectedTests": ["order-flow.int.test.ts"], "resolutionSteps": ["Create seed script for the test database", "Add the missing records to the seed"] }], "testsSkipped": 3, "testsPassedWithoutPrerequisites": 47, "needsUserDecision": "Confirm whether seed setup is in scope for this task" }
|
|
177
197
|
```
|
|
178
198
|
|
|
179
199
|
**処理ルール**(内部):
|
|
@@ -206,16 +226,16 @@ coding-standardsおよびtypescript-testingスキルに従って修正を適用
|
|
|
206
226
|
|
|
207
227
|
- [ ] 最終レスポンスが `approved`、`stub_detected`、または `blocked` ステータスの単一JSON
|
|
208
228
|
|
|
209
|
-
##
|
|
229
|
+
## 修正実行ポリシー
|
|
210
230
|
|
|
211
|
-
|
|
212
|
-
-
|
|
213
|
-
-
|
|
214
|
-
-
|
|
231
|
+
**参照すべきポリシー**(修正前に以下のスキルを参照する):
|
|
232
|
+
- ゼロエラーとコード品質: coding-standards スキル
|
|
233
|
+
- 型安全性(`any` の代替、型ガード等): typescript-rules スキル
|
|
234
|
+
- テスト修正判断と実体性基準: typescript-testing スキル
|
|
215
235
|
|
|
216
|
-
|
|
236
|
+
**停止条件**: 全 Phase がパス、または blocked 条件のいずれかに該当した時点で停止する。
|
|
217
237
|
|
|
218
|
-
|
|
238
|
+
### 自動修正範囲
|
|
219
239
|
- **フォーマット・スタイル**: `check:fix` スクリプトでBiome自動修正
|
|
220
240
|
- インデント、セミコロン、クォート
|
|
221
241
|
- import文の並び順
|
|
@@ -231,7 +251,7 @@ coding-standardsおよびtypescript-testingスキルに従って修正を適用
|
|
|
231
251
|
- 到達不可能コードの削除
|
|
232
252
|
- console.log文の削除
|
|
233
253
|
|
|
234
|
-
|
|
254
|
+
### 手動修正範囲
|
|
235
255
|
- **テスト修正**: typescript-testingスキルの判断基準に従う
|
|
236
256
|
- 実装が正しくテストが古い場合: テストを修正
|
|
237
257
|
- 実装にバグがある場合: 実装を修正
|
|
@@ -250,11 +270,6 @@ coding-standardsおよびtypescript-testingスキルに従って修正を適用
|
|
|
250
270
|
- 必要な型定義を追加
|
|
251
271
|
- ジェネリクスやユニオン型で柔軟に対応
|
|
252
272
|
|
|
253
|
-
#### 修正継続の判定条件
|
|
254
|
-
- **継続**: いずれかのPhaseでエラー・警告・失敗が存在
|
|
255
|
-
- **完了**: 全Phase(1-5)がエラー0
|
|
256
|
-
- **停止**: blocked の3条件のいずれかに該当する場合のみ
|
|
257
|
-
|
|
258
273
|
## アンチパターン(問題を隠蔽してはならない)
|
|
259
274
|
|
|
260
275
|
| 失敗 | 必要なアクション | 禁止される近道 |
|
|
@@ -15,8 +15,12 @@ skills: frontend-typescript-rules, frontend-typescript-testing, coding-standards
|
|
|
15
15
|
|
|
16
16
|
### モード選択
|
|
17
17
|
|
|
18
|
-
- **Fresh Implementation Mode**(既定 — `requiredFixes` も `incompleteImplementations` も渡されていない場合): タスクファイルの `[ ]`
|
|
19
|
-
- **Fix Mode**(`requiredFixes` または `incompleteImplementations` のいずれかが非空):
|
|
18
|
+
- **Fresh Implementation Mode**(既定 — `requiredFixes` も `incompleteImplementations` も渡されていない場合): タスクファイルの `[ ]` チェックボックスを起点として作業を進める。残りがなければ `task_already_completed` でエスカレーション。
|
|
19
|
+
- **Fix Mode**(`requiredFixes` または `incompleteImplementations` のいずれかが非空): 修正項目を起点として作業を進める。未完了チェックボックスゲートをスキップ。許可ファイルリストには各項目の `file_path`(パスそのもの)または `location`(`file[:line]` として解釈し、ファイル部分のみを使用)を加える。タスクのチェックボックスは変更せず、結果は `changeSummary` に記録する。
|
|
20
|
+
- `incompleteImplementations[]` の各エントリは、`type` フィールドで修正アクションを分岐する:
|
|
21
|
+
- `type: "missing_logic"` — 指定されたファイル・位置に欠落しているロジックを実装し、コンポーネントが意図された出力を返却・レンダリングするようにする
|
|
22
|
+
- `type: "hollow_test"` — hollow なテスト本体を、AC の観測可能な振る舞いを検証する React Testing Library のアサーション(少なくとも1つ)に置き換える。実行されるべきテストへの `skip`/`xit` マーカーは外す。テスト対象のコンポーネント本体は、欠落していたアサーションが実装バグを露呈する場合を除き変更しない
|
|
23
|
+
- `type` が未指定の場合は `description` のテキストから推測する。曖昧な場合は `missing_logic` をデフォルトとする
|
|
20
24
|
|
|
21
25
|
## フェーズ開始ゲート [BLOCKING]
|
|
22
26
|
|
|
@@ -73,25 +77,22 @@ package.json の `packageManager` フィールドに従って実行コマンド
|
|
|
73
77
|
### Step2: 品質基準違反チェック(以下1つでもYES → 即エスカレーション)
|
|
74
78
|
□ 型システム回避が必要?(型キャスト、動的型付け強制、型検証無効化)
|
|
75
79
|
□ エラーハンドリング回避が必要?(例外無視、エラー握りつぶし、空 catch ブロック)
|
|
76
|
-
□
|
|
80
|
+
□ テストを実質的でない状態にする変更が必要?(skip 追加、無意味な検証、常に成功するテスト)
|
|
77
81
|
□ 既存テスト変更・削除が必要?
|
|
78
82
|
|
|
79
83
|
### Step3: 類似コンポーネント重複チェック
|
|
80
|
-
**以下の重複度評価でエスカレーション判定**
|
|
81
84
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
同一ドメイン・責務の既存コンポーネント・hook と照合し、以下5つの指標を評価する:
|
|
86
|
+
- (a) 同一ドメイン・責務(同一 UI パターン、同一ビジネス領域)
|
|
87
|
+
- (b) 同一入出力パターン(Props 型・構造)
|
|
88
|
+
- (c) 同一レンダリング内容(JSX 構造、イベントハンドラ、state 管理)
|
|
89
|
+
- (d) 同一配置(同一コンポーネントディレクトリまたは機能的に関連する feature)
|
|
90
|
+
- (e) 命名類似(コンポーネント名・hook 名に共通のキーワード・パターン)
|
|
88
91
|
|
|
89
|
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
|
|
94
|
-
**低重複(継続実装)** - 1項目以下該当
|
|
92
|
+
エスカレーション閾値:
|
|
93
|
+
- 3項目以上一致 → エスカレーション
|
|
94
|
+
- 一致したのが (a+c) または (b+c) の組み合わせのみ → エスカレーション。その他の2項目組み合わせ → 継続実装
|
|
95
|
+
- 1項目以下一致 → 継続実装
|
|
95
96
|
|
|
96
97
|
### 境界ケースと鉄則
|
|
97
98
|
|
|
@@ -162,6 +163,15 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
|
|
|
162
163
|
**強制**: ゲートが発動し、いずれかが未チェックの場合、構造化レスポンス仕様で定義される JSON 形式で `status: "escalation_needed"` を返却。
|
|
163
164
|
|
|
164
165
|
### 3. 実装実行
|
|
166
|
+
|
|
167
|
+
#### テスト環境チェック
|
|
168
|
+
**TDDサイクル開始前**: **このタスクのテストが依存する**コンポーネントだけを確認する。AC を、テストランナーとレンダリングエントリポイントのみで実行可能なテスト(ライブネットワーク呼び出しや別プロセスのモックサーバ、フィクスチャ、外部サービス、プロジェクトの既定テスト環境を超える本番相当の DOM ポリフィルを必要としない)で実行できる場合は、そちらを優先してエスカレーションを避ける。
|
|
169
|
+
|
|
170
|
+
**対象コンポーネント**(例): このタスクが追加・変更するテストが参照する、テストランナー、DOM/ブラウザ環境、setup ファイル、および変更された振る舞いがモック化されたネットワーク呼び出しに依存する場合のネットワークモック層。
|
|
171
|
+
**確認方法**: `package.json` スクリプト、テストランナーの設定、DOM/ブラウザ環境のセットアップ、必要に応じてネットワークモックハンドラを点検する(例: Vitest、jsdom/ブラウザモード、setup ファイル、MSW 等)。
|
|
172
|
+
**利用可能**: frontend-typescript-testing スキルに従い RED-GREEN-REFACTOR を実行する。
|
|
173
|
+
**利用不可**: このタスクが選択したテストパスに必要なコンポーネントが欠落しており、かつ AC に対するテストランナーとレンダリングエントリポイントのみで成立する代替が成り立たない場合、`status: "escalation_needed"`、`reason: "Test environment not ready"`、`escalation_type: "test_environment_not_ready"` でエスカレーション(エスカレーションレスポンス表参照)。
|
|
174
|
+
|
|
165
175
|
#### 実装前確認(重複チェック — coding-standards のパターン5)
|
|
166
176
|
1. **Design Doc該当箇所**を読み込み、正確に理解
|
|
167
177
|
2. **既存実装調査**:同ドメイン・責務で類似コンポーネント・hook を検索
|
|
@@ -179,6 +189,17 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
|
|
|
179
189
|
- `N`: 実装を中止し、`status: "escalation_needed"` と `escalation_type: "binding_decision_violation"`(`phase: "pre_implementation"`)で最終レスポンスを生成する(エスカレーションレスポンス表を参照)。`N` は計画段階での違反を表す
|
|
180
190
|
- `Unknown`: その行を Investigation Notes に保留として記録し、TDDサイクルに進む。終了ゲートが(このステップで保留された Unknown 行を含む)全行を最終実装に対して再評価し、その時点で `N` または `Unknown` が残る場合はエスカレーションする
|
|
181
191
|
|
|
192
|
+
#### 参照の代表性チェック(実装中に随時適用)
|
|
193
|
+
|
|
194
|
+
パターン・hook・ライブラリをコードから採用する際、coding-standards の「参照の代表性」を採用時点で適用する:
|
|
195
|
+
|
|
196
|
+
□ **リポジトリ全体での確認**: 対象パターンをリポジトリ全体で Grep し、参照元以外で使用されているファイル数で分岐する:
|
|
197
|
+
- 異なるディレクトリの3ファイル以上で使用 → 採用
|
|
198
|
+
- 1-2ファイルで使用 → それらが正規の実装かレガシーかを調査。正規と判断できれば採用。判定不能なら `escalation_type: "dependency_version_uncertain"` でエスカレーション
|
|
199
|
+
- 0ファイル → ローカル規約として扱う。明示的な正当化(周囲のコードとの整合、破壊的変更の回避、関係箇所と協調するアップデート待ち等)を Investigation Notes に記載した上でのみ採用
|
|
200
|
+
□ **共存時の解決**: 同じ関心事(ルーティング、サーバー状態、フォーム、スタイリング等)に対して複数のライブラリやパターンが共存する場合、**変更対象の feature 領域**で支配的な選択に従う — 周囲の feature フォルダ、または同じ関心事を扱う兄弟が存在する最近接の親ディレクトリ。支配的な選択が不明確な場合は、別の選択肢を新たに導入せず `escalation_type: "dependency_version_uncertain"` でエスカレーション(ライブラリ/パターンの選択不明も含む)
|
|
201
|
+
□ **新規選択肢の規律**: リポジトリが既に扱っている関心事に対する新たなライブラリ/パターンの導入判断は、直接採用せず `dependency_version_uncertain` エスカレーション経由で行う
|
|
202
|
+
|
|
182
203
|
#### 実装フロー(TDD準拠)
|
|
183
204
|
|
|
184
205
|
**モード分岐**:
|
|
@@ -230,6 +251,15 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
|
|
|
230
251
|
|
|
231
252
|
**requiresTestReview**: タスクが統合テストまたはE2Eテストを追加・更新した場合は`true`に設定。単体テストのみのタスクやテストなしのタスクでは`false`に設定。
|
|
232
253
|
|
|
254
|
+
**runnableCheck.result** と **runnableCheck.substance**: 両フィールドを以下の仕様で設定する。
|
|
255
|
+
|
|
256
|
+
- `result`: テストランナーの実行結果をそのまま反映する — `passed`、`failed`、`skipped` のいずれか。非テスト系の検証(build、typecheck、CLI 実行、成果物チェック)はコマンドがエラーなく完了したら `passed`。
|
|
257
|
+
- `substance`: タスクファイルに記載された AC のエビデンスとしてテスト実行が引用されている場合のみ適用:
|
|
258
|
+
- `substantive`: 実行されたアサーションのうち少なくとも1つが、AC の観測可能な振る舞いを検証している。意図的な不在を検証するアサーション(例: `expect(screen.queryAllByRole(...)).toHaveLength(0)`、`expect(value).toBeNull()`)は AC が不在を期待する場合に該当する
|
|
259
|
+
- `non_substantive`: AC に対する実体的なアサーションが存在しない実行 — 例: テストランナーが0件マッチと報告、実行されるべきパスでのテストスキップ、TODO のみの本体、振る舞いに関係なく常に成功するアサーション(例: `expect(true).toBe(true)`、`expect(arr.length).toBeGreaterThanOrEqual(0)`)
|
|
260
|
+
- `substanceIssue`: `substance` が `non_substantive` の場合、具体的な原因と位置を記載する(例: `"always-true assertion at Button.test.tsx:42"`、`"runner matched 0 tests for pattern *.feature.test.tsx"`)。`substantive` のとき、またはテストエビデンスが引用されない場合は `null`。
|
|
261
|
+
- 非テスト系の検証(lint、format、build、typecheck)は `substance: null`。
|
|
262
|
+
|
|
233
263
|
### 1. タスク完了時のレスポンス
|
|
234
264
|
タスク完了時は以下のJSON形式で報告(**品質チェックやコミットは実行せず**、品質チェック工程に委譲):
|
|
235
265
|
|
|
@@ -252,6 +282,8 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
|
|
|
252
282
|
"executed": true,
|
|
253
283
|
"command": "test -- Button.test.tsx",
|
|
254
284
|
"result": "passed / failed / skipped",
|
|
285
|
+
"substance": "substantive | non_substantive | null (非テスト系の検証)",
|
|
286
|
+
"substanceIssue": "substantive または非テスト系の場合は null。non_substantive の場合は原因と位置を記載",
|
|
255
287
|
"reason": "テスト実行理由・確認内容"
|
|
256
288
|
},
|
|
257
289
|
"readyForQualityCheck": true,
|
|
@@ -282,7 +314,9 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
|
|
|
282
314
|
| `design_compliance_violation` | "Design Doc deviation" | `details: {design_doc_expectation, actual_situation, why_cannot_implement, attempted_approaches[]}`; `claude_recommendation` | "Design Doc を現実に合わせて修正" / "不足コンポーネントを先に実装" / "要件を再検討" |
|
|
283
315
|
| `similar_component_found` | "Similar component/hook discovered" | `similar_components[{file_path, component_name, similarity_reason, code_snippet, technical_debt_assessment: high\|medium\|low\|unknown}]`; `search_details: {keywords_used[], files_searched, matches_found}`; `claude_recommendation` | "既存コンポーネントを拡張" / "既存をリファクタしてから利用" / "技術的負債として新規実装(ADR作成)" / "新規実装(差別化を明確化)" |
|
|
284
316
|
| `investigation_target_not_found` | "Investigation target not found" | `missingTargets[{path, searchHint, searchAttempts[]}]` | "正しいパスを提供" / "この調査対象を除外" / "現在のパスでタスクファイルを更新" |
|
|
317
|
+
| `dependency_version_uncertain` | "Dependency version uncertain" | `dependency: {name(ライブラリまたはパターンの関心事。例: routing/server-state/forms), candidatesFound[](共存する選択肢), filesChecked[], ambiguityReason}` | "選択肢 X に従う(隣接 feature 領域で支配的)" / "選択肢 Y に従う(特定のリポジトリ規約に合致)" / "判断を保留しタスクを分割" |
|
|
285
318
|
| `binding_decision_violation` | "Binding decision violation" | `phase: 'pre_implementation' \| 'exit_gate'`; `plannedApproach`; `failures[{source, axis, decision, complianceCheck, evaluation: 'N' \| 'Unknown', rationale}]` | "バインディング決定を満たすよう実装計画を調整" / "ADRを更新(その後、作業計画書のADR BindingsとこのタスクのBinding Decisionsを更新)" / "Unknown評価を解消する追加コンテキストを提供" |
|
|
319
|
+
| `test_environment_not_ready` | "Test environment not ready" | `missingComponent: 'test runner' \| 'DOM/browser environment' \| 'setup file' \| 'mock layer' \| 'other'`; `description`(欠落コンポーネントがテストをブロックする理由) | "欠落コンポーネントをインストールまたは設定してタスクを再実行" / "環境が整ってからタスクを再割り当て" |
|
|
286
320
|
| `out_of_scope_file` | "Out of scope file" | `details: {file_path, allowed_list[], modification_reason}` | "Target Files に追加してリトライ" / "別タスクに分割" / "アプローチを再検討" |
|
|
287
321
|
| `task_file_not_found` / `task_already_completed` / `target_files_missing` | "Task selection precondition failed" | `details: {task_file_path, failure_reason: 'file does not exist' \| 'file unreadable' \| 'all checkboxes already [x]' \| 'Target Files section missing or empty'}` | "正しい task_file パスを提供" / "作業計画を再分解" / "完了済みとしてスキップ" |
|
|
288
322
|
|
|
@@ -312,6 +346,7 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
|
|
|
312
346
|
☐ Fix Mode: `requiredFixes` / `incompleteImplementations` の全項目が `changeSummary` に対応または個別エスカレーション済み
|
|
313
347
|
☐ 実装が Step 2 で記録した調査メモと整合している(調査対象が存在した場合)
|
|
314
348
|
☐ Binding Decisions の全 Compliance Check が最終実装に対して `Y` と評価され、その根拠が Investigation Notes に記録されている(タスクファイルに Binding Decisions セクションがある場合)。実装前チェックが通過していても、実装が計画したアプローチから逸脱している可能性があるため、ここで再評価する
|
|
349
|
+
☐ テストエビデンスを引用している場合(タスクがテストを実行した場合)、`runnableCheck.substance` と `runnableCheck.substanceIssue` がフィールド仕様に従って設定されている
|
|
315
350
|
☐ 最終レスポンスが `status: "completed"` または `status: "escalation_needed"` の単一 JSON で、構造化レスポンス仕様のスキーマに一致する
|
|
316
351
|
|
|
317
352
|
**強制**: いずれかが未チェックの場合、構造化レスポンス仕様で定義される JSON 形式で `status: "escalation_needed"` を返却。未チェック項目が Binding Decisions の Compliance Check の場合は、`escalation_type: "binding_decision_violation"`(`phase: "exit_gate"`)を使う。
|