takt 0.33.2 → 0.34.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 (538) hide show
  1. package/README.md +29 -22
  2. package/builtins/en/config.yaml +8 -8
  3. package/builtins/en/facets/instructions/dual-team-leader-implement.md +8 -2
  4. package/builtins/en/facets/instructions/plan.md +3 -0
  5. package/builtins/en/facets/instructions/review-requirements.md +12 -7
  6. package/builtins/en/facets/instructions/supervise.md +4 -2
  7. package/builtins/en/facets/instructions/team-leader-implement.md +3 -2
  8. package/builtins/en/facets/knowledge/architecture.md +93 -0
  9. package/builtins/en/facets/knowledge/cqrs-es.md +64 -5
  10. package/builtins/en/facets/output-contracts/plan.md +8 -0
  11. package/builtins/en/facets/output-contracts/requirements-review.md +10 -8
  12. package/builtins/en/facets/output-contracts/supervisor-validation.md +8 -0
  13. package/builtins/en/facets/personas/planner.md +7 -0
  14. package/builtins/en/facets/personas/requirements-reviewer.md +7 -0
  15. package/builtins/en/facets/personas/supervisor.md +10 -0
  16. package/builtins/en/facets/policies/coding.md +87 -0
  17. package/builtins/en/{piece-categories.yaml → workflow-categories.yaml} +10 -10
  18. package/builtins/en/{pieces → workflows}/audit-architecture-backend.yaml +3 -3
  19. package/builtins/en/{pieces → workflows}/audit-architecture-dual.yaml +3 -3
  20. package/builtins/en/{pieces → workflows}/audit-architecture-frontend.yaml +3 -3
  21. package/builtins/en/{pieces → workflows}/audit-architecture.yaml +3 -3
  22. package/builtins/en/{pieces → workflows}/audit-e2e.yaml +4 -4
  23. package/builtins/en/{pieces → workflows}/audit-security.yaml +3 -3
  24. package/builtins/en/{pieces → workflows}/audit-unit.yaml +4 -4
  25. package/builtins/en/{pieces → workflows}/backend-cqrs-mini.yaml +5 -5
  26. package/builtins/en/{pieces → workflows}/backend-cqrs.yaml +5 -5
  27. package/builtins/en/{pieces → workflows}/backend-mini.yaml +5 -5
  28. package/builtins/en/{pieces → workflows}/backend.yaml +5 -5
  29. package/builtins/en/{pieces → workflows}/compound-eye.yaml +4 -4
  30. package/builtins/en/{pieces → workflows}/deep-research.yaml +5 -5
  31. package/builtins/en/{pieces → workflows}/default.yaml +5 -5
  32. package/builtins/en/{pieces → workflows}/dual-cqrs-mini.yaml +5 -5
  33. package/builtins/en/{pieces → workflows}/dual-cqrs.yaml +5 -5
  34. package/builtins/en/{pieces → workflows}/dual-mini.yaml +5 -5
  35. package/builtins/en/{pieces → workflows}/dual.yaml +23 -7
  36. package/builtins/en/{pieces → workflows}/frontend-mini.yaml +5 -5
  37. package/builtins/en/{pieces → workflows}/frontend.yaml +5 -5
  38. package/builtins/en/{pieces → workflows}/magi.yaml +4 -4
  39. package/builtins/en/{pieces → workflows}/research.yaml +5 -5
  40. package/builtins/en/{pieces → workflows}/review-backend-cqrs.yaml +4 -4
  41. package/builtins/en/{pieces → workflows}/review-backend.yaml +4 -4
  42. package/builtins/en/{pieces → workflows}/review-default.yaml +5 -5
  43. package/builtins/en/{pieces → workflows}/review-dual-cqrs.yaml +4 -4
  44. package/builtins/en/{pieces → workflows}/review-dual.yaml +4 -4
  45. package/builtins/en/{pieces → workflows}/review-fix-backend-cqrs.yaml +4 -4
  46. package/builtins/en/{pieces → workflows}/review-fix-backend.yaml +4 -4
  47. package/builtins/en/{pieces → workflows}/review-fix-default.yaml +4 -4
  48. package/builtins/en/{pieces → workflows}/review-fix-dual-cqrs.yaml +4 -4
  49. package/builtins/en/{pieces → workflows}/review-fix-dual.yaml +4 -4
  50. package/builtins/en/{pieces → workflows}/review-fix-frontend.yaml +4 -4
  51. package/builtins/en/{pieces → workflows}/review-fix-takt-default.yaml +4 -4
  52. package/builtins/en/{pieces → workflows}/review-frontend.yaml +4 -4
  53. package/builtins/en/{pieces → workflows}/review-takt-default.yaml +5 -5
  54. package/builtins/en/{pieces → workflows}/takt-default.yaml +5 -5
  55. package/builtins/en/{pieces → workflows}/terraform.yaml +5 -5
  56. package/builtins/ja/config.yaml +8 -8
  57. package/builtins/ja/facets/instructions/dual-team-leader-implement.md +8 -2
  58. package/builtins/ja/facets/instructions/plan.md +3 -0
  59. package/builtins/ja/facets/instructions/review-requirements.md +12 -7
  60. package/builtins/ja/facets/instructions/supervise.md +4 -2
  61. package/builtins/ja/facets/instructions/team-leader-implement.md +3 -2
  62. package/builtins/ja/facets/knowledge/architecture.md +93 -0
  63. package/builtins/ja/facets/knowledge/cqrs-es.md +66 -6
  64. package/builtins/ja/facets/output-contracts/plan.md +8 -0
  65. package/builtins/ja/facets/output-contracts/requirements-review.md +10 -8
  66. package/builtins/ja/facets/output-contracts/supervisor-validation.md +8 -0
  67. package/builtins/ja/facets/personas/planner.md +8 -0
  68. package/builtins/ja/facets/personas/requirements-reviewer.md +7 -0
  69. package/builtins/ja/facets/personas/supervisor.md +6 -0
  70. package/builtins/ja/facets/policies/coding.md +87 -0
  71. package/builtins/ja/{piece-categories.yaml → workflow-categories.yaml} +10 -10
  72. package/builtins/ja/{pieces → workflows}/audit-architecture-backend.yaml +3 -3
  73. package/builtins/ja/{pieces → workflows}/audit-architecture-dual.yaml +3 -3
  74. package/builtins/ja/{pieces → workflows}/audit-architecture-frontend.yaml +3 -3
  75. package/builtins/ja/{pieces → workflows}/audit-architecture.yaml +3 -3
  76. package/builtins/ja/{pieces → workflows}/audit-e2e.yaml +4 -4
  77. package/builtins/ja/{pieces → workflows}/audit-security.yaml +3 -3
  78. package/builtins/ja/{pieces → workflows}/audit-unit.yaml +4 -4
  79. package/builtins/ja/{pieces → workflows}/backend-cqrs-mini.yaml +5 -5
  80. package/builtins/ja/{pieces → workflows}/backend-cqrs.yaml +4 -4
  81. package/builtins/ja/{pieces → workflows}/backend-mini.yaml +5 -5
  82. package/builtins/ja/{pieces → workflows}/backend.yaml +4 -4
  83. package/builtins/ja/{pieces → workflows}/compound-eye.yaml +4 -4
  84. package/builtins/ja/{pieces → workflows}/deep-research.yaml +5 -5
  85. package/builtins/ja/{pieces → workflows}/default.yaml +5 -5
  86. package/builtins/ja/{pieces → workflows}/dual-cqrs-mini.yaml +5 -5
  87. package/builtins/ja/{pieces → workflows}/dual-cqrs.yaml +5 -5
  88. package/builtins/ja/{pieces → workflows}/dual-mini.yaml +5 -5
  89. package/builtins/ja/{pieces → workflows}/dual.yaml +23 -7
  90. package/builtins/ja/{pieces → workflows}/frontend-mini.yaml +5 -5
  91. package/builtins/ja/{pieces → workflows}/frontend.yaml +4 -4
  92. package/builtins/ja/{pieces → workflows}/magi.yaml +4 -4
  93. package/builtins/ja/{pieces → workflows}/research.yaml +5 -5
  94. package/builtins/ja/{pieces → workflows}/review-backend-cqrs.yaml +4 -4
  95. package/builtins/ja/{pieces → workflows}/review-backend.yaml +4 -4
  96. package/builtins/ja/{pieces → workflows}/review-default.yaml +5 -5
  97. package/builtins/ja/{pieces → workflows}/review-dual-cqrs.yaml +4 -4
  98. package/builtins/ja/{pieces → workflows}/review-dual.yaml +4 -4
  99. package/builtins/ja/{pieces → workflows}/review-fix-backend-cqrs.yaml +4 -4
  100. package/builtins/ja/{pieces → workflows}/review-fix-backend.yaml +4 -4
  101. package/builtins/ja/{pieces → workflows}/review-fix-default.yaml +4 -4
  102. package/builtins/ja/{pieces → workflows}/review-fix-dual-cqrs.yaml +4 -4
  103. package/builtins/ja/{pieces → workflows}/review-fix-dual.yaml +4 -4
  104. package/builtins/ja/{pieces → workflows}/review-fix-frontend.yaml +4 -4
  105. package/builtins/ja/{pieces → workflows}/review-fix-takt-default.yaml +4 -4
  106. package/builtins/ja/{pieces → workflows}/review-frontend.yaml +4 -4
  107. package/builtins/ja/{pieces → workflows}/review-takt-default.yaml +5 -5
  108. package/builtins/ja/{pieces → workflows}/takt-default.yaml +5 -5
  109. package/builtins/ja/{pieces → workflows}/terraform.yaml +5 -5
  110. package/builtins/schemas/decomposition.json +1 -5
  111. package/builtins/schemas/more-parts.json +1 -5
  112. package/builtins/skill/SKILL.md +54 -52
  113. package/builtins/skill/references/engine.md +45 -45
  114. package/builtins/skill/references/yaml-schema.md +46 -38
  115. package/builtins/skill-codex/SKILL.md +48 -46
  116. package/builtins/skill-codex/references/engine.md +32 -32
  117. package/builtins/skill-codex/references/yaml-schema.md +46 -38
  118. package/dist/agents/decompose-task-usecase.d.ts +3 -1
  119. package/dist/agents/decompose-task-usecase.d.ts.map +1 -1
  120. package/dist/agents/decompose-task-usecase.js +2 -112
  121. package/dist/agents/decompose-task-usecase.js.map +1 -1
  122. package/dist/agents/judge-status-usecase.d.ts +11 -0
  123. package/dist/agents/judge-status-usecase.d.ts.map +1 -1
  124. package/dist/agents/judge-status-usecase.js +37 -31
  125. package/dist/agents/judge-status-usecase.js.map +1 -1
  126. package/dist/agents/judge-utils.d.ts +6 -0
  127. package/dist/agents/judge-utils.d.ts.map +1 -1
  128. package/dist/agents/judge-utils.js +12 -0
  129. package/dist/agents/judge-utils.js.map +1 -1
  130. package/dist/agents/runner.d.ts.map +1 -1
  131. package/dist/agents/runner.js +10 -2
  132. package/dist/agents/runner.js.map +1 -1
  133. package/dist/agents/structured-caller/contracts.d.ts +18 -0
  134. package/dist/agents/structured-caller/contracts.d.ts.map +1 -0
  135. package/dist/agents/structured-caller/contracts.js +2 -0
  136. package/dist/agents/structured-caller/contracts.js.map +1 -0
  137. package/dist/agents/structured-caller/default-structured-caller.d.ts +19 -0
  138. package/dist/agents/structured-caller/default-structured-caller.d.ts.map +1 -0
  139. package/dist/agents/structured-caller/default-structured-caller.js +25 -0
  140. package/dist/agents/structured-caller/default-structured-caller.js.map +1 -0
  141. package/dist/agents/structured-caller/prompt-based-structured-caller.d.ts +19 -0
  142. package/dist/agents/structured-caller/prompt-based-structured-caller.d.ts.map +1 -0
  143. package/dist/agents/structured-caller/prompt-based-structured-caller.js +137 -0
  144. package/dist/agents/structured-caller/prompt-based-structured-caller.js.map +1 -0
  145. package/dist/agents/structured-caller/shared.d.ts +5 -0
  146. package/dist/agents/structured-caller/shared.d.ts.map +1 -0
  147. package/dist/agents/structured-caller/shared.js +36 -0
  148. package/dist/agents/structured-caller/shared.js.map +1 -0
  149. package/dist/agents/structured-caller.d.ts +4 -0
  150. package/dist/agents/structured-caller.d.ts.map +1 -0
  151. package/dist/agents/structured-caller.js +3 -0
  152. package/dist/agents/structured-caller.js.map +1 -0
  153. package/dist/agents/team-leader-structured-output.d.ts +19 -0
  154. package/dist/agents/team-leader-structured-output.d.ts.map +1 -0
  155. package/dist/agents/team-leader-structured-output.js +152 -0
  156. package/dist/agents/team-leader-structured-output.js.map +1 -0
  157. package/dist/agents/types.d.ts +2 -2
  158. package/dist/agents/types.d.ts.map +1 -1
  159. package/dist/app/cli/commands.js +31 -14
  160. package/dist/app/cli/commands.js.map +1 -1
  161. package/dist/app/cli/helpers.d.ts +1 -0
  162. package/dist/app/cli/helpers.d.ts.map +1 -1
  163. package/dist/app/cli/helpers.js +8 -0
  164. package/dist/app/cli/helpers.js.map +1 -1
  165. package/dist/app/cli/program.d.ts.map +1 -1
  166. package/dist/app/cli/program.js +2 -1
  167. package/dist/app/cli/program.js.map +1 -1
  168. package/dist/app/cli/routing.d.ts.map +1 -1
  169. package/dist/app/cli/routing.js +12 -4
  170. package/dist/app/cli/routing.js.map +1 -1
  171. package/dist/core/models/config-schemas.d.ts +674 -0
  172. package/dist/core/models/config-schemas.d.ts.map +1 -0
  173. package/dist/core/models/config-schemas.js +143 -0
  174. package/dist/core/models/config-schemas.js.map +1 -0
  175. package/dist/core/models/config-types.d.ts +7 -2
  176. package/dist/core/models/config-types.d.ts.map +1 -1
  177. package/dist/core/models/part.d.ts +0 -2
  178. package/dist/core/models/part.d.ts.map +1 -1
  179. package/dist/core/models/piece-types.d.ts +8 -0
  180. package/dist/core/models/piece-types.d.ts.map +1 -1
  181. package/dist/core/models/piece-types.js +2 -0
  182. package/dist/core/models/piece-types.js.map +1 -1
  183. package/dist/core/models/schema-base.d.ts +493 -0
  184. package/dist/core/models/schema-base.d.ts.map +1 -0
  185. package/dist/core/models/schema-base.js +201 -0
  186. package/dist/core/models/schema-base.js.map +1 -0
  187. package/dist/core/models/schemas.d.ts +4 -1638
  188. package/dist/core/models/schemas.d.ts.map +1 -1
  189. package/dist/core/models/schemas.js +4 -563
  190. package/dist/core/models/schemas.js.map +1 -1
  191. package/dist/core/models/workflow-schemas.d.ts +1723 -0
  192. package/dist/core/models/workflow-schemas.d.ts.map +1 -0
  193. package/dist/core/models/workflow-schemas.js +217 -0
  194. package/dist/core/models/workflow-schemas.js.map +1 -0
  195. package/dist/core/piece/engine/ArpeggioRunner.d.ts +2 -6
  196. package/dist/core/piece/engine/ArpeggioRunner.d.ts.map +1 -1
  197. package/dist/core/piece/engine/ArpeggioRunner.js +2 -1
  198. package/dist/core/piece/engine/ArpeggioRunner.js.map +1 -1
  199. package/dist/core/piece/engine/MovementExecutor.d.ts +2 -6
  200. package/dist/core/piece/engine/MovementExecutor.d.ts.map +1 -1
  201. package/dist/core/piece/engine/MovementExecutor.js +2 -1
  202. package/dist/core/piece/engine/MovementExecutor.js.map +1 -1
  203. package/dist/core/piece/engine/OptionsBuilder.d.ts +1 -0
  204. package/dist/core/piece/engine/OptionsBuilder.d.ts.map +1 -1
  205. package/dist/core/piece/engine/OptionsBuilder.js +13 -34
  206. package/dist/core/piece/engine/OptionsBuilder.js.map +1 -1
  207. package/dist/core/piece/engine/ParallelRunner.d.ts +2 -6
  208. package/dist/core/piece/engine/ParallelRunner.d.ts.map +1 -1
  209. package/dist/core/piece/engine/ParallelRunner.js +109 -55
  210. package/dist/core/piece/engine/ParallelRunner.js.map +1 -1
  211. package/dist/core/piece/engine/PieceEngine.d.ts +1 -1
  212. package/dist/core/piece/engine/PieceEngine.d.ts.map +1 -1
  213. package/dist/core/piece/engine/PieceEngine.js +11 -10
  214. package/dist/core/piece/engine/PieceEngine.js.map +1 -1
  215. package/dist/core/piece/engine/TeamLeaderRunner.d.ts +0 -7
  216. package/dist/core/piece/engine/TeamLeaderRunner.d.ts.map +1 -1
  217. package/dist/core/piece/engine/TeamLeaderRunner.js +9 -6
  218. package/dist/core/piece/engine/TeamLeaderRunner.js.map +1 -1
  219. package/dist/core/piece/engine/parallel-logger.d.ts.map +1 -1
  220. package/dist/core/piece/engine/parallel-logger.js +2 -0
  221. package/dist/core/piece/engine/parallel-logger.js.map +1 -1
  222. package/dist/core/piece/engine/team-leader-common.d.ts.map +1 -1
  223. package/dist/core/piece/engine/team-leader-common.js +6 -3
  224. package/dist/core/piece/engine/team-leader-common.js.map +1 -1
  225. package/dist/core/piece/evaluation/RuleEvaluator.d.ts +6 -3
  226. package/dist/core/piece/evaluation/RuleEvaluator.d.ts.map +1 -1
  227. package/dist/core/piece/evaluation/RuleEvaluator.js +16 -14
  228. package/dist/core/piece/evaluation/RuleEvaluator.js.map +1 -1
  229. package/dist/core/piece/instruction/InstructionBuilder.d.ts +4 -4
  230. package/dist/core/piece/instruction/InstructionBuilder.js +9 -9
  231. package/dist/core/piece/instruction/InstructionBuilder.js.map +1 -1
  232. package/dist/core/piece/instruction/instruction-context.d.ts +1 -1
  233. package/dist/core/piece/instruction/instruction-context.js +5 -5
  234. package/dist/core/piece/instruction/instruction-context.js.map +1 -1
  235. package/dist/core/piece/part-definition-validator.d.ts.map +1 -1
  236. package/dist/core/piece/part-definition-validator.js +3 -6
  237. package/dist/core/piece/part-definition-validator.js.map +1 -1
  238. package/dist/core/piece/phase-runner.d.ts +6 -1
  239. package/dist/core/piece/phase-runner.d.ts.map +1 -1
  240. package/dist/core/piece/phase-runner.js.map +1 -1
  241. package/dist/core/piece/provider-resolution.d.ts +0 -2
  242. package/dist/core/piece/provider-resolution.d.ts.map +1 -1
  243. package/dist/core/piece/provider-resolution.js +0 -2
  244. package/dist/core/piece/provider-resolution.js.map +1 -1
  245. package/dist/core/piece/status-judgment-phase.d.ts.map +1 -1
  246. package/dist/core/piece/status-judgment-phase.js +2 -2
  247. package/dist/core/piece/status-judgment-phase.js.map +1 -1
  248. package/dist/core/piece/types.d.ts +7 -9
  249. package/dist/core/piece/types.d.ts.map +1 -1
  250. package/dist/core/runtime/runtime-environment.d.ts.map +1 -1
  251. package/dist/core/runtime/runtime-environment.js +15 -0
  252. package/dist/core/runtime/runtime-environment.js.map +1 -1
  253. package/dist/features/config/deploySkill.js +1 -1
  254. package/dist/features/config/deploySkill.js.map +1 -1
  255. package/dist/features/config/deploySkillCodex.js +1 -1
  256. package/dist/features/config/deploySkillCodex.js.map +1 -1
  257. package/dist/features/config/deploySkillInternal.js +5 -5
  258. package/dist/features/config/deploySkillInternal.js.map +1 -1
  259. package/dist/features/config/ejectBuiltin.d.ts +3 -3
  260. package/dist/features/config/ejectBuiltin.d.ts.map +1 -1
  261. package/dist/features/config/ejectBuiltin.js +53 -28
  262. package/dist/features/config/ejectBuiltin.js.map +1 -1
  263. package/dist/features/pieceSelection/index.d.ts.map +1 -1
  264. package/dist/features/pieceSelection/index.js +32 -31
  265. package/dist/features/pieceSelection/index.js.map +1 -1
  266. package/dist/features/pipeline/execute.d.ts.map +1 -1
  267. package/dist/features/pipeline/execute.js +9 -3
  268. package/dist/features/pipeline/execute.js.map +1 -1
  269. package/dist/features/pipeline/steps.d.ts.map +1 -1
  270. package/dist/features/pipeline/steps.js +18 -13
  271. package/dist/features/pipeline/steps.js.map +1 -1
  272. package/dist/features/prompt/preview.d.ts.map +1 -1
  273. package/dist/features/prompt/preview.js +9 -4
  274. package/dist/features/prompt/preview.js.map +1 -1
  275. package/dist/features/tasks/add/index.d.ts +2 -0
  276. package/dist/features/tasks/add/index.d.ts.map +1 -1
  277. package/dist/features/tasks/add/index.js +5 -4
  278. package/dist/features/tasks/add/index.js.map +1 -1
  279. package/dist/features/tasks/add/worktree-settings.d.ts.map +1 -1
  280. package/dist/features/tasks/add/worktree-settings.js +10 -8
  281. package/dist/features/tasks/add/worktree-settings.js.map +1 -1
  282. package/dist/features/tasks/execute/pieceExecution.d.ts.map +1 -1
  283. package/dist/features/tasks/execute/pieceExecution.js +28 -27
  284. package/dist/features/tasks/execute/pieceExecution.js.map +1 -1
  285. package/dist/features/tasks/execute/postExecution.js +1 -1
  286. package/dist/features/tasks/execute/postExecution.js.map +1 -1
  287. package/dist/features/tasks/execute/resolveTask.d.ts +1 -1
  288. package/dist/features/tasks/execute/resolveTask.d.ts.map +1 -1
  289. package/dist/features/tasks/execute/resolveTask.js +10 -9
  290. package/dist/features/tasks/execute/resolveTask.js.map +1 -1
  291. package/dist/features/tasks/execute/runAllTasks.d.ts +3 -0
  292. package/dist/features/tasks/execute/runAllTasks.d.ts.map +1 -0
  293. package/dist/features/tasks/execute/runAllTasks.js +81 -0
  294. package/dist/features/tasks/execute/runAllTasks.js.map +1 -0
  295. package/dist/features/tasks/execute/selectAndExecute.d.ts.map +1 -1
  296. package/dist/features/tasks/execute/selectAndExecute.js +2 -1
  297. package/dist/features/tasks/execute/selectAndExecute.js.map +1 -1
  298. package/dist/features/tasks/execute/taskExecution.d.ts +0 -7
  299. package/dist/features/tasks/execute/taskExecution.d.ts.map +1 -1
  300. package/dist/features/tasks/execute/taskExecution.js +17 -95
  301. package/dist/features/tasks/execute/taskExecution.js.map +1 -1
  302. package/dist/features/tasks/execute/taskResultHandler.js +1 -1
  303. package/dist/features/tasks/execute/taskResultHandler.js.map +1 -1
  304. package/dist/features/tasks/execute/types.d.ts +3 -1
  305. package/dist/features/tasks/execute/types.d.ts.map +1 -1
  306. package/dist/features/tasks/index.d.ts +2 -1
  307. package/dist/features/tasks/index.d.ts.map +1 -1
  308. package/dist/features/tasks/index.js +2 -1
  309. package/dist/features/tasks/index.js.map +1 -1
  310. package/dist/features/tasks/list/listNonInteractive.d.ts.map +1 -1
  311. package/dist/features/tasks/list/listNonInteractive.js +6 -2
  312. package/dist/features/tasks/list/listNonInteractive.js.map +1 -1
  313. package/dist/features/tasks/list/requeueHelpers.d.ts.map +1 -1
  314. package/dist/features/tasks/list/requeueHelpers.js +2 -1
  315. package/dist/features/tasks/list/requeueHelpers.js.map +1 -1
  316. package/dist/features/tasks/list/taskRetryActions.d.ts.map +1 -1
  317. package/dist/features/tasks/list/taskRetryActions.js +12 -11
  318. package/dist/features/tasks/list/taskRetryActions.js.map +1 -1
  319. package/dist/index.d.ts +2 -2
  320. package/dist/index.d.ts.map +1 -1
  321. package/dist/index.js +1 -1
  322. package/dist/index.js.map +1 -1
  323. package/dist/infra/claude/client.d.ts.map +1 -1
  324. package/dist/infra/claude/client.js +2 -13
  325. package/dist/infra/claude/client.js.map +1 -1
  326. package/dist/infra/claude/executor.d.ts +1 -1
  327. package/dist/infra/claude/executor.d.ts.map +1 -1
  328. package/dist/infra/claude/executor.js +47 -27
  329. package/dist/infra/claude/executor.js.map +1 -1
  330. package/dist/infra/claude/options-builder.d.ts.map +1 -1
  331. package/dist/infra/claude/options-builder.js +2 -0
  332. package/dist/infra/claude/options-builder.js.map +1 -1
  333. package/dist/infra/claude/stream-converter.d.ts.map +1 -1
  334. package/dist/infra/claude/stream-converter.js +26 -0
  335. package/dist/infra/claude/stream-converter.js.map +1 -1
  336. package/dist/infra/claude/types.d.ts +23 -0
  337. package/dist/infra/claude/types.d.ts.map +1 -1
  338. package/dist/infra/codex/client.d.ts.map +1 -1
  339. package/dist/infra/codex/client.js +1 -0
  340. package/dist/infra/codex/client.js.map +1 -1
  341. package/dist/infra/codex/types.d.ts +2 -0
  342. package/dist/infra/codex/types.d.ts.map +1 -1
  343. package/dist/infra/codex/types.js.map +1 -1
  344. package/dist/infra/config/configKeyAliases.d.ts +17 -0
  345. package/dist/infra/config/configKeyAliases.d.ts.map +1 -0
  346. package/dist/infra/config/configKeyAliases.js +82 -0
  347. package/dist/infra/config/configKeyAliases.js.map +1 -0
  348. package/dist/infra/config/configNormalizers.d.ts +7 -6
  349. package/dist/infra/config/configNormalizers.d.ts.map +1 -1
  350. package/dist/infra/config/configNormalizers.js +25 -10
  351. package/dist/infra/config/configNormalizers.js.map +1 -1
  352. package/dist/infra/config/env/config-env-overrides.d.ts +6 -3
  353. package/dist/infra/config/env/config-env-overrides.d.ts.map +1 -1
  354. package/dist/infra/config/env/config-env-overrides.js +5 -194
  355. package/dist/infra/config/env/config-env-overrides.js.map +1 -1
  356. package/dist/infra/config/env/config-env-shared.d.ts +16 -0
  357. package/dist/infra/config/env/config-env-shared.d.ts.map +1 -0
  358. package/dist/infra/config/env/config-env-shared.js +62 -0
  359. package/dist/infra/config/env/config-env-shared.js.map +1 -0
  360. package/dist/infra/config/env/global-current-env-specs.d.ts +3 -0
  361. package/dist/infra/config/env/global-current-env-specs.d.ts.map +1 -0
  362. package/dist/infra/config/env/global-current-env-specs.js +63 -0
  363. package/dist/infra/config/env/global-current-env-specs.js.map +1 -0
  364. package/dist/infra/config/env/global-legacy-env-specs.d.ts +3 -0
  365. package/dist/infra/config/env/global-legacy-env-specs.d.ts.map +1 -0
  366. package/dist/infra/config/env/global-legacy-env-specs.js +122 -0
  367. package/dist/infra/config/env/global-legacy-env-specs.js.map +1 -0
  368. package/dist/infra/config/env/project-current-env-specs.d.ts +3 -0
  369. package/dist/infra/config/env/project-current-env-specs.d.ts.map +1 -0
  370. package/dist/infra/config/env/project-current-env-specs.js +35 -0
  371. package/dist/infra/config/env/project-current-env-specs.js.map +1 -0
  372. package/dist/infra/config/env/project-legacy-env-specs.d.ts +3 -0
  373. package/dist/infra/config/env/project-legacy-env-specs.d.ts.map +1 -0
  374. package/dist/infra/config/env/project-legacy-env-specs.js +80 -0
  375. package/dist/infra/config/env/project-legacy-env-specs.js.map +1 -0
  376. package/dist/infra/config/global/globalConfigCore.d.ts +4 -0
  377. package/dist/infra/config/global/globalConfigCore.d.ts.map +1 -1
  378. package/dist/infra/config/global/globalConfigCore.js +67 -38
  379. package/dist/infra/config/global/globalConfigCore.js.map +1 -1
  380. package/dist/infra/config/global/globalConfigSerializer.js +9 -9
  381. package/dist/infra/config/global/globalConfigSerializer.js.map +1 -1
  382. package/dist/infra/config/issuePath.d.ts +2 -0
  383. package/dist/infra/config/issuePath.d.ts.map +1 -0
  384. package/dist/infra/config/issuePath.js +6 -0
  385. package/dist/infra/config/issuePath.js.map +1 -0
  386. package/dist/infra/config/loaders/agentLoader.d.ts +1 -1
  387. package/dist/infra/config/loaders/agentLoader.js +3 -3
  388. package/dist/infra/config/loaders/agentLoader.js.map +1 -1
  389. package/dist/infra/config/loaders/pieceCategories.d.ts +3 -3
  390. package/dist/infra/config/loaders/pieceCategories.d.ts.map +1 -1
  391. package/dist/infra/config/loaders/pieceCategories.js +53 -17
  392. package/dist/infra/config/loaders/pieceCategories.js.map +1 -1
  393. package/dist/infra/config/loaders/pieceLoadWarning.d.ts +2 -0
  394. package/dist/infra/config/loaders/pieceLoadWarning.d.ts.map +1 -0
  395. package/dist/infra/config/loaders/pieceLoadWarning.js +22 -0
  396. package/dist/infra/config/loaders/pieceLoadWarning.js.map +1 -0
  397. package/dist/infra/config/loaders/pieceParser.d.ts.map +1 -1
  398. package/dist/infra/config/loaders/pieceParser.js +6 -14
  399. package/dist/infra/config/loaders/pieceParser.js.map +1 -1
  400. package/dist/infra/config/loaders/pieceResolver.d.ts +25 -22
  401. package/dist/infra/config/loaders/pieceResolver.d.ts.map +1 -1
  402. package/dist/infra/config/loaders/pieceResolver.js +80 -72
  403. package/dist/infra/config/loaders/pieceResolver.js.map +1 -1
  404. package/dist/infra/config/paths.d.ts +6 -2
  405. package/dist/infra/config/paths.d.ts.map +1 -1
  406. package/dist/infra/config/paths.js +11 -3
  407. package/dist/infra/config/paths.js.map +1 -1
  408. package/dist/infra/config/project/projectConfig.d.ts +2 -6
  409. package/dist/infra/config/project/projectConfig.d.ts.map +1 -1
  410. package/dist/infra/config/project/projectConfig.js +39 -65
  411. package/dist/infra/config/project/projectConfig.js.map +1 -1
  412. package/dist/infra/config/project/projectConfigTransforms.d.ts +0 -1
  413. package/dist/infra/config/project/projectConfigTransforms.d.ts.map +1 -1
  414. package/dist/infra/config/project/projectConfigTransforms.js +0 -5
  415. package/dist/infra/config/project/projectConfigTransforms.js.map +1 -1
  416. package/dist/infra/config/project/projectConfigValidation.d.ts +2 -0
  417. package/dist/infra/config/project/projectConfigValidation.d.ts.map +1 -0
  418. package/dist/infra/config/project/projectConfigValidation.js +17 -0
  419. package/dist/infra/config/project/projectConfigValidation.js.map +1 -0
  420. package/dist/infra/config/providerOptions.d.ts +6 -1
  421. package/dist/infra/config/providerOptions.d.ts.map +1 -1
  422. package/dist/infra/config/providerOptions.js +93 -5
  423. package/dist/infra/config/providerOptions.js.map +1 -1
  424. package/dist/infra/config/providerOptionsContract.d.ts +14 -0
  425. package/dist/infra/config/providerOptionsContract.d.ts.map +1 -0
  426. package/dist/infra/config/providerOptionsContract.js +80 -0
  427. package/dist/infra/config/providerOptionsContract.js.map +1 -0
  428. package/dist/infra/config/resolutionCache.d.ts +3 -0
  429. package/dist/infra/config/resolutionCache.d.ts.map +1 -1
  430. package/dist/infra/config/resolutionCache.js +9 -0
  431. package/dist/infra/config/resolutionCache.js.map +1 -1
  432. package/dist/infra/config/resolveConfigValue.d.ts +6 -0
  433. package/dist/infra/config/resolveConfigValue.d.ts.map +1 -1
  434. package/dist/infra/config/resolveConfigValue.js +97 -16
  435. package/dist/infra/config/resolveConfigValue.js.map +1 -1
  436. package/dist/infra/config/resolvedConfig.d.ts +2 -1
  437. package/dist/infra/config/resolvedConfig.d.ts.map +1 -1
  438. package/dist/infra/config/traced/tracedConfigLegacyEnvAdapter.d.ts +4 -0
  439. package/dist/infra/config/traced/tracedConfigLegacyEnvAdapter.d.ts.map +1 -0
  440. package/dist/infra/config/traced/tracedConfigLegacyEnvAdapter.js +47 -0
  441. package/dist/infra/config/traced/tracedConfigLegacyEnvAdapter.js.map +1 -0
  442. package/dist/infra/config/traced/tracedConfigLoader.d.ts +32 -0
  443. package/dist/infra/config/traced/tracedConfigLoader.d.ts.map +1 -0
  444. package/dist/infra/config/traced/tracedConfigLoader.js +153 -0
  445. package/dist/infra/config/traced/tracedConfigLoader.js.map +1 -0
  446. package/dist/infra/config/traced/tracedConfigRuntimeBridge.d.ts +3 -0
  447. package/dist/infra/config/traced/tracedConfigRuntimeBridge.d.ts.map +1 -0
  448. package/dist/infra/config/traced/tracedConfigRuntimeBridge.js +135 -0
  449. package/dist/infra/config/traced/tracedConfigRuntimeBridge.js.map +1 -0
  450. package/dist/infra/config/traced/tracedConfigSchema.d.ts +5 -0
  451. package/dist/infra/config/traced/tracedConfigSchema.d.ts.map +1 -0
  452. package/dist/infra/config/traced/tracedConfigSchema.js +215 -0
  453. package/dist/infra/config/traced/tracedConfigSchema.js.map +1 -0
  454. package/dist/infra/cursor/client.js +1 -1
  455. package/dist/infra/cursor/client.js.map +1 -1
  456. package/dist/infra/providers/claude.d.ts +1 -0
  457. package/dist/infra/providers/claude.d.ts.map +1 -1
  458. package/dist/infra/providers/claude.js +2 -0
  459. package/dist/infra/providers/claude.js.map +1 -1
  460. package/dist/infra/providers/codex.d.ts +1 -0
  461. package/dist/infra/providers/codex.d.ts.map +1 -1
  462. package/dist/infra/providers/codex.js +2 -0
  463. package/dist/infra/providers/codex.js.map +1 -1
  464. package/dist/infra/providers/copilot.d.ts +1 -0
  465. package/dist/infra/providers/copilot.d.ts.map +1 -1
  466. package/dist/infra/providers/copilot.js +1 -0
  467. package/dist/infra/providers/copilot.js.map +1 -1
  468. package/dist/infra/providers/cursor.d.ts +1 -0
  469. package/dist/infra/providers/cursor.d.ts.map +1 -1
  470. package/dist/infra/providers/cursor.js +1 -0
  471. package/dist/infra/providers/cursor.js.map +1 -1
  472. package/dist/infra/providers/mock.d.ts +1 -0
  473. package/dist/infra/providers/mock.d.ts.map +1 -1
  474. package/dist/infra/providers/mock.js +1 -0
  475. package/dist/infra/providers/mock.js.map +1 -1
  476. package/dist/infra/providers/opencode.d.ts +1 -0
  477. package/dist/infra/providers/opencode.d.ts.map +1 -1
  478. package/dist/infra/providers/opencode.js +1 -0
  479. package/dist/infra/providers/opencode.js.map +1 -1
  480. package/dist/infra/providers/types.d.ts +1 -0
  481. package/dist/infra/providers/types.d.ts.map +1 -1
  482. package/dist/infra/resources/index.d.ts +1 -1
  483. package/dist/infra/resources/index.js +1 -1
  484. package/dist/infra/task/display.js +2 -2
  485. package/dist/infra/task/display.js.map +1 -1
  486. package/dist/infra/task/index.d.ts +2 -1
  487. package/dist/infra/task/index.d.ts.map +1 -1
  488. package/dist/infra/task/index.js +2 -1
  489. package/dist/infra/task/index.js.map +1 -1
  490. package/dist/infra/task/listSerializer.d.ts +41 -0
  491. package/dist/infra/task/listSerializer.d.ts.map +1 -0
  492. package/dist/infra/task/listSerializer.js +51 -0
  493. package/dist/infra/task/listSerializer.js.map +1 -0
  494. package/dist/infra/task/schema.d.ts +208 -12
  495. package/dist/infra/task/schema.d.ts.map +1 -1
  496. package/dist/infra/task/schema.js +78 -5
  497. package/dist/infra/task/schema.js.map +1 -1
  498. package/dist/infra/task/store.d.ts.map +1 -1
  499. package/dist/infra/task/store.js +2 -2
  500. package/dist/infra/task/store.js.map +1 -1
  501. package/dist/shared/i18n/labels_en.yaml +6 -6
  502. package/dist/shared/i18n/labels_ja.yaml +6 -6
  503. package/dist/shared/prompts/en/perform_agent_system_prompt.md +6 -6
  504. package/dist/shared/prompts/en/perform_builtin_agent_system_prompt.md +1 -1
  505. package/dist/shared/prompts/en/perform_judge_message.md +1 -1
  506. package/dist/shared/prompts/en/perform_phase1_message.md +9 -9
  507. package/dist/shared/prompts/en/perform_phase2_message.md +2 -2
  508. package/dist/shared/prompts/en/score_instruct_system_prompt.md +7 -7
  509. package/dist/shared/prompts/en/score_interactive_policy.md +10 -10
  510. package/dist/shared/prompts/en/score_interactive_system_prompt.md +9 -9
  511. package/dist/shared/prompts/en/score_retry_system_prompt.md +8 -8
  512. package/dist/shared/prompts/en/score_summary_system_prompt.md +4 -4
  513. package/dist/shared/prompts/ja/perform_agent_system_prompt.md +6 -6
  514. package/dist/shared/prompts/ja/perform_builtin_agent_system_prompt.md +1 -1
  515. package/dist/shared/prompts/ja/perform_judge_message.md +1 -1
  516. package/dist/shared/prompts/ja/perform_phase1_message.md +9 -9
  517. package/dist/shared/prompts/ja/perform_phase2_message.md +2 -2
  518. package/dist/shared/prompts/ja/score_instruct_system_prompt.md +7 -7
  519. package/dist/shared/prompts/ja/score_interactive_policy.md +10 -10
  520. package/dist/shared/prompts/ja/score_interactive_system_prompt.md +9 -9
  521. package/dist/shared/prompts/ja/score_retry_system_prompt.md +8 -8
  522. package/dist/shared/prompts/ja/score_summary_system_prompt.md +7 -7
  523. package/dist/shared/types/provider.d.ts +20 -0
  524. package/dist/shared/types/provider.d.ts.map +1 -1
  525. package/dist/shared/ui/StreamDisplay.d.ts.map +1 -1
  526. package/dist/shared/ui/StreamDisplay.js +2 -0
  527. package/dist/shared/ui/StreamDisplay.js.map +1 -1
  528. package/dist/shared/utils/slackWebhook.js +2 -2
  529. package/dist/shared/utils/slackWebhook.js.map +1 -1
  530. package/dist/shared/utils/text.d.ts +4 -0
  531. package/dist/shared/utils/text.d.ts.map +1 -1
  532. package/dist/shared/utils/text.js +29 -0
  533. package/dist/shared/utils/text.js.map +1 -1
  534. package/package.json +3 -2
  535. package/dist/agents/ai-judge.d.ts +0 -15
  536. package/dist/agents/ai-judge.d.ts.map +0 -1
  537. package/dist/agents/ai-judge.js +0 -23
  538. package/dist/agents/ai-judge.js.map +0 -1
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  **T**AKT **A**gent **K**oordination **T**opology — Give your AI coding agents structured review loops, managed prompts, and guardrails — so they deliver quality code, not just code.
6
6
 
7
- TAKT runs AI agents (Claude Code, Codex, OpenCode, Cursor, GitHub Copilot CLI) through YAML-defined workflows with built-in review cycles. You talk to AI to define what you want, queue tasks, and let TAKT handle the execution — planning, implementation, multi-stage review, and fix loops — all governed by declarative piece files.
7
+ TAKT runs AI agents (Claude Code, Codex, OpenCode, Cursor, GitHub Copilot CLI) through YAML-defined workflows with built-in review cycles. You talk to AI to define what you want, queue tasks, and let TAKT handle the execution — planning, implementation, multi-stage review, and fix loops — all governed by declarative workflow files.
8
8
 
9
9
  TAKT is built with TAKT itself (dogfooding).
10
10
 
@@ -14,7 +14,7 @@ TAKT is built with TAKT itself (dogfooding).
14
14
 
15
15
  **Practical** — A tool for daily development, not demos. Talk to AI to refine requirements, queue tasks, and run them. Worktree isolation on task execution, PR creation, and retry on failure.
16
16
 
17
- **Reproducible** — Execution paths are declared in YAML, keeping results consistent. Pieces are shareable — a workflow built by one team member can be used by anyone else to run the same quality process. Every step is logged in NDJSON for full traceability from task to PR.
17
+ **Reproducible** — Execution paths are declared in YAML, keeping results consistent. Workflows are shareable — a workflow built by one team member can be used by anyone else to run the same quality process. Every step is logged in NDJSON for full traceability from task to PR.
18
18
 
19
19
  **Multi-agent** — Orchestrate multiple agents with different personas, permissions, and review criteria. Run parallel reviewers, route failures back to implementers, aggregate results with declarative rules. Prompts are managed as independent facets (persona, policy, knowledge, instruction) that compose freely across workflows ([Faceted Prompting](./docs/faceted-prompting.md)).
20
20
 
@@ -45,7 +45,7 @@ npm install -g takt
45
45
  ```
46
46
  $ takt
47
47
 
48
- Select piece:
48
+ Select workflow:
49
49
  ❯ 🎼 default (current)
50
50
  📁 🚀 Quick Start/
51
51
  📁 🎨 Frontend/
@@ -67,7 +67,7 @@ What would you like to do?
67
67
  Continue conversation
68
68
  ```
69
69
 
70
- Choosing "Queue as task" saves the task to `.takt/tasks/`. Run `takt run` to execute — TAKT creates an isolated worktree, runs the piece (plan → implement → review → fix loop), and offers to create a PR when done.
70
+ Choosing "Queue as task" saves the task to `.takt/tasks/`. Run `takt run` to execute — TAKT creates an isolated worktree, runs the workflow (plan → implement → review → fix loop), and offers to create a PR when done.
71
71
 
72
72
  ```bash
73
73
  # Execute queued tasks
@@ -81,7 +81,7 @@ takt add #12
81
81
  takt run
82
82
  ```
83
83
 
84
- > **"Execute now"** runs the piece directly in your current directory without worktree isolation. Useful for quick experiments, but note that changes go straight into your working tree.
84
+ > **"Execute now"** runs the workflow directly in your current directory without worktree isolation. Useful for quick experiments, but note that changes go straight into your working tree.
85
85
 
86
86
  ### Manage results
87
87
 
@@ -92,16 +92,16 @@ takt list
92
92
 
93
93
  ## How It Works
94
94
 
95
- TAKT uses a music metaphor — the name itself comes from the German word for "beat" or "baton stroke," used in conducting to keep an orchestra in time. In TAKT, a **piece** is a workflow and a **movement** is a step within it, just as a musical piece is composed of movements.
95
+ TAKT uses a music metaphor — the name itself comes from the German word for "beat" or "baton stroke," used in conducting to keep an orchestra in time. User-facing terminology uses **workflow** and **step**, while the internal canonical names remain **piece** and **movement** for backward compatibility.
96
96
 
97
- A piece defines a sequence of movements. Each movement specifies a persona (who), permissions (what's allowed), and rules (what happens next). Here's a minimal example:
97
+ A workflow is defined by a sequence of steps. Public YAML examples use `steps` and `initial_step`, while legacy `movements` and `initial_movement` are still accepted as compatibility aliases. Each step specifies a persona (who), permissions (what's allowed), and rules (what happens next). Here's a minimal example:
98
98
 
99
99
  ```yaml
100
100
  name: plan-implement-review
101
- initial_movement: plan
101
+ initial_step: plan
102
102
  max_movements: 10
103
103
 
104
- movements:
104
+ steps:
105
105
  - name: plan
106
106
  persona: planner
107
107
  edit: false
@@ -127,18 +127,22 @@ movements:
127
127
  next: implement # ← fix loop
128
128
  ```
129
129
 
130
- Rules determine the next movement. `COMPLETE` ends the piece successfully, `ABORT` ends with failure. See the [Piece Guide](./docs/pieces.md) for the full schema, parallel movements, and rule condition types.
130
+ Rules determine the next step. `COMPLETE` ends the workflow successfully, `ABORT` ends with failure. See the [Workflow Guide](./docs/pieces.md) for the full schema, parallel steps, and rule condition types.
131
131
 
132
- ## Recommended Pieces
132
+ Workflow files live in `workflows/` as the official directory name. TAKT still accepts legacy `pieces/` directories and `--piece` / legacy YAML keys as compatibility input, but normal docs and UI use `workflow` / `step`.
133
133
 
134
- | Piece | Use Case |
134
+ When the same workflow name exists in multiple locations, TAKT resolves in this order: `.takt/workflows/` → `.takt/pieces/` → `~/.takt/workflows/` → `~/.takt/pieces/` → builtins.
135
+
136
+ ## Recommended Workflows
137
+
138
+ | Workflow | Use Case |
135
139
  |-------|----------|
136
140
  | `default` | Standard development. Test-first with AI antipattern review and parallel review (architecture + supervisor). |
137
141
  | `frontend-mini` | Frontend-focused mini configuration. |
138
142
  | `backend-mini` | Backend-focused mini configuration. |
139
143
  | `dual-mini` | Frontend + backend mini configuration. |
140
144
 
141
- See the [Builtin Catalog](./docs/builtin-catalog.md) for all pieces and personas.
145
+ See the [Builtin Catalog](./docs/builtin-catalog.md) for all workflows and personas.
142
146
 
143
147
  ## Key Commands
144
148
 
@@ -148,7 +152,7 @@ See the [Builtin Catalog](./docs/builtin-catalog.md) for all pieces and personas
148
152
  | `takt run` | Execute all pending tasks |
149
153
  | `takt list` | Manage task branches (merge, retry, instruct, delete) |
150
154
  | `takt #N` | Execute GitHub Issue as task |
151
- | `takt eject` | Copy builtin pieces/facets for customization |
155
+ | `takt eject` | Copy builtin workflows/facets for customization |
152
156
  | `takt repertoire add` | Install a repertoire package from GitHub |
153
157
 
154
158
  See the [CLI Reference](./docs/cli-reference.md) for all commands and options.
@@ -177,10 +181,10 @@ See the [Configuration Guide](./docs/configuration.md) for all options, provider
177
181
 
178
182
  ## Customization
179
183
 
180
- ### Custom pieces
184
+ ### Custom workflows
181
185
 
182
186
  ```bash
183
- takt eject default # Copy builtin to ~/.takt/pieces/ and edit
187
+ takt eject default # Copy builtin workflow to ~/.takt/workflows/ and edit
184
188
  ```
185
189
 
186
190
  ### Custom personas
@@ -192,9 +196,9 @@ Create a Markdown file in `~/.takt/personas/`:
192
196
  You are a code reviewer specialized in security.
193
197
  ```
194
198
 
195
- Reference it in your piece: `persona: my-reviewer`
199
+ Reference it in your workflow: `persona: my-reviewer`
196
200
 
197
- See the [Piece Guide](./docs/pieces.md) and [Agent Guide](./docs/agents.md) for details.
201
+ See the [Workflow Guide](./docs/pieces.md) and [Agent Guide](./docs/agents.md) for details.
198
202
 
199
203
  ## CI/CD
200
204
 
@@ -220,25 +224,28 @@ See the [CI/CD Guide](./docs/ci-cd.md) for full setup instructions.
220
224
  ```
221
225
  ~/.takt/ # Global config
222
226
  ├── config.yaml # Provider, model, language, etc.
223
- ├── pieces/ # User piece definitions
227
+ ├── workflows/ # User workflow definitions
224
228
  ├── facets/ # User facets (personas, policies, knowledge, etc.)
225
229
  └── repertoire/ # Installed repertoire packages
226
230
 
227
231
  .takt/ # Project-level
228
232
  ├── config.yaml # Project config
233
+ ├── workflows/ # Project workflow overrides
229
234
  ├── facets/ # Project facets
230
235
  ├── tasks.yaml # Pending tasks
231
236
  ├── tasks/ # Task specifications
232
237
  └── runs/ # Execution reports, logs, context
233
238
  ```
234
239
 
240
+ Legacy `pieces/` directories are still read for compatibility, but `workflows/` is the canonical name in current docs and CLI output.
241
+
235
242
  ## API Usage
236
243
 
237
244
  ```typescript
238
245
  import { PieceEngine, loadPiece } from 'takt';
239
246
 
240
247
  const config = loadPiece('default');
241
- if (!config) throw new Error('Piece not found');
248
+ if (!config) throw new Error('Workflow not found');
242
249
 
243
250
  const engine = new PieceEngine(config, process.cwd(), 'My task');
244
251
  engine.on('movement:complete', (movement, response) => {
@@ -254,9 +261,9 @@ await engine.run();
254
261
  |----------|-------------|
255
262
  | [CLI Reference](./docs/cli-reference.md) | All commands and options |
256
263
  | [Configuration](./docs/configuration.md) | Global and project settings |
257
- | [Piece Guide](./docs/pieces.md) | Creating and customizing pieces |
264
+ | [Workflow Guide](./docs/pieces.md) | Creating and customizing workflows |
258
265
  | [Agent Guide](./docs/agents.md) | Custom agent configuration |
259
- | [Builtin Catalog](./docs/builtin-catalog.md) | All builtin pieces and personas |
266
+ | [Builtin Catalog](./docs/builtin-catalog.md) | All builtin workflows and personas |
260
267
  | [Faceted Prompting](./docs/faceted-prompting.md) | Prompt design methodology |
261
268
  | [Repertoire Packages](./docs/repertoire.md) | Installing and sharing packages |
262
269
  | [Task Management](./docs/task-management.md) | Task queuing, execution, isolation |
@@ -34,8 +34,8 @@ language: en # UI language: en | ja
34
34
  # notification_sound: true # Master switch for sounds
35
35
  # notification_sound_events: # Per-event sound toggle (unset means true)
36
36
  # iteration_limit: true
37
- # piece_complete: true
38
- # piece_abort: true
37
+ # workflow_complete: true
38
+ # workflow_abort: true
39
39
  # run_complete: true
40
40
  # run_abort: true
41
41
  # logging:
@@ -82,12 +82,12 @@ language: en # UI language: en | ja
82
82
  # runtime:
83
83
  # prepare: [node, gradle, ./custom-script.sh]
84
84
 
85
- # Piece-level overrides
86
- # piece_overrides:
85
+ # Workflow-level overrides
86
+ # workflow_overrides:
87
87
  # quality_gates:
88
88
  # - "All tests pass"
89
89
  # quality_gates_edit_only: true
90
- # movements:
90
+ # steps:
91
91
  # review:
92
92
  # quality_gates:
93
93
  # - "No security vulnerabilities"
@@ -116,8 +116,8 @@ language: en # UI language: en | ja
116
116
  # Misc
117
117
  # bookmarks_file: ~/.takt/preferences/bookmarks.yaml # Bookmark file location
118
118
 
119
- # Piece list / categories
120
- # enable_builtin_pieces: true # Enable built-in pieces from builtins/{lang}/pieces
119
+ # Workflow list / categories
120
+ # enable_builtin_workflows: true # Enable built-in workflows from builtins/{lang}/workflows
121
121
  # disabled_builtins:
122
122
  # - magi # Built-in piece names to disable
123
- # piece_categories_file: ~/.takt/preferences/piece-categories.yaml # Category definition file
123
+ # workflow_categories_file: ~/.takt/preferences/workflow-categories.yaml # Category definition file
@@ -10,6 +10,8 @@ Analyze the implementation task and, if decomposition is appropriate, split into
10
10
  - If few files are involved, or the task is a rename/refactoring, implement in a single part
11
11
 
12
12
  2. If decomposing: prioritize splitting along frontend and backend boundaries
13
+ - **If design references exist and backend changes are not explicitly required, do not decompose.** Visual structure, copy, spacing, and styling are tightly coupled, and splitting them increases design drift risk
14
+ - **If design references exist, keep all UI components of the same screen in the same part.** Do not split headers, filters, cards, banners, and modals of one screen across different parts
13
15
  - Splitting between frontend (UI, components, styles) and backend (API, logic, data layer) is the most natural decomposition axis
14
16
  - When API contracts (request/response types) are defined, parallel implementation works well
15
17
  - When API contracts are undecided, implement backend first in one part and defer frontend
@@ -24,9 +26,13 @@ Analyze the implementation task and, if decomposition is appropriate, split into
24
26
  - **Reference-only files** (read-only, modification prohibited)
25
27
  - **Implementation task** (what and how to implement)
26
28
  - **Completion criteria** (implementation of responsible files is complete)
29
+ - When design references exist, each part instruction must also include:
30
+ - **Design references** (which files are the primary source of truth)
31
+ - **Elements to verify** (layout, copy, color, spacing, and navigation flow)
27
32
  - If tests are already written, instruct parts to implement so existing tests pass
28
- - Do not include build checks (all parts complete first, then build is verified together)
33
+ - Refer to Quality Gates and plan any required verification as a dedicated single verification part
34
+ - Do not make parallel implementation parts run duplicate full-build or full-test checks
29
35
 
30
36
  **Constraints:**
31
- - Parts do not run tests (handled by subsequent movements)
37
+ - If tests or build verification are needed, run them as a dedicated single verification part after dependent implementation parts are complete
32
38
  - Do not modify files outside your responsibility (causes conflicts)
@@ -14,6 +14,9 @@ For small tasks, skip the design sections in the report.
14
14
  1. Understand the task requirements
15
15
  - **When reference material points to an external implementation, determine whether it is a "bug fix clue" or a "design approach to adopt". If narrowing scope beyond the reference material's intent, include the rationale in the plan report**
16
16
  - **For each requirement, determine "change needed / not needed". If "not needed", cite the relevant code (file:line) as evidence. Claiming "already correct" without evidence is prohibited**
17
+ - **Limit requirements to explicit requirements and implicit requirements that follow directly from them. Do not turn general best practices or future extensions into requirements**
18
+ - **When decomposing requirements, split only as far as needed to make them independently verifiable. Do not jump from decomposition into new requirements**
19
+ - **When adding an implicit requirement, state which explicit requirement it is derived from in the plan report**
17
20
  2. Investigate code to resolve unknowns
18
21
  3. Identify the impact area
19
22
  4. Determine file structure and design patterns (if needed)
@@ -14,14 +14,19 @@ Review {report:coder-decisions.md} to understand the recorded design decisions.
14
14
 
15
15
  **Previous finding tracking (required):**
16
16
  - First, extract open findings from "Previous Response"
17
- - Assign `finding_id` to each finding and classify current status as `new / persists / resolved`
17
+ - Assign `finding_id` to each finding and classify current status as `new / persists / resolved / reopened`
18
18
  - If status is `persists`, provide concrete unresolved evidence (file/line)
19
19
 
20
20
  ## Judgment Procedure
21
21
 
22
- 1. Extract requirements one by one from the review target report and task
23
- 2. For each requirement, identify the implementing code (file:line)
24
- 3. Confirm that the code satisfies the requirement
25
- 4. Check for any changes not covered by the requirements
26
- 5. For each detected issue, classify as blocking/non-blocking based on Policy's scope determination table and judgment rules
27
- 6. If there is even one blocking issue (`new` or `persists`), judge as REJECT
22
+ 1. Read `order.md`, the task body, `plan.md`, and `coder-decisions.md`, then extract the requirements one by one
23
+ 2. If a sentence contains multiple conditions or paths, split it into the smallest independently verifiable units
24
+ - Do not keep `A/B`, `global/project`, `JSON/leaf`, `allow/deny`, or `read/write` in a single row
25
+ 3. For each requirement, identify the implementing code (file:line)
26
+ 4. Classify each requirement as `satisfied / unmet / unverified`
27
+ - Do not mark a row `satisfied` without concrete code evidence
28
+ - Do not mark a row `satisfied` when only part of the cases is covered
29
+ 5. List out-of-scope changes and judge whether they are justified or unnecessary
30
+ 6. Reclassify prior findings into `new / persists / resolved / reopened`
31
+ 7. For each detected issue, classify it as blocking/non-blocking based on the Policy's scope table and judgment rules
32
+ 8. If there is even one blocking issue in `new`, `persists`, or `reopened`, judge as REJECT
@@ -10,7 +10,7 @@ Verify existing evidence for tests, builds, and functional checks, then perform
10
10
  - Read `order.md` and extract required behavior and prohibitions
11
11
  - Read `plan.md` and confirm intended approach and scope
12
12
  - Read `coder-decisions.md` and confirm why the implementation moved in that direction
13
- - Do not treat prior review conclusions as authoritative unless they align with all three and the code
13
+ - Do not treat prior review conclusions or requirements-review conclusions as authoritative unless they align with all three and the code
14
14
  3. Whether each task spec requirement has been achieved
15
15
  - Extract requirements one by one from the task spec
16
16
  - If a single sentence contains multiple conditions or paths, split it into the smallest independently verifiable units
@@ -31,7 +31,7 @@ Verify existing evidence for tests, builds, and functional checks, then perform
31
31
  5. Handling tests, builds, and functional checks
32
32
  - Do not assume this movement will rerun commands
33
33
  - Use only evidence available in this run, such as execution logs, reports, or CI results
34
- - If evidence is missing, mark the item as unverified
34
+ - If evidence is missing, mark the item as unverified rather than successful
35
35
  - If report text conflicts with execution evidence, call out the inconsistency explicitly
36
36
 
37
37
  **Report verification:** Read all reports in the Report Directory and
@@ -54,6 +54,7 @@ Extract requirements from the task spec and verify each one individually against
54
54
 
55
55
  - If any ❌ exists, REJECT is mandatory
56
56
  - ✅ without evidence is invalid (must verify against actual code)
57
+ - Do not mark a row as ✅ when only part of the cases is verified
57
58
  - Do not rely on plan report's judgment; independently verify each requirement
58
59
 
59
60
  ## Re-evaluation of Prior Findings
@@ -63,6 +64,7 @@ Extract requirements from the task spec and verify each one individually against
63
64
 
64
65
  - If final judgment differs from prior review conclusions, explain why with evidence
65
66
  - If marking `false_positive` or `overreach`, state whether it conflicts with the task objective, the plan, or both
67
+ - If overturning a requirements-review conclusion, explain why with concrete evidence
66
68
 
67
69
  ## Verification Summary
68
70
  | Item | Status | Verification method |
@@ -22,8 +22,9 @@ Analyze the implementation task and, if decomposition is appropriate, split into
22
22
  - **Implementation task** (what and how to implement)
23
23
  - **Completion criteria** (implementation of responsible files is complete)
24
24
  - If tests are already written, instruct parts to implement so existing tests pass
25
- - Do not include build checks (all parts complete first, then build is verified together)
25
+ - Refer to Quality Gates and plan any required verification as a dedicated single verification part
26
+ - Do not make parallel implementation parts run duplicate full-build or full-test checks
26
27
 
27
28
  **Constraints:**
28
- - Parts do not run tests (handled by subsequent movements)
29
+ - If tests or build verification are needed, run them as a dedicated single verification part after dependent implementation parts are complete
29
30
  - Do not modify files outside your responsibility (causes conflicts)
@@ -104,6 +104,99 @@ Prohibited patterns:
104
104
  - Error handling centralized (no try-catch scattered everywhere)
105
105
  - Business logic not leaking into Controller/View
106
106
 
107
+ ## Resolve at the Boundary
108
+
109
+ Values such as config, options, providers, permissions, and paths should be resolved at the boundary before entering the core flow. Main processing should assume values are already resolved and should not keep asking config sources.
110
+
111
+ | Criteria | Judgment |
112
+ |----------|----------|
113
+ | Create a resolved object such as `ExecutionContext` or `ResolvedOptions` at the entry point | OK |
114
+ | Orchestration layers handle only resolved values | OK |
115
+ | Lower layers reload global/project/env and resolve the same value again | REJECT |
116
+ | Separate resolution functions exist for display and execution | REJECT |
117
+ | Unresolved options are passed deep and later fixed with `??` | REJECT |
118
+
119
+ ```typescript
120
+ // REJECT - Execution layer knows config sources directly
121
+ async function executePiece(options) {
122
+ const engine = new PieceEngine({
123
+ provider: options.provider ?? globalConfig.provider,
124
+ });
125
+ }
126
+
127
+ class AgentRunner {
128
+ run(step, options) {
129
+ const provider = options.provider ?? resolveProviderFromConfig();
130
+ return getProvider(provider).call();
131
+ }
132
+ }
133
+
134
+ // OK - Resolve at the boundary, use resolved values internally
135
+ async function executePiece(options) {
136
+ const context = resolveExecutionContext(options);
137
+ const engine = new PieceEngine(context);
138
+ }
139
+
140
+ class AgentRunner {
141
+ run(step, options) {
142
+ return getProvider(options.resolvedProvider).call();
143
+ }
144
+ }
145
+ ```
146
+
147
+ ### Tell, Don't Ask
148
+
149
+ Do not make lower layers inspect config sources and decide for themselves. Upper layers should tell them what to use by passing resolved values. Separate value selection from execution.
150
+
151
+ | Pattern | Judgment |
152
+ |---------|----------|
153
+ | Upper layer passes a value such as `resolvedProvider` | OK |
154
+ | Lower layer inspects `options` and resolves on its own | REJECT |
155
+ | Execution object exposes only `run()` after `setup(config)` | OK |
156
+ | Runtime branches call `getGlobalConfig()` during execution | REJECT |
157
+
158
+ ### Anti-Corruption Layer
159
+
160
+ Precedence resolution and external config formats belong in a dedicated boundary layer. Pass only normalized internal values into the core model.
161
+
162
+ | Pattern | Judgment |
163
+ |---------|----------|
164
+ | Encapsulate YAML/env/CLI differences in a resolver/adapter | OK |
165
+ | Domain layer directly handles env var names or config key strings | REJECT |
166
+ | Conversion from external form to internal form is centralized in one place | OK |
167
+ | Same normalization logic is copied in multiple places | REJECT |
168
+
169
+ ### Phase Separation
170
+
171
+ Separate input, interpretation, execution, and output into distinct stages. Iterative processing should, as much as possible, receive already interpreted input in bulk and then repeat only execution.
172
+
173
+ | Criteria | Judgment |
174
+ |----------|----------|
175
+ | Convert raw input into a `Resolved*` type at the boundary before entering the core flow | OK |
176
+ | Loop body handles only execution on resolved data | OK |
177
+ | Config/env/options are interpreted inside every iteration | REJECT |
178
+ | Each iteration packs `input -> interpret -> execute -> output` into one function | REJECT |
179
+ | Even when optimization requires incremental handling, interpretation is isolated in a dedicated method | OK |
180
+
181
+ ```typescript
182
+ // REJECT - Each iteration also interprets input
183
+ for (const item of items) {
184
+ const resolved = resolveItem(item, rawOptions, config);
185
+ const result = execute(resolved);
186
+ output(result);
187
+ }
188
+
189
+ // OK - Interpret first, iterations only execute
190
+ const resolvedItems = items.map((item) => resolveItem(item, rawOptions, config));
191
+
192
+ for (const item of resolvedItems) {
193
+ const result = execute(item);
194
+ output(result);
195
+ }
196
+ ```
197
+
198
+ Even when interpretation must happen incrementally, keep `nextRawInput()`, `resolveInput()`, and `executeResolved()` as separate responsibilities. Performance constraints may compress phases, but must not mix responsibilities.
199
+
107
200
  ## Code Quality Detection
108
201
 
109
202
  **Explanatory Comment (What/How) Detection Criteria:**
@@ -117,7 +117,20 @@ Good Projection:
117
117
 
118
118
  ## Query Side Design
119
119
 
120
- Controller uses QueryGateway. Does not use Repository directly.
120
+ Query side operates on an event-driven PubSub model. Projections update Read Models via EventHandler, and queries read from Read Models.
121
+
122
+ Event distribution uses PubSub (via message broker) to deliver events to all instances. Do not use mechanisms that assume delivery to the same instance.
123
+
124
+ - **Subscription Query** (e.g., Axon's `subscriptionQuery()`): delivers change notifications back to the subscribing instance, but in distributed environments or when using third-party event store plugins, the subscribing instance and the notified instance may differ, making it impossible to return the response on the same machine. When synchronous response is needed, use reactive polling to wait for Read Model updates.
125
+ - **Subscribing event processor** (e.g., Axon's `SubscribingEventProcessor`): relies on local event bus subscription, so only the instance that emitted the event receives it. In distributed environments, other instances' Projections are not updated. Use PubSub to distribute events to all instances.
126
+
127
+ | Criteria | Judgment |
128
+ |----------|----------|
129
+ | Using Subscription Query (e.g., Axon's `subscriptionQuery()`) | REJECT. Does not work in distributed environments. Use reactive polling |
130
+ | Using Subscribing event processor (e.g., Axon's `SubscribingEventProcessor`) | REJECT. Local delivery only. Other instances not updated in distributed environments |
131
+ | Controller directly referencing Repository | REJECT. Must go through UseCase layer |
132
+ | Query side referencing Command Model | REJECT |
133
+ | QueryHandler issuing commands | REJECT |
121
134
 
122
135
  Types between layers:
123
136
  - `application/query/` - Query result types (e.g., `OrderDetail`)
@@ -146,7 +159,7 @@ fun handle(query: GetOrderDetailQuery): OrderDetail? {
146
159
  return OrderDetail(...)
147
160
  }
148
161
 
149
- // Controller - converts to adapter layer type
162
+ // Controller - synchronous return is fine for simple reads
150
163
  @GetMapping("/{id}")
151
164
  fun getById(@PathVariable id: String): ResponseEntity<OrderDetailResponse> {
152
165
  val detail = queryGateway.query(
@@ -163,16 +176,62 @@ Structure:
163
176
  Controller (adapter) → QueryGateway → QueryHandler (application) → Repository
164
177
  ↓ ↓
165
178
  Response.from(detail) OrderDetail
179
+
180
+ Event flow (PubSub):
181
+ Aggregate → Event Bus → Projection(@EventHandler) → Repository(Read Model)
182
+
183
+ QueryHandler reads from here
166
184
  ```
167
185
 
168
186
  ## Eventual Consistency
169
187
 
170
- | Situation | Response |
171
- |-----------|----------|
172
- | UI expects immediate updates | Redesign or polling/WebSocket |
188
+ When synchronous response is needed after command dispatch, use reactive polling to wait for Projection updates.
189
+
190
+ | Criteria | Judgment |
191
+ |----------|----------|
192
+ | Using Subscription Query to wait for Projection updates | REJECT. Does not work in distributed environments. Use reactive polling |
193
+ | UI expects immediate updates | Polling or WebSocket |
173
194
  | Consistency delay exceeds tolerance | Reconsider architecture |
174
195
  | Compensating transactions undefined | Request failure scenario review |
175
196
 
197
+ ### Reactive Polling
198
+
199
+ Pattern: dispatch command → poll for Projection update completion.
200
+
201
+ ```kotlin
202
+ // UseCase: send command → poll for completion
203
+ fun execute(input: PlaceOrderInput): Mono<PlaceOrderOutput> {
204
+ val orderId = UUID.randomUUID().toString()
205
+ return Mono.fromCallable { validatePreConditions(input) }
206
+ .subscribeOn(Schedulers.boundedElastic())
207
+ .flatMap {
208
+ Mono.fromFuture(commandGateway.send<Any>(
209
+ PlaceOrderCommand(orderId, input.customerId, input.items)
210
+ ))
211
+ }
212
+ .then(pollForCompletion(orderId))
213
+ .thenReturn(PlaceOrderOutput(orderId))
214
+ }
215
+
216
+ // Polling: wait for Projection update
217
+ private fun pollForCompletion(orderId: String): Mono<Void> {
218
+ return ReactivePolling.waitFor(
219
+ supplier = { orderRepository.findById(orderId).orElse(null) },
220
+ condition = { it.sagaCompleted || it.status == OrderStatus.CONFIRMED },
221
+ timeout = Duration.ofSeconds(60),
222
+ maxAttempts = 300
223
+ )
224
+ }
225
+ ```
226
+
227
+ When polling is appropriate:
228
+ - Need to wait for Saga completion before returning response
229
+ - Need to return created resource ID after command dispatch
230
+
231
+ When polling is not needed:
232
+ - Simple operations that complete with just command dispatch (no result waiting)
233
+ - UI does not require real-time updates
234
+
176
235
  ## Saga vs EventHandler
177
236
 
178
237
  Saga is used only for "operations between multiple aggregates where contention occurs".
@@ -9,6 +9,14 @@
9
9
  ### Objective
10
10
  {What needs to be achieved}
11
11
 
12
+ ### Decomposed Requirements
13
+ | # | Requirement | Type | Notes |
14
+ |---|-------------|------|-------|
15
+ | 1 | {requirement 1} | Explicit / Implicit | {Notes when a composite requirement was split} |
16
+
17
+ - If a sentence contains multiple conditions, split it into the smallest independently verifiable rows
18
+ - Put parallel expressions such as `A/B`, `global/project`, `JSON/leaf`, `allow/deny`, and `read/write` on separate rows
19
+
12
20
  ### Reference Material Findings (when reference material exists)
13
21
  {Overview of reference implementation's approach and key differences from current implementation}
14
22
 
@@ -7,17 +7,19 @@
7
7
  {Summarize the result in 1-2 sentences}
8
8
 
9
9
  ## Requirements Cross-Reference
10
- | # | Requirement (from task) | Satisfied | Evidence (file:line) |
11
- |---|----------------------|-----------|----------------------|
12
- | 1 | {requirement 1} | ✅/❌ | `src/file.ts:42` |
10
+ | # | Requirement (from task) | Status | Evidence (file:line) | Comment |
11
+ |---|-------------------------|--------|----------------------|---------|
12
+ | 1 | {requirement 1} | Satisfied / Unmet / Unverified | `src/file.ts:42` | {Notes} |
13
13
 
14
- - If even one exists, REJECT is mandatory
15
- - A without evidence is invalid (must be verified in actual code)
14
+ - If a sentence contains multiple conditions, split it into multiple independently verifiable rows
15
+ - If even one `Unmet` row exists, REJECT is mandatory
16
+ - `Satisfied` without evidence is invalid (must be verified in actual code)
17
+ - Do not mark a row `Satisfied` when only part of the cases is covered
16
18
 
17
19
  ## Scope Check
18
- | # | Out-of-scope Change | File | Justification |
19
- |---|---------------------|------|---------------|
20
- | 1 | {change not in requirements} | `src/file.ts` | Justified/Unnecessary |
20
+ | # | Out-of-scope Change | File | Justification | Comment |
21
+ |---|---------------------|------|---------------|---------|
22
+ | 1 | {change not in requirements} | `src/file.ts` | Justified / Needs review / Unnecessary | {Reason} |
21
23
 
22
24
  ## Current Iteration Findings (new)
23
25
  | # | finding_id | family_tag | Category | Location | Issue | Fix Suggestion |
@@ -19,6 +19,14 @@ Extract requirements from the task spec and verify each one individually against
19
19
  - Do not mark a row as ✅ when the evidence covers only part of the cases
20
20
  - Do not rely on plan report's judgment; independently verify each requirement
21
21
 
22
+ ## Re-evaluation of Prior Findings
23
+ | finding_id | Prior Status | Re-evaluation | Evidence |
24
+ |------------|--------------|---------------|----------|
25
+ | {id} | new / persists / resolved | valid / false_positive / overreach | `src/file.ts:42`, `reports/plan.md` |
26
+
27
+ - If final judgment differs from prior review conclusions, explain why with evidence
28
+ - If marking `false_positive` or `overreach`, state whether it conflicts with the task objective, the plan, or both
29
+
22
30
  ## Validation Summary
23
31
  | Item | Status | Verification Method |
24
32
  |------|--------|-------------------|
@@ -118,8 +118,15 @@ Do not over-interpret the task order. Plan only what is written.
118
118
  - Don't plan to leave TODO comments. Either do it now, or don't
119
119
  - Don't put deferrable decisions in Open Questions. If you can resolve it by reading code, investigate and decide. Only include items that genuinely require user input
120
120
 
121
+ **Requirement decomposition discipline:**
122
+ - Limit requirements to explicit requirements and implicit requirements that follow directly from them
123
+ - When adding an implicit requirement, be able to state which explicit requirement it comes from
124
+ - Do not turn general best practices, future possibilities, or personal preferences into requirements
125
+ - Decompose requirements only to make them independently verifiable, not to invent new work
126
+
121
127
  **Important:**
122
128
  **Investigate before planning.** Don't plan without reading existing code.
123
129
  **Design simply.** No excessive abstractions or future-proofing. Provide enough direction for implementation without hesitation.
130
+ **Do not jump when decomposing requirements.** Split only as far as needed for verification.
124
131
  **Ask all clarification questions at once.** Do not ask follow-up questions in multiple rounds.
125
132
  **Verify against knowledge/policy constraints** before specifying implementation approach. Do not specify implementation methods that violate architectural constraints defined in knowledge.
@@ -20,7 +20,14 @@ You are a requirements fulfillment verifier. You verify that changes satisfy the
20
20
  ## Behavioral Principles
21
21
 
22
22
  - Verify requirements one by one. Never say "broadly satisfied" in aggregate
23
+ - If a sentence contains multiple conditions, split it into the smallest independently verifiable units before judging
24
+ - Do not treat parallel expressions such as `A/B`, `global/project`, `JSON/leaf`, `allow/deny`, or `read/write` as a single requirement
23
25
  - Verify in actual code. Do not take "implemented" claims at face value
26
+ - Do not mark a composite requirement satisfied based on only one side of the cases
27
+ - Never write "satisfied" without concrete file:line evidence
28
+ - If evidence is missing, mark it as unverified rather than unimplemented
24
29
  - Guard the scope. Question any change not covered by the requirements
30
+ - For out-of-scope changes, judge not only whether they exist but whether they are justified
25
31
  - Do not tolerate ambiguity. Flag unclear or underspecified requirements
26
32
  - Pay attention to deletions. Confirm that file or code removals are justified by the requirements
33
+ - `plan.md` and `coder-decisions.md` are references, not final evidence; always ground the judgment in actual code and diffs