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.
Files changed (62) hide show
  1. package/.claude/agents-en/acceptance-test-generator.md +112 -50
  2. package/.claude/agents-en/task-decomposer.md +40 -4
  3. package/.claude/agents-en/ui-spec-designer.md +2 -0
  4. package/.claude/agents-en/work-planner.md +98 -29
  5. package/.claude/agents-ja/acceptance-test-generator.md +113 -49
  6. package/.claude/agents-ja/task-decomposer.md +44 -8
  7. package/.claude/agents-ja/ui-spec-designer.md +2 -0
  8. package/.claude/agents-ja/work-planner.md +96 -29
  9. package/.claude/commands-en/add-integration-tests.md +8 -0
  10. package/.claude/commands-en/build.md +75 -23
  11. package/.claude/commands-en/front-build.md +56 -25
  12. package/.claude/commands-en/front-plan.md +7 -6
  13. package/.claude/commands-en/front-review.md +81 -19
  14. package/.claude/commands-en/implement.md +36 -5
  15. package/.claude/commands-en/plan.md +9 -8
  16. package/.claude/commands-en/prepare-implementation.md +191 -0
  17. package/.claude/commands-en/project-inject.md +84 -56
  18. package/.claude/commands-en/review.md +79 -20
  19. package/.claude/commands-ja/add-integration-tests.md +8 -0
  20. package/.claude/commands-ja/build.md +77 -25
  21. package/.claude/commands-ja/front-build.md +59 -28
  22. package/.claude/commands-ja/front-plan.md +8 -7
  23. package/.claude/commands-ja/front-review.md +81 -19
  24. package/.claude/commands-ja/implement.md +36 -5
  25. package/.claude/commands-ja/plan.md +10 -9
  26. package/.claude/commands-ja/prepare-implementation.md +191 -0
  27. package/.claude/commands-ja/project-inject.md +84 -56
  28. package/.claude/commands-ja/review.md +79 -20
  29. package/.claude/skills-en/documentation-criteria/references/plan-template.md +22 -0
  30. package/.claude/skills-en/documentation-criteria/references/ui-spec-template.md +2 -0
  31. package/.claude/skills-en/frontend-typescript-testing/references/e2e.md +81 -7
  32. package/.claude/skills-en/integration-e2e-testing/SKILL.md +48 -23
  33. package/.claude/skills-en/integration-e2e-testing/references/e2e-design.md +31 -13
  34. package/.claude/skills-en/project-context/SKILL.md +2 -15
  35. package/.claude/skills-en/project-context/references/external-resources-api.md +76 -0
  36. package/.claude/skills-en/project-context/references/external-resources-backend.md +76 -0
  37. package/.claude/skills-en/project-context/references/external-resources-frontend.md +74 -0
  38. package/.claude/skills-en/project-context/references/external-resources-infra.md +76 -0
  39. package/.claude/skills-en/project-context/references/template.md +154 -0
  40. package/.claude/skills-en/subagents-orchestration-guide/SKILL.md +36 -14
  41. package/.claude/skills-en/task-analyzer/references/skills-index.yaml +0 -5
  42. package/.claude/skills-ja/documentation-criteria/references/plan-template.md +22 -0
  43. package/.claude/skills-ja/documentation-criteria/references/ui-spec-template.md +2 -0
  44. package/.claude/skills-ja/frontend-typescript-testing/references/e2e.md +81 -7
  45. package/.claude/skills-ja/integration-e2e-testing/SKILL.md +48 -23
  46. package/.claude/skills-ja/integration-e2e-testing/references/e2e-design.md +31 -13
  47. package/.claude/skills-ja/project-context/SKILL.md +2 -15
  48. package/.claude/skills-ja/project-context/references/external-resources-api.md +76 -0
  49. package/.claude/skills-ja/project-context/references/external-resources-backend.md +76 -0
  50. package/.claude/skills-ja/project-context/references/external-resources-frontend.md +74 -0
  51. package/.claude/skills-ja/project-context/references/external-resources-infra.md +76 -0
  52. package/.claude/skills-ja/project-context/references/template.md +154 -0
  53. package/.claude/skills-ja/subagents-orchestration-guide/SKILL.md +36 -14
  54. package/.claude/skills-ja/task-analyzer/references/skills-index.yaml +0 -5
  55. package/.husky/pre-commit +1 -0
  56. package/CHANGELOG.md +55 -6
  57. package/README.ja.md +3 -2
  58. package/README.md +3 -2
  59. package/docs/guides/en/use-cases.md +18 -3
  60. package/docs/guides/ja/use-cases.md +18 -3
  61. package/package.json +2 -1
  62. package/scripts/check-skills-index.mjs +173 -0
@@ -0,0 +1,191 @@
1
+ ---
2
+ description: 実装着手前に readiness を検証しギャップを解消する
3
+ ---
4
+
5
+ **コンテキスト**: 作業計画承認と build/implement フェーズの間に挟む任意の readiness フェーズ。実装が Phase 1 から観測可能であることを確認し、ギャップがあれば Phase 0 タスクで解消する。readiness 基準が既に満たされている場合は no-op で終了するため、本レシピは無条件に呼び出しても安全。
6
+
7
+ ## オーケストレーター定義
8
+
9
+ **コアアイデンティティ**: 「私はオーケストレーターである。」(subagents-orchestration-guideスキル参照)
10
+
11
+ **実行プロトコル**:
12
+ 1. **全作業をAgentツールでサブエージェントに委譲** — サブエージェント(task-executor / task-executor-frontend / quality-fixer / quality-fixer-frontend)の呼び出し、成果物パスの受け渡し、結果の報告
13
+ 2. **自己完結スコープ**: ギャップが見つかった場合、本レシピは解消タスクの生成と、subagents-orchestration-guide「標準フロー」で説明される標準4ステップサイクルでの実行の**両方**を行う。readiness基準がパスするか残存ギャップがエスカレーションされた時点でレシピは完了する。
14
+ 3. **No-op終了**: readinessスキャンで失敗基準がない場合、解消タスクは生成せず即座に終了する。本ブランチのファイル変更は作業計画書本体のみ — `Implementation Readiness:`ヘッダを `ready` に昇格し、Readiness Reportセクションを永続化する。コードやテストファイルには触れない。
15
+
16
+ 作業計画書: $ARGUMENTS
17
+
18
+ ## 適用される条件
19
+
20
+ build/implement フェーズの前に、以下のいずれかが該当する場合に実行する:
21
+ - 作業計画書の検証戦略がコードベースにまだ存在しないコマンド・ファイル・関数・エンドポイントを参照する Design Doc から作成された
22
+ - 作業計画書にE2Eテストスケルトンが含まれる(seed data、auth fixture、環境変数、または外部モックが未対応の可能性あり)
23
+ - 作業計画書がUIコンポーネントに触れるが、それらの視覚状態を描画するfixtureエントリや開発用ルートがない
24
+ - ローカルレーンが本機能領域でエンドツーエンドに動作することをチームが事前に確認していない
25
+
26
+ いずれにも該当しない場合、Step 2のreadinessスキャンで失敗基準はゼロとなり、レシピはno-opで終了する(冒頭の「コンテキスト」参照)。
27
+
28
+ ## Readiness基準
29
+
30
+ 各基準は `pass` / `fail` / `not_applicable` のいずれかを生成する測定可能なチェックで、根拠を引用する。
31
+
32
+ | ID | 基準 | パスの根拠 |
33
+ |----|-----|----------|
34
+ | R1 | 検証戦略の参照が解決できる | 作業計画書の検証戦略セクションで参照される全コマンド、ファイルパス、関数、エンドポイント、テストが、コードベースに既存(Glob/Grepで検証)か、本計画内のいずれかのタスクの成果物である |
35
+ | R2 | E2E前提条件への対応 | E2Eスケルトンが存在する場合: スケルトンコメントで言及される全前提条件(seed data、auth fixture、env var、外部モック)が、コードベースに存在するか、本計画のPhase 0タスクでカバーされる |
36
+ | R3 | Phase 1の観測性 | 最初の実装フェーズに、タスク完了時点で実行可能な「動作検証手法」を持つタスクが少なくとも1つ存在する。当該検証は、タスク開始前に存在する成果物(既存コード、先行のPhase 0成果物、または当該タスク自身の出力)のみで実行できる |
37
+ | R4 | UI描画面の存在 | 計画がUIコンポーネントを実装する場合: 影響を受けるコンポーネントを描画するためのfixtureエントリ、開発ルート、Storybookストーリー、またはそれに相当する描画面が存在する、もしくはPhase 0タスクで追加される |
38
+ | R5 | ローカルレーンの手順 | 作業計画書または参照先ドキュメントに、手動検証用のローカル環境起動コマンド(起動コマンド、デフォルトポート、seed手順)が記録されている |
39
+
40
+ R4とR5は、トリガー信号が作業計画書に現れた場合のみ評価する。それ以外は `not_applicable` をマークする。
41
+
42
+ ## 実行前提条件
43
+
44
+ ```bash
45
+ # 作業計画書の存在確認
46
+ ! ls -la docs/plans/*.md | grep -v template | tail -5
47
+ ```
48
+
49
+ **状態チェック**:
50
+ - 作業計画書が存在する → Step 1へ進む
51
+ - 作業計画書がない → 停止して報告: 「承認済みの作業計画書が必要です。先に上流の計画フェーズを完了してから本レシピを再起動してください。」
52
+
53
+ ## 実行フロー
54
+
55
+ ### Step 1: 入力の読み込み
56
+
57
+ `$ARGUMENTS`で渡された作業計画書のパスを読み込む。以下を抽出する:
58
+ - 検証戦略セクション(正しさの証明方法 + 早期検証ポイント)
59
+ - 品質保証メカニズム表
60
+ - 設計-計画トレーサビリティ表
61
+ - 計画書ヘッダで参照されるテストスケルトン
62
+ - 各フェーズのタスクを含むフェーズ構成
63
+ - 参照されるDesign Doc(複数の場合あり)とUI Spec(存在する場合)
64
+
65
+ ### Step 2: Readinessスキャン
66
+
67
+ 各基準 R1〜R5 について:
68
+ 1. Readiness基準で定義されたスキャンを Read / Glob / Grep で実行する
69
+ 2. 結果を記録する: `pass` / `fail` / `not_applicable`
70
+ 3. 根拠を引用する: `pass`はfile:line、`fail`は未解決の参照、`not_applicable`は不在のトリガー信号
71
+
72
+ 結果に関わらずReadiness Report(出力フォーマット参照)を組み立てる。
73
+
74
+ ### Step 3: No-opチェック
75
+
76
+ 該当する全基準が `pass`(`fail`ゼロ)の場合:
77
+ - 作業計画書のヘッダブロック直後に `## Implementation Readiness Report` セクションを追記(既存なら置換)する。出力フォーマットで定義したReadiness Reportのmarkdownを使用する
78
+ - 作業計画書ヘッダの `Implementation Readiness:` 行を `ready` に更新する(行が無ければ `Related Issue/PR:` の後に挿入する)
79
+ - Readiness Reportをユーザーに提示する
80
+ - `outcome: ready, gaps_resolved: 0` で終了する
81
+ - 本ブランチのファイル変更は上記の作業計画書への変更のみ
82
+
83
+ `fail`が1件以上ある場合 → Step 4へ進む。
84
+
85
+ ### Step 4: 解消タスクの計画
86
+
87
+ 各 `fail` 基準について:
88
+ 1. ギャップを埋める最小単位の具体的タスクを決定する(例: 「ComponentXの loading/empty/error 状態をカバーするfixtureエントリを追加」、「E2Eユーザーfixture用のseedスクリプトを追加」、「ローカル起動コマンドを docs/run/local.md に文書化」)
89
+ 2. すべての対象ファイルパスを以下のマーカーに照らしてタスクの**レイヤー**を判定する:
90
+ - **backend**: 全対象ファイルパスが `**/api/**`、`**/server/**`、`**/services/**`、`**/backend/**`、`**/handlers/**`、`**/repositories/**` のいずれかにマッチする場合
91
+ - **frontend**: 全対象ファイルパスが `**/components/**`、`**/pages/**`、`**/web/**`、`**/frontend/**`、`**/*.tsx`、`**/*.jsx` のいずれかにマッチする場合
92
+ - **prep-only**(言語/ランタイムに依存しない、機能実装ではない準備系のタスク): 全対象ファイルパスが `docs/**`、`scripts/**`、`tests/fixtures/**`、`tests/e2e/data/**`、`tests/e2e/fixtures/**`、ルート直下の設定ファイル(`*.json`、`*.yml`、`*.config.*`)のいずれかにマッチする場合。**backend**のexecutor / quality-fixer(`task-executor` + `quality-fixer`)にルーティングする — Reactに固有の関心事を含まないため
93
+ - **mixed**(対象ファイルがbackendとfrontendの両方のマーカーをまたぐ、または機能マーカーとprep-onlyマーカーをまたぐことで実装と準備が同居する)→ ユーザーにエスカレーション。レイヤーごとにタスクを分割するよう依頼する
94
+ - **unrecognized**(上記いずれのマーカーにもマッチしない — 例: プロジェクトが使用する非標準のトップレベルディレクトリ)→ ユーザーにエスカレーション。(a) どのexecutor / quality-fixerが本タスクを実行すべきか判断するか、(b) プロジェクトが異なるパスを使用している場合はマーカーを更新するかを依頼する
95
+
96
+ ルールは上記の順で適用する。最初に一致したルールが採用される。`unrecognized` は backend にデフォルトする catch-all ではなく、最後のフォールバックとして機能する。
97
+ 3. Phase 0タスクファイルを `docs/plans/tasks/{plan-name}-backend-task-prep-{NN}.md`(backend または prep-only)または `docs/plans/tasks/{plan-name}-frontend-task-prep-{NN}.md`(frontend)として、documentation-criteriaスキルのタスクテンプレートで作成する。`-task-prep-`セグメントは本レシピが prep タスクと実装タスクを区別できるようにし、他レシピで使われる `{plan-name}-{layer}-task-*` マッチャーも維持する。prep-only タスクは Step 5 で backend executor にルーティングされるよう `-backend-task-prep-` のファイル名を使用する
98
+ 4. これらのタスクをPhase 0として(Phase 1の前に)作業計画書に挿入する
99
+
100
+ 提案された解消タスクのリストを AskUserQuestion でユーザーに提示する。明示的な承認後にのみ進める — これは本レシピ内で唯一の人間ゲートである。
101
+
102
+ ### Step 5: 解消タスクの実行
103
+
104
+ 各解消タスクについて、`task-executor → エスカレーションチェック → quality-fixer → commit` の4ステップサイクルを実行する(subagents-orchestration-guide「標準フロー」で定義され、レイヤールーティングは「Layer-Aware Agent Routing」に従う):
105
+
106
+ 1. **Agentツール** — ファイル名のレイヤーセグメントでルーティング(subagents-orchestration-guideのLayer-Aware Agent Routing表に対応):
107
+ - `*-backend-task-prep-*` → `subagent_type: "task-executor"`
108
+ - `*-frontend-task-prep-*` → `subagent_type: "task-executor-frontend"`
109
+ - 認識可能なレイヤーセグメントが無いファイル名 → エスカレーション(このファイルは存在し得ない。Step 4が防いでいる)
110
+ 2. orchestration-guideに従いエスカレーションをチェック
111
+ 3. **quality-fixer** — 同じファイル名のレイヤーセグメントでルーティング:
112
+ - `*-backend-task-prep-*` → `"quality-fixer"`
113
+ - `*-frontend-task-prep-*` → `"quality-fixer-frontend"`
114
+ 4. quality-fixer が `approved` を返したら**コミット**
115
+
116
+ 各サブエージェントプロンプトの末尾に下記の「サブエージェントのスコープ境界」ブロックを必ず付与する。
117
+
118
+ ### Step 6: 再スキャン、Readiness Reportの永続化、ヘッダ更新、クリーンアップ、終了
119
+
120
+ 1. **再スキャン**: 全解消タスクのコミット後、Step 2のreadinessスキャンを再実行する。
121
+
122
+ 2. **Readiness Reportを作業計画書本体に永続化する**: 作業計画書のヘッダブロック直後に `## Implementation Readiness Report` セクションを追記(既存なら置換)する。出力フォーマットで定義したReadiness Reportのmarkdownを使用する。下流のbuild/implementレシピは、ヘッダが `escalated` の場合に本セクションを読み、残存ギャップをユーザーに提示する。
123
+
124
+ 3. **作業計画書ヘッダの更新**: 作業計画書内の `Implementation Readiness: pending` 行を特定し、再スキャンの結果に応じて書き換える:
125
+
126
+ | 再スキャン結果 | 新しいヘッダ値 |
127
+ |--------------|--------------|
128
+ | 該当する全基準が `pass` | `Implementation Readiness: ready` |
129
+ | `fail` が1件以上残存 | `Implementation Readiness: escalated` |
130
+
131
+ 行が存在しない場合(古い作業計画書フォーマット)、`Related Issue/PR:` 行の後に挿入する。
132
+
133
+ 4. **最終クリーンアップ**: 本実行で作成した、現在の `{plan-name}` に該当するprepタスクファイル(`docs/plans/tasks/{plan-name}-backend-task-prep-*.md` および `docs/plans/tasks/{plan-name}-frontend-task-prep-*.md`)と、prepフェーズ用に生成されたフェーズ完了ファイル(`docs/plans/tasks/{plan-name}-phase0-completion.md` が存在する場合。prepタスクはPhase 0に置かれるため)をすべて削除する。他の計画のprepタスクファイルはスコープ外 — 本レシピは現在の実行で作成したものだけを削除する。作業内容はコミット済みで、`docs/plans/`はレシピ実行間で保持しない一時的な作業状態である。作業計画書本体は下流のbuild/implementフェーズのために保持する。
134
+
135
+ 5. **終了**:
136
+
137
+ | 再スキャン結果 | アクション |
138
+ |--------------|----------|
139
+ | 該当する全基準が `pass` | `outcome: ready, gaps_resolved: N` と最終Readiness Reportを添えて終了する |
140
+ | `fail` が1件以上残存 | `outcome: escalated` で終了する — 残存する失敗を次のアクションの推奨と共にユーザーに提示する。再スキャンは本レシピにとって終端評価である。さらなる解消には更新された入力でユーザーが本レシピを再起動する必要がある。 |
141
+
142
+ ## サブエージェントのスコープ境界
143
+
144
+ 本レシピから呼び出すサブエージェントプロンプトの末尾に以下のブロックを必ず付与する:
145
+
146
+ ```
147
+ Scope boundary for subagents:
148
+ Operate within the task scope and referenced files in the prompt.
149
+ Use loaded skills to execute that scope.
150
+ Escalate when the required fix or investigation falls outside that scope.
151
+ ```
152
+
153
+ ## 出力フォーマット
154
+
155
+ レシピ終了時にユーザーに提示する最終レポート:
156
+
157
+ ```
158
+ ## Implementation Readiness Report
159
+
160
+ 作業計画書: [path]
161
+ 結果: ready | escalated
162
+ 解消ギャップ数: [N]
163
+
164
+ ### Readiness基準
165
+
166
+ | ID | 結果 | 根拠 |
167
+ |----|-----|-----|
168
+ | R1 | pass / fail / not_applicable | [file:line または "missing: <未解決の参照>"] |
169
+ | R2 | ... | ... |
170
+ | R3 | ... | ... |
171
+ | R4 | ... | ... |
172
+ | R5 | ... | ... |
173
+
174
+ ### 実行された解消タスク(gaps_resolved > 0 の場合)
175
+ - [タスクファイルパス] — [1行サマリ] — committed
176
+ - ...
177
+
178
+ ### 残存ギャップ(outcome が escalated の場合)
179
+ - [基準ID]: [未解決の参照] — 次のアクション: [推奨]
180
+ ```
181
+
182
+ ## 完了基準
183
+
184
+ - [ ] 作業計画書が読み込まれ、検証戦略 / E2E参照 / フェーズ構成が抽出されている
185
+ - [ ] readinessスキャンが実行され、各基準の結果と根拠が記録されている
186
+ - [ ] 全`pass`の場合のno-op終了、または解消タスクの生成・承認・4ステップサイクル実行のいずれかが行われている
187
+ - [ ] 最後の解消タスクのコミット後に再スキャンが実行されている
188
+ - [ ] `## Implementation Readiness Report` セクションが作業計画書本体に永続化されている
189
+ - [ ] 作業計画書ヘッダの `Implementation Readiness:` 行が `ready` または `escalated` に更新されている
190
+ - [ ] prepタスクファイル(および生成された場合のPhase 0フェーズ完了ファイル)が `docs/plans/tasks/` から削除されている
191
+ - [ ] 最終レポートがユーザーに提示されている
@@ -1,86 +1,114 @@
1
1
  ---
2
- description: プロジェクト固有のコンテキストをproject-contextスキルに注入
2
+ description: テンプレート駆動ヒアリングで project-context スキルを設定
3
3
  ---
4
4
 
5
- **コマンドコンテキスト**: AIの実行精度を高めるプロジェクト固有の前提情報を収集し、project-context SKILL.mdを更新する。
5
+ **コマンドコンテキスト**: `/project-inject` は AI の実行精度を高めるプロジェクト固有の前提情報を収集し、`project-context` スキルに書き込む。ヒアリングはテンプレート駆動で、セクションカタログは `references/template.md` に格納されており、新しい次元を追加する場合はこのテンプレートを編集する。
6
6
 
7
7
  ## なぜ必要か
8
8
 
9
- CLAUDE.mdのセッション初期化で`project-context`スキルが毎セッション読み込まれる。ここで収集した情報が、全タスクにおけるAIの判断精度に直接影響する。
9
+ CLAUDE.md のセッション初期化で `project-context/SKILL.md` が毎セッション読み込まれる。ここで収集した情報は全タスクにおける AI の判断精度に直接影響する。設定済み SKILL.md は最小限に保つ — 1 行ごとに毎セッションのコンテキスト予算を消費する。
10
10
 
11
- **AIの実行精度に寄与する情報のみ収集する。**
11
+ ## 実行フロー
12
12
 
13
- ## 実行プロセス
13
+ Step 1 を開始する前に以下のステップを TaskCreate で登録し、進捗に応じて各タスクのステータスを更新する。
14
14
 
15
- 以下のステップをTaskCreateで登録し、順番に進行する。
15
+ ### Step 1: 入力読み込み
16
16
 
17
- ### Step 1: 現状把握
17
+ 1. `.claude/skills/project-context/SKILL.md` を読み、現在の状態を把握する。本文に含まれるカタログセクション見出し(`## プロジェクト概要`、`## ドメイン制約`、`## 開発フェーズ`、`## ディレクトリ規約`、`## 外部リソース`)の数で 2 つのケースを区別する:
18
+ - **未設定** — 本文中のカタログセクション見出しが 0 個。
19
+ - **設定済み** — 本文中のカタログセクション見出しが 1 個以上。
20
+ 2. `.claude/skills/project-context/references/template.md` を読み、セクションカタログを取得する。
18
21
 
19
- 現在のproject-contextスキルとpackage.jsonを読む:
20
- - `.claude/skills/project-context/SKILL.md`
21
- - `package.json`(name、description)
22
+ **チェックポイント**: `template.md` のセクションカタログと、`SKILL.md` の設定済み / 未設定の状態を保持している。
22
23
 
23
- project-contextが設定済み(「未設定」マーカーがない)の場合、上書きか更新かをユーザーに確認する。
24
+ ### Step 2: セクション計画の作成
24
25
 
25
- ### Step 2: プロジェクトコンテキストの収集
26
+ カタログの全セクションを対象に、セクションごとの計画(`add` / `keep` / `update` / `remove` / `skip`)を作成する。
26
27
 
27
- AskUserQuestionで段階的に収集する。
28
+ **未設定の場合**:
29
+ - プロジェクト概要: `add`(必須。このセクションの採用ルールは「常に」)。
30
+ - 残りのカタログセクションそれぞれについて、AskUserQuestion: 「`<セクション名>` セクションを追加するか?」 選択肢: 「はい、追加する」 / 「いいえ、スキップ」。回答に応じて `add` または `skip` を割り当てる。
28
31
 
29
- **ラウンド1: プロジェクトの本質**
30
- - このプロジェクトは何をするものか?(1-2文)
31
- - どのドメインに属するか?(例:金融、ヘルスケア、開発者ツール、EC)
32
+ **設定済みの場合**:
33
+ - 内容が記入されているセクションそれぞれについて、AskUserQuestion: 「既存の `<セクション名>` セクションへのアクションは?」 選択肢: 「現状維持」(`keep` を割り当て) / 「更新 — 既存内容を置き換え」(`update` を割り当て) / 「削除 — 再構築する SKILL.md から除外」(`remove` を割り当て)。
34
+ - 既存 SKILL.md でまだ空のままのカタログセクションそれぞれについて、AskUserQuestion: 「`<セクション名>` セクションを追加するか?」 選択肢: 「はい、追加する」(`add` を割り当て) / 「いいえ、スキップ」(`skip` を割り当て)。
32
35
 
33
- **ラウンド2: ドメイン制約**(ラウンド1の回答に基づいて質問)
34
- - AIが必ず守るべきドメイン固有のルールはあるか?ラウンド1のドメインに応じた例を提示する(例:金融なら「全ての変更操作に監査ログ必須」、ヘルスケアなら「ログ出力は匿名化された患者IDを使用」)。
35
- - 最大3つ。AIが無視するとバグやコンプライアンス違反になるもののみ。
36
+ **チェックポイント**: 全カタログセクションが `add`、`keep`、`update`、`remove`、`skip` のいずれか 1 つの区分を持つ。
36
37
 
37
- **ラウンド3: 開発コンテキスト**
38
- - 開発フェーズ:プロトタイプ / 本番開発 / 運用中
39
- - AIが従うべきディレクトリ規約やファイル配置ルールはあるか?(なければスキップ)
38
+ ### Step 3: セクションごとのヒアリング実行
40
39
 
41
- ### Step 3: 生成と書き込み
40
+ `add` または `update` 区分のセクションそれぞれについて、`template.md` がそのセクション向けに定義するヒアリングプロトコルを実行する。カタログには各軸の AskUserQuestion 文と選択肢、採用ルール、セクションごとの出力構造が記述されている。
42
41
 
43
- 収集した情報からproject-context SKILL.mdを生成する。以下の原則に従う:
42
+ **外部リソースセクション**: `template.md` § 外部リソース のルーティングプロトコルに従う。当該セクションがドメインのマルチセレクト、ドメインとファイルの対応、軸ごとの出力スキーマを所有しており、このコマンドはそれに委譲する。
44
43
 
45
- **記述の原則:**
46
- 1. AI判断可能:測定・検証可能な基準のみ(「迅速に」→「5秒以内」)
47
- 2. 曖昧さの排除:具体的な数値・条件・例示を含める
48
- 3. 肯定形:「〜しない」より「〜する」の形で記述
49
- 4. 最小限:AIの実行精度に影響するもののみ
44
+ **曖昧ルールの差し戻し**(`add` および `update` 区分の全セクションに適用): ユーザー提供のルールが主観的な表現の場合(例: 「パフォーマンスに気をつける」)、フォローアップで尋ねる: 「AI はこのルールが pass か fail かをどのように検証できるか? 測定可能なチェックに書き換える、または 'drop' と返答すれば省略する。」 測定可能な形で届いたルールはそのまま採用し、主観的なものはユーザーが書き換えた版で置き換え、'drop' の場合はそのルールを省略する。
50
45
 
51
- **出力先**(両方更新する):
52
- 1. `.claude/skills/project-context/SKILL.md`(アクティブ、Claudeが読む方)
53
- 2. 対応する`skills-{lang}/project-context/SKILL.md`(`.claudelang`で現在の言語を確認)
46
+ **チェックポイント**: `add` および `update` 区分の各セクションで収集した内容と、`keep` 区分のセクションの原文をそのまま保持している。
54
47
 
55
- **構造:**
56
- ```markdown
57
- ---
58
- name: project-context
59
- description: AIの実行精度に必要なプロジェクト固有の前提情報を提供。プロジェクト構成確認時に使用。
60
- ---
48
+ ### Step 4: SKILL.md の組み立てと書き込み
49
+
50
+ 再構築する SKILL.md を以下の順序で連結して構築する:
51
+
52
+ 1. フロントマター — 以下の正本ブロックをそのまま書き込む:
53
+ ```
54
+ ---
55
+ name: project-context
56
+ description: AIの実行精度に必要なプロジェクト固有の前提情報を提供 — ドメイン制約、開発フェーズ、ディレクトリ規約、外部リソースのアクセス方法。セッション開始時、プロジェクト構成確認時、またはタスクがドメインルールやリポジトリ外の外部リソースを参照する時に使用。
57
+ ---
58
+ ```
59
+ 2. `# プロジェクトコンテキスト` 見出し。
60
+ 3. 各セクションをカタログ順(プロジェクト概要 → ドメイン制約 → 開発フェーズ → ディレクトリ規約 → 外部リソース)で配置する。出力に含まれるのは区分が `add`、`keep`、`update` のいずれかであり、かつ採用ルールを満たすセクションのみ。本文は採用された次のセクションへ直接進む。
61
+
62
+ 組み立てた内容を `.claude/skills/project-context/SKILL.md` に書き込む。このパスが Claude が毎セッション読み込むランタイムの正本となる。
63
+
64
+ ### Step 5: 検証
65
+
66
+ 再構築した `.claude/skills/project-context/SKILL.md` に対して以下のチェックを順に適用する:
67
+
68
+ - [ ] フロントマターが Step 4 の正本ブロックと逐語一致する。
69
+ - [ ] 本文の全セクション見出しの直後に、ヒアリングで収集した具体内容(具体値、リスト、サブブロック)が続く。
70
+ - [ ] 内容が記入されている各セクションが、`template.md` で定義された出力構造に一致する。
71
+ - [ ] 本文に含まれる各セクションは区分が `add`、`keep`、`update` のいずれかであり、かつ採用ルールを満たす。
72
+ - [ ] ドメイン制約の文が pass / fail で評価可能である(例: 「ログ出力は匿名化された ID を使用」は pass、「ログをきれいに保つ」はこのチェックに失敗する)。
73
+ - [ ] プロジェクトコンテキストの内容は制約・フェーズ・規約・外部リソースに限られる。技術スタックの詳細は `technical-spec` スキルの責務、実装原則は `coding-standards` スキルの責務である。
61
74
 
62
- # プロジェクトコンテキスト
75
+ いずれかのチェックで失敗した場合、該当行を特定してユーザーに報告し、対象セクションの再ヒアリングまたは手動編集を提案する。修正後に Step 5 を再実行する。
63
76
 
64
- ## プロジェクト概要
65
- - **このプロジェクトが何をするか**: [簡潔な説明]
66
- - **ドメイン**: [ドメイン]
77
+ ### Step 6: 結果の提示
67
78
 
68
- ## ドメイン制約
69
- 1. [AIの判断に影響する測定可能な制約]
70
- 2. [検証可能な要件]
79
+ 再構築した SKILL.md をユーザーに提示し、変更内容(追加 / 更新 / 削除 / 維持されたセクション)を列挙し、完了を確認する。
71
80
 
72
- ## 開発フェーズ
73
- - **フェーズ**: [現在のフェーズ]
81
+ ## 出力例
74
82
 
75
- ## ディレクトリ規約
76
- [ファイル配置ルール、またはなければ「特になし」]
83
+ **未設定スキルへの初回実行**(全セクションを新規収集):
84
+
85
+ ```
86
+ project-context 設定完了:
87
+ - 維持されたセクション: (なし — 初回実行のため)
88
+ - 更新されたセクション: (なし — 初回実行のため)
89
+ - 追加されたセクション: プロジェクト概要、ドメイン制約(2 ルール収集)、開発フェーズ、ディレクトリ規約(1 ルール)、外部リソース(バックエンドドメイン — データベーススキーマソース、シークレットストア)
90
+ - 削除されたセクション: (なし)
91
+ - 書き込み先ファイル: .claude/skills/project-context/SKILL.md
92
+ ```
93
+
94
+ **設定済みスキルへの軽微な更新**(1 セクションを編集、他は保持):
95
+
96
+ ```
97
+ project-context 更新完了:
98
+ - 維持されたセクション: プロジェクト概要、開発フェーズ、ディレクトリ規約
99
+ - 更新されたセクション: ドメイン制約(3 ルール収集)
100
+ - 追加されたセクション: (なし)
101
+ - 削除されたセクション: (なし)
102
+ - 書き込み先ファイル: .claude/skills/project-context/SKILL.md
77
103
  ```
78
104
 
79
- ### Step 4: 検証
105
+ **セクション削除のみの実行**(既存セクションを削除、新規追加なし):
80
106
 
81
- - [ ] 生成ファイルにプレースホルダーテキスト(「要設定」等)が残っていないこと
82
- - [ ] 全てのドメイン制約が測定・検証可能であること(曖昧な記述がない)
83
- - [ ] 技術スタック情報が含まれていないこと(technical-specスキルの責務)
84
- - [ ] 実装原則が含まれていないこと(coding-standardsスキルの責務)
85
- - [ ] 両方の出力先が更新されていること
86
- - [ ] 結果をユーザーに提示して確認を得ること
107
+ ```
108
+ project-context 更新完了:
109
+ - 維持されたセクション: プロジェクト概要、ドメイン制約、開発フェーズ
110
+ - 更新されたセクション: (なし)
111
+ - 追加されたセクション: (なし)
112
+ - 削除されたセクション: ディレクトリ規約
113
+ - 書き込み先ファイル: .claude/skills/project-context/SKILL.md
114
+ ```
@@ -8,11 +8,10 @@ description: Design Doc準拠検証とセキュリティ検証、必要に応じ
8
8
 
9
9
  - 準拠検証 → code-reviewerが実行
10
10
  - セキュリティ検証 → security-reviewerが実行
11
- - 修正実装 → task-executorが実行
12
- - 品質チェックquality-fixerが実行
13
- - 再検証 → code-reviewer / security-reviewerが実行
11
+ - **コード側修正パス**: 修正実装 → task-executor、品質チェック → quality-fixer、再検証 → code-reviewer / security-reviewer
12
+ - **設計側更新パス**: DD改訂 technical-designer(updateモード)、DDレビュー → document-reviewer、複数DDの整合性 → design-sync(複数DD存在時のみ)、再検証 → code-reviewer
14
13
 
15
- オーケストレーターはサブエージェントを呼び出し、構造化JSONを渡します。
14
+ オーケストレーターはサブエージェントを呼び出し、構造化JSONを渡す。設計側パスは、コードが正しいのにDesign Docが古くなっていた不整合(コードがDDに違反したケースではない)に適用される。
16
15
 
17
16
  Design Doc(省略時は直近のもの): $ARGUMENTS
18
17
 
@@ -57,7 +56,24 @@ Agent toolでsecurity-reviewerを呼び出す:
57
56
  - `approved` または `approved_with_notes` → 合格
58
57
  - `needs_revision` → 不合格
59
58
 
60
- **両方の結果をサブエージェントの出力フィールドのみを使用して独立に報告**(サブエージェントのレスポンスにないフィールドを追加しない):
59
+ **両方の結果をサブエージェントの出力フィールドのみを使用して独立に報告**(サブエージェントのレスポンスにないフィールドを追加しない)。
60
+
61
+ **早期終了(ルーティング対象なし)**: code-reviewer の `verdict` が `pass` かつ `acceptanceCriteria[]` のすべてのエントリが `status: "fulfilled"` かつ `identifierMismatches[]` が空かつ `qualityFindings[]` が空かつ security-reviewer の `findings[]` が空の場合、Steps 5-10 をスキップして直接 Step 11 へ進む — ルーティング対象がないため。クリーンな結果をユーザーに提示する。
62
+
63
+ それ以外の場合、ユーザー提示の前に、オーケストレーターは以下のルールで finding ごとに推奨ルートを計算する(このルール自体は内部用 — ユーザー向けプロンプトには含めない)。ルールは code-reviewer の既存構造化フィールドのみを参照する。「DDの意図」のような解釈は不安定な推論を避けるため意図的に行わない:
64
+
65
+ | Finding ソース | 既存フィールドから検出可能なパターン | 推奨ルート |
66
+ |---------------|----------------------------------|----------|
67
+ | `acceptanceCriteria[]` で `status: "partially_fulfilled"` または `"unfulfilled"` | 引用された `gap` から、コードがACを満たしていないことが示される — 追加実装が必要 | `c`(コード側修正) |
68
+ | `acceptanceCriteria[]` で `status: "partially_fulfilled"` または `"unfulfilled"` | 引用された `gap` から、ACテキスト自体が実装済み(チームが受け入れた)挙動から乖離していることが示される — 実装が要件を満たしていないのではなく、DDのAC文言が誤った意図を捉えているケース(ACを読み、引用された `location` と比較して検証する) | `d`(設計側更新 — ACテキストが古い) |
69
+ | `identifierMismatches[]` | `codeValue` が `designDocValue` のリネームとして妥当(camelCase ↔ kebab-case ↔ snake_case、略語の展開/省略、同じ概念を指す意味的なリネーム)— 引用された `location` を確認してコードが新名称を一貫して使用していることを検証 | `d`(設計側更新 — DDが古い可能性が高い) |
70
+ | `identifierMismatches[]` | それ以外の identifier mismatch(型違い、cardinality違い、完全欠落など) | `c`(コード側修正) |
71
+ | `qualityFindings[]` | 全カテゴリ(`dd_violation`、`maintainability`、`reliability`、`coverage_gap`) | `c`(コード側修正) |
72
+ | security-reviewer `findings[]` | 全カテゴリ(`confirmed_risk`、`defense_gap`、`hardening`、`policy`) | `c`(コード側修正) |
73
+
74
+ 各 finding に対しユーザーが推奨を上書き可能。`status: "fulfilled"` の AC 項目はルーティング対象外(対応不要)。
75
+
76
+ ユーザーへの提示形式(finding ごとに推奨ルートをラベル付け、ルートでグルーピング):
61
77
 
62
78
  ```
63
79
  Code Compliance: [code-reviewerのcomplianceRate]
@@ -65,30 +81,57 @@ Code Compliance: [code-reviewerのcomplianceRate]
65
81
  Identifier Match Rate: [code-reviewerのidentifierMatchRate]
66
82
  Acceptance Criteria:
67
83
  - [fulfilled] [item] (confidence: [high/medium/low])
68
- - [partially_fulfilled] [item]: [gap] — [suggestion]
69
- - [unfulfilled] [item]: [gap] — [suggestion]
84
+ - [partially_fulfilled] [item]: [gap] — [suggestion] [recommended: c | d]
85
+ - [unfulfilled] [item]: [gap] — [suggestion] [recommended: c | d]
70
86
  Identifier Mismatches:
71
- - [identifier]: DD=[designDocValue] Code=[codeValue] at [location]
87
+ - [identifier]: DD=[designDocValue] Code=[codeValue] at [location] [recommended: c | d]
72
88
  Quality Findings:
73
- - [category] [location]: [description] — [rationale]
89
+ - [category] [location]: [description] — [rationale] [recommended: c]
74
90
 
75
91
  Security Review: [security-reviewerのstatus]
76
92
  Findings by category:
77
- - [confirmed_risk] [location]: [description] — [rationale]
78
- - [defense_gap] [location]: [description] — [rationale]
79
- - [hardening] [location]: [description] — [rationale]
80
- - [policy] [location]: [description] — [rationale]
93
+ - [confirmed_risk] [location]: [description] — [rationale] [recommended: c]
94
+ - [defense_gap] [location]: [description] — [rationale] [recommended: c]
95
+ - [hardening] [location]: [description] — [rationale] [recommended: c]
96
+ - [policy] [location]: [description] — [rationale] [recommended: c]
81
97
  Notes: [security-reviewerのnotes、存在する場合]
82
98
 
83
- 修正を実行しますか? (y/n):
99
+ 不整合の解消 — finding ごとに推奨ルートを承認または上書きする:
100
+ c) コード側修正 — コードがDesign Docに違反; コードを修正して合わせる
101
+ d) 設計側更新 — コードは正しい; Design Docが古いので改訂する
102
+ s) スキップ — 現状を受け入れて変更しない
84
103
  ```
85
104
 
86
- 両方合格でユーザーが`n`を選択: Steps 5-10をスキップし、Step 11へ。
105
+ AskUserQuestionを使用する。デフォルト提示は **「すべての推奨ルートを承認」** — オーケストレーターの推奨が正しい典型ケース向けの単一確認。ユーザーが上書きしたい場合は finding ごとに c/d/s を収集する。すべてに対し `s` を選択した場合: Steps 5-10をスキップしてStep 11へ進む。
87
106
 
88
107
  ### 5. タスクテンプレートの読み込み
89
108
 
90
109
  documentation-criteriaスキルを読み込み、Step 6用のタスクファイルテンプレート(references/task-template.md)を取得。
91
110
 
111
+ ### 5d. 設計側更新
112
+
113
+ ユーザーが少なくとも1つのfindingを `d` にルーティングした場合のみ、本ステップを実行する。すべてのルートが `c` または `s` の場合は、Step 6 へ直接スキップする。
114
+
115
+ 1. Agent tool で technical-designer を update モードで呼び出す:
116
+ - `subagent_type`: "technical-designer"
117
+ - `description`: "レビューfindingsからのDesign Doc更新"
118
+ - `prompt`: "[path]のDesign Docをupdateモードで更新する。実装は以下の点で乖離しており、チームはコード側ではなく設計側で受け入れる判断をした: [`d` ルートのfindingsを $STEP_2_OUTPUT の codeLocation と designDocValue 付きでリスト化]。該当セクションに現在のコードの挙動を反映し、履歴エントリを追加する。"
119
+
120
+ 2. document-reviewer を呼び出して更新後の Design Doc を検証する:
121
+ - `subagent_type`: "document-reviewer"
122
+ - `description`: "更新後Design Docのレビュー"
123
+ - `prompt`: "[path]の更新後Design Docの整合性と完成度をレビュー。"
124
+
125
+ 3. 複数のDesign Docが存在する場合(`ls docs/design/*.md | grep -v template | wc -l > 1`)、design-syncを呼び出す:
126
+ - `subagent_type`: "design-sync"
127
+ - `description`: "DD間整合性チェック"
128
+ - `prompt`: "source_design: [更新後DDのパス]。更新後の全Design Doc間の矛盾を検出。"
129
+ - `sync_status: conflicts_found` の場合: 矛盾をユーザーに提示し、影響を受けるDDに対して technical-designer を再起動して解消する。
130
+
131
+ 4. Step 5d 完了後:
132
+ - ユーザーが選択した `c` ルートがゼロの場合(すべて `d`、すべて `s`、または `c` を含まない `d` + `s` の混在)→ Steps 6-8 をスキップし、Step 9 で再検証へ進む
133
+ - `d` と `c` の両方が選択された場合 → 更新後のDDに対して `c` ルートのfindingsを再評価し、DD改訂で満たされたものは除外する。残った `c` ルートのfindings で Step 6 へ進む
134
+
92
135
  ### 6. タスクファイル作成
93
136
 
94
137
  `docs/plans/tasks/review-fixes-YYYYMMDD.md` にタスクファイルを作成。
@@ -113,7 +156,7 @@ Agent toolでquality-fixerを呼び出す:
113
156
  Agent toolでcode-reviewerを呼び出す:
114
157
  - `subagent_type`: "code-reviewer"
115
158
  - `description`: "準拠の再検証"
116
- - `prompt`: "修正後のDesign Doc準拠を再検証。Design Doc: [path]. Implementation files: [file list]. 前回の準拠問題: $STEP_2_OUTPUT。各問題が解決されたことを確認。"
159
+ - `prompt`: "修正後のDesign Doc準拠を再検証。Design Doc: [path]. Implementation files: [file list]. 前回の準拠問題: $STEP_2_OUTPUT。各問題が解決されたこと(コード側または設計側いずれかで)を確認。"
117
160
 
118
161
  ### 10. security-reviewer再検証
119
162
 
@@ -122,7 +165,15 @@ Agent toolでsecurity-reviewerを呼び出す(セキュリティ修正が実
122
165
  - `description`: "セキュリティの再検証"
123
166
  - `prompt`: "修正後のセキュリティを再検証。前回の検出結果: $STEP_3_OUTPUT。Design Doc: [path]. Implementation files: [file list]。"
124
167
 
125
- ### 11. 最終レポート
168
+ ### 11. 最終クリーンアップとレポート
169
+
170
+ 本レシピが作成したreview-fix用タスクファイル(存在すれば)を削除する。作業内容はコミット済みで、`docs/plans/`はレシピ実行間で保持しない一時的な作業状態である:
171
+
172
+ - `docs/plans/tasks/review-fixes-YYYYMMDD.md` が存在すれば削除する
173
+
174
+ タスクファイルを削除できない場合(ファイルシステムエラー)、失敗を報告するが最終レポートをブロックしない。
175
+
176
+ その後、最終レポートを提示する:
126
177
 
127
178
  ```
128
179
  Code Compliance:
@@ -136,9 +187,11 @@ Security Review:
136
187
 
137
188
  残存課題:
138
189
  - [手動対応が必要な項目]
190
+
191
+ クリーンアップ: review-fixesタスクファイルを削除済み
139
192
  ```
140
193
 
141
- ## 自動修正可能な項目
194
+ ## 自動修正可能な項目(コード側パス)
142
195
  - 単純な未実装の受入条件
143
196
  - エラーハンドリング追加
144
197
  - 型定義の修正
@@ -148,10 +201,16 @@ Security Review:
148
201
  ## 自動修正不可能な項目
149
202
  - ビジネスロジックの根本的変更
150
203
  - アーキテクチャレベルの修正
151
- - Design Doc自体の不備
152
204
  - コミット済みシークレット(blocked → 人間の判断が必要)
153
205
 
154
- **スコープ**: Design Doc準拠検証、セキュリティレビュー、自動修正まで。
206
+ ## 設計側更新の対象
207
+ 設計側パスに適した不整合(コードが正しく、DDが古くなったケース):
208
+ - 新しい命名がチームの現行命名を反映している identifier rename
209
+ - 元の要件意図に対し、DDが捉えた挙動より実装の方が合致している挙動変更
210
+ - 新しい構造が妥当で、DDが旧構造を文書化していたままのコンポーネント分割・統合
211
+ - 実装は既に満たしているがDDに列挙されていなかった新規AC
212
+
213
+ **スコープ**: Design Doc準拠検証、セキュリティレビュー、コード側自動修正、および設計側更新ルーティング。
155
214
 
156
215
  ## サブエージェントのスコープ境界
157
216
 
@@ -4,6 +4,8 @@ Created Date: YYYY-MM-DD
4
4
  Type: feature|fix|refactor
5
5
  Estimated Impact: X files
6
6
  Related Issue/PR: #XXX (if any)
7
+ <!-- The line below is medium / large only — small scale uses task-template instead of this plan-template. Keep the value line free of trailing comments so downstream parsers can extract the bare status (pending | ready | escalated). -->
8
+ Implementation Readiness: pending
7
9
 
8
10
  ## Related Documents
9
11
  - Design Doc(s):
@@ -46,6 +48,26 @@ Maps each Design Doc technical requirement to the covering task(s). One row per
46
48
 
47
49
  **Gap Status values**: `covered` (task exists), `gap` (no task — requires justification in Notes, user confirmation required before plan approval)
48
50
 
51
+ ## UI Spec Component → Task Mapping
52
+
53
+ Include this section when a UI Spec is among the inputs. Maps each component documented in the UI Spec to the task(s) that implement it. task-decomposer reads this table to populate each task's Investigation Targets with the corresponding UI Spec section. Omit the section when no UI Spec exists.
54
+
55
+ | UI Spec Component (section heading) | States to Cover | Covered By Task(s) | Gap Status | Notes |
56
+ |---|---|---|---|---|
57
+ | [Use the UI Spec heading exactly as written, e.g., "§ Component: AlertCard"] | [default / loading / empty / error / partial — list the states the implementation must produce] | [Phase X Task Y] | covered | |
58
+
59
+ **Reference key rule**: The component identifier in column 1 is the UI Spec section heading (verbatim). ui-spec-designer enforces unique component headings so this reference resolves to exactly one section.
60
+
61
+ **Gap Status values**: `covered` (task exists), `gap` (no task — requires justification in Notes, user confirmation required before plan approval)
62
+
63
+ ## Connection Map
64
+
65
+ Include this section when the implementation crosses more than one package, service, or process boundary. Document each boundary so task-decomposer can propagate boundary context to the implementation tasks on each side. Omit the section when the implementation stays within a single package.
66
+
67
+ | Boundary | Owner (left side) | Owner (right side) | Expected Signal | Covered By Task(s) |
68
+ |---|---|---|---|---|
69
+ | [e.g., "web client → API gateway"] | [module/package on the request side] | [module/package on the response side] | [Observable evidence the boundary works — e.g., "HTTP 200 with response matching ContractA", "row inserted in tableB", "message published to topicC"] | [Phase X Task Y on each side] |
70
+
49
71
  ## Objective
50
72
  [Why this change is necessary, what problem it solves]
51
73
 
@@ -59,6 +59,8 @@ Map PRD acceptance criteria to prototype references. Skip this section if no pro
59
59
 
60
60
  ### Component: [ComponentName]
61
61
 
62
+ > Component heading uniqueness: every `Component: [ComponentName]` heading must be unique within this UI Spec. work-planner and task-decomposer reference components by exact heading text — duplicate names or paraphrased headings break the propagation to implementation tasks.
63
+
62
64
  #### State x Display Matrix
63
65
 
64
66
  | State | Default | Loading | Empty | Error | Partial |