takt 0.47.0 → 0.48.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 (226) hide show
  1. package/README.md +11 -0
  2. package/builtins/en/facets/instructions/fix-maintenance.md +1 -1
  3. package/builtins/en/facets/instructions/implement-maintenance.md +2 -2
  4. package/builtins/en/facets/instructions/plan-maintenance.md +3 -3
  5. package/builtins/en/facets/instructions/review-coding.md +6 -4
  6. package/builtins/en/facets/instructions/review-test.md +6 -1
  7. package/builtins/en/facets/knowledge/backend.md +2 -0
  8. package/builtins/en/facets/knowledge/cqrs-es.md +12 -0
  9. package/builtins/en/facets/knowledge/e2e-testing.md +13 -0
  10. package/builtins/en/facets/knowledge/existing-system.md +2 -2
  11. package/builtins/en/facets/knowledge/takt.md +11 -0
  12. package/builtins/en/facets/policies/existing-system-respect.md +17 -16
  13. package/builtins/en/facets/policies/testing.md +28 -0
  14. package/builtins/en/workflow-categories.yaml +1 -0
  15. package/builtins/en/workflows/backend-maintenance.yaml +540 -0
  16. package/builtins/en/workflows/draft.yaml +3 -1
  17. package/builtins/en/workflows/frontend-maintenance.yaml +1 -1
  18. package/builtins/en/workflows/frontend.yaml +1 -1
  19. package/builtins/ja/facets/instructions/fix-maintenance.md +1 -1
  20. package/builtins/ja/facets/instructions/implement-maintenance.md +2 -2
  21. package/builtins/ja/facets/instructions/plan-maintenance.md +3 -3
  22. package/builtins/ja/facets/instructions/review-coding.md +6 -4
  23. package/builtins/ja/facets/instructions/review-test.md +6 -1
  24. package/builtins/ja/facets/knowledge/backend.md +2 -0
  25. package/builtins/ja/facets/knowledge/cqrs-es.md +12 -0
  26. package/builtins/ja/facets/knowledge/e2e-testing.md +13 -0
  27. package/builtins/ja/facets/knowledge/existing-system.md +2 -2
  28. package/builtins/ja/facets/knowledge/takt.md +11 -0
  29. package/builtins/ja/facets/policies/existing-system-respect.md +17 -16
  30. package/builtins/ja/facets/policies/testing.md +28 -0
  31. package/builtins/ja/workflow-categories.yaml +1 -0
  32. package/builtins/ja/workflows/backend-maintenance.yaml +540 -0
  33. package/builtins/ja/workflows/draft.yaml +3 -1
  34. package/builtins/ja/workflows/frontend-maintenance.yaml +1 -1
  35. package/builtins/ja/workflows/frontend.yaml +1 -1
  36. package/dist/agents/decompose-task-usecase.d.ts +3 -1
  37. package/dist/agents/decompose-task-usecase.d.ts.map +1 -1
  38. package/dist/agents/decompose-task-usecase.js +2 -2
  39. package/dist/agents/decompose-task-usecase.js.map +1 -1
  40. package/dist/agents/runner.js +4 -4
  41. package/dist/agents/runner.js.map +1 -1
  42. package/dist/agents/structured-caller/capability-aware-structured-caller.d.ts +2 -2
  43. package/dist/agents/structured-caller/capability-aware-structured-caller.d.ts.map +1 -1
  44. package/dist/agents/structured-caller/capability-aware-structured-caller.js.map +1 -1
  45. package/dist/agents/structured-caller/contracts.d.ts +2 -2
  46. package/dist/agents/structured-caller/contracts.d.ts.map +1 -1
  47. package/dist/agents/structured-caller/default-structured-caller.d.ts +2 -2
  48. package/dist/agents/structured-caller/default-structured-caller.d.ts.map +1 -1
  49. package/dist/agents/structured-caller/default-structured-caller.js.map +1 -1
  50. package/dist/agents/structured-caller/prompt-based-structured-caller.d.ts +2 -2
  51. package/dist/agents/structured-caller/prompt-based-structured-caller.d.ts.map +1 -1
  52. package/dist/agents/structured-caller/prompt-based-structured-caller.js +2 -2
  53. package/dist/agents/structured-caller/prompt-based-structured-caller.js.map +1 -1
  54. package/dist/agents/team-leader-structured-output.d.ts +2 -2
  55. package/dist/agents/team-leader-structured-output.d.ts.map +1 -1
  56. package/dist/agents/team-leader-structured-output.js +42 -9
  57. package/dist/agents/team-leader-structured-output.js.map +1 -1
  58. package/dist/commands/repertoire/add.d.ts.map +1 -1
  59. package/dist/commands/repertoire/add.js +2 -3
  60. package/dist/commands/repertoire/add.js.map +1 -1
  61. package/dist/core/models/config-schemas.d.ts +26 -0
  62. package/dist/core/models/config-schemas.d.ts.map +1 -1
  63. package/dist/core/models/part.d.ts +7 -0
  64. package/dist/core/models/part.d.ts.map +1 -1
  65. package/dist/core/models/schema-base.d.ts +10 -0
  66. package/dist/core/models/schema-base.d.ts.map +1 -1
  67. package/dist/core/models/schema-base.js +2 -0
  68. package/dist/core/models/schema-base.js.map +1 -1
  69. package/dist/core/models/workflow-provider-options.d.ts +2 -0
  70. package/dist/core/models/workflow-provider-options.d.ts.map +1 -1
  71. package/dist/core/models/workflow-provider-options.js.map +1 -1
  72. package/dist/core/models/workflow-schemas.d.ts +66 -0
  73. package/dist/core/models/workflow-schemas.d.ts.map +1 -1
  74. package/dist/core/models/workflow-schemas.js +2 -0
  75. package/dist/core/models/workflow-schemas.js.map +1 -1
  76. package/dist/core/workflow/engine/TeamLeaderRunner.d.ts.map +1 -1
  77. package/dist/core/workflow/engine/TeamLeaderRunner.js +6 -6
  78. package/dist/core/workflow/engine/TeamLeaderRunner.js.map +1 -1
  79. package/dist/core/workflow/engine/engine-provider-options.d.ts +1 -0
  80. package/dist/core/workflow/engine/engine-provider-options.d.ts.map +1 -1
  81. package/dist/core/workflow/engine/engine-provider-options.js +27 -0
  82. package/dist/core/workflow/engine/engine-provider-options.js.map +1 -1
  83. package/dist/core/workflow/engine/team-leader-common.d.ts +1 -0
  84. package/dist/core/workflow/engine/team-leader-common.d.ts.map +1 -1
  85. package/dist/core/workflow/engine/team-leader-common.js +13 -1
  86. package/dist/core/workflow/engine/team-leader-common.js.map +1 -1
  87. package/dist/core/workflow/observability/workflowSpans.d.ts.map +1 -1
  88. package/dist/core/workflow/observability/workflowSpans.js +2 -1
  89. package/dist/core/workflow/observability/workflowSpans.js.map +1 -1
  90. package/dist/core/workflow/promotion/promotion-runtime.d.ts.map +1 -1
  91. package/dist/core/workflow/promotion/promotion-runtime.js +3 -2
  92. package/dist/core/workflow/promotion/promotion-runtime.js.map +1 -1
  93. package/dist/core/workflow/providerOptionsRedaction.d.ts +4 -0
  94. package/dist/core/workflow/providerOptionsRedaction.d.ts.map +1 -0
  95. package/dist/core/workflow/providerOptionsRedaction.js +18 -0
  96. package/dist/core/workflow/providerOptionsRedaction.js.map +1 -0
  97. package/dist/features/interactive/clipboardImage.js +2 -2
  98. package/dist/features/interactive/clipboardImage.js.map +1 -1
  99. package/dist/features/tasks/execute/sessionLoggerRecordFactory.d.ts.map +1 -1
  100. package/dist/features/tasks/execute/sessionLoggerRecordFactory.js +2 -1
  101. package/dist/features/tasks/execute/sessionLoggerRecordFactory.js.map +1 -1
  102. package/dist/features/tasks/execute/workflowExecutionBootstrap.d.ts.map +1 -1
  103. package/dist/features/tasks/execute/workflowExecutionBootstrap.js +4 -0
  104. package/dist/features/tasks/execute/workflowExecutionBootstrap.js.map +1 -1
  105. package/dist/features/tasks/execute/workflowExecutionEvents.d.ts.map +1 -1
  106. package/dist/features/tasks/execute/workflowExecutionEvents.js +9 -0
  107. package/dist/features/tasks/execute/workflowExecutionEvents.js.map +1 -1
  108. package/dist/infra/claude/client.d.ts.map +1 -1
  109. package/dist/infra/claude/client.js +1 -0
  110. package/dist/infra/claude/client.js.map +1 -1
  111. package/dist/infra/claude/mcp-config.d.ts.map +1 -1
  112. package/dist/infra/claude/mcp-config.js +2 -2
  113. package/dist/infra/claude/mcp-config.js.map +1 -1
  114. package/dist/infra/claude/options-builder.d.ts.map +1 -1
  115. package/dist/infra/claude/options-builder.js +3 -0
  116. package/dist/infra/claude/options-builder.js.map +1 -1
  117. package/dist/infra/claude/types.d.ts +4 -0
  118. package/dist/infra/claude/types.d.ts.map +1 -1
  119. package/dist/infra/claude-headless/headless-spawn.d.ts.map +1 -1
  120. package/dist/infra/claude-headless/headless-spawn.js +3 -0
  121. package/dist/infra/claude-headless/headless-spawn.js.map +1 -1
  122. package/dist/infra/claude-headless/types.d.ts +2 -0
  123. package/dist/infra/claude-headless/types.d.ts.map +1 -1
  124. package/dist/infra/codex/client.d.ts.map +1 -1
  125. package/dist/infra/codex/client.js +1 -0
  126. package/dist/infra/codex/client.js.map +1 -1
  127. package/dist/infra/codex/types.d.ts +2 -0
  128. package/dist/infra/codex/types.d.ts.map +1 -1
  129. package/dist/infra/config/configNormalizers.d.ts +3 -2
  130. package/dist/infra/config/configNormalizers.d.ts.map +1 -1
  131. package/dist/infra/config/configNormalizers.js +19 -9
  132. package/dist/infra/config/configNormalizers.js.map +1 -1
  133. package/dist/infra/config/global/globalConfigCore.d.ts.map +1 -1
  134. package/dist/infra/config/global/globalConfigCore.js +2 -1
  135. package/dist/infra/config/global/globalConfigCore.js.map +1 -1
  136. package/dist/infra/config/loaders/workflowPreview.d.ts.map +1 -1
  137. package/dist/infra/config/loaders/workflowPreview.js +21 -9
  138. package/dist/infra/config/loaders/workflowPreview.js.map +1 -1
  139. package/dist/infra/config/loaders/workflowProviderOptionsResolver.js +8 -2
  140. package/dist/infra/config/loaders/workflowProviderOptionsResolver.js.map +1 -1
  141. package/dist/infra/config/loaders/workflowStepFeaturesNormalizer.d.ts.map +1 -1
  142. package/dist/infra/config/loaders/workflowStepFeaturesNormalizer.js +32 -1
  143. package/dist/infra/config/loaders/workflowStepFeaturesNormalizer.js.map +1 -1
  144. package/dist/infra/config/project/projectConfig.d.ts.map +1 -1
  145. package/dist/infra/config/project/projectConfig.js +12 -4
  146. package/dist/infra/config/project/projectConfig.js.map +1 -1
  147. package/dist/infra/config/providerOptions.d.ts +12 -5
  148. package/dist/infra/config/providerOptions.d.ts.map +1 -1
  149. package/dist/infra/config/providerOptions.js +112 -10
  150. package/dist/infra/config/providerOptions.js.map +1 -1
  151. package/dist/infra/config/providerOptionsContract.d.ts +4 -3
  152. package/dist/infra/config/providerOptionsContract.d.ts.map +1 -1
  153. package/dist/infra/config/providerOptionsContract.js +11 -0
  154. package/dist/infra/config/providerOptionsContract.js.map +1 -1
  155. package/dist/infra/config/providerReference.d.ts +3 -2
  156. package/dist/infra/config/providerReference.d.ts.map +1 -1
  157. package/dist/infra/config/providerReference.js +6 -6
  158. package/dist/infra/config/providerReference.js.map +1 -1
  159. package/dist/infra/config/resolveConfigValue.d.ts.map +1 -1
  160. package/dist/infra/config/resolveConfigValue.js +95 -25
  161. package/dist/infra/config/resolveConfigValue.js.map +1 -1
  162. package/dist/infra/config/traced/tracedConfigLoader.d.ts +3 -2
  163. package/dist/infra/config/traced/tracedConfigLoader.d.ts.map +1 -1
  164. package/dist/infra/config/traced/tracedConfigLoader.js +28 -4
  165. package/dist/infra/config/traced/tracedConfigLoader.js.map +1 -1
  166. package/dist/infra/config/traced/tracedConfigRuntimeBridge.d.ts.map +1 -1
  167. package/dist/infra/config/traced/tracedConfigRuntimeBridge.js +2 -2
  168. package/dist/infra/config/traced/tracedConfigRuntimeBridge.js.map +1 -1
  169. package/dist/infra/copilot/client.d.ts.map +1 -1
  170. package/dist/infra/copilot/client.js +3 -3
  171. package/dist/infra/copilot/client.js.map +1 -1
  172. package/dist/infra/providers/claude-headless.d.ts +1 -1
  173. package/dist/infra/providers/claude-headless.d.ts.map +1 -1
  174. package/dist/infra/providers/claude-headless.js +2 -1
  175. package/dist/infra/providers/claude-headless.js.map +1 -1
  176. package/dist/infra/providers/claude-terminal.d.ts +1 -1
  177. package/dist/infra/providers/claude-terminal.d.ts.map +1 -1
  178. package/dist/infra/providers/claude-terminal.js +1 -1
  179. package/dist/infra/providers/claude-terminal.js.map +1 -1
  180. package/dist/infra/providers/claude.d.ts +1 -1
  181. package/dist/infra/providers/claude.d.ts.map +1 -1
  182. package/dist/infra/providers/claude.js +2 -1
  183. package/dist/infra/providers/claude.js.map +1 -1
  184. package/dist/infra/providers/codex.d.ts +1 -1
  185. package/dist/infra/providers/codex.d.ts.map +1 -1
  186. package/dist/infra/providers/codex.js +2 -1
  187. package/dist/infra/providers/codex.js.map +1 -1
  188. package/dist/infra/providers/copilot.d.ts +1 -1
  189. package/dist/infra/providers/copilot.d.ts.map +1 -1
  190. package/dist/infra/providers/copilot.js +1 -1
  191. package/dist/infra/providers/copilot.js.map +1 -1
  192. package/dist/infra/providers/cursor.d.ts +1 -1
  193. package/dist/infra/providers/cursor.d.ts.map +1 -1
  194. package/dist/infra/providers/cursor.js +1 -1
  195. package/dist/infra/providers/cursor.js.map +1 -1
  196. package/dist/infra/providers/kiro.d.ts +1 -1
  197. package/dist/infra/providers/kiro.d.ts.map +1 -1
  198. package/dist/infra/providers/kiro.js +1 -1
  199. package/dist/infra/providers/kiro.js.map +1 -1
  200. package/dist/infra/providers/mock.d.ts +1 -1
  201. package/dist/infra/providers/mock.d.ts.map +1 -1
  202. package/dist/infra/providers/mock.js +1 -1
  203. package/dist/infra/providers/mock.js.map +1 -1
  204. package/dist/infra/providers/opencode.d.ts +1 -1
  205. package/dist/infra/providers/opencode.d.ts.map +1 -1
  206. package/dist/infra/providers/opencode.js +4 -1
  207. package/dist/infra/providers/opencode.js.map +1 -1
  208. package/dist/infra/providers/types.d.ts +1 -1
  209. package/dist/infra/providers/types.d.ts.map +1 -1
  210. package/dist/infra/task/projectLocalTaktSync.d.ts +1 -0
  211. package/dist/infra/task/projectLocalTaktSync.d.ts.map +1 -1
  212. package/dist/infra/task/projectLocalTaktSync.js +40 -0
  213. package/dist/infra/task/projectLocalTaktSync.js.map +1 -1
  214. package/dist/shared/team-leader-inspect-tools.d.ts +5 -0
  215. package/dist/shared/team-leader-inspect-tools.d.ts.map +1 -0
  216. package/dist/shared/team-leader-inspect-tools.js +8 -0
  217. package/dist/shared/team-leader-inspect-tools.js.map +1 -0
  218. package/dist/shared/utils/index.d.ts +1 -0
  219. package/dist/shared/utils/index.d.ts.map +1 -1
  220. package/dist/shared/utils/index.js +1 -0
  221. package/dist/shared/utils/index.js.map +1 -1
  222. package/dist/shared/utils/tmpdir.d.ts +2 -0
  223. package/dist/shared/utils/tmpdir.d.ts.map +1 -0
  224. package/dist/shared/utils/tmpdir.js +8 -0
  225. package/dist/shared/utils/tmpdir.js.map +1 -0
  226. package/package.json +10 -5
@@ -28,6 +28,18 @@ E2Eテストはユーザーから見える振る舞いを観測する。設定
28
28
  | 設定や内部状態だけを確認してユーザー-visible な結果を見ていない | REJECT |
29
29
  | 実外部環境に依存する確認しかなく、主要境界の deterministic test がない | 警告またはREJECT |
30
30
 
31
+ ## 否定契約の観測
32
+
33
+ E2E で権限、実行時に選択される能力・バックエンド・オプション、設定、拒否、隔離を確認する場合、出力全体への文字列否定は証拠として弱い。
34
+ 対象の行、イベント、レコード、フィールド、呼び出し引数などを取り出し、禁止値ごとに検査することで、順序、大小文字、空白、区切り、部分漏れによる見逃しを防ぐ。
35
+
36
+ | 基準 | 判定 |
37
+ |------|------|
38
+ | 「特定の一文が出ていない」だけで拒否・非継承・隔離を検証した扱いにする | REJECT |
39
+ | 許可された値の表示だけを確認し、禁止値が末端処理へ渡っていないことを見ていない | REJECT |
40
+ | 観測単位を抽出して、禁止値・拒否値・非継承値が含まれないことを値単位で確認する | OK |
41
+ | 同じシナリオで許可側と拒否側、継承側と非継承側を比較できる | OK |
42
+
31
43
  ## UXルートの洗い出し
32
44
 
33
45
  E2Eテストの網羅性はユーザー操作ルートの洗い出しに依存する。ドキュメントではなくコードから起点を特定する。
@@ -77,6 +89,7 @@ E2Eテストは非決定的な要因で失敗しやすい。
77
89
  | プロセスリーク | タイムアウトと強制終了を設定する |
78
90
  | 環境依存 | テスト実行に必要な前提条件を明示的にセットアップする |
79
91
  | 実行順序依存 | 各テストが独立して実行できるよう、状態を初期化する |
92
+ | 既存規約から外れた timeout/cleanup | 同種 E2E の既存規約に合わせる |
80
93
 
81
94
  ```typescript
82
95
  // NG - 固定 sleep でタイミングを合わせる
@@ -40,9 +40,9 @@
40
40
 
41
41
  | 状況 | 判断 |
42
42
  |------|------|
43
- | コンポーネント分割した方がきれいだが、今回の修正に不要 | 変更しない |
43
+ | コンポーネント分割した方がきれいだが、要求と因果関係がない | 変更しない |
44
44
  | Props 型名や配置を一般作法へ寄せたいだけ | 変更しない |
45
- | 既存構造のままだと要求を満たせない | 最小範囲で変更する |
45
+ | 既存構造のままだと要求を満たせない | 因果関係のある範囲で変更する |
46
46
  | 既存構造が不具合原因そのもの | 理由と影響範囲を明記して変更する |
47
47
 
48
48
  ## コメントとテストの意味
@@ -77,6 +77,17 @@ ProviderAgent.call(prompt, options) → AgentResponse
77
77
  4. config.yaml(プロバイダー一致時)
78
78
  5. プロバイダーデフォルト
79
79
 
80
+ ## 補助入口の契約
81
+
82
+ TAKT では workflow 実行経路だけでなく、preview、doctor、workflow summary、validation、report も利用者に見える契約入口である。設定値、provider、model、tool、権限、出力契約を表示・検証する補助入口は、runtime と同じ正規化済み入力、resolver、override 順を使う。
83
+
84
+ | 基準 | 判定 |
85
+ |------|------|
86
+ | runtime と preview が別々の入力で provider、model、tool、権限を解決している | REJECT |
87
+ | preview に値が表示されるだけで、runtime と同じ override 条件を検証していない | REJECT |
88
+ | doctor や validation が正常とする設定が runtime では別条件により失敗する | 警告 |
89
+ | runtime と補助入口が同じ正規化済み入力または同じ resolver を共有している | OK |
90
+
80
91
  ## ファセット組み立て
81
92
 
82
93
  faceted-prompting モジュールは TAKT 本体に依存しない独立モジュール。
@@ -1,19 +1,19 @@
1
1
  # 既存システム尊重ポリシー
2
2
 
3
- リリース済みまたは運用中の既存システムでは、要求達成に必要な最小差分だけを行い、既存契約を不用意に変えない。
3
+ リリース済みまたは運用中の既存システムでは、要求と因果関係のある変更を行い、因果関係のない既存契約を変えない。
4
4
 
5
5
  ## 原則
6
6
 
7
7
  | 原則 | 基準 |
8
8
  |------|------|
9
9
  | 既存契約優先 | 既存利用者、テスト、運用が依存する契約を保持する |
10
- | 最小差分 | 要求達成に必要な変更だけを残す |
10
+ | 因果差分 | 要求と因果関係のある変更を行い、因果関係のない変更を排除する |
11
11
  | 近接性より必要性 | 変更箇所に近いことを変更理由にしない |
12
- | 既存構造尊重 | ファイル配置、型名、公開API、責務境界を明示要求なしに変えない |
12
+ | 既存構造尊重 | ファイル配置、型名、公開API、責務境界を要求と因果関係なく変えない |
13
13
  | コメント保全 | 意図、制約、算出根拠を示すコメントを削除しない |
14
14
  | テストの契約性 | 既存テストが検証する挙動を軽微扱いしない |
15
- | 改善の分離 | 作法改善や整理は要求と直接関係する場合に限定する |
16
- | 保守制約優先 | 一般的な品質改善より、既存挙動と既存構造の保持を優先する |
15
+ | 改善の因果判定 | 作法改善・リファクタは要求と因果関係がある場合に実施する。因果関係のない改善は混ぜない |
16
+ | 無関係保護優先 | 要求と因果関係のない既存挙動・構造の保持を優先する |
17
17
 
18
18
  ## 変更境界
19
19
 
@@ -22,21 +22,22 @@
22
22
  | 要求を満たすために不可欠な変更 | OK |
23
23
  | 不可欠な変更を接続するための呼び出し元更新 | OK |
24
24
  | 不可欠な変更の副作用を止めるための局所修正 | OK |
25
+ | 要求と因果関係のある構造変更・リファクタ | OK |
25
26
  | 変更ファイル内という理由だけの整理 | REJECT |
26
- | 明示要求のないファイル移動、型名変更、公開API変更 | REJECT |
27
- | フレームワーク作法の改善を混ぜる | REJECT |
28
- | 別PRで扱える改善を同時に入れる | REJECT |
27
+ | 要求と因果関係のないファイル移動、型名変更、公開API変更 | REJECT |
28
+ | フレームワーク作法の改善を混ぜる(要求と因果関係がない場合) | REJECT |
29
+ | 要求と因果関係のない改善を同時に入れる | REJECT |
29
30
 
30
31
  ## 他ポリシーとの優先順位
31
32
 
32
- 既存システムの保守では、coding、frontend、design-fidelity、testing などの一般的な品質基準を、要求達成に必要な範囲へ制限して適用する。
33
+ 既存システムの保守では、coding、frontend、design-fidelity、testing などの一般的な品質基準を、要求と因果関係のある範囲で適用する。
33
34
 
34
35
  | 衝突 | 判定 |
35
36
  |------|------|
36
- | 一般品質基準は改善を推奨するが、要求には不要 | 変更しない |
37
- | 既存構造は理想的でないが、今回の要求を満たせる | 既存構造を維持する |
37
+ | 一般品質基準は改善を推奨するが、要求と因果関係がない | 変更しない |
38
+ | 既存構造は理想的でないが、要求と因果関係がない | 既存構造を維持する |
38
39
  | 品質基準を満たすには既存契約変更が必要 | ユーザーの明示要求または計画上の根拠が必要 |
39
- | 不具合修正に必要な最小の構造変更 | 理由と影響範囲を明記して実施する |
40
+ | 要求と因果関係のある構造変更 | 理由と影響範囲を明記して実施する |
40
41
 
41
42
  ## 観測可能契約
42
43
 
@@ -44,11 +45,11 @@ UI、アクセシビリティ、テスト、ログ、API、型、ファイル配
44
45
 
45
46
  | 契約 | 変更条件 |
46
47
  |------|----------|
47
- | UI文言、アクセシビリティ名、role/state | 要求に直接含まれる場合のみ変更する |
48
- | hook の戻り値、Props 型名、公開関数名 | 呼び出し元更新が要求達成に不可欠な場合のみ変更する |
48
+ | UI文言、アクセシビリティ名、role/state | 要求と因果関係がある場合のみ変更する |
49
+ | hook の戻り値、Props 型名、公開関数名 | 要求と因果関係のある呼び出し元更新に不可欠な場合のみ変更する |
49
50
  | テスト期待値 | 仕様変更が要求されている場合のみ変更する |
50
51
  | コメント | 誤りを直す場合、またはコードで完全に不要になった場合のみ変更する |
51
- | ファイル配置 | 既存構造では要求を満たせない場合のみ変更する |
52
+ | ファイル配置 | 要求と因果関係がある場合のみ変更する |
52
53
 
53
54
  ## テスト変更
54
55
 
@@ -70,4 +71,4 @@ UI、アクセシビリティ、テスト、ログ、API、型、ファイル配
70
71
  |------|------|
71
72
  | 必須変更 | これがないと要求を満たせない |
72
73
  | 関連変更 | 必須変更を接続、検証、整合させるために必要 |
73
- | 不要変更 | 読みやすさ、作法、ついで整理、将来拡張だけが理由 |
74
+ | 不要変更 | 要求との因果関係がなく、読みやすさ、作法、ついで整理、将来拡張だけが理由 |
@@ -12,6 +12,7 @@
12
12
  | 独立性 | 他のテストや実行順序に依存しない |
13
13
  | 再現性 | 時間やランダム性に依存せず、毎回同じ結果 |
14
14
  | 非実行資産を固定しない | 実行時の振る舞いを定義しない本文や章構成を CI の失敗条件にしない |
15
+ | 否定契約を観測単位で検証 | 禁止・拒否・非継承・非対応は、完全一致文字列の不在だけで合格にしない |
15
16
 
16
17
  ## カバレッジ基準
17
18
 
@@ -113,6 +114,33 @@ test('ユーザーが存在しない場合、NotFoundエラーを返す', async
113
114
  | 変更対象関数の return / throw / catch / early return を列挙せず、代表的な失敗経路を取りこぼしている | REJECT |
114
115
  | 同じ責務の既存分岐にも、戻り値・副作用・イベント・エラー分類の契約を検証するテストがある | OK |
115
116
 
117
+ ## 契約テストの十分性
118
+
119
+ 新しい設定値、実行時に選択される能力・バックエンド・オプション、権限、出力契約を追加・変更した場合、テストは値の存在ではなく、契約を変える分岐条件を踏んでいることを確認する。
120
+
121
+ | 基準 | 判定 |
122
+ |------|------|
123
+ | 新しいオプションの正常系だけを確認している | 警告 |
124
+ | 未設定、設定、不正値、継承、非継承、override、非対応対象のうち、要件に関係する分岐を検証していない | REJECT |
125
+ | 利用者向けの表示・検証用入口で、主実行経路と同じ契約になることを確認していない | REJECT |
126
+ | 値の表示だけを確認し、実行時に使われる解決入力と一致するか検証していない | REJECT |
127
+ | 漏れ検証を完全一致文字列だけで行い、順序、大小文字、空白、部分漏れの違いを見逃す | REJECT |
128
+ | 空文字列、空白だけの文字列、空配列、大小文字違いなど、設定境界で正規化対象になり得る値を検証していない | 警告。契約の主要分岐なら REJECT |
129
+ | 入口から末端呼び出しまで、正常系、拒否系、非継承系を確認している | OK |
130
+
131
+ ## 否定・非継承・拒否のテスト
132
+
133
+ 禁止、拒否、非継承、非対応、隔離を検証するテストは、出力全体に特定の文字列が存在しないことだけを根拠にしない。
134
+ 観測対象の行、レコード、フィールド、呼び出し引数などを抽出し、禁止値が順序、大小文字、空白、区切り、部分一致の形でも漏れていないことを検証する。
135
+
136
+ | 基準 | 判定 |
137
+ |------|------|
138
+ | 完全一致文字列の不在だけで、禁止値や非継承値が使われていないと判断している | REJECT |
139
+ | 許可値の存在確認だけで、拒否値・禁止値・非継承値が末端に渡らないことを検証していない | REJECT |
140
+ | 出力行、イベント、レコード、フィールド、呼び出し引数などの観測単位を抽出し、禁止値ごとに検証している | OK |
141
+ | 許可側と拒否側、継承側と非継承側を対にして検証している | OK |
142
+ | 新しい E2E の timeout、cleanup、強制終了の扱いが既存の同種テスト規約と一致していない | 警告。プロセスリークやフレークの原因になる場合は REJECT |
143
+
116
144
  ## パーサー・設定境界のテスト
117
145
 
118
146
  外部ファイル、設定、YAML/JSON、CLI入力などを読む境界では、型定義どおりの入力だけを検証しても十分ではない。
@@ -24,6 +24,7 @@ workflow_categories:
24
24
  workflows:
25
25
  - backend
26
26
  - backend-mini
27
+ - backend-maintenance
27
28
  - backend-cqrs
28
29
  - backend-cqrs-mini
29
30
  🔧 デュアル: