create-ai-project 1.20.9 → 1.22.0
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 +112 -50
- package/.claude/agents-en/task-decomposer.md +40 -4
- package/.claude/agents-en/ui-spec-designer.md +2 -0
- package/.claude/agents-en/work-planner.md +98 -29
- package/.claude/agents-ja/acceptance-test-generator.md +113 -49
- package/.claude/agents-ja/task-decomposer.md +44 -8
- package/.claude/agents-ja/ui-spec-designer.md +2 -0
- package/.claude/agents-ja/work-planner.md +96 -29
- package/.claude/commands-en/add-integration-tests.md +8 -0
- package/.claude/commands-en/build.md +75 -23
- package/.claude/commands-en/front-build.md +56 -25
- package/.claude/commands-en/front-plan.md +7 -6
- package/.claude/commands-en/front-review.md +81 -19
- package/.claude/commands-en/implement.md +36 -5
- package/.claude/commands-en/plan.md +9 -8
- package/.claude/commands-en/prepare-implementation.md +191 -0
- package/.claude/commands-en/project-inject.md +84 -56
- package/.claude/commands-en/review.md +79 -20
- package/.claude/commands-ja/add-integration-tests.md +8 -0
- package/.claude/commands-ja/build.md +77 -25
- package/.claude/commands-ja/front-build.md +59 -28
- package/.claude/commands-ja/front-plan.md +8 -7
- package/.claude/commands-ja/front-review.md +81 -19
- package/.claude/commands-ja/implement.md +36 -5
- package/.claude/commands-ja/plan.md +10 -9
- package/.claude/commands-ja/prepare-implementation.md +191 -0
- package/.claude/commands-ja/project-inject.md +84 -56
- package/.claude/commands-ja/review.md +79 -20
- package/.claude/skills-en/documentation-criteria/references/plan-template.md +22 -0
- package/.claude/skills-en/documentation-criteria/references/ui-spec-template.md +2 -0
- package/.claude/skills-en/frontend-typescript-testing/references/e2e.md +81 -7
- package/.claude/skills-en/integration-e2e-testing/SKILL.md +48 -23
- package/.claude/skills-en/integration-e2e-testing/references/e2e-design.md +31 -13
- package/.claude/skills-en/project-context/SKILL.md +2 -15
- package/.claude/skills-en/project-context/references/external-resources-api.md +76 -0
- package/.claude/skills-en/project-context/references/external-resources-backend.md +76 -0
- package/.claude/skills-en/project-context/references/external-resources-frontend.md +74 -0
- package/.claude/skills-en/project-context/references/external-resources-infra.md +76 -0
- package/.claude/skills-en/project-context/references/template.md +154 -0
- package/.claude/skills-en/subagents-orchestration-guide/SKILL.md +36 -14
- package/.claude/skills-en/task-analyzer/references/skills-index.yaml +0 -5
- package/.claude/skills-ja/documentation-criteria/references/plan-template.md +22 -0
- package/.claude/skills-ja/documentation-criteria/references/ui-spec-template.md +2 -0
- package/.claude/skills-ja/frontend-typescript-testing/references/e2e.md +81 -7
- package/.claude/skills-ja/integration-e2e-testing/SKILL.md +48 -23
- package/.claude/skills-ja/integration-e2e-testing/references/e2e-design.md +31 -13
- package/.claude/skills-ja/project-context/SKILL.md +2 -15
- package/.claude/skills-ja/project-context/references/external-resources-api.md +76 -0
- package/.claude/skills-ja/project-context/references/external-resources-backend.md +76 -0
- package/.claude/skills-ja/project-context/references/external-resources-frontend.md +74 -0
- package/.claude/skills-ja/project-context/references/external-resources-infra.md +76 -0
- package/.claude/skills-ja/project-context/references/template.md +154 -0
- package/.claude/skills-ja/subagents-orchestration-guide/SKILL.md +36 -14
- package/.claude/skills-ja/task-analyzer/references/skills-index.yaml +0 -5
- package/.husky/pre-commit +1 -0
- package/CHANGELOG.md +55 -6
- package/README.ja.md +3 -2
- package/README.md +3 -2
- package/docs/guides/en/use-cases.md +18 -3
- package/docs/guides/ja/use-cases.md +18 -3
- package/package.json +2 -1
- package/scripts/check-skills-index.mjs +173 -0
|
@@ -18,34 +18,77 @@ description: 分解済みタスクを自律実行モードで実装
|
|
|
18
18
|
|
|
19
19
|
## 実行前提条件
|
|
20
20
|
|
|
21
|
-
###
|
|
22
|
-
```bash
|
|
23
|
-
# 計画書の確認
|
|
24
|
-
! ls -la docs/plans/*.md | grep -v template | tail -5
|
|
21
|
+
### Implementation Readinessチェック
|
|
25
22
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
タスク処理の前に、ゲート対象となる作業計画書を特定する。
|
|
24
|
+
|
|
25
|
+
**`$ARGUMENTS`が指定されている場合**は、それがユーザーから渡された作業計画書のパスである。自動解決を行わずそのまま使用する。`{plan-name}`はファイル名から `.md` 拡張子(および末尾に `-plan` がある場合はそれも)を除いて抽出する。
|
|
26
|
+
|
|
27
|
+
**`$ARGUMENTS`が空の場合**、タスクファイルから自動解決する:
|
|
28
|
+
1. `docs/plans/tasks/`内で本レシピが消費可能なパターンに一致するタスクファイルを列挙する(subagents-orchestration-guideの「Layer-Aware Agent Routing」で `task-executor` を経由するルートに対応):
|
|
29
|
+
- `{plan-name}-task-*.md`(単層タスク。ルーティング表により backend 予約)
|
|
30
|
+
- `{plan-name}-backend-task-*.md`(複層計画の backend 部分)
|
|
31
|
+
- `{plan-name}-frontend-task-*.md` は本レシピでは消費**しない** — `task-executor-frontend` にルーティングされ、frontend build レシピが所有する
|
|
32
|
+
2. マッチしたファイルから、以下のいずれかにマッチするものを除外する。これらは本実行の実装タスクではなく、他のワークフローフェーズに由来する: `*-task-prep-*.md`(readiness preflight タスク)、`_overview-*.md`(分解overviewファイル)、`*-phase*-completion.md`(フェーズ完了ファイル)、`review-fixes-*.md`(実装後レビュー修正)、`integration-tests-*-task-*.md`(統合テスト追加用スキャフォールディング)
|
|
33
|
+
3. 残った各ファイルから、末尾の `-task-{NN}.md` または `-backend-task-{NN}.md` を取り除いて `{plan-name}` を抽出する
|
|
34
|
+
4. 少なくとも1つのタスクファイルがマッチした場合、最も新しい mtime を持つ `{plan-name}` の `docs/plans/{plan-name}.md` を作業計画書とする。タイは辞書順最大の `{plan-name}` で解決する
|
|
35
|
+
5. **消費可能なパターンが何もマッチせず、`docs/plans/tasks/`に `*-frontend-task-*.md` が存在する場合**: 停止してユーザーに報告する: 「frontend 命名のタスクファイルしか見つかりませんでした。frontend build レシピを実行する意図であればそちらに切り替えてください。計画が backend ならば、task-decomposer を再実行して backend 命名のタスクファイルを出力させるか、作業計画書のパスを `$ARGUMENTS` で指定してください。」
|
|
36
|
+
6. 消費可能パターンも `*-frontend-task-*.md` も見つからない場合、**backendであることを積極的に示す信号が確認できた場合に限り** `docs/plans/`の最も新しい mtime の非テンプレート `.md` にフォールバックする。多くの計画書テンプレートには backend / frontend のいずれにも合致しない layer-neutral なパス(例: `src/presentation`、`src/app`)が含まれるため、frontend 信号の不在だけでは不十分 — backend の確証が必要である。計画書を読んで以下を確認する:
|
|
37
|
+
|
|
38
|
+
**Backend 信号(最低1つ必要)**:
|
|
39
|
+
- `## Impact Scope > ### Target Files`(または同等のセクション)の対象ファイルが backend マーカー(`**/api/**`、`**/server/**`、`**/services/**`、`**/backend/**`、`**/handlers/**`、`**/repositories/**`、または technical-spec スキルで宣言されたプロジェクト固有の backend パス)に**排他的に**マッチする
|
|
40
|
+
- 計画書の `## 関連ドキュメント` が、ファイル名から明示的に backend と特定できる Design Doc を参照している(例: `*-backend-design.md`、`backend-*-design.md`)
|
|
41
|
+
- 計画書のタイトル、`## 目的`、`## 背景` セクションが作業を backend と明示している(例: 「backend 実装」「APIエンドポイント」「データベースマイグレーション」「サーバーサイド」)
|
|
42
|
+
|
|
43
|
+
**Frontend 信号(1つでも該当すれば不適格扱いとなる。backend 信号が存在しても優先される)**:
|
|
44
|
+
- `## 関連ドキュメント` が `docs/ui-spec/*` を指している
|
|
45
|
+
- `## UI Specコンポーネント → タスクマッピング` セクションが存在する
|
|
46
|
+
- 対象ファイルが frontend パス(`**/components/**`、`**/pages/**`、`**/web/**`、`**/*.tsx`、`**/*.jsx`)に排他的に該当する
|
|
47
|
+
- 計画書のタイトルや目的が React、UI コンポーネント、画面、frontend を明示している
|
|
48
|
+
|
|
49
|
+
**判定**:
|
|
50
|
+
- backend 信号 ≥1 かつ frontend 信号 = 0 → 計画書を受容して進む
|
|
51
|
+
- それ以外(backend 信号がない、または frontend 信号が1つでもある、または layer-neutral なパスのみ)→ 停止して報告する: 「最も新しい作業計画書 `[path]` が backend 計画であることを確証できません(確認した信号と結果: [リスト])。意図する backend 計画書のパスを `$ARGUMENTS` で指定するか、task-decomposer を先に実行して `docs/plans/tasks/` に backend 命名のタスクファイルを出力してください。」
|
|
52
|
+
7. `docs/plans/`に計画書が一切存在しない場合は、停止して報告する: 「作業計画書が見つかりません。作業計画書のパスを `$ARGUMENTS` で指定するか、計画フェーズを先に完了してください。」
|
|
53
|
+
|
|
54
|
+
作業計画書のヘッダを読み、`Implementation Readiness: <status>`の行を見つける。以下のルールを適用する:
|
|
55
|
+
|
|
56
|
+
| ステータス | アクション |
|
|
57
|
+
|--------|--------|
|
|
58
|
+
| `ready` | Consumed Task Set の計算へ進む |
|
|
59
|
+
| `escalated` | 作業計画書のReadiness Reportセクションを読み、AskUserQuestionで残存ギャップをユーザーに提示する: 「Implementation Readinessが`escalated`で、以下の残存ギャップがあります: [リスト]。実行を継続しますか?(y/n)」。`y`なら進む、`n`なら停止 |
|
|
60
|
+
| `pending` | AskUserQuestionで提示する: 「Implementation Readinessが`pending`です。事前にreadiness preflightを実行して作業計画書の実装可能性を検証してから再開してください。preflightなしで継続しますか?(y/n)」。`y`なら進む、`n`なら停止 |
|
|
61
|
+
| 行が存在しない | `pending`として扱う — readinessマーカー導入前に作成された古い作業計画書は明示的にpreflightすべき |
|
|
62
|
+
|
|
63
|
+
### Consumed Task Set
|
|
64
|
+
|
|
65
|
+
本実行で消費する **Consumed Task Set** を計算する — 本レシピが所有・実行・後で削除する正確なファイル群。Implementation Readinessチェックと同じ消費可能パターンを使用する:
|
|
66
|
+
|
|
67
|
+
1. Implementation Readinessチェックで解決した `{plan-name}` について、`docs/plans/tasks/`内で `{plan-name}-task-*.md` または `{plan-name}-backend-task-*.md` にマッチするタスクファイルを列挙する。`{plan-name}-frontend-task-*.md` は除外する — frontend build レシピが所有する
|
|
68
|
+
2. 以下にマッチするファイルを除外する: `*-task-prep-*.md`、`_overview-*.md`、`*-phase*-completion.md`、`review-fixes-*.md`、`integration-tests-*-task-*.md`(これらは他のワークフローフェーズに由来する)
|
|
69
|
+
|
|
70
|
+
本レシピ内で「タスクファイル」と参照する箇所すべて — タスク生成判定フロー、タスク実行サイクルの反復、最終クリーンアップ — はこのセットを使用する。`docs/plans/tasks/*.md` を制限なく glob しない。
|
|
29
71
|
|
|
30
72
|
### タスク生成判定フロー
|
|
31
73
|
|
|
32
|
-
|
|
74
|
+
Consumed Task Set を確認し、適切な対応を決定する。注: 本セクションに到達するということは、上記の readiness check が作業計画書を解決済み(Steps 1-6 が成功)であることを意味する。「計画書なし」の状態は readiness check の Step 7 が既に終了させており、本表には到達しない。
|
|
33
75
|
|
|
34
76
|
| 状態 | 判定基準 | 次のアクション |
|
|
35
77
|
|------|---------|--------------|
|
|
36
|
-
| タスク存在 |
|
|
37
|
-
|
|
|
38
|
-
|
|
|
39
|
-
|
|
78
|
+
| タスク存在 | Consumed Task Set が非空 | ユーザーの実行指示をバッチ承認として自律実行へ移行 |
|
|
79
|
+
| タスクなし + `$ARGUMENTS`で計画書指定 | `$ARGUMENTS`が提供され Consumed Task Set が空 | ユーザーに確認 → task-decomposer実行 |
|
|
80
|
+
| タスクなし + 計画書を自動解決 | Consumed Task Set が空かつ計画書が自動解決(readiness check の Step 6 経由)で得られ、backend 信号 ≥1 かつ frontend 信号 = 0 が確認済み | ユーザーに確認 → task-decomposer実行(Step 6 のレイヤー検証で frontend / 不確定な計画は既に除外されているため安全) |
|
|
81
|
+
|
|
82
|
+
Design Doc から作業計画書がまだない状態で着手したい場合は、先に計画レシピを実行して計画書を生成してから本レシピを再起動する — 上記 readiness check は意図的に自動生成を行わず、レイヤー判断を明示的に保つ。
|
|
40
83
|
|
|
41
84
|
## タスク分解フェーズ(条件付き実行)
|
|
42
85
|
|
|
43
|
-
|
|
86
|
+
Consumed Task Set が空の場合:
|
|
44
87
|
|
|
45
88
|
### 1. ユーザー確認
|
|
46
89
|
```
|
|
47
|
-
|
|
48
|
-
作業計画書: docs/plans/[
|
|
90
|
+
Consumed Task Set にタスクファイルがありません。
|
|
91
|
+
作業計画書: docs/plans/[plan-name].md
|
|
49
92
|
|
|
50
93
|
計画書からタスクを生成しますか? (y/n):
|
|
51
94
|
```
|
|
@@ -54,20 +97,17 @@ description: 分解済みタスクを自律実行モードで実装
|
|
|
54
97
|
Agentツールでtask-decomposerを呼び出す:
|
|
55
98
|
- `subagent_type`: "task-decomposer"
|
|
56
99
|
- `description`: "作業計画をタスクに分解"
|
|
57
|
-
- `prompt`: "作業計画書を読み込み、1コミット粒度の独立したタスクに分解。入力: docs/plans/[
|
|
100
|
+
- `prompt`: "作業計画書を読み込み、1コミット粒度の独立したタスクに分解。入力: docs/plans/[plan-name].md。出力: docs/plans/tasks/配下に個別タスクファイル生成。粒度: 1タスク = 1コミット = 独立して実行可能"
|
|
58
101
|
|
|
59
102
|
### 3. 生成確認
|
|
60
|
-
|
|
61
|
-
# 生成されたタスクファイルを確認
|
|
62
|
-
! ls -la docs/plans/tasks/*.md | head -10
|
|
63
|
-
```
|
|
103
|
+
上記「Consumed Task Set」セクションの制限パターンを使って Consumed Task Set を再計算し、非空であることを確認する。依然として空の場合はユーザーにエスカレーション — task-decomposer が静かに失敗したか、想定パターンに合致しないファイルを生成した可能性がある。
|
|
64
104
|
|
|
65
|
-
**フロー**: タスク生成 →
|
|
105
|
+
**フロー**: タスク生成 → Consumed Task Set 再計算 → 自律実行(この順序)
|
|
66
106
|
|
|
67
107
|
## 実行前チェックリスト
|
|
68
108
|
|
|
69
|
-
- [ ]
|
|
70
|
-
- [ ]
|
|
109
|
+
- [ ] Consumed Task Set が非空であることを確認(上記「Consumed Task Set」セクションで計算)
|
|
110
|
+
- [ ] Consumed Task Set 内のタスク実行順序(依存関係)を特定
|
|
71
111
|
- [ ] **環境チェック**: タスク単位のコミットサイクルを実行可能か?
|
|
72
112
|
- コミット機能が利用不可 → 自律実行モード前にエスカレーション
|
|
73
113
|
- その他の環境(テスト、品質ツール) → サブエージェントがエスカレーション
|
|
@@ -75,7 +115,7 @@ Agentツールでtask-decomposerを呼び出す:
|
|
|
75
115
|
## タスク実行サイクル(4ステップサイクル)
|
|
76
116
|
**必須実行サイクル**: `task-executor → エスカレーションチェック → quality-fixer → commit`
|
|
77
117
|
|
|
78
|
-
|
|
118
|
+
Consumed Task Set 内の各タスクで必須:
|
|
79
119
|
1. **TaskCreateでタスク登録**: 作業ステップを登録。必ず含める: 最初に「ロード済みスキルから具体ルールを抽出」、最後に「抽出ルールを最終JSON前に検証」
|
|
80
120
|
2. **task-executor を呼び出す**: タスク実装を実行(レイヤー横断 の場合は subagents-orchestration-guide の レイヤー別エージェントルーティング 参照)
|
|
81
121
|
3. **task-executor レスポンスをチェック**:
|
|
@@ -126,7 +166,18 @@ Escalate when the required fix or investigation falls outside that scope.
|
|
|
126
166
|
- 続いて quality-fixer、その後 fail した verifier のみ再実行。
|
|
127
167
|
- 2サイクル後も fail が残る場合 → 残存指摘事項を添えてユーザーにエスカレーション
|
|
128
168
|
|
|
129
|
-
4. **全て合格** →
|
|
169
|
+
4. **全て合格** → 最終クリーンアップへ
|
|
170
|
+
|
|
171
|
+
## 最終クリーンアップ
|
|
172
|
+
|
|
173
|
+
完了レポートの前に、本レシピが消費した実装タスクファイルを削除する。作業内容はコミット済みで、`docs/plans/`はレシピ実行間で保持しない一時的な作業状態である:
|
|
174
|
+
|
|
175
|
+
- Consumed Task Set 内のすべてのファイルを削除する
|
|
176
|
+
- `docs/plans/tasks/{plan-name}-phase*-completion.md` にマッチするすべてのファイルを削除する(task-decomposer が生成した本 `{plan-name}` のフェーズ完了ファイル)
|
|
177
|
+
- 該当する `docs/plans/tasks/_overview-{plan-name}.md` が存在する場合は削除する
|
|
178
|
+
- 作業計画書本体(`docs/plans/{plan-name}.md`)は保持する — 最終レビュー後に削除するかはユーザーが判断する
|
|
179
|
+
|
|
180
|
+
タスクファイルを削除できない場合(ファイルシステムエラー)、失敗を報告するが完了レポートをブロックしない。
|
|
130
181
|
|
|
131
182
|
## 出力例
|
|
132
183
|
実装フェーズが完了しました。
|
|
@@ -134,6 +185,7 @@ Escalate when the required fix or investigation falls outside that scope.
|
|
|
134
185
|
- 実装されたタスク: [タスク数]件
|
|
135
186
|
- 品質チェック: すべて通過
|
|
136
187
|
- コミット: [コミット数]件作成
|
|
188
|
+
- クリーンアップ: docs/plans/tasks/ からタスクファイルを削除済み
|
|
137
189
|
|
|
138
190
|
**責務境界**:
|
|
139
191
|
- スコープ内: タスク分解から実装完了まで
|
|
@@ -14,40 +14,64 @@ description: フロントエンド実装を自律実行モードで実行
|
|
|
14
14
|
|
|
15
15
|
**重要**: 全てのコミット前にquality-fixer-frontendを実行。
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
作業計画書: $ARGUMENTS
|
|
18
18
|
|
|
19
19
|
## 実行前提条件
|
|
20
20
|
|
|
21
|
-
###
|
|
22
|
-
```bash
|
|
23
|
-
# 作業計画書を確認
|
|
24
|
-
! ls -la docs/plans/*.md | grep -v template | tail -5
|
|
21
|
+
### Implementation Readinessチェック
|
|
25
22
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
タスク処理の前に、ゲート対象となる作業計画書を特定する。
|
|
24
|
+
|
|
25
|
+
**`$ARGUMENTS`が指定されている場合**は、それがユーザーから渡された作業計画書のパスである。自動解決を行わずそのまま使用する。`{plan-name}`はファイル名から `.md` 拡張子(および末尾に `-plan` がある場合はそれも)を除いて抽出する。
|
|
26
|
+
|
|
27
|
+
**`$ARGUMENTS`が空の場合**、タスクファイルから自動解決する:
|
|
28
|
+
1. `docs/plans/tasks/`内で本レシピが消費可能な唯一のパターンに一致するタスクファイルを列挙する(subagents-orchestration-guideの「Layer-Aware Agent Routing」により、`task-executor-frontend` が所有するファイル名サフィックスはこの形のみ):
|
|
29
|
+
- `{plan-name}-frontend-task-*.md`
|
|
30
|
+
- 素の `{plan-name}-task-*.md` は消費**しない** — ルーティング表により backend 予約のファイル名で、backend build レシピが所有する。`{plan-name}-backend-task-*.md` も同様に消費しない。
|
|
31
|
+
2. マッチしたファイルから、以下のいずれかにマッチするものを除外する。これらは本実行の実装タスクではなく、他のワークフローフェーズに由来する: `*-task-prep-*.md`(readiness preflight タスク)、`_overview-*.md`(分解overviewファイル)、`*-phase*-completion.md`(フェーズ完了ファイル)、`review-fixes-*.md`(実装後レビュー修正)、`integration-tests-*-task-*.md`(統合テスト追加用スキャフォールディング)
|
|
32
|
+
3. 残った各ファイルから、末尾の `-frontend-task-{NN}.md` を取り除いて `{plan-name}` を抽出する
|
|
33
|
+
4. 少なくとも1つのタスクファイルがマッチした場合、最も新しい mtime を持つ `{plan-name}` の `docs/plans/{plan-name}.md` を作業計画書とする。タイは辞書順最大の `{plan-name}` で解決する
|
|
34
|
+
5. `*-frontend-task-*.md` が見つからず、かつ `docs/plans/`に非テンプレートの作業計画書が存在する場合、最も新しい計画書を自動採用してはならない — frontend タスクは明示的に命名されている必要がある。停止して報告する: 「`docs/plans/tasks/`に `*-frontend-task-*.md` が見つかりませんでした。本レシピを frontend 計画に対して実行する意図であれば、task-decomposer を再実行して frontend 命名のタスクファイルを出力させるか、作業計画書のパスを `$ARGUMENTS` で指定してください。計画が backend ならば、backend build レシピを使用してください。」
|
|
35
|
+
|
|
36
|
+
作業計画書のヘッダを読み、`Implementation Readiness: <status>`の行を見つける。以下のルールを適用する:
|
|
37
|
+
|
|
38
|
+
| ステータス | アクション |
|
|
39
|
+
|--------|--------|
|
|
40
|
+
| `ready` | Consumed Task Set の計算へ進む |
|
|
41
|
+
| `escalated` | 作業計画書のReadiness Reportセクションを読み、AskUserQuestionで残存ギャップをユーザーに提示する: 「Implementation Readinessが`escalated`で、以下の残存ギャップがあります: [リスト]。実行を継続しますか?(y/n)」。`y`なら進む、`n`なら停止 |
|
|
42
|
+
| `pending` | AskUserQuestionで提示する: 「Implementation Readinessが`pending`です。事前にreadiness preflightを実行して作業計画書の実装可能性を検証してから再開してください。preflightなしで継続しますか?(y/n)」。`y`なら進む、`n`なら停止 |
|
|
43
|
+
| 行が存在しない | `pending`として扱う — readinessマーカー導入前に作成された古い作業計画書は明示的にpreflightすべき |
|
|
44
|
+
|
|
45
|
+
### Consumed Task Set
|
|
46
|
+
|
|
47
|
+
本実行で消費する **Consumed Task Set** を計算する — 本レシピが所有・実行・後で削除する正確なファイル群。ルーティング表により、消費可能なパターンは1つだけ:
|
|
48
|
+
|
|
49
|
+
1. Implementation Readinessチェックで解決した `{plan-name}` について、`docs/plans/tasks/`内で `{plan-name}-frontend-task-*.md` にマッチするタスクファイルを列挙する。`{plan-name}-task-*.md` および `{plan-name}-backend-task-*.md` は除外する — `task-executor` にルーティングされ、backend build レシピが所有する
|
|
50
|
+
2. 以下にマッチするファイルを除外する: `*-task-prep-*.md`、`_overview-*.md`、`*-phase*-completion.md`、`review-fixes-*.md`、`integration-tests-*-task-*.md`(これらは他のワークフローフェーズに由来する)
|
|
51
|
+
|
|
52
|
+
本レシピ内で「タスクファイル」と参照する箇所すべて — タスク生成判定フロー、タスク実行サイクルの反復、最終クリーンアップ — はこのセットを使用する。`docs/plans/tasks/*.md` を制限なく glob しない。
|
|
29
53
|
|
|
30
54
|
### タスク生成判定フロー
|
|
31
55
|
|
|
32
|
-
|
|
56
|
+
Consumed Task Set を確認し、適切な対応を決定する。注: `$ARGUMENTS`が空かつ `*-frontend-task-*.md` が存在しない場合は、上記の readiness check が既に実行を停止している — 以下の表で「タスクなし」が関わる行は、ユーザーが明示的に `$ARGUMENTS` を指定した場合にのみ発火する。
|
|
33
57
|
|
|
34
58
|
| 状態 | 基準 | 次のアクション |
|
|
35
59
|
|------|------|--------------|
|
|
36
|
-
| タスク存在 |
|
|
37
|
-
|
|
|
38
|
-
| どちらもなし+Design Docあり |
|
|
39
|
-
| どちらもなし |
|
|
60
|
+
| タスク存在 | Consumed Task Set が非空 | ユーザーの実行指示をバッチ承認として自律実行へ移行 |
|
|
61
|
+
| タスクなし + `$ARGUMENTS`で計画書指定 | `$ARGUMENTS`が提供され Consumed Task Set が空 | ユーザーに確認 → task-decomposer実行(frontend命名ルールにより `*-frontend-task-*.md` を出力する) |
|
|
62
|
+
| どちらもなし+Design Docあり + `$ARGUMENTS`提供 | `$ARGUMENTS`が提供され、計画書なし、Consumed Task Setなし、ただし docs/design/*.md が存在 | work-plannerでDesign Docから作業計画書を作成し、タスク分解へ進む |
|
|
63
|
+
| どちらもなし | `$ARGUMENTS`なし、計画書なし、Consumed Task Setなし、Design Docなし | 前提条件未達成をユーザーに報告して停止 |
|
|
40
64
|
|
|
41
65
|
## タスク分解フェーズ(条件付き)
|
|
42
66
|
|
|
43
|
-
|
|
67
|
+
Consumed Task Set が空の場合:
|
|
44
68
|
|
|
45
69
|
### 1. ユーザー確認
|
|
46
70
|
```
|
|
47
|
-
|
|
48
|
-
|
|
71
|
+
Consumed Task Set にタスクファイルがありません。
|
|
72
|
+
作業計画書: docs/plans/[plan-name].md
|
|
49
73
|
|
|
50
|
-
|
|
74
|
+
作業計画書からタスクを生成しますか? (y/n):
|
|
51
75
|
```
|
|
52
76
|
|
|
53
77
|
### 2. タスク分解(承認された場合)
|
|
@@ -57,17 +81,14 @@ Agentツールでtask-decomposerを呼び出す:
|
|
|
57
81
|
- `prompt`: "作業計画を読み込み、アトミックなタスクに分解。入力: docs/plans/[plan-name].md。出力: docs/plans/tasks/配下に個別タスクファイル。粒度: 1タスク = 1コミット = 独立実行可能"
|
|
58
82
|
|
|
59
83
|
### 3. 生成確認
|
|
60
|
-
|
|
61
|
-
# 生成されたタスクファイルを確認
|
|
62
|
-
! ls -la docs/plans/tasks/*.md | head -10
|
|
63
|
-
```
|
|
84
|
+
上記「Consumed Task Set」セクションの制限パターンを使って Consumed Task Set を再計算し、非空であることを確認する。依然として空の場合はユーザーにエスカレーション — task-decomposer が静かに失敗したか、想定パターンに合致しないファイルを生成した可能性がある。
|
|
64
85
|
|
|
65
|
-
**フロー**: タスク生成 →
|
|
86
|
+
**フロー**: タスク生成 → Consumed Task Set 再計算 → 自律実行(この順序)
|
|
66
87
|
|
|
67
88
|
## 実行前チェックリスト
|
|
68
89
|
|
|
69
|
-
- [ ]
|
|
70
|
-
- [ ]
|
|
90
|
+
- [ ] Consumed Task Set が非空であることを確認(上記「Consumed Task Set」セクションで計算)
|
|
91
|
+
- [ ] Consumed Task Set 内のタスク実行順序(依存関係)を特定
|
|
71
92
|
- [ ] **環境チェック**: タスク単位のコミットサイクルを実行可能か?
|
|
72
93
|
- コミット機能が利用不可 → 自律実行モード前にエスカレーション
|
|
73
94
|
- その他の環境(テスト、品質ツール) → サブエージェントがエスカレーション
|
|
@@ -75,7 +96,7 @@ Agentツールでtask-decomposerを呼び出す:
|
|
|
75
96
|
## タスク実行サイクル(4ステップサイクル)
|
|
76
97
|
**必須実行サイクル**: `task-executor-frontend → エスカレーションチェック → quality-fixer-frontend → commit`
|
|
77
98
|
|
|
78
|
-
|
|
99
|
+
Consumed Task Set 内の各タスクで必須:
|
|
79
100
|
1. **TaskCreateでタスク登録**: 作業ステップを登録。必ず含める: 最初に「ロード済みスキルから具体ルールを抽出」、最後に「抽出ルールを最終JSON前に検証」
|
|
80
101
|
2. **Agent tool** (subagent_type: "task-executor-frontend") → タスクファイルパスを prompt に渡し、構造化レスポンスを受け取る
|
|
81
102
|
3. **task-executor-frontend レスポンスをチェック**:
|
|
@@ -104,8 +125,6 @@ Use loaded skills to execute that scope.
|
|
|
104
125
|
Escalate when the required fix or investigation falls outside that scope.
|
|
105
126
|
```
|
|
106
127
|
|
|
107
|
-
! ls -la docs/plans/*.md | head -10
|
|
108
|
-
|
|
109
128
|
承認ステータスを確認してから進む。確認後、自律実行モードを開始。要件変更を検出したら即座に停止。
|
|
110
129
|
|
|
111
130
|
## 実装後検証(全タスク完了後)
|
|
@@ -128,7 +147,18 @@ Escalate when the required fix or investigation falls outside that scope.
|
|
|
128
147
|
- 続いて quality-fixer-frontend、その後 fail した verifier のみ再実行。
|
|
129
148
|
- 2サイクル後も fail が残る場合 → 残存指摘事項を添えてユーザーにエスカレーション
|
|
130
149
|
|
|
131
|
-
4. **全て合格** →
|
|
150
|
+
4. **全て合格** → 最終クリーンアップへ
|
|
151
|
+
|
|
152
|
+
## 最終クリーンアップ
|
|
153
|
+
|
|
154
|
+
完了レポートの前に、本レシピが消費した実装タスクファイルを削除する。作業内容はコミット済みで、`docs/plans/`はレシピ実行間で保持しない一時的な作業状態である:
|
|
155
|
+
|
|
156
|
+
- Consumed Task Set 内のすべてのファイルを削除する
|
|
157
|
+
- `docs/plans/tasks/{plan-name}-phase*-completion.md` にマッチするすべてのファイルを削除する(task-decomposer が生成した本 `{plan-name}` のフェーズ完了ファイル)
|
|
158
|
+
- 該当する `docs/plans/tasks/_overview-{plan-name}.md` が存在する場合は削除する
|
|
159
|
+
- 作業計画書本体(`docs/plans/{plan-name}.md`)は保持する — 最終レビュー後に削除するかはユーザーが判断する
|
|
160
|
+
|
|
161
|
+
タスクファイルを削除できない場合(ファイルシステムエラー)、失敗を報告するが完了レポートをブロックしない。
|
|
132
162
|
|
|
133
163
|
## 出力例
|
|
134
164
|
フロントエンド実装フェーズ完了。
|
|
@@ -136,3 +166,4 @@ Escalate when the required fix or investigation falls outside that scope.
|
|
|
136
166
|
- 実装タスク: [件数] タスク
|
|
137
167
|
- 品質チェック: 全てパス
|
|
138
168
|
- コミット: [件数] コミット作成
|
|
169
|
+
- クリーンアップ: docs/plans/tasks/ からタスクファイルを削除済み
|
|
@@ -43,17 +43,18 @@ Agentツールでacceptance-test-generatorを呼び出す:
|
|
|
43
43
|
- UI Specあり: `prompt: "[パス]のDesign Docからテストスケルトンを生成。UI Specは[ui-specパス]。"`
|
|
44
44
|
- UI Specなし: `prompt: "[パス]のDesign Docからテストスケルトンを生成。"`
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
レーン別のテストファイルパスと不在理由を、subagents-orchestration-guideの「acceptance-test-generator → work-planner」セクションに従いwork-plannerに渡す。
|
|
47
47
|
|
|
48
48
|
### Step 3: 作業計画書作成
|
|
49
49
|
Agentツールでwork-plannerを呼び出す:
|
|
50
50
|
- `subagent_type`: "work-planner"
|
|
51
51
|
- `description`: "作業計画書作成"
|
|
52
|
-
- ステップ2
|
|
53
|
-
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
`
|
|
52
|
+
- ステップ2でテストスケルトンを生成した場合、各レーンの状態を列挙する形でプロンプトを構築する:
|
|
53
|
+
- 必ず含める: "統合テストファイル: [パス または 'not generated']"
|
|
54
|
+
- E2Eの各レーン(`fixtureE2e`、`serviceE2e`)について:
|
|
55
|
+
- `generatedFiles.<lane>`がnullでない場合: "[lane] テストファイル: [パス]"
|
|
56
|
+
- `generatedFiles.<lane>`がnullの場合: "[lane] スケルトンは生成されませんでした(理由: [e2eAbsenceReason.<lane>])"
|
|
57
|
+
- 配置ガイダンスを末尾に付加する: "統合テストは各フェーズ実装と同時に作成。fixture-e2eテストはUI機能フェーズと並行して作成。service-integration-e2eテストは最終フェーズでのみ実行。"
|
|
57
58
|
- テストスケルトンを生成しなかった場合:
|
|
58
59
|
`prompt`: "[パス]のDesign Docから作業計画を作成。"
|
|
59
60
|
|
|
@@ -67,7 +68,7 @@ Agentツールでwork-plannerを呼び出す:
|
|
|
67
68
|
計画内容承認後、以下の標準レスポンスで終了
|
|
68
69
|
```
|
|
69
70
|
フロントエンド計画フェーズ完了。
|
|
70
|
-
- 作業計画: docs/plans/[
|
|
71
|
+
- 作業計画: docs/plans/[plan-name].md
|
|
71
72
|
- ステータス: 承認済み
|
|
72
73
|
|
|
73
74
|
実装は別途指示してください。
|
|
@@ -14,9 +14,10 @@ description: Design Doc準拠検証とセキュリティ検証、必要に応じ
|
|
|
14
14
|
|
|
15
15
|
- 準拠検証 → code-reviewerが実行
|
|
16
16
|
- セキュリティ検証 → security-reviewerが実行
|
|
17
|
-
- 修正実装 → task-executor-frontend
|
|
18
|
-
-
|
|
19
|
-
|
|
17
|
+
- **コード側修正パス**: 修正実装 → task-executor-frontend、品質チェック → quality-fixer-frontend、再検証 → code-reviewer / security-reviewer
|
|
18
|
+
- **設計側更新パス**: DD改訂 → technical-designer-frontend(updateモード)、DDレビュー → document-reviewer、複数DDの整合性 → design-sync(複数DD存在時のみ)、再検証 → code-reviewer
|
|
19
|
+
|
|
20
|
+
オーケストレーターはサブエージェントを呼び出し、構造化JSONを渡す。設計側パスは、コードが正しいのにDesign Docが古くなっていた不整合(コードがDDに違反したケースではない)に適用される。
|
|
20
21
|
|
|
21
22
|
Design Doc(省略時は直近のもの): $ARGUMENTS
|
|
22
23
|
|
|
@@ -59,7 +60,24 @@ Agent toolでsecurity-reviewerを呼び出す:
|
|
|
59
60
|
- `approved` または `approved_with_notes` → 合格
|
|
60
61
|
- `needs_revision` → 不合格
|
|
61
62
|
|
|
62
|
-
|
|
63
|
+
**両方の結果をサブエージェントの出力フィールドのみを使用して独立に報告**(サブエージェントのレスポンスにないフィールドを追加しない)。
|
|
64
|
+
|
|
65
|
+
**早期終了(ルーティング対象なし)**: code-reviewer の `verdict` が `pass` かつ `acceptanceCriteria[]` のすべてのエントリが `status: "fulfilled"` かつ `identifierMismatches[]` が空かつ `qualityFindings[]` が空かつ security-reviewer の `findings[]` が空の場合、Steps 5-10 をスキップして直接 Step 11 へ進む — ルーティング対象がないため。クリーンな結果をユーザーに提示する。
|
|
66
|
+
|
|
67
|
+
それ以外の場合、ユーザー提示の前に、オーケストレーターは以下のルールで finding ごとに推奨ルートを計算する(このルール自体は内部用 — ユーザー向けプロンプトには含めない)。ルールは code-reviewer の既存構造化フィールドのみを参照する。「DDの意図」のような解釈は不安定な推論を避けるため意図的に行わない:
|
|
68
|
+
|
|
69
|
+
| Finding ソース | 既存フィールドから検出可能なパターン | 推奨ルート |
|
|
70
|
+
|---------------|----------------------------------|----------|
|
|
71
|
+
| `acceptanceCriteria[]` で `status: "partially_fulfilled"` または `"unfulfilled"` | 引用された `gap` から、コードがACを満たしていないことが示される — 追加実装が必要 | `c`(コード側修正) |
|
|
72
|
+
| `acceptanceCriteria[]` で `status: "partially_fulfilled"` または `"unfulfilled"` | 引用された `gap` から、ACテキスト自体が実装済み(チームが受け入れた)挙動から乖離していることが示される — 実装が要件を満たしていないのではなく、DDのAC文言が誤った意図を捉えているケース(ACを読み、引用された `location` と比較して検証する) | `d`(設計側更新 — ACテキストが古い) |
|
|
73
|
+
| `identifierMismatches[]` | `codeValue` が `designDocValue` のリネームとして妥当(camelCase ↔ kebab-case ↔ snake_case、略語の展開/省略、同じ概念を指す意味的なリネーム)— 引用された `location` を確認してコードが新名称を一貫して使用していることを検証 | `d`(設計側更新 — DDが古い可能性が高い) |
|
|
74
|
+
| `identifierMismatches[]` | それ以外の identifier mismatch(型違い、cardinality違い、完全欠落など) | `c`(コード側修正) |
|
|
75
|
+
| `qualityFindings[]` | 全カテゴリ(`dd_violation`、`maintainability`、`reliability`、`coverage_gap`) | `c`(コード側修正) |
|
|
76
|
+
| security-reviewer `findings[]` | 全カテゴリ(`confirmed_risk`、`defense_gap`、`hardening`、`policy`) | `c`(コード側修正) |
|
|
77
|
+
|
|
78
|
+
各 finding に対しユーザーが推奨を上書き可能。`status: "fulfilled"` の AC 項目はルーティング対象外(対応不要)。
|
|
79
|
+
|
|
80
|
+
ユーザーへの提示形式(finding ごとに推奨ルートをラベル付け、ルートでグルーピング):
|
|
63
81
|
|
|
64
82
|
```
|
|
65
83
|
Code Compliance: [code-reviewerのcomplianceRate]
|
|
@@ -67,30 +85,57 @@ Code Compliance: [code-reviewerのcomplianceRate]
|
|
|
67
85
|
Identifier Match Rate: [code-reviewerのidentifierMatchRate]
|
|
68
86
|
Acceptance Criteria:
|
|
69
87
|
- [fulfilled] [item] (confidence: [high/medium/low])
|
|
70
|
-
- [partially_fulfilled] [item]: [gap] — [suggestion]
|
|
71
|
-
- [unfulfilled] [item]: [gap] — [suggestion]
|
|
88
|
+
- [partially_fulfilled] [item]: [gap] — [suggestion] [recommended: c | d]
|
|
89
|
+
- [unfulfilled] [item]: [gap] — [suggestion] [recommended: c | d]
|
|
72
90
|
Identifier Mismatches:
|
|
73
|
-
- [identifier]: DD=[designDocValue] Code=[codeValue] at [location]
|
|
91
|
+
- [identifier]: DD=[designDocValue] Code=[codeValue] at [location] [recommended: c | d]
|
|
74
92
|
Quality Findings:
|
|
75
|
-
- [category] [location]: [description] — [rationale]
|
|
93
|
+
- [category] [location]: [description] — [rationale] [recommended: c]
|
|
76
94
|
|
|
77
95
|
Security Review: [security-reviewerのstatus]
|
|
78
96
|
Findings by category:
|
|
79
|
-
- [confirmed_risk] [location]: [description] — [rationale]
|
|
80
|
-
- [defense_gap] [location]: [description] — [rationale]
|
|
81
|
-
- [hardening] [location]: [description] — [rationale]
|
|
82
|
-
- [policy] [location]: [description] — [rationale]
|
|
97
|
+
- [confirmed_risk] [location]: [description] — [rationale] [recommended: c]
|
|
98
|
+
- [defense_gap] [location]: [description] — [rationale] [recommended: c]
|
|
99
|
+
- [hardening] [location]: [description] — [rationale] [recommended: c]
|
|
100
|
+
- [policy] [location]: [description] — [rationale] [recommended: c]
|
|
83
101
|
Notes: [security-reviewerのnotes、存在する場合]
|
|
84
102
|
|
|
85
|
-
|
|
103
|
+
不整合の解消 — finding ごとに推奨ルートを承認または上書きする:
|
|
104
|
+
c) コード側修正 — コードがDesign Docに違反; コードを修正して合わせる
|
|
105
|
+
d) 設計側更新 — コードは正しい; Design Docが古いので改訂する
|
|
106
|
+
s) スキップ — 現状を受け入れて変更しない
|
|
86
107
|
```
|
|
87
108
|
|
|
88
|
-
|
|
109
|
+
AskUserQuestionを使用する。デフォルト提示は **「すべての推奨ルートを承認」** — オーケストレーターの推奨が正しい典型ケース向けの単一確認。ユーザーが上書きしたい場合は finding ごとに c/d/s を収集する。すべてに対し `s` を選択した場合: Steps 5-10をスキップしてStep 11へ進む。
|
|
89
110
|
|
|
90
111
|
### Step 5: タスクテンプレートの読み込み
|
|
91
112
|
|
|
92
113
|
documentation-criteriaスキルを読み込み、Step 6用のタスクファイルテンプレート(references/task-template.md)を取得。
|
|
93
114
|
|
|
115
|
+
### Step 5d: 設計側更新
|
|
116
|
+
|
|
117
|
+
ユーザーが少なくとも1つのfindingを `d` にルーティングした場合のみ、本ステップを実行する。すべてのルートが `c` または `s` の場合は、Step 6 へ直接スキップする。
|
|
118
|
+
|
|
119
|
+
1. Agent tool で technical-designer-frontend を update モードで呼び出す:
|
|
120
|
+
- `subagent_type`: "technical-designer-frontend"
|
|
121
|
+
- `description`: "レビューfindingsからのDesign Doc更新"
|
|
122
|
+
- `prompt`: "[path]のDesign Docをupdateモードで更新する。実装は以下の点で乖離しており、チームはコード側ではなく設計側で受け入れる判断をした: [`d` ルートのfindingsを $STEP_2_OUTPUT の codeLocation と designDocValue 付きでリスト化]。該当セクションに現在のコードの挙動を反映し、履歴エントリを追加する。"
|
|
123
|
+
|
|
124
|
+
2. document-reviewer を呼び出して更新後の Design Doc を検証する:
|
|
125
|
+
- `subagent_type`: "document-reviewer"
|
|
126
|
+
- `description`: "更新後Design Docのレビュー"
|
|
127
|
+
- `prompt`: "[path]の更新後Design Docの整合性と完成度をレビュー。"
|
|
128
|
+
|
|
129
|
+
3. 複数のDesign Docが存在する場合(`ls docs/design/*.md | grep -v template | wc -l > 1`)、design-syncを呼び出す:
|
|
130
|
+
- `subagent_type`: "design-sync"
|
|
131
|
+
- `description`: "DD間整合性チェック"
|
|
132
|
+
- `prompt`: "source_design: [更新後DDのパス]。更新後の全Design Doc間の矛盾を検出。"
|
|
133
|
+
- `sync_status: conflicts_found` の場合: 矛盾をユーザーに提示し、影響を受けるDDに対して technical-designer-frontend を再起動して解消する。
|
|
134
|
+
|
|
135
|
+
4. Step 5d 完了後:
|
|
136
|
+
- ユーザーが選択した `c` ルートがゼロの場合(すべて `d`、すべて `s`、または `c` を含まない `d` + `s` の混在)→ Steps 6-8 をスキップし、Step 9 で再検証へ進む
|
|
137
|
+
- `d` と `c` の両方が選択された場合 → 更新後のDDに対して `c` ルートのfindingsを再評価し、DD改訂で満たされたものは除外する。残った `c` ルートのfindings で Step 6 へ進む
|
|
138
|
+
|
|
94
139
|
### Step 6: タスクファイル作成
|
|
95
140
|
|
|
96
141
|
`docs/plans/tasks/review-fixes-YYYYMMDD.md` にタスクファイルを作成。
|
|
@@ -113,7 +158,7 @@ Agent toolでquality-fixer-frontendを呼び出す:
|
|
|
113
158
|
Agent toolでcode-reviewerを呼び出す:
|
|
114
159
|
- `subagent_type`: "code-reviewer"
|
|
115
160
|
- `description`: "準拠の再検証"
|
|
116
|
-
- `prompt`: "修正後のDesign Doc準拠を再検証。Design Doc: [path]. Implementation files: [file list]. 前回の準拠問題: $STEP_2_OUTPUT
|
|
161
|
+
- `prompt`: "修正後のDesign Doc準拠を再検証。Design Doc: [path]. Implementation files: [file list]. 前回の準拠問題: $STEP_2_OUTPUT。各問題が解決されたこと(コード側または設計側いずれかで)を確認。"
|
|
117
162
|
|
|
118
163
|
### Step 10: security-reviewer再検証
|
|
119
164
|
|
|
@@ -122,7 +167,16 @@ Agent toolでsecurity-reviewerを呼び出す(セキュリティ修正が実
|
|
|
122
167
|
- `description`: "セキュリティの再検証"
|
|
123
168
|
- `prompt`: "修正後のセキュリティを再検証。前回の検出結果: $STEP_3_OUTPUT。Design Doc: [path]. Implementation files: [file list]。"
|
|
124
169
|
|
|
125
|
-
### Step 11:
|
|
170
|
+
### Step 11: 最終クリーンアップとレポート
|
|
171
|
+
|
|
172
|
+
本レシピが作成したreview-fix用タスクファイル(存在すれば)を削除する。作業内容はコミット済みで、`docs/plans/`はレシピ実行間で保持しない一時的な作業状態である:
|
|
173
|
+
|
|
174
|
+
- `docs/plans/tasks/review-fixes-YYYYMMDD.md` が存在すれば削除する
|
|
175
|
+
|
|
176
|
+
タスクファイルを削除できない場合(ファイルシステムエラー)、失敗を報告するが最終レポートをブロックしない。
|
|
177
|
+
|
|
178
|
+
その後、最終レポートを提示する:
|
|
179
|
+
|
|
126
180
|
```
|
|
127
181
|
Code Compliance:
|
|
128
182
|
初回: [X]%
|
|
@@ -135,9 +189,11 @@ Security Review:
|
|
|
135
189
|
|
|
136
190
|
残存課題:
|
|
137
191
|
- [手動対応が必要な項目]
|
|
192
|
+
|
|
193
|
+
クリーンアップ: review-fixesタスクファイルを削除済み
|
|
138
194
|
```
|
|
139
195
|
|
|
140
|
-
##
|
|
196
|
+
## 自動修正可能な項目(コード側パス)
|
|
141
197
|
- 単純な未実装受入条件
|
|
142
198
|
- エラーハンドリング追加
|
|
143
199
|
- 契約定義の修正
|
|
@@ -147,10 +203,16 @@ Security Review:
|
|
|
147
203
|
## 自動修正不可な項目
|
|
148
204
|
- 根本的なビジネスロジック変更
|
|
149
205
|
- アーキテクチャレベルの修正
|
|
150
|
-
- Design Doc自体の不備
|
|
151
206
|
- コミット済みシークレット(blocked → 人間の判断が必要)
|
|
152
207
|
|
|
153
|
-
|
|
208
|
+
## 設計側更新の対象
|
|
209
|
+
設計側パスに適した不整合(コードが正しく、DDが古くなったケース):
|
|
210
|
+
- 新しい命名がチームの現行命名を反映している identifier rename
|
|
211
|
+
- 元の要件意図に対し、DDが捉えた挙動より実装の方が合致している挙動変更
|
|
212
|
+
- 新しい構造が妥当で、DDが旧構造を文書化していたままのコンポーネント分割・統合
|
|
213
|
+
- 実装は既に満たしているがDDに列挙されていなかった新規AC
|
|
214
|
+
|
|
215
|
+
**スコープ**: Design Doc準拠検証、セキュリティレビュー、コード側自動修正、および設計側更新ルーティング。
|
|
154
216
|
|
|
155
217
|
## サブエージェントのスコープ境界
|
|
156
218
|
|
|
@@ -58,6 +58,19 @@ requirement-analyzerの`crossLayerScope`がレイヤー横断(backend + fronte
|
|
|
58
58
|
|
|
59
59
|
**フロー厳守**: subagents-orchestration-guideスキルの「自律実行中のタスク管理」に従い、TaskCreate/TaskUpdateで4ステップを管理する
|
|
60
60
|
|
|
61
|
+
## Implementation Readinessチェック(work-planner承認とtask-decomposerの間)
|
|
62
|
+
|
|
63
|
+
work-plannerが完了しユーザーから一括承認を得た後、task-decomposerを呼び出す前に作業計画書のヘッダを読み、`Implementation Readiness: <status>`の行を見つける。以下のルールを適用する:
|
|
64
|
+
|
|
65
|
+
| ステータス | アクション |
|
|
66
|
+
|--------|--------|
|
|
67
|
+
| `ready` | task-decomposerに進む |
|
|
68
|
+
| `escalated` | 作業計画書のReadiness Reportセクションを読み、AskUserQuestionで残存ギャップをユーザーに提示する: 「Implementation Readinessが`escalated`で、以下の残存ギャップがあります: [リスト]。実行を継続しますか?(y/n)」。`y`なら進む、`n`なら停止 |
|
|
69
|
+
| `pending` | AskUserQuestionで提示する: 「Implementation Readinessが`pending`です。事前にreadiness preflightを実行して作業計画書の実装可能性を検証してから再開してください。preflightなしで継続しますか?(y/n)」。`y`なら進む、`n`なら停止 |
|
|
70
|
+
| 行が存在しない | `pending`として扱う — readinessマーカー導入前に作成された古い作業計画書は明示的にpreflightすべき |
|
|
71
|
+
|
|
72
|
+
このチェックは全規模(Small / Medium / Large)に適用される。本レシピは規模に依存しないオーケストレーターであるため。
|
|
73
|
+
|
|
61
74
|
## サブエージェントのスコープ境界
|
|
62
75
|
|
|
63
76
|
本レシピから呼び出すサブエージェントプロンプトの末尾に以下のブロックを必ず付与する:
|
|
@@ -101,11 +114,29 @@ subagents-orchestration-guideスキルの「自律実行中のタスク管理」
|
|
|
101
114
|
- `blocked` → ユーザーにエスカレーション
|
|
102
115
|
|
|
103
116
|
### テスト情報の伝達
|
|
104
|
-
acceptance-test-generator実行後、work-planner(subagent_type: "work-planner"
|
|
105
|
-
- 統合テストファイルパス(`generatedFiles.integration
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
117
|
+
acceptance-test-generator実行後、work-planner(subagent_type: "work-planner")呼び出し時にはレーン別に伝達する:
|
|
118
|
+
- 統合テストファイルパス(`generatedFiles.integration`から取得)または null
|
|
119
|
+
- fixture-e2eテストファイルパス(`generatedFiles.fixtureE2e`から取得)または null
|
|
120
|
+
- service-integration-e2eテストファイルパス(`generatedFiles.serviceE2e`から取得)または null
|
|
121
|
+
- レーン別の不在理由(`e2eAbsenceReason.fixtureE2e` / `e2eAbsenceReason.serviceE2e`、当該レーンが null の場合)
|
|
122
|
+
- タイミングの明示: 統合テストは各フェーズ実装と並行して作成、fixture-e2eテストはUI機能フェーズと並行して作成、service-integration-e2eテストは最終フェーズでのみ実行
|
|
123
|
+
|
|
124
|
+
### 最終クリーンアップ
|
|
125
|
+
|
|
126
|
+
完了レポートの前に、本レシピが消費した実装タスクファイルを削除する。作業内容はコミット済みで、`docs/plans/`はレシピ実行間で保持しない一時的な作業状態である。
|
|
127
|
+
|
|
128
|
+
本レシピは規模に依存せず、単層・複層のいずれの計画も実行する可能性があるため、クリーンアップはtask-decomposerの「Layer-aware naming」が出力するすべてのタスク命名パターンを対象とする:
|
|
129
|
+
|
|
130
|
+
- 本実行で使用した作業計画書パスから導出した `{plan-name}` について、以下のいずれかにマッチするファイルすべてを削除する:
|
|
131
|
+
- `docs/plans/tasks/{plan-name}-task-*.md`(単層タスク)
|
|
132
|
+
- `docs/plans/tasks/{plan-name}-backend-task-*.md`(複層計画のbackend部分)
|
|
133
|
+
- `docs/plans/tasks/{plan-name}-frontend-task-*.md`(複層計画のfrontend部分)
|
|
134
|
+
- 上記マッチから、以下のパターンに該当するものは除外する: `*-task-prep-*.md`、`_overview-*.md`、`*-phase*-completion.md`、`review-fixes-*.md`、`integration-tests-*-task-*.md`(これらは他のワークフローフェーズに由来する)
|
|
135
|
+
- `docs/plans/tasks/{plan-name}-phase*-completion.md` にマッチするファイルすべてを削除する(task-decomposerが生成したフェーズ完了ファイル)
|
|
136
|
+
- 該当する `docs/plans/tasks/_overview-{plan-name}.md` が存在する場合は削除する
|
|
137
|
+
- 作業計画書本体(`docs/plans/{plan-name}.md`)は保持する — 最終レビュー後に削除するかはユーザーが判断する
|
|
138
|
+
|
|
139
|
+
タスクファイルを削除できない場合(ファイルシステムエラー)、失敗を報告するが完了レポートをブロックしない。
|
|
109
140
|
|
|
110
141
|
## 実行方法
|
|
111
142
|
|
|
@@ -36,20 +36,21 @@ description: 設計書から作業計画書を作成し計画承認を取得
|
|
|
36
36
|
- 設計書の存在を確認し、ない場合はその旨をユーザーに通知
|
|
37
37
|
- 複数ある場合は選択肢を提示($ARGUMENTS で指定可能)
|
|
38
38
|
|
|
39
|
-
2.
|
|
40
|
-
- E2E
|
|
41
|
-
- 生成を希望する場合: acceptance-test-generator
|
|
39
|
+
2. **テストスケルトンの生成確認**
|
|
40
|
+
- テストスケルトン(統合 + E2Eレーン)を先に生成するかユーザーに確認
|
|
41
|
+
- 生成を希望する場合: acceptance-test-generator を呼び出す
|
|
42
42
|
- 生成結果を subagents-orchestration-guideスキル の連携仕様に従って次工程に引き継ぐ
|
|
43
43
|
|
|
44
44
|
3. **作業計画書の作成**
|
|
45
45
|
Agentツールでwork-plannerを呼び出す:
|
|
46
46
|
- `subagent_type`: "work-planner"
|
|
47
47
|
- `description`: "作業計画書作成"
|
|
48
|
-
- ステップ2
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
`
|
|
48
|
+
- ステップ2でテストスケルトンを生成した場合、各レーンの状態を列挙する形でプロンプトを構築する:
|
|
49
|
+
- 必ず含める: "統合テストファイル: [パス または 'not generated']"
|
|
50
|
+
- E2Eの各レーン(`fixtureE2e`、`serviceE2e`)について:
|
|
51
|
+
- `generatedFiles.<lane>`がnullでない場合: "[lane] テストファイル: [パス]"
|
|
52
|
+
- `generatedFiles.<lane>`がnullの場合: "[lane] スケルトンは生成されませんでした(理由: [e2eAbsenceReason.<lane>])"
|
|
53
|
+
- 配置ガイダンスを末尾に付加する: "統合テストは各フェーズ実装と同時に作成。fixture-e2eテストはUI機能フェーズと並行して作成。service-integration-e2eテストは最終フェーズでのみ実行。"
|
|
53
54
|
- テストスケルトンを生成しなかった場合:
|
|
54
55
|
`prompt`: "[パス]のDesign Docから作業計画を作成。"
|
|
55
56
|
|
|
@@ -64,7 +65,7 @@ description: 設計書から作業計画書を作成し計画承認を取得
|
|
|
64
65
|
✅ **必須**: 計画内容の承認後は以下の定型応答で終了
|
|
65
66
|
```
|
|
66
67
|
計画フェーズが完了しました。
|
|
67
|
-
- 作業計画書: docs/plans/[
|
|
68
|
+
- 作業計画書: docs/plans/[plan-name].md
|
|
68
69
|
- 状態: 承認済み
|
|
69
70
|
|
|
70
71
|
実装は別途ご指示ください。
|