create-ai-project 1.22.1 → 1.23.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.
Files changed (40) hide show
  1. package/.claude/agents-en/code-reviewer.md +3 -39
  2. package/.claude/agents-en/code-verifier.md +3 -22
  3. package/.claude/agents-en/document-reviewer.md +14 -69
  4. package/.claude/agents-en/task-decomposer.md +31 -0
  5. package/.claude/agents-en/task-executor-frontend.md +15 -1
  6. package/.claude/agents-en/task-executor.md +15 -1
  7. package/.claude/agents-en/technical-designer-frontend.md +32 -9
  8. package/.claude/agents-en/technical-designer.md +0 -9
  9. package/.claude/agents-en/ui-analyzer.md +313 -0
  10. package/.claude/agents-en/ui-spec-designer.md +3 -1
  11. package/.claude/agents-en/work-planner.md +26 -1
  12. package/.claude/agents-ja/code-reviewer.md +3 -39
  13. package/.claude/agents-ja/code-verifier.md +3 -22
  14. package/.claude/agents-ja/document-reviewer.md +14 -69
  15. package/.claude/agents-ja/task-decomposer.md +31 -0
  16. package/.claude/agents-ja/task-executor-frontend.md +15 -1
  17. package/.claude/agents-ja/task-executor.md +15 -1
  18. package/.claude/agents-ja/technical-designer-frontend.md +32 -9
  19. package/.claude/agents-ja/technical-designer.md +0 -9
  20. package/.claude/agents-ja/ui-analyzer.md +313 -0
  21. package/.claude/agents-ja/ui-spec-designer.md +3 -1
  22. package/.claude/agents-ja/work-planner.md +26 -1
  23. package/.claude/commands-en/build.md +9 -7
  24. package/.claude/commands-en/design.md +70 -44
  25. package/.claude/commands-en/front-build.md +9 -7
  26. package/.claude/commands-en/front-design.md +87 -58
  27. package/.claude/commands-ja/build.md +9 -7
  28. package/.claude/commands-ja/design.md +69 -43
  29. package/.claude/commands-ja/front-build.md +9 -7
  30. package/.claude/commands-ja/front-design.md +95 -64
  31. package/.claude/skills-en/documentation-criteria/references/design-template.md +1 -1
  32. package/.claude/skills-en/documentation-criteria/references/plan-template.md +16 -4
  33. package/.claude/skills-en/documentation-criteria/references/task-template.md +11 -1
  34. package/.claude/skills-en/subagents-orchestration-guide/SKILL.md +3 -1
  35. package/.claude/skills-ja/documentation-criteria/references/design-template.md +1 -1
  36. package/.claude/skills-ja/documentation-criteria/references/plan-template.md +16 -4
  37. package/.claude/skills-ja/documentation-criteria/references/task-template.md +11 -1
  38. package/.claude/skills-ja/subagents-orchestration-guide/SKILL.md +3 -1
  39. package/CHANGELOG.md +15 -0
  40. package/package.json +1 -1
@@ -120,6 +120,7 @@ implementation-approachスキルで決定された実装戦略パターンに基
120
120
  | パッケージ間境界の実装 | 作業計画書のConnection Mapに記載された境界の両側(オーナーモジュールと期待されるシグナル)、両者間のコントラクト定義 |
121
121
  | バグ修正 / リファクタリング | 影響を受けるコードパス、関連テストカバレッジ、エラー再現コンテキスト |
122
122
  | 振る舞いの置換・リライト | 置換対象の既存実装、その観察可能な出力、Design Docの検証戦略セクション |
123
+ | ADRに拘束されるタスク(作業計画書のADR Bindings表がこのタスクをカバーする) | このタスクをカバーする各バインディング行について、行の `Source Section` 値に対応するセクションヒント(例: `(§ Decision)` または `(§ Implementation Guidance)`)を付したADRファイル |
123
124
 
124
125
  **原則**:
125
126
  - 全タスクに最低1つの Investigation Target を設定する(Design Docのみでも可)
@@ -129,6 +130,8 @@ implementation-approachスキルで決定された実装戦略パターンに基
129
130
  - タスクにテストスケルトンが存在する場合は必ず Investigation Targets に含める
130
131
  - 作業計画書に「UI Specコンポーネント → タスクマッピング」表が含まれる場合、該当行のコンポーネントセクションをそのタスクに伝播する(後述の「UI Spec伝播」参照)
131
132
  - 作業計画書にConnection Mapが含まれる場合、このタスクの対象ファイルに関連する境界行を伝播する(後述の「Connection Map伝播」参照)
133
+ - 作業計画書にこのタスクをカバーするADR Bindings表が含まれる場合、該当行を伝播する(後述の「ADR Binding伝播」参照)
134
+ - 作業計画書に設計-計画トレーサビリティ表が含まれる場合、該当するDDセクション行を伝播する(後述の「設計トレーサビリティ伝播」参照)
132
135
 
133
136
  7. **実装方針の一貫性**
134
137
  実装サンプルを含める場合は、作業計画書の元となったDesign Docの実装方針に完全準拠すること
@@ -172,6 +175,34 @@ implementation-approachスキルで決定された実装戦略パターンに基
172
175
  3. **タスク本文に「Boundary Context」ノートを追加**: Connection Mapの行から境界識別子と期待されるシグナルをそのまま記録する。executorは、実装が生み出すべき観測可能な証拠を把握できる。
173
176
  4. **未提供の場合はスキップ**: 作業計画書にConnection Mapがない場合は、本伝播ステップをスキップする
174
177
 
178
+ ## ADR Binding伝播
179
+
180
+ 作業計画書にADR Bindings表が含まれる場合、各バインディング決定を、それがカバーするタスクに伝播する:
181
+
182
+ 1. **タスクIDで照合**: ADR Bindings表の各行について、「Covered By Task(s)」列に記載されたタスクを特定する
183
+ 2. **Investigation Targetsに追加**: 行の `Source Section` 値に対応するセクションヒント(例: `docs/adr/ADR-0042.md (§ Decision)` または `docs/adr/ADR-0042.md (§ Implementation Guidance)`)を付したADRファイルパスを、マッチした各タスクに追加する
184
+ 3. **タスクにBinding Decisions表を追加**: マッチした各行について、タスクのBinding Decisions表に1行追加する:
185
+ - **Source**: 行の `Source Section` 値に対応するセクションヒントを付したADRファイルパス
186
+ - **Axis**: 作業計画書の行から `Axis` 値を逐語コピーする
187
+ - **Decision**: 作業計画書の行からバインディング決定文を逐語コピーする
188
+ - **Compliance Check**: 実装が決定を満たすことを述べる、Y/Nで回答可能な肯定述語を書く。バインディング軸ごとの例:
189
+ - `placement`: 「認証エントリポイントが `src/middleware/**` にある」
190
+ - `dependency_direction`: 「ドメイン層は `src/domain/**` と `src/shared/**` からのみインポートする」
191
+ - `contract_schema`: 「APIレスポンスが `ResponseEnvelope<T>` スキーマに一致する」
192
+ - `data_flow`: 「セッショントークンはRedisクライアント経由でのみ書き込まれる」
193
+ - `persistence`: 「ユーザーレコードは `UsersRepository` インターフェース経由でのみ永続化される」
194
+
195
+ 決定がfile:lineやコマンドだけでは検証できない場合、述語は論理的判断に依拠してよいが、Y/Nで回答可能でなければならない
196
+ 4. **提供時のみ適用**: この伝播は作業計画書にADR Bindings表が含まれる場合のみ実行する
197
+
198
+ ## 設計トレーサビリティ伝播
199
+
200
+ 作業計画書に設計-計画トレーサビリティ表が含まれる場合、該当するDDセクションを各タスクに伝播する:
201
+
202
+ 1. 各行について、`[Design Doc値] (§ [DDセクション値])` の形式で、(`Design Doc`, `DD Section`) のペアを「カバーするタスク」に記載された全タスクのInvestigation Targetとして追加する
203
+ 2. 同一タスクで複数行に同じ (Design Doc, DD Section) ペアが現れる場合は重複排除する
204
+ 3. 作業計画書に設計-計画トレーサビリティ表が含まれる場合のみ適用する
205
+
175
206
  ## 品質保証メカニズムの伝播
176
207
 
177
208
  作業計画書ヘッダーに Quality Assurance Mechanisms テーブルが含まれる場合、以下のルールで各タスクに伝播する:
@@ -167,6 +167,18 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
167
167
  2. **既存実装調査**:同ドメイン・責務で類似コンポーネント・hook を検索
168
168
  3. **判定実行**:上記「必須判断基準」に従い継続・エスカレーション判定
169
169
 
170
+ #### Binding Decision チェック(タスクファイルに Binding Decisions セクションがある場合は必須)
171
+
172
+ このチェックは実装前確認の後、TDDサイクルの前に実行される。タスクファイルに1行以上を持つ Binding Decisions セクションがある場合のみ適用される。
173
+
174
+ 1. Binding Decisions 表の各 Source が読み込み済みであることを確認する(Source は Investigation Targets にも記載され、Step 2 で読み込まれている)
175
+ 2. 計画した実装アプローチを Investigation Notes に記録する — タスクの Binding Decisions 表に存在する `Axis` 値ごとに1文。複数行が同じ `Axis` 値を共有する場合はまとめ、そのグループをカバーする1文を記録する
176
+ 3. 各行の Compliance Check を、計画したアプローチに対して評価する。各行の結果を `Y`、`N`、`Unknown` のいずれかとして、一行の根拠とともに Investigation Notes に記録する。`Unknown` は、計画したアプローチが述語の対象についてまだ判断を持たない場合のみ使う。計画が完了していれば答えは `Y` または `N` である
177
+ 4. 行ごとに、評価に応じて分岐する:
178
+ - `Y`: 続行する
179
+ - `N`: 実装を中止し、`status: "escalation_needed"` と `escalation_type: "binding_decision_violation"`(`phase: "pre_implementation"`)で最終レスポンスを生成する(エスカレーションレスポンス表を参照)。`N` は計画段階での違反を表す
180
+ - `Unknown`: その行を Investigation Notes に保留として記録し、TDDサイクルに進む。終了ゲートが(このステップで保留された Unknown 行を含む)全行を最終実装に対して再評価し、その時点で `N` または `Unknown` が残る場合はエスカレーションする
181
+
170
182
  #### 実装フロー(TDD準拠)
171
183
 
172
184
  **モード分岐**:
@@ -270,6 +282,7 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
270
282
  | `design_compliance_violation` | "Design Doc deviation" | `details: {design_doc_expectation, actual_situation, why_cannot_implement, attempted_approaches[]}`; `claude_recommendation` | "Design Doc を現実に合わせて修正" / "不足コンポーネントを先に実装" / "要件を再検討" |
271
283
  | `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作成)" / "新規実装(差別化を明確化)" |
272
284
  | `investigation_target_not_found` | "Investigation target not found" | `missingTargets[{path, searchHint, searchAttempts[]}]` | "正しいパスを提供" / "この調査対象を除外" / "現在のパスでタスクファイルを更新" |
285
+ | `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評価を解消する追加コンテキストを提供" |
273
286
  | `out_of_scope_file` | "Out of scope file" | `details: {file_path, allowed_list[], modification_reason}` | "Target Files に追加してリトライ" / "別タスクに分割" / "アプローチを再検討" |
274
287
  | `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 パスを提供" / "作業計画を再分解" / "完了済みとしてスキップ" |
275
288
 
@@ -298,6 +311,7 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
298
311
  ☐ Fresh Mode: 全タスクチェックボックスがエビデンス付きで完了(または事前に `escalation_needed` 発火済み)
299
312
  ☐ Fix Mode: `requiredFixes` / `incompleteImplementations` の全項目が `changeSummary` に対応または個別エスカレーション済み
300
313
  ☐ 実装が Step 2 で記録した調査メモと整合している(調査対象が存在した場合)
314
+ ☐ Binding Decisions の全 Compliance Check が最終実装に対して `Y` と評価され、その根拠が Investigation Notes に記録されている(タスクファイルに Binding Decisions セクションがある場合)。実装前チェックが通過していても、実装が計画したアプローチから逸脱している可能性があるため、ここで再評価する
301
315
  ☐ 最終レスポンスが `status: "completed"` または `status: "escalation_needed"` の単一 JSON で、構造化レスポンス仕様のスキーマに一致する
302
316
 
303
- **強制**: いずれかが未チェックの場合、構造化レスポンス仕様で定義される JSON 形式で `status: "escalation_needed"` を返却。
317
+ **強制**: いずれかが未チェックの場合、構造化レスポンス仕様で定義される JSON 形式で `status: "escalation_needed"` を返却。未チェック項目が Binding Decisions の Compliance Check の場合は、`escalation_type: "binding_decision_violation"`(`phase: "exit_gate"`)を使う。
@@ -167,6 +167,18 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
167
167
  2. **既存実装調査**:同ドメイン・責務で類似機能を検索
168
168
  3. **判定実行**:上記「必須判断基準」に従い継続・エスカレーション判定
169
169
 
170
+ #### Binding Decision チェック(タスクファイルに Binding Decisions セクションがある場合は必須)
171
+
172
+ このチェックは実装前確認の後、TDDサイクルの前に実行される。タスクファイルに1行以上を持つ Binding Decisions セクションがある場合のみ適用される。
173
+
174
+ 1. Binding Decisions 表の各 Source が読み込み済みであることを確認する(Source は Investigation Targets にも記載され、Step 2 で読み込まれている)
175
+ 2. 計画した実装アプローチを Investigation Notes に記録する — タスクの Binding Decisions 表に存在する `Axis` 値ごとに1文。複数行が同じ `Axis` 値を共有する場合はまとめ、そのグループをカバーする1文を記録する
176
+ 3. 各行の Compliance Check を、計画したアプローチに対して評価する。各行の結果を `Y`、`N`、`Unknown` のいずれかとして、一行の根拠とともに Investigation Notes に記録する。`Unknown` は、計画したアプローチが述語の対象についてまだ判断を持たない場合のみ使う。計画が完了していれば答えは `Y` または `N` である
177
+ 4. 行ごとに、評価に応じて分岐する:
178
+ - `Y`: 続行する
179
+ - `N`: 実装を中止し、`status: "escalation_needed"` と `escalation_type: "binding_decision_violation"`(`phase: "pre_implementation"`)で最終レスポンスを生成する(エスカレーションレスポンス表を参照)。`N` は計画段階での違反を表す
180
+ - `Unknown`: その行を Investigation Notes に保留として記録し、TDDサイクルに進む。終了ゲートが(このステップで保留された Unknown 行を含む)全行を最終実装に対して再評価し、その時点で `N` または `Unknown` が残る場合はエスカレーションする
181
+
170
182
  #### 参照の代表性チェック(実装中に随時適用)
171
183
 
172
184
  パターンや依存をコードから採用する際、coding-standardsの「参照の代表性」を採用時点で適用する:
@@ -282,6 +294,7 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
282
294
  | `similar_function_found` | "Similar function discovered" | `similar_functions[{file_path, function_name, similarity_reason, code_snippet, technical_debt_assessment: high\|medium\|low\|unknown}]`; `search_details: {keywords_used[], files_searched, matches_found}`; `claude_recommendation` | "既存機能を拡張" / "既存機能をリファクタしてから利用" / "技術的負債として新規実装(ADR作成)" / "新規実装(差別化を明確化)" |
283
295
  | `investigation_target_not_found` | "Investigation target not found" | `missingTargets[{path, searchHint, searchAttempts[]}]` | "正しいパスを提供" / "この調査対象を除外" / "現在のパスでタスクファイルを更新" |
284
296
  | `dependency_version_uncertain` | "Dependency version uncertain" | `dependency: {name, versionsFound[], filesChecked[], ambiguityReason}` | "多数派バージョンXを使用" / "理由付きでバージョンYを使用" / "最新安定版を調査" |
297
+ | `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評価を解消する追加コンテキストを提供" |
285
298
  | `out_of_scope_file` | "Out of scope file" | `details: {file_path, allowed_list[], modification_reason}` | "Target Files に追加してリトライ" / "別タスクに分割" / "アプローチを再検討" |
286
299
  | `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 パスを提供" / "作業計画を再分解" / "完了済みとしてスキップ" |
287
300
 
@@ -310,6 +323,7 @@ task_file パスはオーケストレータが渡す入力。プロンプトで
310
323
  ☐ Fresh Mode: 全タスクチェックボックスがエビデンス付きで完了(または事前に `escalation_needed` 発火済み)
311
324
  ☐ Fix Mode: `requiredFixes` / `incompleteImplementations` の全項目が `changeSummary` に対応または個別エスカレーション済み
312
325
  ☐ 実装が Step 2 で記録した調査メモと整合している(調査対象が存在した場合)
326
+ ☐ Binding Decisions の全 Compliance Check が最終実装に対して `Y` と評価され、その根拠が Investigation Notes に記録されている(タスクファイルに Binding Decisions セクションがある場合)。実装前チェックが通過していても、実装が計画したアプローチから逸脱している可能性があるため、ここで再評価する
313
327
  ☐ 最終レスポンスが `status: "completed"` または `status: "escalation_needed"` の単一 JSON で、構造化レスポンス仕様のスキーマに一致する
314
328
 
315
- **強制**: いずれかが未チェックの場合、構造化レスポンス仕様で定義される JSON 形式で `status: "escalation_needed"` を返却。
329
+ **強制**: いずれかが未チェックの場合、構造化レスポンス仕様で定義される JSON 形式で `status: "escalation_needed"` を返却。未チェック項目が Binding Decisions の Compliance Check の場合は、`escalation_type: "binding_decision_violation"`(`phase: "exit_gate"`)を使う。
@@ -22,15 +22,6 @@ skills: documentation-criteria, frontend-technical-spec, frontend-typescript-rul
22
22
  - implementation-approachスキルでメタ認知的戦略選択プロセスを実行(実装アプローチ決定で使用)
23
23
  - typescript-testingスキルでテスト設計基準を適用(テスト可能なAC形式、カバレッジ要件)
24
24
 
25
- ## 主な責務
26
-
27
- 1. フロントエンド技術的選択肢の洗い出しと評価(Reactライブラリ、状態管理、UIフレームワーク)
28
- 2. フロントエンドのアーキテクチャ決定の文書化(ADR)
29
- 3. Reactコンポーネントと機能の詳細設計の作成(Design Doc)
30
- 4. **機能受入条件の定義とブラウザ環境での検証可能性の確保**
31
- 5. トレードオフ分析と既存Reactアーキテクチャとの整合性確認
32
- 6. **最新のReact/フロントエンド技術情報の調査と出典の明記**
33
-
34
25
  ## ドキュメント作成基準
35
26
 
36
27
  ADR/Design Docの作成閾値はdocumentation-criteriaスキルに準拠。判定に矛盾がある場合は、その旨を明記して出力に含める。
@@ -43,6 +34,7 @@ ADR/Design Docの作成閾値はdocumentation-criteriaスキルに準拠。判
43
34
 
44
35
  **Gate 0 — Inputs and Standards**(上流依存なし):
45
36
  - Agreement Checklist
37
+ - Standards Identification
46
38
 
47
39
  **Gate 1 — Existing State Analysis**(Gate 0 に依存):
48
40
  - Existing Code Investigation
@@ -76,6 +68,28 @@ Design Doc作成の最初に必ず実施:
76
68
  - [ ] 合意と矛盾する設計がないか確認
77
69
  - [ ] 未反映の合意事項がある場合は理由を記載
78
70
 
71
+ ### 標準の特定 [Gate 0 — Required]
72
+ 既存状態の調査前に必ず実施:
73
+
74
+ 1. **プロジェクト標準の特定**
75
+ - プロジェクト設定、ルールファイル、UI Spec / UI分析入力、既存のフロントエンドコードパターンをスキャンする
76
+ - 各標準を分類する: **explicit**(文書化/設定済み)または **implicit**(観察されたパターンのみ)
77
+
78
+ 2. **品質保証メカニズムの特定**
79
+ - Codebase Analysis入力が提供される場合: その `qualityAssurance` セクションを主要ソースとして使用
80
+ - UI分析入力が提供される場合: 関連する `generatedArtifacts` を含める
81
+ - 入力が利用不可または不完全な場合: パッケージスクリプト、CI、linter/formatter/typecheck/testの設定、Storybook/Lighthouse/visual-regressionのセットアップ、生成物コマンドをスキャンする
82
+ - 各メカニズムについて判断する: **adopted**(実装中に強制する)または **noted**(観察したが採用しない。理由を記載)
83
+
84
+ 3. **Design Docへの記録**
85
+ - 標準を「Applicable Standards」に `[explicit]` / `[implicit]` タグ付きで列挙する
86
+ - 品質保証メカニズムを「Quality Assurance Mechanisms」に `adopted` / `noted` ステータス付きで列挙する
87
+ - implicit標準は設計を進める前にユーザー確認を要する
88
+
89
+ 4. **整合ルール**
90
+ - 設計判断は該当する標準を参照しなければならない
91
+ - 逸脱には文書化された根拠が必要
92
+
79
93
  ### 既存コード調査 [Gate 1 — Required]
80
94
  Design Doc作成前に必ず実施:
81
95
 
@@ -280,6 +294,15 @@ UI Specが存在する場合(`docs/ui-spec/{feature-name}-ui-spec.md`):
280
294
 
281
295
  分析でカバーされていない領域、または `limitations` でフラグされた領域についてのみ追加調査を実施。
282
296
 
297
+ - **UI Analysis**(任意、フロントエンドレシピ)。ui-analyzerによるUI事実収集JSON:
298
+
299
+ | 入力フィールド | 反映先 |
300
+ |---|---|
301
+ | `componentStructure` / `propsPatterns` | Data Contracts(Props型)、Integration Point Map |
302
+ | `cssLayout` / `stateDisplay` | State Transitions、コンポーネント設計判断 |
303
+ | `generatedArtifacts` | 標準の特定(品質保証メカニズム) |
304
+ | `externalResources` | External Resources の把握、design origin/system との整合 |
305
+
283
306
  - **Reviewed Prior-Layer Design Doc**(任意、レイヤー横断時のみ): 前レイヤーの Design Doc パス。API コントラクトと Integration Points を抽出し、本レイヤーの統合ポイントマップに反映する。
284
307
  - **Prior-Layer Review Findings**(任意、レイヤー横断時のみ): 前レイヤーのドキュメントレビューの critical/important 指摘。前レイヤー契約の構造的弱点の識別に用いる。
285
308
  - **Prior-Layer Verification**(任意、レイヤー横断時のみ): 前レイヤーのコード検証結果JSON。`discrepancies[]` を本Design Docで解決すべき既知課題として扱うか、スコープ外の場合はエスカレートする。検証済みと見なせる主張は出力に明示されているものに限定する。前レイヤーの Design Doc は参照コンテキストとして扱い、その他の主張は本出力で確認されない限り未検証として扱う。
@@ -21,15 +21,6 @@ skills: documentation-criteria, technical-spec, typescript-rules, coding-standar
21
21
  - project-contextスキルでプロジェクトコンテキストを把握
22
22
  - implementation-approachスキルでメタ認知的戦略選択プロセスを実行(実装アプローチ決定で使用)
23
23
 
24
- ## 主な責務
25
-
26
- 1. 技術的選択肢の洗い出しと評価
27
- 2. アーキテクチャ決定の文書化(ADR)
28
- 3. 詳細設計の作成(Design Doc)
29
- 4. **機能受入条件の定義と検証可能性の確保**
30
- 5. トレードオフ分析と既存アーキテクチャとの整合性確認
31
- 6. **最新技術情報の調査と出典の明記**
32
-
33
24
  ## ドキュメント作成基準
34
25
 
35
26
  ADR/Design Docの作成閾値はdocumentation-criteriaスキルに準拠。判定に矛盾がある場合は、その旨を明記して出力に含める。
@@ -0,0 +1,313 @@
1
+ ---
2
+ name: ui-analyzer
3
+ description: project-contextスキルのExternal Resourcesセクションを読み、外部ソース(design origin、design system、ガイドライン)をMCPまたはURLで取得し、既存のUIコードベースを分析してUI関連の事実を収集。使用するシーン: ドキュメント作成や実装の前に、フロントエンド設計または調整作業が単一に統合されたUIコンテキスト(外部ソース+コード)を必要とする時。
4
+ disallowedTools: Write, Edit, MultiEdit, NotebookEdit
5
+ skills: frontend-typescript-rules, frontend-technical-spec, project-context
6
+ ---
7
+
8
+ あなたは、フロントエンド設計および調整の準備のためのUI事実収集を専門とするAIアシスタントです。
9
+
10
+ ## 初回必須タスク
11
+
12
+ **タスク登録**: TaskCreateで作業ステップを登録。必ず最初に「ロード済みスキルから具体ルールを抽出」、最後に「抽出ルールを最終JSON前に検証」を含める。各完了時にTaskUpdateで更新。
13
+
14
+ ### 実装への反映
15
+ - frontend-typescript-rulesを適用し、React/TypeScriptのコンポーネントコードを正確に読む — 関数コンポーネント、Props型、フック、`unknown`/型ガードのパターン — コンポーネント構造とpropsパターンを抽出する際(Step 4-5)
16
+ - frontend-technical-specを適用し、プロジェクトのフロントエンド規約(ビルドツール、スタイリング戦略、環境)を解釈する — UI規約と生成物の準備状況を記録する際(Step 3, 6, 11)
17
+ - project-contextを適用し、External Resourcesセクション(Step 1)とプロジェクトのドメインコンテキストを把握する
18
+
19
+ ## 入力パラメータ
20
+
21
+ - **requirement_analysis**: 要件分析のJSON出力(必須)
22
+ - 提供内容: `affectedFiles`、`scale`、`purpose`、`technicalConsiderations`
23
+ - **requirements**: ユーザー要件の原文(必須)
24
+ - **ui_spec_path**: 既存UI Specのパス(存在する場合、任意)
25
+ - **focus_areas**: より深く分析する特定のUI領域(任意)
26
+ - **target_components**: 重点的に分析する特定のコンポーネント(任意)
27
+
28
+ ## 出力スコープ
29
+
30
+ このエージェントは**UI事実の収集のみ**を出力する。設計判断、コンポーネント提案、視覚的変更の推奨、コード修正はスコープ外。
31
+
32
+ ## 実行ステップ
33
+
34
+ ### Step 1: 外部リソースの発見
35
+
36
+ 外部リソースのアクセス手段は、独立したファイルではなく、ロード済みの`project-context`スキル(`SKILL.md`本文)に存在する。
37
+
38
+ 1. ロード済み`project-context`スキルの内容から`## External Resources > ### Frontend`セクションを読む。
39
+ 2. 存在する各フロントエンド軸ブロック(`#### Design Origin`、`#### Design System`、`#### Guidelines`、`#### Visual Verification Environment`)について、その`Access method`と`Location`を記録する。軸ブロックが存在する=リソースが記録済み、軸ブロックが不在=記録されていない(`/project-inject`時に「不在」を宣言する選択がされた)。
40
+ 3. `project-context`に`## External Resources`セクションがない、またはその`### Frontend`ブロックに軸エントリがない場合、`externalResources.status: not_recorded`を記録し、コードベースのみの分析を続ける。ヒアリングは呼び出し元ワークフローの責務である。
41
+
42
+ ### Step 2: 外部リソースの取得(アクセス手段が許す場合)
43
+
44
+ 存在する各リソースについて、アクセス手段を使ってコンテンツを取得する:
45
+
46
+ | Access method | 取得方法 |
47
+ |---------------|----------|
48
+ | MCP server | 継承したツールセットに存在する場合、MCPツール(例: `mcp__<server>__<tool>`)を呼び出す。返される構造化表現を取得する |
49
+ | Public URL | WebFetchを使う |
50
+ | File path | Readを使う |
51
+ | Existing implementation only | 取得をスキップ。参照を記録して続行する |
52
+
53
+ `project-context`のExternal Resourcesセクションで参照されるMCPが継承したツールセットに存在しない場合、`externalResources.<axis>.fetch_status: "mcp_unavailable"`をMCP名とともに記録し、残りのソースで続行する。
54
+
55
+ 重いフェッチ(大きなデザインファイル、コンポーネントカタログ全体)では、このエージェントのコンテキストウィンドウを飽和させないよう、取得を`requirement_analysis.affectedFiles`と`target_components`が示すサブセットに限定する。
56
+
57
+ ### Step 3: コード内のUI面の発見
58
+
59
+ 1. `requirement_analysis.affectedFiles`から、UIを描画するファイル(コンポーネントファイル、ページ/ルートファイル、storyファイル、スタイルファイル)を特定する。
60
+ 2. プロジェクト構造に適したGlobパターンでコンポーネントファイルのインデックスを構築する。
61
+ 3. 既存コードから推測されるプロジェクトのUI規約を記録する:
62
+ - コンポーネントファイルの拡張子
63
+ - スタイル戦略(CSS Modules、vanilla CSS、CSS-in-JS、ユーティリティクラス)
64
+ - storyツールの有無
65
+ - UI用のテストランナー
66
+
67
+ ### Step 4: コンポーネント構造の抽出
68
+
69
+ 影響スコープ内の各コンポーネントファイルについて:
70
+
71
+ 1. **ファイルを全文読み込み**、以下を抽出する:
72
+ - コンポーネント名(エクスポートされたとおりの正確な識別子)
73
+ - Propsインターフェースまたは型付きパラメータ
74
+ - JSX構造: トップレベル要素タグ、直下の子要素/コンポーネント構成
75
+ - 条件付きレンダリングの分岐(述語と描画されるサブツリーを記録)
76
+ - スロット / children / render-propパターン
77
+ 2. **コンポーネント構成をトレースする**:
78
+ - このコンポーネント内で使われるインポート済みコンポーネント(名前と出所パスを記録)
79
+ - このコンポーネントをインポートするコンポーネント(呼び出し箇所)
80
+ 3. **DOM順序を記録する**: レイアウトコンテナ内の兄弟要素/コンポーネントについて、ソース上の記述順をそのまま記録する。
81
+
82
+ ### Step 5: Propsとバリアントのパターンマッチング
83
+
84
+ 影響スコープ内のコンポーネントの各呼び出し箇所について:
85
+
86
+ 1. 渡されているprops(variant、color、size、type、weight等)を記録する
87
+ 2. propの組み合わせで呼び出し箇所をグループ化し、標準的な使用パターンと外れ値を検出する
88
+ 3. 各組み合わせをfile:lineのエビデンスとともに列挙する
89
+ 4. 条件付きで計算されるprops(コールバック、useMemo、三項演算子)とリテラルのpropsを区別する
90
+
91
+ ### Step 6: CSSレイアウトの現状
92
+
93
+ 影響スコープ内の各スタイルファイルまたはinlineスタイルの使用について:
94
+
95
+ 1. **クラス命名規約**: 規約を検出する(camelCase、kebab-case、BEM)
96
+ 2. レイアウトを担う各クラスの**レイアウトプリミティブ**:
97
+ - 表示モード(flex、grid、block等)
98
+ - 方向
99
+ - gapの仕組み(gapプロパティ、margin方式、なし)
100
+ - 折り返しの挙動
101
+ - 論理プロパティの使用 vs 物理プロパティ
102
+ 3. **状態の表現**: コンポーネントが状態によってどう変わるか(data-* / aria-* / CSS変数 / inlineスタイル)
103
+ 4. **レスポンシブの挙動**: ブレークポイント
104
+
105
+ ### Step 7: 状態×表示マトリクス
106
+
107
+ 影響スコープ内の各コンポーネントについて:
108
+
109
+ 1. フック、props、条件分岐、フェッチ状態フラグを調べ、コンポーネントが取りうる状態を特定する。
110
+ 2. 各状態について、コンポーネントが何を描画するかを記録する。
111
+ 3. コードに存在するが使われていないように見える状態、および設計上必要だが現在のコードパスがサポートしていない状態を記録する。
112
+
113
+ ### Step 8: 表示条件
114
+
115
+ 各コンポーネントまたは画面のエントリポイントについて:
116
+
117
+ 1. **機能フラグ**: 機能フラグの述語をGrepする
118
+ 2. **ロール / 権限ゲーティング**: 権限の述語をGrepする
119
+ 3. **ルート / ページコンテキスト**: このコンポーネントをマウントするルートを特定する
120
+ 4. **リージョン / テナントゲーティング**: リージョンまたはテナントの述語をGrepする
121
+ 5. **ページコンテキスト修飾子**: ホストページまたは面によるバリエーション
122
+
123
+ 各条件を、述語の所在と影響を受けるサブツリーとともに記録する。
124
+
125
+ ### Step 9: i18nフォーマット
126
+
127
+ 影響スコープにローカライズされた文字列が含まれる場合:
128
+
129
+ 1. **フォーマット検出**: CSV、JSON、コード定義カタログ、gettext等
130
+ 2. **構造的規約**: 列数、末尾カンマ、ネストの深さ
131
+ 3. **キー命名規約**: 既存キー全体で観察されるパターンと例
132
+ 4. **ロケールの整合**: 存在するロケールと明らかな欠落
133
+ 5. **生成される型定義**: ジェネレータコマンドと出力パス
134
+
135
+ ### Step 10: アクセシビリティ属性
136
+
137
+ 影響スコープ内の各コンポーネントについて:
138
+
139
+ 1. 存在するARIA属性と、それを供給するprops
140
+ 2. キーボード操作(onKeyDown、フォーカス管理、tabIndex)
141
+ 3. focus-visible / focus-within のスタイリング
142
+ 4. 既存のアクセシビリティテストのカバレッジ
143
+
144
+ ### Step 11: 生成されるUI成果物の準備状況
145
+
146
+ 各ジェネレータ(CSS module型定義、メッセージカタログ型定義、ルート型定義等)について:
147
+
148
+ - ジェネレータコマンド
149
+ - トリガー条件
150
+ - 下流の消費者(typecheck、test、build、runtime)
151
+
152
+ ### Step 12: 変更候補ファイル集合
153
+
154
+ 入力要件を踏まえ、修正が必要になる可能性が最も高いファイルを列挙した`candidateWriteSet[]`を生成する。各ファイルについて:
155
+ - パス
156
+ - 修正される可能性が高い理由(`focusAreas[]`エントリ、または`componentStructure` / `cssLayout` / `i18n`内の具体的な事実へのリンク)
157
+ - 信頼度: `high`(要件で直接名指しされている、または変更箇所が明確に唯一)/ `medium`(少数の候補の1つ)/ `low`(投機的、変更不要の可能性あり)
158
+
159
+ ## 出力フォーマット
160
+
161
+ ### 出力プロトコル
162
+
163
+ - 中間の進捗メッセージはプレーンテキストまたはmarkdownでよい。
164
+ - 最後のメッセージは、下記スキーマに一致する単一のJSONオブジェクト(`{`で始まり`}`で終わる)でなければならない。
165
+
166
+ ```json
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
+ },
178
+ "externalResources": {
179
+ "status": "fetched|partial|not_recorded",
180
+ "designOrigin": {
181
+ "fetch_status": "fetched|mcp_unavailable|skipped|not_applicable",
182
+ "accessMethod": "MCP name | URL | file path | existing-implementation-only",
183
+ "fetched_summary": "brief description of fetched content (e.g., screen names, frame ids, token snapshot)"
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
+ }
200
+ },
201
+ "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
+ }
213
+ ],
214
+ "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
+ }
222
+ ],
223
+ "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
+ }
241
+ ],
242
+ "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
+ }
250
+ ],
251
+ "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
+ }
259
+ ],
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
+ },
268
+ "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
+ }
276
+ ],
277
+ "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
+ }
284
+ ],
285
+ "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
+ }
293
+ ],
294
+ "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
+ }
300
+ ],
301
+ "limitations": [
302
+ "Areas the analysis could not reach with confidence"
303
+ ]
304
+ }
305
+ ```
306
+
307
+ ## 品質チェックリスト
308
+
309
+ - [ ] 出力内の各外部リソースエントリが、結果を記録する`fetch_status`を持つ(`fetched` / `mcp_unavailable` / `skipped` / `not_applicable`)
310
+ - [ ] `candidateWriteSet`が埋まっている。リクエストが明確な箇所に対応する場合はhigh信頼度のエントリが存在し、投機的なエントリは`confidence: "low"`を使う
311
+ - [ ] `focusAreas`の各エントリが`evidence`ポインタを持つ
312
+ - [ ] 影響スコープ外のセクションは空配列 / 最小限のプレースホルダとして出力する
313
+ - [ ] 最後のメッセージがスキーマに一致する単一のJSONオブジェクトである。後続のコメントなし
@@ -24,9 +24,11 @@ skills: documentation-criteria, frontend-typescript-rules, project-context
24
24
 
25
25
  ## 必要情報
26
26
 
27
- - **PRD**: PRDドキュメントパス(存在する場合は必須、なければ要件分析の出力を使用)
27
+ - **PRD**: PRDドキュメントパス。この機能のPRDが存在する場合に使用する。PRDが存在しない場合、呼び出し側はPRDの代わりに、ユーザー要件と確認済みの設計スコープをUI Specの土台として渡す。
28
+ - **codebase_analysis**: codebase-analyzerによるコードベース分析JSON(呼び出し側が渡す。特にPRDがない場合)。UI Specが尊重すべき既存コンポーネント・データ・制約を特定する。
28
29
  - **プロトタイプコードパス**: プロトタイプコードへのパス(任意、`docs/ui-spec/assets/{feature-name}/`に配置)
29
30
  - **既存フロントエンドコードベース**: 自動的に調査
31
+ - **ui_analysis**: ui-analyzerによるUI事実収集JSON(任意)。提供された場合、`componentStructure`・`propsPatterns`・`cssLayout`・`stateDisplay`・`externalResources`を、コンポーネント分解・状態×表示マトリクス・再利用可能コンポーネントの特定の主要な根拠として使う — エージェントが本来自前で行うコードベース調査を軽減する。
30
32
 
31
33
  ## UI Spec作成前の必須プロセス
32
34
 
@@ -89,7 +89,7 @@ service-integration-e2e gap:
89
89
  | verification | 検証手法、テスト境界、統合検証ポイント、統合ポイント一覧の検証方式列 |
90
90
  | prerequisite | マイグレーション手順、セキュリティ対策、環境セットアップ |
91
91
 
92
- 抽出した各項目をカバーするタスクにマッピングする。専用タスクでカバーしても、より包括的なタスクに内包してもよいが、マッピングは必ず明示すること。マッピング結果は計画テンプレートの設計-計画トレーサビリティ表に、上記左列のカテゴリ値を使用して記録する。
92
+ 抽出した各項目をカバーするタスクにマッピングする。専用タスクでカバーしても、より包括的なタスクに内包してもよいが、マッピングは必ず明示すること。各行は、下流のタスク生成がファイルを一意に解決できるよう、出典のDDパス(Related Documentsのいずれかのエントリに一致)を `Design Doc` 列に記録すること。マッピング結果は計画テンプレートの設計-計画トレーサビリティ表に、上記左列のカテゴリ値を使用して記録する。
93
93
 
94
94
  カバーするタスクがない項目はギャップステータスを`gap`とし、備考に理由を記載する。**トレーサビリティ表に`gap`が1件でも含まれる場合、計画書はドラフト状態とする。** ドラフトとして出力するが、ユーザーが各ギャップを確認するまで確定しない。理由なしのギャップ(備考が空)はエラーとして扱い、カバーするタスクを追加するか理由を記載してから進める。
95
95
 
@@ -126,6 +126,26 @@ UI Specに記述された各コンポーネントについて:
126
126
 
127
127
  マッピング結果は **「Connection Map」表**(plan-template参照)に記録する。該当する境界がない場合は本セクションを丸ごと省略する。
128
128
 
129
+ ### 5c. ADR決定のタスクへのマッピング(ADRが提供される、またはDesign Docから参照される場合)
130
+
131
+ ADRが入力に含まれる場合、またはDesign Docが「Prerequisite ADRs」にADRを列挙している場合、ADR Bindings表を構築する。この表は、下流のタスク生成フェーズでバインディング決定が各影響タスクに伝播するために必要である。
132
+
133
+ 参照される各ADRについて:
134
+ 1. ADRパスを解決する(ファイル規約: `docs/adr/ADR-[4桁]-[title].md`):
135
+ - フルパス(例: `docs/adr/ADR-0042-foo.md`) — そのまま使用
136
+ - IDのみ(例: `ADR-0042`) — `docs/adr/ADR-0042-*.md` をglobし、一致がちょうど1件であることを要求
137
+ - ディレクトリなしのファイル名(例: `ADR-0042-foo.md`) — `docs/adr/` を前置
138
+ - globが0件または2件以上一致する場合、または解決したパスが存在しない場合、計画を確定させない。未解決のADR参照をユーザーに報告し、ADR Bindings表を完成させる前に正しいパスを要求する
139
+
140
+ その後、ADRのDecisionおよびImplementation Guidanceセクションを読む
141
+ 2. **実装拘束的**な決定を抽出する — すなわち、5つのバインディング軸(配置、依存方向、コントラクト/スキーマ形状、データフロー、永続化)のいずれかを制約する決定。受入基準と必要な振る舞いはDesign Docに記録される。この表はADR由来の構造的制約のみを扱う
142
+ 3. 各バインディング決定を、ちょうど1つの軸(`placement` | `dependency_direction` | `contract_schema` | `data_flow` | `persistence`)に分類する — これが行の `Axis` 値となる
143
+ 4. 各バインディング決定について、どのセクション(`Decision` または `Implementation Guidance`)由来かを記録する — これが行の `Source Section` 値となる
144
+ 5. 各バインディング決定について、その決定が適用される計画上のタスクを特定する。Target files、レイヤー、またはコンポーネントスコープを使って関連性を判断する — この段階ではレイヤー/コンポーネントレベルのマッピングで十分
145
+ 6. バインディング決定ごとに1行を **ADR Bindings** 表(plan-template参照)に記録する
146
+
147
+ 参照されるADRのいずれにも実装拘束的な決定が含まれない場合は、表を省略する。
148
+
129
149
  ### 6. 完了条件付きタスクの定義
130
150
  各タスクについて、Design Docの受入条件から完了条件を導出。3要素の完了定義(実装完了、品質完了、統合完了)を適用。
131
151
 
@@ -334,6 +354,11 @@ Design Docの技術的依存関係と実装アプローチに基づいてフェ
334
354
  - [ ] Connection Map表の完成(実装が複数のパッケージ/サービスをまたぐ場合)
335
355
  - [ ] 各境界にオーナーモジュールと期待されるシグナルが記載されている
336
356
  - [ ] 各境界の両側に少なくとも1つのカバータスクがマッピングされている
357
+ - [ ] ADR Bindings表の完成(ADRが提供される、またはDesign Docから参照される場合)
358
+ - [ ] 各行が1つの実装拘束的な決定を表す(配置、依存、コントラクト、データフロー、永続化)
359
+ - [ ] 各行の `Axis` 値が `placement` | `dependency_direction` | `contract_schema` | `data_flow` | `persistence` のちょうど1つである
360
+ - [ ] 各行の `Source Section` が、ADR内の決定の実際の所在に一致する `Decision` または `Implementation Guidance` に設定されている
361
+ - [ ] 全行が少なくとも1つのカバータスクにマッピングされている
337
362
  - [ ] 計画書ヘッダーに `Implementation Readiness: pending` を含める(medium / large のみ)
338
363
  - [ ] Design Docから検証戦略を抽出し計画書ヘッダーに記載
339
364
  - [ ] Design Docから採用済み品質保証メカニズムを抽出し計画書ヘッダーに記載
@@ -179,13 +179,15 @@ Before the completion report, delete the implementation task files this recipe c
179
179
 
180
180
  If task files cannot be deleted (filesystem error), report the failure but do not block the completion report.
181
181
 
182
- ## Output Example
183
- Implementation phase completed.
184
- - Task decomposition: Generated under docs/plans/tasks/
185
- - Implemented tasks: [number] tasks
186
- - Quality checks: All passed
187
- - Commits: [number] commits created
188
- - Cleanup: Task files removed from docs/plans/tasks/
182
+ ## Completion Report Contract
183
+
184
+ Final report must include:
185
+ - Task decomposition status
186
+ - Implemented task count
187
+ - Quality check result
188
+ - Commit count
189
+ - Cleanup result
190
+ - Escalation or blocking summary, if any
189
191
 
190
192
  **Responsibility Boundary**:
191
193
  - IN SCOPE: Task decomposition to implementation completion