takt 0.32.0 → 0.32.2

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 (231) hide show
  1. package/builtins/en/facets/instructions/e2e-coverage-implement.md +26 -0
  2. package/builtins/en/facets/instructions/e2e-coverage-plan.md +38 -0
  3. package/builtins/en/facets/instructions/e2e-coverage-supervise.md +21 -0
  4. package/builtins/en/facets/instructions/fix.md +4 -0
  5. package/builtins/en/facets/instructions/loop-monitor-ai-fix.md +4 -3
  6. package/builtins/en/facets/instructions/loop-monitor-reviewers-fix.md +4 -2
  7. package/builtins/en/facets/instructions/plan.md +2 -0
  8. package/builtins/en/facets/instructions/review-frontend.md +9 -0
  9. package/builtins/en/facets/instructions/security-audit-plan.md +12 -0
  10. package/builtins/en/facets/instructions/security-audit-review.md +22 -0
  11. package/builtins/en/facets/instructions/security-audit-supervise.md +20 -0
  12. package/builtins/en/facets/instructions/security-audit-team-leader.md +27 -0
  13. package/builtins/en/facets/knowledge/e2e-testing.md +89 -0
  14. package/builtins/en/facets/knowledge/frontend.md +46 -0
  15. package/builtins/en/facets/knowledge/react.md +90 -0
  16. package/builtins/en/facets/knowledge/unit-testing.md +108 -0
  17. package/builtins/en/facets/output-contracts/e2e-coverage-plan.md +33 -0
  18. package/builtins/en/facets/output-contracts/plan-frontend.md +41 -0
  19. package/builtins/en/facets/output-contracts/plan.md +8 -0
  20. package/builtins/en/facets/output-contracts/security-audit.md +31 -0
  21. package/builtins/en/facets/personas/coder.md +1 -0
  22. package/builtins/en/facets/personas/frontend-reviewer.md +4 -0
  23. package/builtins/en/facets/policies/ai-antipattern.md +43 -0
  24. package/builtins/en/facets/policies/coding.md +90 -1
  25. package/builtins/en/facets/policies/design-fidelity.md +51 -0
  26. package/builtins/en/facets/policies/design-planning.md +52 -0
  27. package/builtins/en/facets/policies/qa.md +15 -0
  28. package/builtins/en/facets/policies/testing.md +54 -1
  29. package/builtins/en/piece-categories.yaml +3 -2
  30. package/builtins/en/pieces/backend-cqrs.yaml +5 -0
  31. package/builtins/en/pieces/backend.yaml +5 -0
  32. package/builtins/en/pieces/default.yaml +2 -0
  33. package/builtins/en/pieces/dual-cqrs-mini.yaml +8 -1
  34. package/builtins/en/pieces/dual-cqrs.yaml +10 -2
  35. package/builtins/en/pieces/dual-mini.yaml +8 -1
  36. package/builtins/en/pieces/dual.yaml +14 -2
  37. package/builtins/en/pieces/{e2e-test.yaml → fill-e2e.yaml} +41 -61
  38. package/builtins/en/pieces/{unit-test.yaml → fill-unit.yaml} +12 -2
  39. package/builtins/en/pieces/frontend-mini.yaml +8 -1
  40. package/builtins/en/pieces/frontend.yaml +25 -3
  41. package/builtins/en/pieces/review-default.yaml +3 -0
  42. package/builtins/en/pieces/review-dual-cqrs.yaml +3 -1
  43. package/builtins/en/pieces/review-dual.yaml +3 -1
  44. package/builtins/en/pieces/review-fix-default.yaml +3 -0
  45. package/builtins/en/pieces/review-fix-dual-cqrs.yaml +5 -1
  46. package/builtins/en/pieces/review-fix-dual.yaml +5 -1
  47. package/builtins/en/pieces/review-fix-frontend.yaml +5 -1
  48. package/builtins/en/pieces/review-fix-takt-default.yaml +5 -2
  49. package/builtins/en/pieces/review-frontend.yaml +3 -1
  50. package/builtins/en/pieces/review-takt-default.yaml +3 -0
  51. package/builtins/en/pieces/security-audit.yaml +68 -0
  52. package/builtins/en/pieces/takt-default.yaml +7 -2
  53. package/builtins/en/pieces/terraform.yaml +0 -5
  54. package/builtins/ja/INSTRUCTION_STYLE_GUIDE.md +9 -10
  55. package/builtins/ja/KNOWLEDGE_STYLE_GUIDE.md +4 -4
  56. package/builtins/ja/OUTPUT_CONTRACT_STYLE_GUIDE.md +4 -4
  57. package/builtins/ja/PERSONA_STYLE_GUIDE.md +8 -8
  58. package/builtins/ja/POLICY_STYLE_GUIDE.md +5 -5
  59. package/builtins/ja/STYLE_GUIDE.md +8 -26
  60. package/builtins/ja/facets/instructions/e2e-coverage-implement.md +26 -0
  61. package/builtins/ja/facets/instructions/e2e-coverage-plan.md +38 -0
  62. package/builtins/ja/facets/instructions/e2e-coverage-supervise.md +21 -0
  63. package/builtins/ja/facets/instructions/fix.md +4 -0
  64. package/builtins/ja/facets/instructions/loop-monitor-ai-fix.md +4 -3
  65. package/builtins/ja/facets/instructions/loop-monitor-reviewers-fix.md +4 -2
  66. package/builtins/ja/facets/instructions/plan.md +2 -0
  67. package/builtins/ja/facets/instructions/review-frontend.md +9 -0
  68. package/builtins/ja/facets/instructions/security-audit-plan.md +12 -0
  69. package/builtins/ja/facets/instructions/security-audit-review.md +22 -0
  70. package/builtins/ja/facets/instructions/security-audit-supervise.md +20 -0
  71. package/builtins/ja/facets/instructions/security-audit-team-leader.md +27 -0
  72. package/builtins/ja/facets/knowledge/e2e-testing.md +89 -0
  73. package/builtins/ja/facets/knowledge/frontend.md +46 -0
  74. package/builtins/ja/facets/knowledge/react.md +90 -0
  75. package/builtins/ja/facets/knowledge/unit-testing.md +108 -0
  76. package/builtins/ja/facets/output-contracts/e2e-coverage-plan.md +33 -0
  77. package/builtins/ja/facets/output-contracts/plan-frontend.md +41 -0
  78. package/builtins/ja/facets/output-contracts/plan.md +8 -0
  79. package/builtins/ja/facets/output-contracts/security-audit.md +31 -0
  80. package/builtins/ja/facets/personas/coder.md +1 -0
  81. package/builtins/ja/facets/personas/frontend-reviewer.md +2 -0
  82. package/builtins/ja/facets/policies/ai-antipattern.md +43 -0
  83. package/builtins/ja/facets/policies/coding.md +90 -1
  84. package/builtins/ja/facets/policies/design-fidelity.md +51 -0
  85. package/builtins/ja/facets/policies/design-planning.md +52 -0
  86. package/builtins/ja/facets/policies/qa.md +15 -0
  87. package/builtins/ja/facets/policies/testing.md +54 -1
  88. package/builtins/ja/piece-categories.yaml +3 -2
  89. package/builtins/ja/pieces/backend-cqrs.yaml +5 -0
  90. package/builtins/ja/pieces/backend.yaml +5 -0
  91. package/builtins/ja/pieces/default.yaml +2 -0
  92. package/builtins/ja/pieces/dual-cqrs-mini.yaml +8 -1
  93. package/builtins/ja/pieces/dual-cqrs.yaml +10 -2
  94. package/builtins/ja/pieces/dual-mini.yaml +8 -1
  95. package/builtins/ja/pieces/dual.yaml +14 -2
  96. package/builtins/ja/pieces/{e2e-test.yaml → fill-e2e.yaml} +40 -60
  97. package/builtins/ja/pieces/{unit-test.yaml → fill-unit.yaml} +12 -2
  98. package/builtins/ja/pieces/frontend-mini.yaml +8 -1
  99. package/builtins/ja/pieces/frontend.yaml +25 -3
  100. package/builtins/ja/pieces/review-default.yaml +3 -0
  101. package/builtins/ja/pieces/review-dual-cqrs.yaml +3 -1
  102. package/builtins/ja/pieces/review-dual.yaml +3 -1
  103. package/builtins/ja/pieces/review-fix-default.yaml +3 -0
  104. package/builtins/ja/pieces/review-fix-dual-cqrs.yaml +5 -1
  105. package/builtins/ja/pieces/review-fix-dual.yaml +5 -1
  106. package/builtins/ja/pieces/review-fix-frontend.yaml +5 -1
  107. package/builtins/ja/pieces/review-fix-takt-default.yaml +5 -2
  108. package/builtins/ja/pieces/review-frontend.yaml +3 -1
  109. package/builtins/ja/pieces/review-takt-default.yaml +3 -0
  110. package/builtins/ja/pieces/security-audit.yaml +68 -0
  111. package/builtins/ja/pieces/takt-default.yaml +7 -2
  112. package/builtins/ja/pieces/terraform.yaml +0 -5
  113. package/dist/app/cli/routing.js +1 -1
  114. package/dist/app/cli/routing.js.map +1 -1
  115. package/dist/core/models/config-types.d.ts +4 -0
  116. package/dist/core/models/config-types.d.ts.map +1 -1
  117. package/dist/core/models/schemas.d.ts +4 -0
  118. package/dist/core/models/schemas.d.ts.map +1 -1
  119. package/dist/core/models/schemas.js +4 -0
  120. package/dist/core/models/schemas.js.map +1 -1
  121. package/dist/core/piece/engine/MovementExecutor.d.ts +1 -0
  122. package/dist/core/piece/engine/MovementExecutor.d.ts.map +1 -1
  123. package/dist/core/piece/engine/MovementExecutor.js +8 -4
  124. package/dist/core/piece/engine/MovementExecutor.js.map +1 -1
  125. package/dist/core/piece/engine/OptionsBuilder.d.ts.map +1 -1
  126. package/dist/core/piece/engine/OptionsBuilder.js +4 -1
  127. package/dist/core/piece/engine/OptionsBuilder.js.map +1 -1
  128. package/dist/features/config/deploySkillInternal.d.ts.map +1 -1
  129. package/dist/features/config/deploySkillInternal.js +2 -6
  130. package/dist/features/config/deploySkillInternal.js.map +1 -1
  131. package/dist/features/interactive/conversationLoop.d.ts.map +1 -1
  132. package/dist/features/interactive/conversationLoop.js +4 -15
  133. package/dist/features/interactive/conversationLoop.js.map +1 -1
  134. package/dist/features/pipeline/steps.d.ts.map +1 -1
  135. package/dist/features/pipeline/steps.js +5 -1
  136. package/dist/features/pipeline/steps.js.map +1 -1
  137. package/dist/features/tasks/execute/resolveTask.d.ts.map +1 -1
  138. package/dist/features/tasks/execute/resolveTask.js +11 -3
  139. package/dist/features/tasks/execute/resolveTask.js.map +1 -1
  140. package/dist/infra/config/global/globalConfigCore.d.ts.map +1 -1
  141. package/dist/infra/config/global/globalConfigCore.js +11 -8
  142. package/dist/infra/config/global/globalConfigCore.js.map +1 -1
  143. package/dist/infra/config/global/globalConfigSerializer.d.ts.map +1 -1
  144. package/dist/infra/config/global/globalConfigSerializer.js +6 -0
  145. package/dist/infra/config/global/globalConfigSerializer.js.map +1 -1
  146. package/dist/infra/config/pathExpansion.d.ts +3 -0
  147. package/dist/infra/config/pathExpansion.d.ts.map +1 -0
  148. package/dist/infra/config/pathExpansion.js +15 -0
  149. package/dist/infra/config/pathExpansion.js.map +1 -0
  150. package/dist/infra/config/project/projectConfig.d.ts.map +1 -1
  151. package/dist/infra/config/project/projectConfig.js +15 -2
  152. package/dist/infra/config/project/projectConfig.js.map +1 -1
  153. package/dist/infra/config/resolveConfigValue.d.ts.map +1 -1
  154. package/dist/infra/config/resolveConfigValue.js +4 -1
  155. package/dist/infra/config/resolveConfigValue.js.map +1 -1
  156. package/dist/infra/cursor/client.js +1 -1
  157. package/dist/infra/cursor/client.js.map +1 -1
  158. package/dist/infra/github/pr.d.ts.map +1 -1
  159. package/dist/infra/github/pr.js +36 -8
  160. package/dist/infra/github/pr.js.map +1 -1
  161. package/dist/infra/resources/index.d.ts +5 -6
  162. package/dist/infra/resources/index.d.ts.map +1 -1
  163. package/dist/infra/resources/index.js +5 -6
  164. package/dist/infra/resources/index.js.map +1 -1
  165. package/dist/infra/task/autoCommit.d.ts.map +1 -1
  166. package/dist/infra/task/autoCommit.js +5 -1
  167. package/dist/infra/task/autoCommit.js.map +1 -1
  168. package/dist/infra/task/clone.d.ts +2 -1
  169. package/dist/infra/task/clone.d.ts.map +1 -1
  170. package/dist/infra/task/clone.js +5 -2
  171. package/dist/infra/task/clone.js.map +1 -1
  172. package/dist/infra/task/git.d.ts +5 -1
  173. package/dist/infra/task/git.d.ts.map +1 -1
  174. package/dist/infra/task/git.js +51 -3
  175. package/dist/infra/task/git.js.map +1 -1
  176. package/dist/infra/task/index.d.ts +1 -1
  177. package/dist/infra/task/index.d.ts.map +1 -1
  178. package/dist/infra/task/index.js +1 -1
  179. package/dist/infra/task/index.js.map +1 -1
  180. package/dist/shared/utils/index.d.ts +1 -0
  181. package/dist/shared/utils/index.d.ts.map +1 -1
  182. package/dist/shared/utils/index.js +1 -0
  183. package/dist/shared/utils/index.js.map +1 -1
  184. package/dist/shared/utils/pathBoundary.d.ts +2 -0
  185. package/dist/shared/utils/pathBoundary.d.ts.map +1 -0
  186. package/dist/shared/utils/pathBoundary.js +10 -0
  187. package/dist/shared/utils/pathBoundary.js.map +1 -0
  188. package/package.json +2 -2
  189. package/builtins/en/facets/instructions/implement-e2e-test.md +0 -51
  190. package/builtins/en/facets/instructions/plan-e2e-test.md +0 -11
  191. package/builtins/en/templates/instructions/ai-fix.md +0 -74
  192. package/builtins/en/templates/instructions/ai-review-standalone.md +0 -47
  193. package/builtins/en/templates/instructions/arbitrate.md +0 -45
  194. package/builtins/en/templates/instructions/architect.md +0 -48
  195. package/builtins/en/templates/instructions/fix.md +0 -86
  196. package/builtins/en/templates/instructions/implement.md +0 -102
  197. package/builtins/en/templates/instructions/plan.md +0 -55
  198. package/builtins/en/templates/instructions/review.md +0 -101
  199. package/builtins/en/templates/instructions/supervise.md +0 -106
  200. package/builtins/en/templates/personas/character.md +0 -45
  201. package/builtins/en/templates/personas/expert.md +0 -68
  202. package/builtins/en/templates/personas/simple.md +0 -22
  203. package/builtins/en/templates/policies/policy.md +0 -49
  204. package/builtins/en/templates/reports/architecture-design.md +0 -31
  205. package/builtins/en/templates/reports/plan.md +0 -70
  206. package/builtins/en/templates/reports/review.md +0 -143
  207. package/builtins/en/templates/reports/security-review.md +0 -43
  208. package/builtins/en/templates/reports/summary.md +0 -52
  209. package/builtins/en/templates/reports/validation.md +0 -31
  210. package/builtins/ja/facets/instructions/implement-e2e-test.md +0 -51
  211. package/builtins/ja/facets/instructions/plan-e2e-test.md +0 -11
  212. package/builtins/ja/templates/instructions/ai-fix.md +0 -74
  213. package/builtins/ja/templates/instructions/ai-review-standalone.md +0 -47
  214. package/builtins/ja/templates/instructions/arbitrate.md +0 -45
  215. package/builtins/ja/templates/instructions/architect.md +0 -48
  216. package/builtins/ja/templates/instructions/fix.md +0 -86
  217. package/builtins/ja/templates/instructions/implement.md +0 -102
  218. package/builtins/ja/templates/instructions/plan.md +0 -55
  219. package/builtins/ja/templates/instructions/review.md +0 -101
  220. package/builtins/ja/templates/instructions/supervise.md +0 -106
  221. package/builtins/ja/templates/knowledge/knowledge.md +0 -39
  222. package/builtins/ja/templates/output-contracts/architecture-design.md +0 -31
  223. package/builtins/ja/templates/output-contracts/plan.md +0 -70
  224. package/builtins/ja/templates/output-contracts/review.md +0 -143
  225. package/builtins/ja/templates/output-contracts/security-review.md +0 -43
  226. package/builtins/ja/templates/output-contracts/summary.md +0 -52
  227. package/builtins/ja/templates/output-contracts/validation.md +0 -31
  228. package/builtins/ja/templates/personas/character.md +0 -43
  229. package/builtins/ja/templates/personas/expert.md +0 -21
  230. package/builtins/ja/templates/personas/simple.md +0 -22
  231. package/builtins/ja/templates/policies/policy.md +0 -49
@@ -204,13 +204,35 @@ return storage.upload(file, options)
204
204
  - 50行超のUI/ロジック → 分離
205
205
  - 複数の責務がある → 分離
206
206
 
207
+ ### 機能追加時の到達経路
208
+
209
+ 新しい機能や画面を追加したら、実装と同じ変更セットで利用者が到達する経路も更新する。フレームワーク固有の配線方法は各ドメイン知識に従う。
210
+
211
+ | 基準 | 判定 |
212
+ |------|------|
213
+ | 新機能の実装だけ追加し、呼び出し側・導線・到達経路の更新を忘れる | REJECT |
214
+ | 利用者がどこから到達するか未定義のまま公開機能を追加する | REJECT |
215
+ | 実装追加と同じ変更セットで導線と到達経路を更新する | OK |
216
+ | 一時導線を追加した場合、その用途と除去条件を記録する | OK |
217
+
207
218
  ### 依存の方向
208
219
 
209
220
  - 上位層 → 下位層(逆方向禁止)
210
221
  - データ取得はルート(View/Controller)で行い、子に渡す
211
222
  - 子は親のことを知らない
212
223
 
213
- ### 状態管理
224
+ ### 実行条件と依存条件の一致
225
+
226
+ 依存やトリガーは、実際にその処理を再実行したい条件と一致させる。静的ルールや実装都合のためだけに依存を増やし、意図しない再実行を起こさない。
227
+
228
+ | 基準 | 判定 |
229
+ |------|------|
230
+ | lint や実装都合だけで依存やトリガーを増やし、再実行ループを生む | REJECT |
231
+ | 無関係な state 変化や callback 再生成で初期処理が再実行される | REJECT |
232
+ | 再実行条件が URL・フィルタ・明示的更新操作などの仕様に対応している | OK |
233
+ | 初期化と再取得のトリガーを分けて設計している | OK |
234
+
235
+ ## 状態管理
214
236
 
215
237
  - 状態は使う場所に閉じ込める
216
238
  - 子は状態を直接変更しない(イベントを親に通知)
@@ -305,6 +327,73 @@ function formatDate(date: Date): string { ... }
305
327
  function formatPercentage(value: number): string { ... }
306
328
  ```
307
329
 
330
+ ## 同一実装の別名関数(DRY 違反)
331
+
332
+ AIは同じ処理を異なる関数名で複数定義しがちである。
333
+
334
+ | パターン | 例 | 判定 |
335
+ |---------|-----|------|
336
+ | 同一実装の別名関数 | `copyFacets()` と `placeFacetFiles()` が同じ処理 | REJECT |
337
+ | 引数シグネチャが同一で本体も同一 | 2つの関数が同じパラメータを受け取り同じ処理を行う | REJECT |
338
+
339
+ ```typescript
340
+ // REJECT - 同じ実装が別名で存在
341
+ function copyFiles(src: string, dest: string): void {
342
+ for (const f of readdirSync(src)) {
343
+ copyFileSync(join(src, f), join(dest, f));
344
+ }
345
+ }
346
+ function placeFiles(src: string, dest: string): void {
347
+ for (const f of readdirSync(src)) {
348
+ copyFileSync(join(src, f), join(dest, f));
349
+ }
350
+ }
351
+
352
+ // OK - 1つの関数にまとめる
353
+ function copyFiles(src: string, dest: string): void {
354
+ for (const f of readdirSync(src)) {
355
+ copyFileSync(join(src, f), join(dest, f));
356
+ }
357
+ }
358
+ ```
359
+
360
+ 検証アプローチ:
361
+ 1. 新規追加された関数の本体が、既存関数と同一または酷似していないか確認
362
+ 2. 同じファイル内の関数同士、および同じモジュール内の関数同士を比較
363
+ 3. 重複があれば1つにまとめ、呼び出し元を統一
364
+
365
+ ## Stateful Regex の危険なパターン
366
+
367
+ `/g` フラグ付き正規表現はステートフル(`lastIndex` を保持する)。モジュールスコープに定義して `test()` と `replace()` を混用すると予期しない結果になる。
368
+
369
+ | パターン | 例 | 判定 |
370
+ |---------|-----|------|
371
+ | モジュールスコープの `/g` 正規表現を `test()` で使用 | `const RE = /x/g; if (RE.test(s)) ...` | REJECT |
372
+ | `/g` 正規表現を `test()` と `replace()` で使い回し | `RE.test(s)` の後に `s.replace(RE, ...)` | REJECT |
373
+
374
+ ```typescript
375
+ // REJECT - モジュールスコープの /g 正規表現を test() で使用
376
+ const PATTERN = /\{\{facet:(\w+)\}\}/g;
377
+ function hasFacetRef(text: string): boolean {
378
+ return PATTERN.test(text); // lastIndex が進み、次回の呼び出しで結果が変わる
379
+ }
380
+
381
+ // OK - test() には /g を付けない、または関数内で new RegExp
382
+ const PATTERN_CHECK = /\{\{facet:(\w+)\}\}/; // /g なし
383
+ const PATTERN_REPLACE = /\{\{facet:(\w+)\}\}/g; // replace 用は /g
384
+ function hasFacetRef(text: string): boolean {
385
+ return PATTERN_CHECK.test(text);
386
+ }
387
+ function replaceFacetRefs(text: string): string {
388
+ return text.replace(PATTERN_REPLACE, ...);
389
+ }
390
+ ```
391
+
392
+ 検証アプローチ:
393
+ 1. モジュールスコープの正規表現に `/g` フラグがあるか確認
394
+ 2. `/g` 付き正規表現が `test()` で使われていないか確認
395
+ 3. 同一の正規表現が `test()` と `replace()` の両方で使われていないか確認
396
+
308
397
  ## 禁止事項
309
398
 
310
399
  - **フォールバックは原則禁止** - `?? 'unknown'`、`|| 'default'`、`try-catch` で握りつぶすフォールバックを書かない。エラーは上位に伝播させる。どうしても必要な場合はコメントで理由を明記する
@@ -0,0 +1,51 @@
1
+ # デザイン忠実再現ポリシー
2
+
3
+ デザイン参照が指定されている場合、UIの見た目・構造・文言をデザインに一致させる。
4
+
5
+ ## 原則
6
+
7
+ | 原則 | 基準 |
8
+ |------|------|
9
+ | デザインが正 | デザイン参照が指定されている場合、それがUIの唯一のソース・オブ・トゥルース |
10
+ | 要素の一致 | デザインに存在する要素はすべて実装する。省略しない |
11
+ | 独自追加の禁止 | デザインにない要素を独自判断で追加しない |
12
+ | 文言の一致 | ラベル・ボタン文言・プレースホルダーはデザインの文言をそのまま使う |
13
+ | レイアウトの一致 | 要素の配置順序・並び方向・階層構造をデザインに合わせる |
14
+ | 色・間隔の一致 | 色値・余白・角丸・フォントサイズはデザインの指定に従う |
15
+
16
+ ## 適用条件
17
+
18
+ このポリシーはタスク指示書またはその参照資料にデザイン参照(UIサンプル、モックアップ、デザインファイル等)が含まれている場合に適用する。デザイン参照がない場合、このポリシーは適用されない。
19
+
20
+ ## 判定基準
21
+
22
+ | 基準 | 判定 |
23
+ |------|------|
24
+ | デザインにある要素が実装から欠落 | REJECT |
25
+ | デザインにない要素が独自に追加されている | REJECT |
26
+ | 文言がデザインと異なる | REJECT |
27
+ | 要素の配置順序がデザインと異なる | REJECT |
28
+ | 色値がデザインと異なる | REJECT |
29
+ | 余白・間隔がデザインと明らかに異なる | REJECT |
30
+ | デザインにないエッジケースUI(ローディング、エラー、空状態)の追加 | OK |
31
+ | デザインが曖昧な箇所の解釈(判断根拠を記録すること) | OK |
32
+
33
+ ## 実装時の手順
34
+
35
+ 1. デザイン参照の要素を列挙する(画面単位・セクション単位)
36
+ 2. 各要素のレイアウト・文言・色・間隔を確認する
37
+ 3. 実装がデザインと一致していることを要素単位で照合する
38
+ 4. デザインが曖昧な箇所は判断根拠を決定ログに記録する
39
+
40
+ ## レビュー時の手順
41
+
42
+ 1. デザイン参照と実装を要素単位で比較する
43
+ 2. 差分がある場合、各差分について「デザインの指定」と「実装の状態」を具体的に記述する
44
+ 3. 差分が意図的かどうかを決定ログで確認する
45
+ 4. 意図的でない差分はブロッキング問題として報告する
46
+
47
+ ## 許容されるケース
48
+
49
+ - デザインに含まれないエッジケースのUI(ローディング状態、エラー表示、データが空の場合の表示)
50
+ - プラットフォーム固有の制約による代替実装(判断根拠を記録すること)
51
+ - デザインの解像度が不十分な箇所の合理的な解釈(判断根拠を記録すること)
@@ -0,0 +1,52 @@
1
+ # デザイン計画ポリシー
2
+
3
+ デザイン参照が指定されている計画では、要素の棚卸しとスコープ判断を曖昧にしない。
4
+
5
+ ## 原則
6
+
7
+ | 原則 | 基準 |
8
+ |------|------|
9
+ | 参照優先 | デザイン参照がある場合、計画は参照資料を一次情報として扱う |
10
+ | 要素単位の棚卸し | 画面単位ではなく要素単位で差分を確認する |
11
+ | 変更要否の明示 | 各要素について変更要/不要を根拠付きで示す |
12
+ | スコープ外の説明責任 | デザインにある要素を外す場合は除外理由を明示する |
13
+ | 実装境界の明確化 | 実装対象と非対象の境界を計画段階で固定する |
14
+
15
+ ## 適用条件
16
+
17
+ このポリシーはタスク指示書または参照資料にデザイン参照が含まれている計画に適用する。デザイン参照がない計画には適用しない。
18
+
19
+ ## 判定基準
20
+
21
+ | 基準 | 判定 |
22
+ |------|------|
23
+ | デザイン参照の主要要素を列挙せず計画している | REJECT |
24
+ | 要素ごとの変更要/不要がない | REJECT |
25
+ | 「今回は一覧のみ」など、要素名なしにスコープを狭めている | REJECT |
26
+ | スコープ外要素の除外理由がない | REJECT |
27
+ | デザイン参照の解釈が曖昧だが、判断根拠を残している | OK |
28
+
29
+ ## 計画時の判断
30
+
31
+ 計画では、デザイン参照に含まれる要素を落とさず棚卸しする。
32
+
33
+ 棚卸し時の観点:
34
+ - 主要セクションだけでなく、詳細導線、モーダル、操作要素、状態表示まで確認する
35
+ - 各要素ごとに、現行実装との差分と変更要否を記録する
36
+ - 既存実装を維持する場合も、対象ファイルと根拠を示す
37
+
38
+ ## スコープ判断
39
+
40
+ デザイン参照の要素をスコープ外にする場合は、少なくとも以下を計画に残す。
41
+
42
+ - 除外する要素名
43
+ - 除外理由
44
+ - 今回代替実装を採らない理由
45
+
46
+ デザイン参照に含まれる要素を、根拠なく「別タスク」とみなして切り離さない。
47
+
48
+ ## 禁止事項
49
+
50
+ - **画面単位の雑な要約だけで計画すること** - 要素の抜け漏れが発生する
51
+ - **根拠なしに参照資料の意図を狭めること** - 実装とレビューの前提がずれる
52
+ - **スコープ外の説明を省略すること** - 後続ムーブメントで判断不能になる
@@ -26,3 +26,18 @@
26
26
  | 理由なしの @ts-ignore, @ts-expect-error | 警告 |
27
27
  | 理由なしの eslint-disable | 警告 |
28
28
  | 非推奨APIの使用 | 警告 |
29
+
30
+ ## 書き込み後の副作用チェック
31
+
32
+ ファイルやディレクトリへの書き込み後にスキャン・読み取りを行う処理がある場合、書き込んだファイルが意図せずスキャン対象に含まれていないか確認する。
33
+
34
+ | パターン | 例 | 判定 |
35
+ |---------|-----|------|
36
+ | 出力先ディレクトリのスキャン | facets をコピーした後に同ディレクトリを走査して構文を検出 | REJECT |
37
+ | 一時ファイルの読み戻し | 一時ディレクトリに書き込み後、同ディレクトリの全ファイルを処理 | REJECT |
38
+ | 自己参照的な処理 | 生成したファイルが次の処理パイプラインの入力になる | 警告 |
39
+
40
+ 検証アプローチ:
41
+ 1. ファイル書き込み後にディレクトリスキャン(readdir, glob 等)を行う箇所を確認
42
+ 2. スキャン対象に書き込み先が含まれていないか確認
43
+ 3. 含まれている場合、除外フィルタが存在するか確認
@@ -28,7 +28,9 @@
28
28
  |--------|------|
29
29
  | 高 | ビジネスロジック、状態遷移 |
30
30
  | 中 | エッジケース、エラーハンドリング |
31
- | 低 | 単純なCRUD、UIの見た目 |
31
+ | 低 | 単純なCRUD |
32
+
33
+ **注意:** デザイン参照が指定されている場合、UIの見た目の検証は中優先度に格上げする。デザイン忠実再現ポリシーを参照。
32
34
 
33
35
  ## テスト構造: Given-When-Then
34
36
 
@@ -64,6 +66,37 @@ test('ユーザーが存在しない場合、NotFoundエラーを返す', async
64
66
  - Arrange-Act-Assert パターン(Given-When-Then と同義)
65
67
  - マジックナンバー・マジックストリングを避ける
66
68
 
69
+ ## 再取得ループのリグレッション
70
+
71
+ 画面の初期取得がある場合、無関係な再レンダ、loading 切替、Context callback の参照変化で API が再実行されないことをテストで担保する。
72
+
73
+ | 基準 | 判定 |
74
+ |------|------|
75
+ | 初期取得バグ修正に対し、重複 API 呼び出しの回帰テストがない | REJECT |
76
+ | 1回呼ばれたことだけを確認し、再レンダ後の安定性を見ていない | 警告 |
77
+ | rerender や state 更新後も呼び出し回数が増えないことを検証している | OK |
78
+
79
+ ## 到達経路のリグレッション
80
+
81
+ 利用者向け機能や画面を追加・変更した場合、利用者がその機能へ到達できることをテストまたは同等の検証で担保する。
82
+
83
+ | 基準 | 判定 |
84
+ |------|------|
85
+ | 新規の画面・機能を追加したのに、到達経路や起動条件の検証がない | REJECT |
86
+ | 画面ファイル単体の描画だけを見て、入口からの到達確認をしていない | 警告 |
87
+ | route、メニュー、ボタン、リンク、外部呼び出しなど実際の入口から対象機能へ到達できることを確認している | OK |
88
+
89
+ ## UIライブラリ統合のリグレッション
90
+
91
+ DataGrid、日付ピッカー、仮想リスト、チャートなど、外部 UI ライブラリの主要コンポーネントを導入・変更した場合は、実コンポーネントをマウントするテストでクラッシュしないことを担保する。
92
+
93
+ | 基準 | 判定 |
94
+ |------|------|
95
+ | 外部 UI ライブラリの主要コンポーネントを追加・変更したのに、実マウントの回帰テストがない | REJECT |
96
+ | ライブラリの props 整合性を、浅いモックや存在確認だけで済ませている | 警告 |
97
+ | route から対象画面を描画し、主要 UI が例外なくマウントされることを確認している | OK |
98
+ | 主要 UI コンポーネント単体でも、代表的な props で実 render している | OK |
99
+
67
100
  ## テスト戦略
68
101
 
69
102
  - ロジックにはユニットテスト、境界にはインテグレーションテストを優先
@@ -81,6 +114,26 @@ test('ユーザーが存在しない場合、NotFoundエラーを返す', async
81
114
  | 新しいオプションが呼び出しチェーンを通じて末端まで伝搬する | チェーン全体の結合テスト必須 |
82
115
  | 各モジュールのユニットテストが全てパスしている | ユニットテストのみで十分(上記に該当しない場合) |
83
116
 
117
+ ## ユニットテスト基準
118
+
119
+ | 基準 | 判定 |
120
+ |------|------|
121
+ | テスト対象の内部実装をモックする(振る舞いではなく実装を検証) | REJECT |
122
+ | テスト間でフィクスチャを共有して変更する | REJECT。テスト独立性の喪失 |
123
+ | モックの戻り値が実際の型と乖離している | 警告。型安全なモックを使う |
124
+ | 正常系のみテストして境界値がない | 警告 |
125
+
126
+ ## E2Eテスト基準
127
+
128
+ | 基準 | 判定 |
129
+ |------|------|
130
+ | 外部API呼び出しをモックせず本番APIを叩く | REJECT。テストの再現性が失われる |
131
+ | テスト対象のコア処理をモックする | REJECT。E2Eの意味がなくなる |
132
+ | 固定 sleep でタイミングを合わせる | REJECT。状態ベースの待機を使う |
133
+ | テスト間で共有状態を持つ | 警告。テストの独立性が損なわれる |
134
+ | 正常フローだけテストして異常フローがない | 警告 |
135
+ | ユニットテストでカバーできるロジック検証をE2Eで書く | 警告 |
136
+
84
137
  ## テスト環境の分離
85
138
 
86
139
  テストインフラの設定はテストシナリオのパラメータに連動させる。ハードコードされた前提は別シナリオで壊れる。
@@ -47,10 +47,11 @@ piece_categories:
47
47
  - review-fix-backend-cqrs
48
48
  - review-takt-default
49
49
  - review-fix-takt-default
50
+ - security-audit
50
51
  🧪 テスト:
51
52
  pieces:
52
- - unit-test
53
- - e2e-test
53
+ - fill-unit
54
+ - fill-e2e
54
55
  🎵 TAKT開発:
55
56
  pieces:
56
57
  - takt-default
@@ -70,6 +70,8 @@ movements:
70
70
  - backend
71
71
  - cqrs-es
72
72
  - architecture
73
+ - unit-testing
74
+ - e2e-testing
73
75
  provider_options:
74
76
  claude:
75
77
  allowed_tools:
@@ -244,6 +246,9 @@ movements:
244
246
  policy:
245
247
  - review
246
248
  - testing
249
+ knowledge:
250
+ - unit-testing
251
+ - e2e-testing
247
252
  provider_options:
248
253
  claude:
249
254
  allowed_tools:
@@ -68,6 +68,8 @@ movements:
68
68
  knowledge:
69
69
  - backend
70
70
  - architecture
71
+ - unit-testing
72
+ - e2e-testing
71
73
  provider_options:
72
74
  claude:
73
75
  allowed_tools:
@@ -240,6 +242,9 @@ movements:
240
242
  policy:
241
243
  - review
242
244
  - testing
245
+ knowledge:
246
+ - unit-testing
247
+ - e2e-testing
243
248
  provider_options:
244
249
  claude:
245
250
  allowed_tools:
@@ -83,6 +83,8 @@ movements:
83
83
  - testing
84
84
  knowledge:
85
85
  - architecture
86
+ - unit-testing
87
+ - e2e-testing
86
88
  provider_options:
87
89
  claude:
88
90
  allowed_tools:
@@ -25,6 +25,8 @@ movements:
25
25
  - name: plan
26
26
  edit: false
27
27
  persona: planner
28
+ policy:
29
+ - design-planning
28
30
  knowledge:
29
31
  - frontend
30
32
  - backend
@@ -51,13 +53,14 @@ movements:
51
53
  output_contracts:
52
54
  report:
53
55
  - name: plan.md
54
- format: plan
56
+ format: plan-frontend
55
57
  - name: implement
56
58
  edit: true
57
59
  persona: coder
58
60
  policy:
59
61
  - coding
60
62
  - testing
63
+ - design-fidelity
61
64
  knowledge:
62
65
  - frontend
63
66
  - backend
@@ -163,6 +166,7 @@ movements:
163
166
  policy:
164
167
  - coding
165
168
  - testing
169
+ - design-fidelity
166
170
  knowledge:
167
171
  - frontend
168
172
  - backend
@@ -191,6 +195,7 @@ movements:
191
195
  policy:
192
196
  - coding
193
197
  - testing
198
+ - design-fidelity
194
199
  knowledge:
195
200
  - frontend
196
201
  - backend
@@ -223,6 +228,7 @@ movements:
223
228
  policy:
224
229
  - coding
225
230
  - testing
231
+ - design-fidelity
226
232
  knowledge:
227
233
  - frontend
228
234
  - backend
@@ -256,6 +262,7 @@ movements:
256
262
  policy:
257
263
  - coding
258
264
  - testing
265
+ - design-fidelity
259
266
  knowledge:
260
267
  - frontend
261
268
  - backend
@@ -37,6 +37,8 @@ movements:
37
37
  - name: plan
38
38
  edit: false
39
39
  persona: planner
40
+ policy:
41
+ - design-planning
40
42
  knowledge:
41
43
  - frontend
42
44
  - backend
@@ -60,13 +62,14 @@ movements:
60
62
  output_contracts:
61
63
  report:
62
64
  - name: plan.md
63
- format: plan
65
+ format: plan-frontend
64
66
  - name: implement
65
67
  edit: true
66
68
  persona: coder
67
69
  policy:
68
70
  - coding
69
71
  - testing
72
+ - design-fidelity
70
73
  session: refresh
71
74
  knowledge:
72
75
  - frontend
@@ -133,6 +136,7 @@ movements:
133
136
  policy:
134
137
  - coding
135
138
  - testing
139
+ - design-fidelity
136
140
  session: refresh
137
141
  knowledge:
138
142
  - frontend
@@ -204,7 +208,9 @@ movements:
204
208
  - name: frontend-review
205
209
  edit: false
206
210
  persona: frontend-reviewer
207
- policy: review
211
+ policy:
212
+ - review
213
+ - design-fidelity
208
214
  knowledge: frontend
209
215
  provider_options:
210
216
  claude:
@@ -276,6 +282,7 @@ movements:
276
282
  policy:
277
283
  - coding
278
284
  - testing
285
+ - design-fidelity
279
286
  knowledge:
280
287
  - frontend
281
288
  - backend
@@ -333,6 +340,7 @@ movements:
333
340
  policy:
334
341
  - coding
335
342
  - testing
343
+ - design-fidelity
336
344
  knowledge:
337
345
  - frontend
338
346
  - backend
@@ -25,6 +25,8 @@ movements:
25
25
  - name: plan
26
26
  edit: false
27
27
  persona: planner
28
+ policy:
29
+ - design-planning
28
30
  knowledge:
29
31
  - frontend
30
32
  - backend
@@ -50,13 +52,14 @@ movements:
50
52
  output_contracts:
51
53
  report:
52
54
  - name: plan.md
53
- format: plan
55
+ format: plan-frontend
54
56
  - name: implement
55
57
  edit: true
56
58
  persona: coder
57
59
  policy:
58
60
  - coding
59
61
  - testing
62
+ - design-fidelity
60
63
  knowledge:
61
64
  - frontend
62
65
  - backend
@@ -160,6 +163,7 @@ movements:
160
163
  policy:
161
164
  - coding
162
165
  - testing
166
+ - design-fidelity
163
167
  knowledge:
164
168
  - frontend
165
169
  - backend
@@ -187,6 +191,7 @@ movements:
187
191
  policy:
188
192
  - coding
189
193
  - testing
194
+ - design-fidelity
190
195
  knowledge:
191
196
  - frontend
192
197
  - backend
@@ -218,6 +223,7 @@ movements:
218
223
  policy:
219
224
  - coding
220
225
  - testing
226
+ - design-fidelity
221
227
  knowledge:
222
228
  - frontend
223
229
  - backend
@@ -250,6 +256,7 @@ movements:
250
256
  policy:
251
257
  - coding
252
258
  - testing
259
+ - design-fidelity
253
260
  knowledge:
254
261
  - frontend
255
262
  - backend
@@ -37,6 +37,8 @@ movements:
37
37
  - name: plan
38
38
  edit: false
39
39
  persona: planner
40
+ policy:
41
+ - design-planning
40
42
  knowledge:
41
43
  - frontend
42
44
  - backend
@@ -63,7 +65,7 @@ movements:
63
65
  output_contracts:
64
66
  report:
65
67
  - name: plan.md
66
- format: plan
68
+ format: plan-frontend
67
69
  - name: write_tests
68
70
  edit: true
69
71
  persona: coder
@@ -74,6 +76,8 @@ movements:
74
76
  - frontend
75
77
  - backend
76
78
  - architecture
79
+ - unit-testing
80
+ - e2e-testing
77
81
  provider_options:
78
82
  claude:
79
83
  allowed_tools:
@@ -110,6 +114,7 @@ movements:
110
114
  policy:
111
115
  - coding
112
116
  - testing
117
+ - design-fidelity
113
118
  session: refresh
114
119
  knowledge:
115
120
  - frontend
@@ -191,6 +196,7 @@ movements:
191
196
  policy:
192
197
  - coding
193
198
  - testing
199
+ - design-fidelity
194
200
  session: refresh
195
201
  knowledge:
196
202
  - frontend
@@ -263,7 +269,9 @@ movements:
263
269
  - name: frontend-review
264
270
  edit: false
265
271
  persona: frontend-reviewer
266
- policy: review
272
+ policy:
273
+ - review
274
+ - design-fidelity
267
275
  knowledge: frontend
268
276
  provider_options:
269
277
  claude:
@@ -288,6 +296,9 @@ movements:
288
296
  policy:
289
297
  - review
290
298
  - testing
299
+ knowledge:
300
+ - unit-testing
301
+ - e2e-testing
291
302
  provider_options:
292
303
  claude:
293
304
  allowed_tools:
@@ -389,6 +400,7 @@ movements:
389
400
  policy:
390
401
  - coding
391
402
  - testing
403
+ - design-fidelity
392
404
  knowledge:
393
405
  - frontend
394
406
  - backend