workflow-ai 1.0.68 → 1.2.1

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 (585) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +105 -7
  3. package/configs/pipeline.yaml +23 -2
  4. package/package.json +44 -41
  5. package/src/lib/operations/plans.mjs +85 -0
  6. package/src/lib/operations/skills.mjs +124 -0
  7. package/src/lib/operations/tickets.mjs +430 -0
  8. package/src/lib/utils.mjs +286 -286
  9. package/src/runner.mjs +314 -34
  10. package/src/scripts/check-conditions.js +2 -2
  11. package/src/scripts/get-next-id.js +8 -31
  12. package/src/scripts/pick-next-task.js +3 -9
  13. package/src/skills/coach/SKILL.md +1 -1
  14. package/src/skills/manual-testing/SKILL.md +2 -0
  15. package/src/skills/review-result/SKILL.md +1 -0
  16. package/src/scripts/tests/timeout-cascade.test.js +0 -28
  17. package/src/skills/analyze-report/README.md +0 -44
  18. package/src/skills/analyze-report/algorithms/progress-assessment.md +0 -108
  19. package/src/skills/analyze-report/knowledge/analysis-frameworks.md +0 -66
  20. package/src/skills/analyze-report/knowledge/report-structure.md +0 -61
  21. package/src/skills/analyze-report/scripts/calc-plan-metrics.js +0 -234
  22. package/src/skills/analyze-report/templates/analysis-report.md +0 -80
  23. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-1.md +0 -69
  24. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-2.md +0 -103
  25. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-3.md +0 -99
  26. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/judge.json +0 -163
  27. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-1.md +0 -89
  28. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-2.md +0 -88
  29. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-3.md +0 -100
  30. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-1.md +0 -77
  31. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-2.md +0 -64
  32. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-3.md +0 -110
  33. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-1.md +0 -74
  34. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-2.md +0 -38
  35. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-3.md +0 -61
  36. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/meta.json +0 -115
  37. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001-evidence-from-log.yaml +0 -60
  38. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-1.md +0 -90
  39. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-2.md +0 -89
  40. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-3.md +0 -77
  41. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/judge.json +0 -163
  42. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-1.md +0 -84
  43. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-2.md +0 -77
  44. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-3.md +0 -89
  45. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-1.md +0 -103
  46. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-2.md +0 -103
  47. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-3.md +0 -103
  48. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-1.md +0 -93
  49. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-2.md +0 -93
  50. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-3.md +0 -86
  51. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/meta.json +0 -115
  52. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002-result-block-format.yaml +0 -44
  53. package/src/skills/analyze-report/tests/fixtures/REPORT-002-incorrect-attribution.md +0 -27
  54. package/src/skills/analyze-report/tests/fixtures/pipeline-2026-04-06_qa-001-skip.log +0 -32
  55. package/src/skills/analyze-report/tests/index.yaml +0 -25
  56. package/src/skills/analyze-report/tests/rubrics/evidence-from-log.md +0 -22
  57. package/src/skills/analyze-report/tests/rubrics/result-block-format.md +0 -22
  58. package/src/skills/analyze-report/workflows/progress.md +0 -158
  59. package/src/skills/analyze-report/workflows/retrospective.md +0 -143
  60. package/src/skills/coach/README.md +0 -43
  61. package/src/skills/coach/SKILL.md.legacy +0 -157
  62. package/src/skills/coach/algorithms/gap-analysis.md +0 -69
  63. package/src/skills/coach/algorithms/improvement-prioritization.md +0 -62
  64. package/src/skills/coach/algorithms/skill-scoring.md +0 -80
  65. package/src/skills/coach/knowledge/audit-applied-changes-clean.txt +0 -11
  66. package/src/skills/coach/knowledge/backlog-management.md +0 -67
  67. package/src/skills/coach/knowledge/backlog-management.md.legacy +0 -90
  68. package/src/skills/coach/knowledge/common-antipatterns.md +0 -76
  69. package/src/skills/coach/knowledge/prompt-engineering.md +0 -45
  70. package/src/skills/coach/knowledge/shared-knowledge-guide.md +0 -44
  71. package/src/skills/coach/knowledge/skill-anatomy.md +0 -49
  72. package/src/skills/coach/knowledge/test-authorship.md +0 -141
  73. package/src/skills/coach/templates/audit-report.md +0 -39
  74. package/src/skills/coach/templates/coach-backlog-init.yaml +0 -14
  75. package/src/skills/coach/templates/coach-backlog-init.yaml.legacy +0 -10
  76. package/src/skills/coach/templates/improvement-plan.md +0 -42
  77. package/src/skills/coach/templates/new-skill.md +0 -95
  78. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-1.md +0 -58
  79. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-2.md +0 -65
  80. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-3.md +0 -58
  81. package/src/skills/coach/tests/cases/TC-COACH-001/current/judge.json +0 -151
  82. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-1.md +0 -46
  83. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-2.md +0 -0
  84. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-3.md +0 -75
  85. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-1.md +0 -81
  86. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-2.md +0 -101
  87. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-3.md +0 -91
  88. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-1.md +0 -48
  89. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-2.md +0 -30
  90. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-3.md +0 -55
  91. package/src/skills/coach/tests/cases/TC-COACH-001/current/meta.json +0 -94
  92. package/src/skills/coach/tests/cases/TC-COACH-001-evidence-based-temporal-diagram.yaml +0 -53
  93. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-1.md +0 -46
  94. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-2.md +0 -50
  95. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-3.md +0 -48
  96. package/src/skills/coach/tests/cases/TC-COACH-002/current/judge.json +0 -151
  97. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-1.md +0 -0
  98. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-2.md +0 -37
  99. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-3.md +0 -30
  100. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-1.md +0 -23
  101. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-2.md +0 -29
  102. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-3.md +0 -35
  103. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-1.md +0 -13
  104. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-2.md +0 -19
  105. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-3.md +0 -33
  106. package/src/skills/coach/tests/cases/TC-COACH-002/current/meta.json +0 -94
  107. package/src/skills/coach/tests/cases/TC-COACH-002-root-cause-first.yaml +0 -57
  108. package/src/skills/coach/tests/fixtures/pipeline-2026-04-06_id-collision.log +0 -77
  109. package/src/skills/coach/tests/index.yaml +0 -29
  110. package/src/skills/coach/tests/rubrics/calibration/evidence-based-bad.md +0 -13
  111. package/src/skills/coach/tests/rubrics/calibration/evidence-based-good.md +0 -29
  112. package/src/skills/coach/tests/rubrics/evidence-based.md +0 -26
  113. package/src/skills/coach/tests/rubrics/root-cause-first.md +0 -21
  114. package/src/skills/coach/workflows/analyze.md +0 -79
  115. package/src/skills/coach/workflows/analyze.md.legacy +0 -64
  116. package/src/skills/coach/workflows/audit.md +0 -74
  117. package/src/skills/coach/workflows/audit.md.legacy +0 -59
  118. package/src/skills/coach/workflows/create.md +0 -80
  119. package/src/skills/coach/workflows/create.md.legacy +0 -67
  120. package/src/skills/coach/workflows/improve.md +0 -71
  121. package/src/skills/coach/workflows/improve.md.legacy +0 -60
  122. package/src/skills/coach/workflows/research.md +0 -55
  123. package/src/skills/coach/workflows/review.md +0 -52
  124. package/src/skills/coach/workflows/review.md.legacy +0 -48
  125. package/src/skills/coach/workflows/test.md +0 -97
  126. package/src/skills/create-plan/README.md +0 -39
  127. package/src/skills/create-plan/algorithms/risk-assessment.md +0 -73
  128. package/src/skills/create-plan/knowledge/plan-completeness.md +0 -67
  129. package/src/skills/create-plan/knowledge/plan-lifecycle.md +0 -33
  130. package/src/skills/create-plan/knowledge/task-verification-pairs.md +0 -151
  131. package/src/skills/create-plan/knowledge/test-hygiene.md +0 -47
  132. package/src/skills/create-plan/scripts/validate-completeness.js +0 -182
  133. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-1.md +0 -5
  134. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-2.md +0 -39
  135. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-3.md +0 -35
  136. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/judge.json +0 -167
  137. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-1.md +0 -5
  138. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-2.md +0 -10
  139. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-3.md +0 -5
  140. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-1.md +0 -26
  141. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-2.md +0 -86
  142. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-3.md +0 -5
  143. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-1.md +0 -11
  144. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-2.md +0 -15
  145. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-3.md +0 -14
  146. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/meta.json +0 -119
  147. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001-validate-completeness.yaml +0 -41
  148. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-1.md +0 -25
  149. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-2.md +0 -30
  150. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-3.md +0 -37
  151. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/judge.json +0 -164
  152. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-1.md +0 -3
  153. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-2.md +0 -11
  154. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-3.md +0 -13
  155. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-1.md +0 -44
  156. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-2.md +0 -5
  157. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-3.md +0 -49
  158. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-1.md +0 -6
  159. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-2.md +0 -11
  160. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-3.md +0 -16
  161. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/meta.json +0 -116
  162. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002-task-granularity.yaml +0 -39
  163. package/src/skills/create-plan/tests/index.yaml +0 -25
  164. package/src/skills/create-plan/tests/rubrics/task-granularity.md +0 -21
  165. package/src/skills/create-plan/tests/rubrics/validate-completeness.md +0 -21
  166. package/src/skills/create-plan/workflows/create.md +0 -136
  167. package/src/skills/create-report/README.md +0 -40
  168. package/src/skills/create-report/algorithms/metric-calculation.md +0 -93
  169. package/src/skills/create-report/knowledge/report-metrics.md +0 -82
  170. package/src/skills/create-report/scripts/calc-metrics.js +0 -383
  171. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-1.md +0 -25
  172. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-2.md +0 -26
  173. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-3.md +0 -28
  174. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/judge.json +0 -163
  175. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-1.md +0 -4
  176. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-2.md +0 -3
  177. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-3.md +0 -6
  178. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-1.md +0 -8
  179. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-2.md +0 -12
  180. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-3.md +0 -7
  181. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-1.md +0 -12
  182. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-2.md +0 -22
  183. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-3.md +0 -13
  184. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/meta.json +0 -115
  185. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001-root-cause-attribution.yaml +0 -57
  186. package/src/skills/create-report/tests/index.yaml +0 -20
  187. package/src/skills/create-report/tests/rubrics/root-cause-attribution.md +0 -21
  188. package/src/skills/create-report/workflows/standard.md +0 -175
  189. package/src/skills/decompose-gaps/README.md +0 -39
  190. package/src/skills/decompose-gaps/algorithms/scope-check.md +0 -110
  191. package/src/skills/decompose-gaps/knowledge/scope-validation.md +0 -65
  192. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-1.md +0 -41
  193. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-2.md +0 -41
  194. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-3.md +0 -56
  195. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/judge.json +0 -164
  196. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-1.md +0 -25
  197. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-2.md +0 -17
  198. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-3.md +0 -22
  199. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-1.md +0 -25
  200. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-2.md +0 -5
  201. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-3.md +0 -29
  202. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-1.md +0 -27
  203. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-2.md +0 -35
  204. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-3.md +0 -18
  205. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/meta.json +0 -116
  206. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001-scope-exclusion.yaml +0 -46
  207. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-1.md +0 -27
  208. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-2.md +0 -30
  209. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-3.md +0 -27
  210. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/judge.json +0 -163
  211. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-1.md +0 -0
  212. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-2.md +0 -15
  213. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-3.md +0 -7
  214. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-1.md +0 -21
  215. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-2.md +0 -38
  216. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-3.md +0 -16
  217. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-1.md +0 -5
  218. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-2.md +0 -10
  219. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-3.md +0 -9
  220. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/meta.json +0 -115
  221. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002-glob-before-write.yaml +0 -36
  222. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-1.md +0 -30
  223. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-2.md +0 -30
  224. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-3.md +0 -30
  225. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/judge.json +0 -165
  226. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-1.md +0 -5
  227. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-2.md +0 -26
  228. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-3.md +0 -5
  229. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-1.md +0 -39
  230. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-2.md +0 -37
  231. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-3.md +0 -45
  232. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-1.md +0 -26
  233. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-2.md +0 -27
  234. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-3.md +0 -7
  235. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/meta.json +0 -117
  236. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003-parent-plan-mandatory.yaml +0 -41
  237. package/src/skills/decompose-gaps/tests/index.yaml +0 -30
  238. package/src/skills/decompose-gaps/tests/rubrics/glob-before-write.md +0 -21
  239. package/src/skills/decompose-gaps/tests/rubrics/parent-plan-mandatory.md +0 -22
  240. package/src/skills/decompose-gaps/tests/rubrics/scope-exclusion.md +0 -21
  241. package/src/skills/decompose-gaps/workflows/decompose.md +0 -123
  242. package/src/skills/decompose-plan/README.md +0 -43
  243. package/src/skills/decompose-plan/algorithms/deduplication.md +0 -101
  244. package/src/skills/decompose-plan/knowledge/atomicity-checklist.md +0 -139
  245. package/src/skills/decompose-plan/knowledge/capabilities.md +0 -68
  246. package/src/skills/decompose-plan/knowledge/human-task-rules.md +0 -82
  247. package/src/skills/decompose-plan/knowledge/scope-guard-checklist.md +0 -73
  248. package/src/skills/decompose-plan/scripts/check-atomicity-limit.js +0 -47
  249. package/src/skills/decompose-plan/scripts/check-duplicates.js +0 -323
  250. package/src/skills/decompose-plan/scripts/verify-atomicity.js +0 -408
  251. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-1.md +0 -30
  252. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-2.md +0 -36
  253. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-3.md +0 -37
  254. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/judge.json +0 -163
  255. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-1.md +0 -20
  256. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-2.md +0 -17
  257. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-3.md +0 -28
  258. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-1.md +0 -114
  259. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-2.md +0 -137
  260. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-3.md +0 -188
  261. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-1.md +0 -0
  262. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-2.md +0 -32
  263. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-3.md +0 -110
  264. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/meta.json +0 -115
  265. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001-atomicity-no-1to1.yaml +0 -56
  266. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-1.md +0 -47
  267. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-2.md +0 -54
  268. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-3.md +0 -43
  269. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/judge.json +0 -163
  270. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-1.md +0 -15
  271. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-2.md +0 -5
  272. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-3.md +0 -12
  273. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-1.md +0 -34
  274. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-2.md +0 -30
  275. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-3.md +0 -35
  276. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-1.md +0 -0
  277. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-2.md +0 -31
  278. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-3.md +0 -0
  279. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/meta.json +0 -115
  280. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002-get-next-id-mandatory.yaml +0 -44
  281. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-1.md +0 -21
  282. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-2.md +0 -38
  283. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-3.md +0 -30
  284. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/judge.json +0 -163
  285. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-1.md +0 -31
  286. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-2.md +0 -35
  287. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-3.md +0 -48
  288. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-1.md +0 -167
  289. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-2.md +0 -62
  290. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-3.md +0 -174
  291. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-1.md +0 -0
  292. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-2.md +0 -0
  293. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-3.md +0 -0
  294. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/meta.json +0 -115
  295. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003-verbatim-dod-transfer.yaml +0 -42
  296. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-1.md +0 -55
  297. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-2.md +0 -49
  298. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-3.md +0 -49
  299. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/judge.json +0 -163
  300. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-1.md +0 -104
  301. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-2.md +0 -45
  302. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-3.md +0 -58
  303. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-1.md +0 -193
  304. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-2.md +0 -202
  305. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-3.md +0 -155
  306. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-1.md +0 -52
  307. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-2.md +0 -17
  308. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-3.md +0 -0
  309. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/meta.json +0 -115
  310. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004-executor-atomicity.yaml +0 -64
  311. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-1.md +0 -59
  312. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-2.md +0 -204
  313. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-3.md +0 -213
  314. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/judge.json +0 -163
  315. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-1.md +0 -0
  316. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-2.md +0 -57
  317. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-3.md +0 -54
  318. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-1.md +0 -147
  319. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-2.md +0 -165
  320. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-3.md +0 -133
  321. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-1.md +0 -81
  322. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-2.md +0 -108
  323. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-3.md +0 -3
  324. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/meta.json +0 -114
  325. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005-capabilities-registry.yaml +0 -78
  326. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-1.md +0 -225
  327. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-2.md +0 -66
  328. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-3.md +0 -36
  329. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/judge.json +0 -163
  330. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-1.md +0 -42
  331. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-2.md +0 -67
  332. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-3.md +0 -40
  333. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-1.md +0 -122
  334. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-2.md +0 -131
  335. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-3.md +0 -138
  336. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-1.md +0 -41
  337. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-2.md +0 -88
  338. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-3.md +0 -0
  339. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/meta.json +0 -115
  340. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006-dod-threshold.yaml +0 -72
  341. package/src/skills/decompose-plan/tests/index.yaml +0 -45
  342. package/src/skills/decompose-plan/tests/rubrics/atomicity-no-1to1.md +0 -21
  343. package/src/skills/decompose-plan/tests/rubrics/capabilities-registry.md +0 -21
  344. package/src/skills/decompose-plan/tests/rubrics/dod-threshold.md +0 -21
  345. package/src/skills/decompose-plan/tests/rubrics/executor-atomicity.md +0 -21
  346. package/src/skills/decompose-plan/tests/rubrics/get-next-id-mandatory.md +0 -21
  347. package/src/skills/decompose-plan/tests/rubrics/verbatim-dod-transfer.md +0 -21
  348. package/src/skills/decompose-plan/workflows/decompose.md +0 -305
  349. package/src/skills/deep-research/README.md +0 -36
  350. package/src/skills/deep-research/algorithms/source-scoring.md +0 -63
  351. package/src/skills/deep-research/algorithms/synthesis.md +0 -67
  352. package/src/skills/deep-research/knowledge/data-validation.md +0 -44
  353. package/src/skills/deep-research/knowledge/perplexity-config.md +0 -30
  354. package/src/skills/deep-research/knowledge/research-methodology.md +0 -54
  355. package/src/skills/deep-research/knowledge/source-evaluation.md +0 -33
  356. package/src/skills/deep-research/scripts/perplexity-research.js +0 -315
  357. package/src/skills/deep-research/templates/brief-summary.md +0 -25
  358. package/src/skills/deep-research/templates/research-report.md +0 -76
  359. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-1.md +0 -48
  360. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-2.md +0 -88
  361. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-3.md +0 -56
  362. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/judge.json +0 -163
  363. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-1.md +0 -58
  364. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-2.md +0 -249
  365. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-3.md +0 -44
  366. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-1.md +0 -96
  367. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-2.md +0 -56
  368. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-3.md +0 -94
  369. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-1.md +0 -11
  370. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-2.md +0 -1
  371. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-3.md +0 -1
  372. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/meta.json +0 -115
  373. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001-self-check-url.yaml +0 -58
  374. package/src/skills/deep-research/tests/index.yaml +0 -20
  375. package/src/skills/deep-research/tests/rubrics/self-check-url.md +0 -34
  376. package/src/skills/deep-research/workflows/base-checklist.md +0 -19
  377. package/src/skills/deep-research/workflows/benchmark.md +0 -38
  378. package/src/skills/deep-research/workflows/competitor.md +0 -44
  379. package/src/skills/deep-research/workflows/custom.md +0 -32
  380. package/src/skills/deep-research/workflows/market.md +0 -44
  381. package/src/skills/deep-research/workflows/technology.md +0 -40
  382. package/src/skills/deep-research/workflows/trend.md +0 -40
  383. package/src/skills/execute-task/README.md +0 -44
  384. package/src/skills/execute-task/algorithms/execution-strategy.md +0 -136
  385. package/src/skills/execute-task/knowledge/context-checkpoints.md +0 -75
  386. package/src/skills/execute-task/knowledge/ticket-structure.md +0 -70
  387. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-1.md +0 -5
  388. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-2.md +0 -5
  389. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-3.md +0 -5
  390. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/judge.json +0 -124
  391. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-1.md +0 -4
  392. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-2.md +0 -4
  393. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-3.md +0 -4
  394. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-1.md +0 -4
  395. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-2.md +0 -4
  396. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-3.md +0 -11
  397. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/meta.json +0 -88
  398. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001-no-ticket-creation.yaml +0 -48
  399. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-1.md +0 -5
  400. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-2.md +0 -6
  401. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-3.md +0 -5
  402. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/judge.json +0 -124
  403. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-1.md +0 -4
  404. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-2.md +0 -4
  405. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-3.md +0 -8
  406. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-1.md +0 -9
  407. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-2.md +0 -26
  408. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-3.md +0 -4
  409. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/meta.json +0 -89
  410. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002-no-duplicate-dod.yaml +0 -44
  411. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-1.md +0 -5
  412. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-2.md +0 -5
  413. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-3.md +0 -5
  414. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/judge.json +0 -46
  415. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/meta.json +0 -37
  416. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003-verification-proportionality.yaml +0 -46
  417. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-1.md +0 -18
  418. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-2.md +0 -16
  419. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-3.md +0 -14
  420. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/judge.json +0 -124
  421. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-1.md +0 -5
  422. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-2.md +0 -5
  423. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-3.md +0 -1
  424. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-1.md +0 -8
  425. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-2.md +0 -5
  426. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-3.md +0 -4
  427. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/meta.json +0 -89
  428. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004-no-foreign-ticket-edit.yaml +0 -50
  429. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-1.md +0 -5
  430. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-2.md +0 -5
  431. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-3.md +0 -5
  432. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/judge.json +0 -124
  433. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-1.md +0 -15
  434. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-2.md +0 -4
  435. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-3.md +0 -5
  436. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-1.md +0 -11
  437. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-2.md +0 -11
  438. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-3.md +0 -4
  439. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/meta.json +0 -88
  440. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005-ticket-fields-updated.yaml +0 -39
  441. package/src/skills/execute-task/tests/fixtures/IMPL-902-create-file.md +0 -41
  442. package/src/skills/execute-task/tests/fixtures/IMPL-904-current-task.md +0 -40
  443. package/src/skills/execute-task/tests/fixtures/IMPL-906-fill-ticket.md +0 -42
  444. package/src/skills/execute-task/tests/fixtures/QA-901-button-click.md +0 -41
  445. package/src/skills/execute-task/tests/fixtures/QA-903-visual-figma.md +0 -40
  446. package/src/skills/execute-task/tests/fixtures/TASK-905-done-with-typo.md +0 -36
  447. package/src/skills/execute-task/tests/index.yaml +0 -39
  448. package/src/skills/execute-task/tests/rubrics/no-duplicate-dod.md +0 -22
  449. package/src/skills/execute-task/tests/rubrics/no-foreign-ticket-edit.md +0 -20
  450. package/src/skills/execute-task/tests/rubrics/no-ticket-creation.md +0 -21
  451. package/src/skills/execute-task/tests/rubrics/ticket-fields-updated.md +0 -23
  452. package/src/skills/execute-task/tests/rubrics/verification-proportionality.md +0 -22
  453. package/src/skills/execute-task/workflows/execute.md +0 -104
  454. package/src/skills/manual-testing/README.md +0 -63
  455. package/src/skills/manual-testing/algorithms/blocked-tool-strategy.md +0 -74
  456. package/src/skills/manual-testing/algorithms/bug-severity.md +0 -73
  457. package/src/skills/manual-testing/algorithms/mcp-budget.md +0 -97
  458. package/src/skills/manual-testing/algorithms/test-prioritization.md +0 -69
  459. package/src/skills/manual-testing/knowledge/browser-extension-testing.md +0 -102
  460. package/src/skills/manual-testing/knowledge/browser-tools.md +0 -114
  461. package/src/skills/manual-testing/knowledge/desktop-tools-advanced.md +0 -92
  462. package/src/skills/manual-testing/knowledge/desktop-tools-core.md +0 -76
  463. package/src/skills/manual-testing/knowledge/sandbox-advanced.md +0 -83
  464. package/src/skills/manual-testing/knowledge/sandbox-core.md +0 -67
  465. package/src/skills/manual-testing/knowledge/stateful-edge-cases.md +0 -69
  466. package/src/skills/manual-testing/knowledge/test-case-design.md +0 -107
  467. package/src/skills/manual-testing/knowledge/testing-types.md +0 -45
  468. package/src/skills/manual-testing/templates/bug-report.md +0 -52
  469. package/src/skills/manual-testing/templates/test-case.md +0 -34
  470. package/src/skills/manual-testing/templates/test-plan.md +0 -97
  471. package/src/skills/manual-testing/templates/test-session-report.md +0 -56
  472. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-1.md +0 -34
  473. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-2.md +0 -32
  474. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-3.md +0 -30
  475. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/judge.json +0 -163
  476. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-1.md +0 -0
  477. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-2.md +0 -7
  478. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-3.md +0 -0
  479. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-1.md +0 -4
  480. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-2.md +0 -15
  481. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-3.md +0 -8
  482. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-1.md +0 -5
  483. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-2.md +0 -7
  484. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-3.md +0 -7
  485. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/meta.json +0 -114
  486. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001-sandbox-mandatory.yaml +0 -38
  487. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-1.md +0 -44
  488. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-2.md +0 -32
  489. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-3.md +0 -47
  490. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/judge.json +0 -163
  491. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-1.md +0 -19
  492. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-2.md +0 -15
  493. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-3.md +0 -24
  494. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-1.md +0 -19
  495. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-2.md +0 -13
  496. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-3.md +0 -18
  497. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-1.md +0 -21
  498. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-2.md +0 -15
  499. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-3.md +0 -14
  500. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/meta.json +0 -114
  501. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002-visual-tc-screenshot.yaml +0 -37
  502. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-1.md +0 -76
  503. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-2.md +0 -71
  504. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-3.md +0 -85
  505. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/judge.json +0 -46
  506. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/meta.json +0 -36
  507. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003-qa-non-ui-assertion.yaml +0 -65
  508. package/src/skills/manual-testing/tests/index.yaml +0 -30
  509. package/src/skills/manual-testing/tests/last-run-tc001-sonnet.log +0 -140
  510. package/src/skills/manual-testing/tests/last-run-tc002.log +0 -1
  511. package/src/skills/manual-testing/tests/last-run.log +0 -1469
  512. package/src/skills/manual-testing/tests/rubrics/qa-non-ui-assertion.md +0 -31
  513. package/src/skills/manual-testing/tests/rubrics/sandbox-mandatory.md +0 -20
  514. package/src/skills/manual-testing/tests/rubrics/visual-tc-screenshot.md +0 -21
  515. package/src/skills/manual-testing/workflows/acceptance.md +0 -80
  516. package/src/skills/manual-testing/workflows/exploratory.md +0 -84
  517. package/src/skills/manual-testing/workflows/regression.md +0 -76
  518. package/src/skills/manual-testing/workflows/smoke.md +0 -109
  519. package/src/skills/manual-testing/workflows/test-plan.md +0 -75
  520. package/src/skills/review-result/README.md +0 -59
  521. package/src/skills/review-result/algorithms/verification.md +0 -112
  522. package/src/skills/review-result/knowledge/dod-patterns.md +0 -115
  523. package/src/skills/review-result/knowledge/test-hygiene.md +0 -44
  524. package/src/skills/review-result/scripts/verify-artifacts.js +0 -497
  525. package/src/skills/review-result/templates/verdict.md +0 -153
  526. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-1.md +0 -22
  527. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-2.md +0 -7
  528. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-3.md +0 -21
  529. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-1.md +0 -6
  530. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-2.md +0 -6
  531. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-3.md +0 -18
  532. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/judge.json +0 -164
  533. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-1.md +0 -5
  534. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-2.md +0 -7
  535. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-3.md +0 -6
  536. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-1.md +0 -49
  537. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-2.md +0 -28
  538. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-3.md +0 -37
  539. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-1.md +0 -22
  540. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-2.md +0 -13
  541. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-3.md +0 -21
  542. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/meta.json +0 -116
  543. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001-visual-tc-trigger.yaml +0 -51
  544. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-1.md +0 -23
  545. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-2.md +0 -22
  546. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-3.md +0 -28
  547. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-1.md +0 -4
  548. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-2.md +0 -36
  549. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-3.md +0 -4
  550. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/judge.json +0 -163
  551. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-1.md +0 -4
  552. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-2.md +0 -0
  553. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-3.md +0 -4
  554. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-1.md +0 -39
  555. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-2.md +0 -25
  556. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-3.md +0 -32
  557. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-1.md +0 -34
  558. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-2.md +0 -8
  559. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-3.md +0 -23
  560. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/meta.json +0 -115
  561. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002-path-line-suffix.yaml +0 -39
  562. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-1.md +0 -7
  563. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-2.md +0 -7
  564. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-3.md +0 -7
  565. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/judge.json +0 -163
  566. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-1.md +0 -5
  567. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-2.md +0 -5
  568. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-3.md +0 -11
  569. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-1.md +0 -16
  570. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-2.md +0 -18
  571. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-3.md +0 -17
  572. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-1.md +0 -17
  573. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-2.md +0 -31
  574. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-3.md +0 -5
  575. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/meta.json +0 -115
  576. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003-test-isolation.yaml +0 -50
  577. package/src/skills/review-result/tests/fixtures/IMPL-902-path-with-line.md +0 -43
  578. package/src/skills/review-result/tests/fixtures/QA-901-visual-button.md +0 -46
  579. package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/QA-904.md +0 -51
  580. package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/example-test.mjs +0 -36
  581. package/src/skills/review-result/tests/index.yaml +0 -30
  582. package/src/skills/review-result/tests/rubrics/path-line-suffix.md +0 -19
  583. package/src/skills/review-result/tests/rubrics/test-isolation.md +0 -20
  584. package/src/skills/review-result/tests/rubrics/visual-tc-trigger.md +0 -19
  585. package/src/skills/review-result/workflows/review.md +0 -209
package/src/runner.mjs CHANGED
@@ -1406,6 +1406,38 @@ class StageExecutor {
1406
1406
  class PipelineRunner {
1407
1407
  constructor(config, args) {
1408
1408
  this.config = config;
1409
+
1410
+ // Validate manual-gate stages in pipeline.yaml at startup
1411
+ if (config.pipeline && config.pipeline.stages) {
1412
+ for (const [stageId, stage] of Object.entries(config.pipeline.stages)) {
1413
+ if (stage.type === 'manual-gate') {
1414
+ // Validate goto.approved
1415
+ if (!stage.goto || !stage.goto.approved) {
1416
+ throw new Error(`pipeline.yaml validation error in stage '${stageId}' (type: manual-gate): missing required 'goto.approved'`);
1417
+ }
1418
+
1419
+ // Validate goto.rejected
1420
+ if (!stage.goto || !stage.goto.rejected) {
1421
+ throw new Error(`pipeline.yaml validation error in stage '${stageId}' (type: manual-gate): missing required 'goto.rejected'`);
1422
+ }
1423
+
1424
+ // Validate poll_interval_ms if present
1425
+ if (stage.poll_interval_ms !== undefined) {
1426
+ if (typeof stage.poll_interval_ms !== 'number' || stage.poll_interval_ms < 100) {
1427
+ throw new Error(`pipeline.yaml validation error in stage '${stageId}' (type: manual-gate): poll_interval_ms must be a number >= 100`);
1428
+ }
1429
+ }
1430
+
1431
+ // Validate timeout_seconds if present
1432
+ if (stage.timeout_seconds !== undefined) {
1433
+ if (typeof stage.timeout_seconds !== 'number' || stage.timeout_seconds <= 0) {
1434
+ throw new Error(`pipeline.yaml validation error in stage '${stageId}' (type: manual-gate): timeout_seconds must be a number > 0`);
1435
+ }
1436
+ }
1437
+ }
1438
+ }
1439
+ }
1440
+
1409
1441
  this.args = args;
1410
1442
  this.pipeline = config.pipeline;
1411
1443
  this.context = { ...this.pipeline.context };
@@ -1464,36 +1496,266 @@ class PipelineRunner {
1464
1496
  }
1465
1497
  }
1466
1498
 
1467
- /**
1468
- * Выполняет встроенный стейдж типа update-counter:
1469
- * инкрементирует счётчик и возвращает статус для goto-перехода.
1470
- *
1471
- * Конфигурация стейджа:
1472
- * type: update-counter
1473
- * counter: <name> — имя счётчика
1474
- * max: <number> — максимальное значение (опционально)
1475
- * goto:
1476
- * default: <stage> — следующий стейдж
1477
- * max_reached: <stage> — стейдж при достижении max
1478
- */
1479
- executeUpdateCounter(stageId, stage) {
1480
- const counterName = stage.counter;
1481
- if (!counterName) {
1482
- throw new Error(`Stage "${stageId}" has type update-counter but no counter specified`);
1483
- }
1499
+ /**
1500
+ * Вычисляет детерминированный идентификатор шага для approval-файла.
1501
+ * Формат: {ticket_id}_{stageId}_{attempt}
1502
+ *
1503
+ * @param {Object} context - Контекст выполнения пайплайна
1504
+ * @param {string} [context.ticket_id] - ID тикета (может быть undefined)
1505
+ * @param {string} stageId - Идентификатор стадии
1506
+ * @param {Object} counters - Счётчики выполнения
1507
+ * @param {number} [counters.task_attempts] - Номер попытки выполнения (0 если не задано)
1508
+ * @returns {string} Детерминированный step_id
1509
+ */
1510
+ computeStepId(context, stageId, counters) {
1511
+ const ticketId = context.ticket_id || 'no-ticket';
1512
+ const attempt = counters.task_attempts ?? 0;
1513
+ return `${ticketId}_${stageId}_${attempt}`;
1514
+ }
1515
+
1516
+ /**
1517
+ * Создаёт approval-файл со статусом "pending" (идемпотентно).
1518
+ * Если файл уже существует — не перезаписывает, возвращает его содержимое.
1519
+ *
1520
+ * @param {string} filePath - Путь к approval-файлу (абсолютный)
1521
+ * @param {Object} payload - Данные для approval-файла
1522
+ * @param {string} payload.step_id - Идентификатор шага (должен совпадать с именем файла)
1523
+ * @param {string} payload.ticket_id - ID тикета
1524
+ * @param {string} payload.stage_id - ID стадии
1525
+ * @param {number} payload.attempt - Номер попытки
1526
+ * @param {Object} [payload.context_snapshot] - Снапшот контекста (опционально)
1527
+ * @returns {Promise<Object>} Объект approval-файла (прочитанный или созданный)
1528
+ * @throws {Error} При ошибке создания директории или записи файла
1529
+ */
1530
+ async writeApprovalPending(filePath, payload) {
1531
+ // Создаём директорию заранее (recursive, безопасно)
1532
+ const dir = path.dirname(filePath);
1533
+ await fs.promises.mkdir(dir, { recursive: true });
1534
+
1535
+ // Формируем данные approval-файла
1536
+ const now = new Date().toISOString();
1537
+ const approvalData = {
1538
+ step_id: payload.step_id,
1539
+ ticket_id: payload.ticket_id,
1540
+ stage_id: payload.stage_id,
1541
+ attempt: payload.attempt,
1542
+ status: 'pending',
1543
+ created_at: now,
1544
+ updated_at: now,
1545
+ decided_by: null,
1546
+ comment: null,
1547
+ context_snapshot: payload.context_snapshot || {}
1548
+ };
1484
1549
 
1485
- this.counters[counterName] = (this.counters[counterName] || 0) + 1;
1486
- const value = this.counters[counterName];
1550
+ const content = JSON.stringify(approvalData, null, 2);
1487
1551
 
1488
- if (this.logger) {
1489
- this.logger.info(`Counter "${counterName}" incremented to ${value}`, stageId);
1552
+ // Атомарно создаём файл с флагом 'wx' (fail if exists)
1553
+ try {
1554
+ const handle = await fs.promises.open(filePath, 'wx');
1555
+ await handle.write(content);
1556
+ await handle.close();
1557
+ return approvalData;
1558
+ } catch (err) {
1559
+ if (err.code === 'EEXIST') {
1560
+ // Файл уже был создан (например, при recovery) — читаем и возвращаем
1561
+ const existing = await fs.promises.readFile(filePath, 'utf8');
1562
+ return JSON.parse(existing);
1563
+ }
1564
+ throw err;
1565
+ }
1566
+ }
1567
+
1568
+ /**
1569
+ * Читает approval-файл и парсит его как JSON.
1570
+ *
1571
+ * @param {string} filePath - Путь к approval-файлу (абсолютный)
1572
+ * @returns {Promise<Object|null>} Объект approval-файла или null если файл не существует
1573
+ * @throws {Error} При невалидном JSON — с сообщением "corrupt approval file at {path}: {parse error}"
1574
+ */
1575
+ async readApprovalFile(filePath) {
1576
+ try {
1577
+ const content = await fs.promises.readFile(filePath, 'utf8');
1578
+ return JSON.parse(content);
1579
+ } catch (err) {
1580
+ if (err.code === 'ENOENT') {
1581
+ return null;
1582
+ }
1583
+ if (err instanceof SyntaxError) {
1584
+ throw new Error(`corrupt approval file at ${filePath}: ${err.message}`);
1585
+ }
1586
+ // Перебрасываем другие ошибки (например, fs-ошибки) без изменений
1587
+ throw err;
1588
+ }
1589
+ }
1590
+
1591
+ /**
1592
+ * Выполняет встроенный стейдж типа update-counter:
1593
+ * инкрементирует счётчик и возвращает статус для goto-перехода.
1594
+ *
1595
+ * Конфигурация стейджа:
1596
+ * type: update-counter
1597
+ * counter: <name> — имя счётчика
1598
+ * max: <number> — максимальное значение (опционально)
1599
+ * goto:
1600
+ * default: <stage> — следующий стейдж
1601
+ * max_reached: <stage> — стейдж при достижении max
1602
+ */
1603
+ executeUpdateCounter(stageId, stage) {
1604
+ const counterName = stage.counter;
1605
+ if (!counterName) {
1606
+ throw new Error(`Stage "${stageId}" has type update-counter but no counter specified`);
1607
+ }
1608
+
1609
+ this.counters[counterName] = (this.counters[counterName] || 0) + 1;
1610
+ const value = this.counters[counterName];
1611
+
1612
+ if (this.logger) {
1613
+ this.logger.info(`Counter "${counterName}" incremented to ${value}`, stageId);
1614
+ }
1615
+
1616
+ const max = stage.max;
1617
+ const status = (max && value >= max) ? 'max_reached' : 'default';
1618
+
1619
+ return { status, result: { counter: counterName, value } };
1490
1620
  }
1491
1621
 
1492
- const max = stage.max;
1493
- const status = (max && value >= max) ? 'max_reached' : 'default';
1622
+ /**
1623
+ * Выполняет встроенный стейдж типа manual-gate: создаёт approval-файл
1624
+ * и ждёт решения (approved/rejected) через polling файловой системы.
1625
+ *
1626
+ * Конфигурация стейджа:
1627
+ * type: manual-gate
1628
+ * poll_interval_ms: <number> — интервал опроса в мс (опц., default 2000)
1629
+ * timeout_seconds: <number> — таймаут в секундах (опц., default null)
1630
+ * goto:
1631
+ * approved: <stage> — обязательный, при одобрении
1632
+ * rejected: <stage> — обязательный, при отклонении
1633
+ * timeout: <stage> — опц., при истечении таймаута
1634
+ * aborted: <stage> — опц., при остановке runner'а
1635
+ *
1636
+ * @param {string} stageId - ID стадии
1637
+ * @param {object} stage - конфигурация стадии
1638
+ * @returns {Promise<{status: 'approved'|'rejected'|'timeout'|'aborted', result: object}>}
1639
+ */
1640
+ async executeManualGate(stageId, stage) {
1641
+ const stepId = this.computeStepId(this.context, stageId, this.counters);
1642
+ const filePath = path.join(this.projectRoot, '.workflow', 'approvals', `${stepId}.json`);
1643
+
1644
+ const payload = {
1645
+ step_id: stepId,
1646
+ ticket_id: this.context.ticket_id || 'no-ticket',
1647
+ stage_id: stageId,
1648
+ attempt: this.counters.task_attempts || 0,
1649
+ context_snapshot: { ...this.context }
1650
+ };
1494
1651
 
1495
- return { status, result: { counter: counterName, value } };
1496
- }
1652
+ const existing = await this.writeApprovalPending(filePath, payload);
1653
+
1654
+ // Если файл уже был и статус уже resolved — сразу возвращаем результат (recovery)
1655
+ if (existing.status === 'approved' || existing.status === 'rejected') {
1656
+ if (this.logger) {
1657
+ this.logger.info(
1658
+ `[${stageId}] manual-gate: already ${existing.status} by ${existing.decided_by || 'unknown'}${existing.comment ? `, comment="${existing.comment}"` : ''}`,
1659
+ stageId
1660
+ );
1661
+ }
1662
+ return {
1663
+ status: existing.status,
1664
+ result: {
1665
+ step_id: stepId,
1666
+ decided_by: existing.decided_by,
1667
+ comment: existing.comment
1668
+ }
1669
+ };
1670
+ }
1671
+
1672
+ // Создан новый pending-файл
1673
+ if (this.logger) {
1674
+ this.logger.info(`[${stageId}] manual-gate: created pending approval at ${filePath}`, stageId);
1675
+ }
1676
+
1677
+ const pollIntervalMs = stage.poll_interval_ms || 2000;
1678
+ const timeoutSeconds = stage.timeout_seconds || null;
1679
+ const startTime = Date.now();
1680
+
1681
+ // Polling-цикл
1682
+ while (this.running) {
1683
+ await new Promise(resolve => setTimeout(resolve, pollIntervalMs));
1684
+
1685
+ // Проверка остановки runner'а
1686
+ if (!this.running) {
1687
+ if (this.logger) {
1688
+ this.logger.warn(`[${stageId}] manual-gate: aborted (runner stopped)`, stageId);
1689
+ }
1690
+ return { status: 'aborted', result: { step_id: stepId } };
1691
+ }
1692
+
1693
+ // Проверка таймаута
1694
+ if (timeoutSeconds !== null) {
1695
+ const elapsed = (Date.now() - startTime) / 1000;
1696
+ if (elapsed >= timeoutSeconds) {
1697
+ if (this.logger) {
1698
+ this.logger.warn(`[${stageId}] manual-gate: timeout after ${timeoutSeconds}s, no decision`, stageId);
1699
+ }
1700
+ return { status: 'timeout', result: { step_id: stepId } };
1701
+ }
1702
+ }
1703
+
1704
+ // Читаем текущее состояние файла
1705
+ let data;
1706
+ try {
1707
+ data = await this.readApprovalFile(filePath);
1708
+ } catch (err) {
1709
+ // Corrupt JSON — пробрасываем ошибку для goto.error
1710
+ throw err;
1711
+ }
1712
+
1713
+ if (data && data.status === 'approved') {
1714
+ if (this.logger) {
1715
+ this.logger.info(
1716
+ `[${stageId}] manual-gate: approved by ${data.decided_by || 'unknown'}${data.comment ? `, comment="${data.comment}"` : ''}`,
1717
+ stageId
1718
+ );
1719
+ }
1720
+ return {
1721
+ status: 'approved',
1722
+ result: {
1723
+ step_id: stepId,
1724
+ decided_by: data.decided_by,
1725
+ comment: data.comment
1726
+ }
1727
+ };
1728
+ }
1729
+
1730
+ if (data && data.status === 'rejected') {
1731
+ if (this.logger) {
1732
+ this.logger.info(
1733
+ `[${stageId}] manual-gate: rejected by ${data.decided_by || 'unknown'}${data.comment ? `, comment="${data.comment}"` : ''}`,
1734
+ stageId
1735
+ );
1736
+ }
1737
+ return {
1738
+ status: 'rejected',
1739
+ result: {
1740
+ step_id: stepId,
1741
+ decided_by: data.decided_by,
1742
+ comment: data.comment
1743
+ }
1744
+ };
1745
+ }
1746
+
1747
+ // DEBUG-лог polling (оставляем только если нужен)
1748
+ if (this.logger && this.logger.level === 'debug') {
1749
+ this.logger.debug(`[${stageId}] manual-gate: polling, current status=pending`, stageId);
1750
+ }
1751
+ }
1752
+
1753
+ // Выход по this.running = false
1754
+ if (this.logger) {
1755
+ this.logger.warn(`[${stageId}] manual-gate: aborted (runner stopped)`, stageId);
1756
+ }
1757
+ return { status: 'aborted', result: { step_id: stepId } };
1758
+ }
1497
1759
 
1498
1760
  /**
1499
1761
  * Запускает основной цикл выполнения
@@ -1528,16 +1790,18 @@ class PipelineRunner {
1528
1790
  throw new Error(`Stage not found: ${this.currentStage}`);
1529
1791
  }
1530
1792
 
1531
- let result;
1793
+ let result;
1532
1794
 
1533
- // Встроенный тип стейджа: update-counter инкрементирует счётчик без вызова агента
1534
- if (stage.type === 'update-counter') {
1535
- result = this.executeUpdateCounter(this.currentStage, stage);
1536
- } else {
1537
- this.currentExecutor = new StageExecutor(this.config, this.context, this.counters, {}, this.fileGuard, this.logger, this.projectRoot);
1538
- result = await this.currentExecutor.execute(this.currentStage);
1539
- this.currentExecutor = null;
1540
- }
1795
+ // Встроенные типы стейджавыполняются без вызова внешних агентов
1796
+ if (stage.type === 'update-counter') {
1797
+ result = this.executeUpdateCounter(this.currentStage, stage);
1798
+ } else if (stage.type === 'manual-gate') {
1799
+ result = await this.executeManualGate(this.currentStage, stage);
1800
+ } else {
1801
+ this.currentExecutor = new StageExecutor(this.config, this.context, this.counters, {}, this.fileGuard, this.logger, this.projectRoot);
1802
+ result = await this.currentExecutor.execute(this.currentStage);
1803
+ this.currentExecutor = null;
1804
+ }
1541
1805
 
1542
1806
  this.logger.info(`Stage ${this.currentStage} completed with status: ${result.status}`, 'PipelineRunner');
1543
1807
 
@@ -1843,6 +2107,22 @@ function validateConfig(config) {
1843
2107
  errors.push(`Stage "${stageId}" references non-existent agent: ${resolvedAgent}`);
1844
2108
  }
1845
2109
 
2110
+ // Валидация для manual-gate стадии
2111
+ if (stage.type === 'manual-gate') {
2112
+ if (!stage.goto || !stage.goto.approved) {
2113
+ errors.push(`Stage "${stageId}" has type manual-gate but missing required goto.approved`);
2114
+ }
2115
+ if (!stage.goto || !stage.goto.rejected) {
2116
+ errors.push(`Stage "${stageId}" has type manual-gate but missing required goto.rejected`);
2117
+ }
2118
+ if (stage.poll_interval_ms !== undefined && (typeof stage.poll_interval_ms !== 'number' || stage.poll_interval_ms < 100)) {
2119
+ errors.push(`Stage "${stageId}" has invalid poll_interval_ms: must be a number >= 100`);
2120
+ }
2121
+ if (stage.timeout_seconds !== undefined && (typeof stage.timeout_seconds !== 'number' || stage.timeout_seconds <= 0)) {
2122
+ errors.push(`Stage "${stageId}" has invalid timeout_seconds: must be a number > 0`);
2123
+ }
2124
+ }
2125
+
1846
2126
  if (stage.goto) {
1847
2127
  for (const [status, transition] of Object.entries(stage.goto)) {
1848
2128
  if (status === 'default') continue;
@@ -46,10 +46,10 @@ function checkCondition(condition) {
46
46
 
47
47
  switch (type) {
48
48
  case 'file_exists':
49
- return fs.existsSync(path.join(PROJECT_DIR, value));
49
+ return fs.existsSync(path.isAbsolute(value) ? value : path.join(PROJECT_DIR, value));
50
50
 
51
51
  case 'file_not_exists':
52
- return !fs.existsSync(path.join(PROJECT_DIR, value));
52
+ return !fs.existsSync(path.isAbsolute(value) ? value : path.join(PROJECT_DIR, value));
53
53
 
54
54
  case 'tasks_completed': {
55
55
  if (!value || (Array.isArray(value) && value.length === 0)) return true;
@@ -21,6 +21,7 @@ import fs from "fs";
21
21
  import path from "path";
22
22
  import { findProjectRoot } from "workflow-ai/lib/find-root.mjs";
23
23
  import { printResult } from "workflow-ai/lib/utils.mjs";
24
+ import { getNextId } from "workflow-ai/lib/operations/tickets.mjs";
24
25
 
25
26
  const PROJECT_DIR = findProjectRoot();
26
27
 
@@ -77,15 +78,6 @@ function findMaxNumber(targetDir, prefix) {
77
78
  return maxNum;
78
79
  }
79
80
 
80
- function formatNumber(num) {
81
- return num.toString().padStart(3, "0");
82
- }
83
-
84
- /**
85
- * Извлекает значения prefix из .workflow/config/config.yaml → task_types.*.prefix.
86
- * Минимальный YAML-парсер: не тянем зависимость, читаем только нужную секцию.
87
- * Возвращает массив уникальных префиксов в порядке появления.
88
- */
89
81
  function readPrefixesFromConfig() {
90
82
  const configPath = path.join(PROJECT_DIR, ".workflow", "config", "config.yaml");
91
83
 
@@ -93,7 +85,7 @@ function readPrefixesFromConfig() {
93
85
  throw new Error(`config.yaml not found: ${configPath}`);
94
86
  }
95
87
 
96
- const text = fs.readFileSync(configPath, "utf8");
88
+ const text = fs.readFileSync(configPath, "utf8");
97
89
  const lines = text.split(/\r?\n/);
98
90
 
99
91
  const prefixes = [];
@@ -136,30 +128,15 @@ function readPrefixesFromConfig() {
136
128
  return prefixes;
137
129
  }
138
130
 
139
- function resolveTargetDir(dir) {
140
- if (dir === "tickets") {
141
- return path.join(PROJECT_DIR, ".workflow", "tickets");
142
- } else if (dir === "plans") {
143
- return path.join(PROJECT_DIR, ".workflow", "plans");
144
- } else {
145
- return path.join(PROJECT_DIR, dir);
146
- }
147
- }
148
-
149
131
  async function runSinglePrefix(prefix, dir) {
150
- const targetDir = resolveTargetDir(dir);
151
-
152
- if (!fs.existsSync(targetDir)) {
153
- const nextId = `${prefix}-001`;
132
+ try {
133
+ const nextId = await getNextId(PROJECT_DIR, prefix, { dir });
154
134
  printResult({ status: "success", id: nextId });
155
- return;
135
+ } catch (err) {
136
+ console.error(err.message);
137
+ printResult({ status: "error", error: err.message });
138
+ process.exit(1);
156
139
  }
157
-
158
- const maxNum = findMaxNumber(targetDir, prefix);
159
- const nextNum = maxNum + 1;
160
- const nextId = `${prefix}-${formatNumber(nextNum)}`;
161
-
162
- printResult({ status: "success", id: nextId });
163
140
  }
164
141
 
165
142
  async function runAllFromConfig() {
@@ -48,11 +48,11 @@ function checkCondition(condition) {
48
48
 
49
49
  switch (type) {
50
50
  case 'file_exists':
51
- const filePath = path.join(PROJECT_DIR, value);
51
+ const filePath = path.isAbsolute(value) ? value : path.join(PROJECT_DIR, value);
52
52
  return fs.existsSync(filePath);
53
53
 
54
54
  case 'file_not_exists':
55
- const filePath2 = path.join(PROJECT_DIR, value);
55
+ const filePath2 = path.isAbsolute(value) ? value : path.join(PROJECT_DIR, value);
56
56
  return !fs.existsSync(filePath2);
57
57
 
58
58
  case 'tasks_completed':
@@ -768,13 +768,7 @@ async function main() {
768
768
  ...result,
769
769
  auto_corrected: correctionResult.moved.length,
770
770
  moved_tickets: correctionResult.moved.map(m => m.id).join(','),
771
- review_metrics: {
772
- tickets_with_reviews: reviewMetrics.tickets_with_reviews,
773
- total_failed: reviewMetrics.total_failed,
774
- total_passed: reviewMetrics.total_passed,
775
- avg_time_to_first_passed_days: reviewMetrics.avg_time_to_first_passed_days,
776
- iterations_per_ticket: reviewMetrics.iterations_per_ticket
777
- }
771
+ review_metrics: JSON.stringify(reviewMetrics)
778
772
  };
779
773
 
780
774
  printResult(finalResult);
@@ -148,7 +148,7 @@ ticket_prefix: COACH
148
148
  Если на (1), (2) или (4) ответ «да» — замени на общую формулировку или критерий, либо перенеси в shared knowledge проекта. Правка должна быть применима к любому проекту, использующему этот скил.
149
149
 
150
150
  **Дополнительная проверка на копирование старого текста:** если правка **заменяет** существующий блок, не воспроизводи автоматически терминологию исходника. Pre-existing нарушения в заменяемом тексте — твоя ответственность; молча скопировав их в новый текст, ты унаследуешь нарушения и они станут частью твоей правки. Прогон чеклиста по 4 вопросам обязателен **по новому тексту целиком**, а не только по дельте «новое - старое».
151
- 10. **Self-Correct** — после каждой правки в скил **обязательно** перечитай принципы коуча (1-12) и проверь, не нарушает ли внесённая правка какой-либо из них. Не жди указания стейкхолдера — проверяй проактивно. **Процедура:** после каждого Edit/Write в файл скила — прежде чем отвечать пользователю — (1) перечитай `Read` записанный файл, (2) пройди по каждому принципу 1-12, (3) если нарушение найдено — исправь сразу, не дожидаясь фидбека. **(4) Проверка доставки:** если правка добавляет знание в shared или knowledge — открой SKILL.md целевого скила и убедись, что файл загружается по триггеру текущей задачи. Если триггер загрузки отсутствует или слишком слабый (последняя строка таблицы, без ⛔, без «обязательно») — **усиль триггер в том же CHG**, иначе правка не дойдёт до агента-исполнителя. Когда стейкхолдер указывает на ошибку — это сигнал, что проактивная проверка не сработала: исправь не только текущую работу и целевой скил, но и усиль собственные инструкции коуча, чтобы ошибка не повторялась.
151
+ 10. **Self-Correct** — после каждой правки в скил **обязательно** перечитай принципы коуча (1-12) и проверь, не нарушает ли внесённая правка какой-либо из них. Не жди указания стейкхолдера — проверяй проактивно. **Процедура:** после каждого Edit/Write в файл скила — прежде чем отвечать пользователю — (1) перечитай `Read` записанный файл, (2) пройди по каждому принципу 1-12, (3) если нарушение найдено — исправь сразу, не дожидаясь фидбека. **(4) Проверка доставки:** если правка добавляет знание в shared или knowledge — открой SKILL.md целевого скила и убедись, что файл загружается по триггеру текущей задачи. Если триггер загрузки отсутствует или слишком слабый (последняя строка таблицы, без ⛔, без «обязательно») — **усиль триггер в том же CHG**, иначе правка не дойдёт до агента-исполнителя. **(5) Тест:** после проверки принципов 1-12 **обязательно** выполни секцию «Обязательный шаг: Тест» (→ `workflows/test.md`). Self-check без теста — незавершённый self-check: принципы проверяют корректность текста, тест проверяет корректность поведения агента при чтении этого текста. Когда стейкхолдер указывает на ошибку — это сигнал, что проактивная проверка не сработала: исправь не только текущую работу и целевой скил, но и усиль собственные инструкции коуча, чтобы ошибка не повторялась.
152
152
  11. **Context Budget** — при анализе и аудите скила обязательно оценивай его **суммарный размер** (SKILL.md + все файлы из knowledge/ + algorithms/ + workflows/). Агент загружает эти файлы в контекст перед работой. **Порог:** если суммарный размер > 800 строк — это finding уровня HIGH. Каждая правка, добавляющая текст, должна оцениваться: «Не приведёт ли это к context overflow у агента-исполнителя?» **При аудите:** измерь `wc -l` всех файлов скила, укажи суммарный размер и сравни с порогом. Если превышен — рекомендуй консолидацию: объединение дублирующих секций, вынос редко используемых блоков в отдельные файлы с ленивой загрузкой (загружать только по триггеру, а не всегда), сжатие примеров.
153
153
  12. **Consistency** — скил не должен содержать взаимоисключающих или противоречащих друг другу инструкций. При каждой правке и аудите проверяй: не конфликтует ли новая инструкция с существующими. **Процедура:** после внесения правки grep'ни файл на ключевые термины правки и прочитай все совпадения — убедись, что нигде не сказано противоположное. **Типичные противоречия:** «всегда делай X» в одном месте и «никогда не делай X» в другом; разные значения по умолчанию для одного параметра; разные приоритеты действий в SKILL.md и в workflow. При обнаружении противоречия — устрани его сразу, выбрав одну версию и обновив все места.
154
154
 
@@ -119,6 +119,8 @@ ticket_prefix: QA
119
119
 
120
120
  Перед сохранением убедись, что директория `reports/` существует. Если нет — создай её.
121
121
 
122
+ **⚠️ Переиспользование существующего теста (discovery вариант C):** если тест уже существует и сохраняет артефакты с hardcoded prefix другого тикета — **обнови prefix на ID текущего тикета в тест-файле перед запуском**. Ручное копирование/переименование файлов после запуска — антипаттерн: создаёт гонку mtime между артефактами и `updated_at` тикета, ломает artifact-snapshot diff верификатора.
123
+
122
124
  ### Cleanup evidence
123
125
 
124
126
  После завершения тестирования в `reports/` должны остаться **только файлы, на которые ссылается тикет**. Удали промежуточные и отладочные файлы (пробные скриншоты, дубликаты, скриншоты с неверным содержимым). Имя файла evidence должно соответствовать TC, для которого он используется — если evidence для TC-001 фактически сохранён как `TC-002-*.png`, переименуй или пересохрани с корректным именем.
@@ -36,6 +36,7 @@ description: >
36
36
  |--------|----------------|
37
37
  | `knowledge/dod-patterns.md` | При определении типа проверки для конкретного пункта DoD |
38
38
  | `knowledge/test-hygiene.md` | Когда DoD требует создать/изменить автотест — красные и зелёные флаги изоляции, что считать нарушением и как оформить issue |
39
+ | `knowledge/baseline-snapshot-validation.md` | **⛔ Обязательно**, когда DoD/план тикета содержит формулировки уровня эталона: baseline, snapshot, inline-snapshot, побайтное/точное совпадение, регрессионный эталон, «output не должен меняться». Проверяет способ реализации теста (точное сравнение с литералом-эталоном vs регекс/includes), а не только зелёный прогон |
39
40
  | `../shared/*` | **ВСЕГДА** перед началом работы — общие знания проекта |
40
41
 
41
42
  ## Загрузка шаблонов
@@ -1,28 +0,0 @@
1
- function parseTimeout(testCase, index) {
2
- return testCase.execution?.timeout_s || index.execution?.default_timeout_s || 300;
3
- }
4
-
5
- function testTimeoutCascade() {
6
- const index = { execution: { default_timeout_s: 300 } };
7
-
8
- const testCases = [
9
- { name: 'TC-001', execution: { timeout_s: 600 } },
10
- { name: 'TC-002', execution: {} },
11
- { name: 'TC-003' }
12
- ];
13
-
14
- const results = testCases.map(tc => ({
15
- case: tc.name,
16
- timeout: parseTimeout(tc, index)
17
- }));
18
-
19
- console.log('Timeout cascade results:', results);
20
-
21
- const expected = [600, 300, 300];
22
- const passed = results.every((r, i) => r.timeout === expected[i]);
23
-
24
- console.log(`Test ${passed ? 'PASSED' : 'FAILED'}`);
25
- process.exit(passed ? 0 : 1);
26
- }
27
-
28
- testTimeoutCascade();
@@ -1,44 +0,0 @@
1
- # Analyze Report — Agent Skill
2
-
3
- Аналитик отчётов для workflow-ai. Анализирует отчёты о выполненных задачах, оценивает прогресс по планам, проводит ретроспективы и формирует actionable рекомендации.
4
-
5
- ## Структура
6
-
7
- ```
8
- analyze-report/
9
- ├── SKILL.md # Ядро: роль, маршрутизация, принципы
10
- ├── README.md # Документация
11
- ├── workflows/
12
- │ ├── progress.md # Оценка прогресса по плану
13
- │ └── retrospective.md # Ретроспектива завершённого плана
14
- ├── knowledge/
15
- │ ├── analysis-frameworks.md # Методологии анализа, метрики, паттерны
16
- │ └── report-structure.md # Структура отчётов, правила извлечения данных
17
- ├── algorithms/
18
- │ └── progress-assessment.md # Алгоритм оценки прогресса (формулы, пороги)
19
- └── templates/
20
- └── analysis-report.md # Шаблон результата анализа
21
- ```
22
-
23
- ## Как это работает
24
-
25
- 1. Любой скил проекта создаёт тикет `ANL-*` с запросом на анализ
26
- 2. Analyze Report определяет тип (PROGRESS / RETROSPECTIVE)
27
- 3. Загружает соответствующий workflow
28
- 4. Собирает данные из отчётов, тикетов, планов
29
- 5. Рассчитывает метрики, выявляет проблемы, формулирует рекомендации
30
- 6. Формирует структурированный результат анализа
31
-
32
- ## Как расширять
33
-
34
- ### Новый тип анализа
35
- 1. Создай файл в `workflows/{type}.md`
36
- 2. Добавь запись в таблицу маршрутизации в `SKILL.md`
37
-
38
- ### Новый knowledge-модуль
39
- 1. Создай файл в `knowledge/{module}.md`
40
- 2. Добавь запись в таблицу загрузки знаний в `SKILL.md`
41
-
42
- ### Новый шаблон вывода
43
- 1. Создай файл в `templates/{template}.md`
44
- 2. Добавь запись в таблицу шаблонов в `SKILL.md`