workflow-ai 1.1.0 → 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 (593) 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 -44
  5. package/src/lib/operations/tickets.mjs +305 -207
  6. package/src/lib/utils.mjs +286 -286
  7. package/src/runner.mjs +314 -34
  8. package/src/scripts/check-conditions.js +2 -2
  9. package/src/scripts/get-next-id.js +144 -41
  10. package/src/scripts/move-ticket.js +225 -68
  11. package/src/scripts/pick-next-task.js +753 -93
  12. package/src/skills/coach/SKILL.md +1 -1
  13. package/src/skills/manual-testing/SKILL.md +2 -0
  14. package/src/scripts/tests/timeout-cascade.test.js +0 -28
  15. package/src/skills/analyze-report/README.md +0 -44
  16. package/src/skills/analyze-report/algorithms/progress-assessment.md +0 -108
  17. package/src/skills/analyze-report/knowledge/analysis-frameworks.md +0 -66
  18. package/src/skills/analyze-report/knowledge/report-structure.md +0 -61
  19. package/src/skills/analyze-report/scripts/calc-plan-metrics.js +0 -234
  20. package/src/skills/analyze-report/templates/analysis-report.md +0 -80
  21. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-1.md +0 -5
  22. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-2.md +0 -98
  23. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-3.md +0 -99
  24. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/judge.json +0 -163
  25. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-1.md +0 -89
  26. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-2.md +0 -88
  27. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-3.md +0 -100
  28. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-1.md +0 -77
  29. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-2.md +0 -64
  30. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-3.md +0 -110
  31. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-1.md +0 -74
  32. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-2.md +0 -38
  33. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-3.md +0 -61
  34. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/meta.json +0 -115
  35. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001-evidence-from-log.yaml +0 -60
  36. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-1.md +0 -90
  37. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-2.md +0 -89
  38. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-3.md +0 -5
  39. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/judge.json +0 -163
  40. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-1.md +0 -84
  41. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-2.md +0 -77
  42. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-3.md +0 -89
  43. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-1.md +0 -103
  44. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-2.md +0 -103
  45. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-3.md +0 -103
  46. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-1.md +0 -93
  47. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-2.md +0 -93
  48. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-3.md +0 -86
  49. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/meta.json +0 -115
  50. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002-result-block-format.yaml +0 -44
  51. package/src/skills/analyze-report/tests/fixtures/REPORT-002-incorrect-attribution.md +0 -27
  52. package/src/skills/analyze-report/tests/fixtures/pipeline-2026-04-06_qa-001-skip.log +0 -32
  53. package/src/skills/analyze-report/tests/index.yaml +0 -25
  54. package/src/skills/analyze-report/tests/rubrics/evidence-from-log.md +0 -22
  55. package/src/skills/analyze-report/tests/rubrics/result-block-format.md +0 -22
  56. package/src/skills/analyze-report/workflows/progress.md +0 -158
  57. package/src/skills/analyze-report/workflows/retrospective.md +0 -143
  58. package/src/skills/coach/README.md +0 -43
  59. package/src/skills/coach/SKILL.md.legacy +0 -157
  60. package/src/skills/coach/algorithms/gap-analysis.md +0 -69
  61. package/src/skills/coach/algorithms/improvement-prioritization.md +0 -62
  62. package/src/skills/coach/algorithms/skill-scoring.md +0 -80
  63. package/src/skills/coach/knowledge/audit-applied-changes-clean.txt +0 -11
  64. package/src/skills/coach/knowledge/backlog-management.md +0 -67
  65. package/src/skills/coach/knowledge/backlog-management.md.legacy +0 -90
  66. package/src/skills/coach/knowledge/common-antipatterns.md +0 -76
  67. package/src/skills/coach/knowledge/prompt-engineering.md +0 -45
  68. package/src/skills/coach/knowledge/shared-knowledge-guide.md +0 -44
  69. package/src/skills/coach/knowledge/skill-anatomy.md +0 -49
  70. package/src/skills/coach/knowledge/test-authorship.md +0 -141
  71. package/src/skills/coach/templates/audit-report.md +0 -39
  72. package/src/skills/coach/templates/coach-backlog-init.yaml +0 -14
  73. package/src/skills/coach/templates/coach-backlog-init.yaml.legacy +0 -10
  74. package/src/skills/coach/templates/improvement-plan.md +0 -42
  75. package/src/skills/coach/templates/new-skill.md +0 -95
  76. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-1.md +0 -58
  77. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-2.md +0 -65
  78. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-3.md +0 -58
  79. package/src/skills/coach/tests/cases/TC-COACH-001/current/judge.json +0 -151
  80. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-1.md +0 -46
  81. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-2.md +0 -0
  82. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-3.md +0 -75
  83. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-1.md +0 -81
  84. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-2.md +0 -101
  85. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-3.md +0 -91
  86. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-1.md +0 -48
  87. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-2.md +0 -30
  88. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-3.md +0 -55
  89. package/src/skills/coach/tests/cases/TC-COACH-001/current/meta.json +0 -94
  90. package/src/skills/coach/tests/cases/TC-COACH-001-evidence-based-temporal-diagram.yaml +0 -53
  91. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-1.md +0 -46
  92. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-2.md +0 -50
  93. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-3.md +0 -48
  94. package/src/skills/coach/tests/cases/TC-COACH-002/current/judge.json +0 -151
  95. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-1.md +0 -0
  96. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-2.md +0 -37
  97. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-3.md +0 -30
  98. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-1.md +0 -23
  99. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-2.md +0 -29
  100. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-3.md +0 -35
  101. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-1.md +0 -13
  102. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-2.md +0 -19
  103. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-3.md +0 -33
  104. package/src/skills/coach/tests/cases/TC-COACH-002/current/meta.json +0 -94
  105. package/src/skills/coach/tests/cases/TC-COACH-002-root-cause-first.yaml +0 -57
  106. package/src/skills/coach/tests/fixtures/pipeline-2026-04-06_id-collision.log +0 -77
  107. package/src/skills/coach/tests/index.yaml +0 -29
  108. package/src/skills/coach/tests/rubrics/calibration/evidence-based-bad.md +0 -13
  109. package/src/skills/coach/tests/rubrics/calibration/evidence-based-good.md +0 -29
  110. package/src/skills/coach/tests/rubrics/evidence-based.md +0 -26
  111. package/src/skills/coach/tests/rubrics/root-cause-first.md +0 -21
  112. package/src/skills/coach/workflows/analyze.md +0 -79
  113. package/src/skills/coach/workflows/analyze.md.legacy +0 -64
  114. package/src/skills/coach/workflows/audit.md +0 -74
  115. package/src/skills/coach/workflows/audit.md.legacy +0 -59
  116. package/src/skills/coach/workflows/create.md +0 -80
  117. package/src/skills/coach/workflows/create.md.legacy +0 -67
  118. package/src/skills/coach/workflows/improve.md +0 -71
  119. package/src/skills/coach/workflows/improve.md.legacy +0 -60
  120. package/src/skills/coach/workflows/research.md +0 -55
  121. package/src/skills/coach/workflows/review.md +0 -52
  122. package/src/skills/coach/workflows/review.md.legacy +0 -48
  123. package/src/skills/coach/workflows/test.md +0 -97
  124. package/src/skills/create-plan/README.md +0 -39
  125. package/src/skills/create-plan/algorithms/risk-assessment.md +0 -73
  126. package/src/skills/create-plan/knowledge/plan-completeness.md +0 -67
  127. package/src/skills/create-plan/knowledge/plan-lifecycle.md +0 -33
  128. package/src/skills/create-plan/knowledge/task-verification-pairs.md +0 -151
  129. package/src/skills/create-plan/knowledge/test-hygiene.md +0 -47
  130. package/src/skills/create-plan/scripts/validate-completeness.js +0 -182
  131. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-1.md +0 -5
  132. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-2.md +0 -39
  133. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-3.md +0 -35
  134. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/judge.json +0 -167
  135. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-1.md +0 -5
  136. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-2.md +0 -10
  137. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-3.md +0 -5
  138. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-1.md +0 -26
  139. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-2.md +0 -86
  140. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-3.md +0 -5
  141. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-1.md +0 -11
  142. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-2.md +0 -15
  143. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-3.md +0 -14
  144. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/meta.json +0 -119
  145. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001-validate-completeness.yaml +0 -41
  146. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-1.md +0 -25
  147. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-2.md +0 -30
  148. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-3.md +0 -37
  149. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/judge.json +0 -164
  150. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-1.md +0 -3
  151. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-2.md +0 -11
  152. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-3.md +0 -13
  153. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-1.md +0 -44
  154. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-2.md +0 -5
  155. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-3.md +0 -49
  156. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-1.md +0 -6
  157. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-2.md +0 -11
  158. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-3.md +0 -16
  159. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/meta.json +0 -116
  160. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002-task-granularity.yaml +0 -39
  161. package/src/skills/create-plan/tests/index.yaml +0 -25
  162. package/src/skills/create-plan/tests/rubrics/task-granularity.md +0 -21
  163. package/src/skills/create-plan/tests/rubrics/validate-completeness.md +0 -21
  164. package/src/skills/create-plan/workflows/create.md +0 -136
  165. package/src/skills/create-report/README.md +0 -40
  166. package/src/skills/create-report/algorithms/metric-calculation.md +0 -93
  167. package/src/skills/create-report/knowledge/report-metrics.md +0 -82
  168. package/src/skills/create-report/scripts/calc-metrics.js +0 -383
  169. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-1.md +0 -25
  170. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-2.md +0 -26
  171. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-3.md +0 -28
  172. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/judge.json +0 -163
  173. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-1.md +0 -4
  174. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-2.md +0 -3
  175. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-3.md +0 -6
  176. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-1.md +0 -8
  177. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-2.md +0 -12
  178. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-3.md +0 -7
  179. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-1.md +0 -12
  180. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-2.md +0 -22
  181. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-3.md +0 -13
  182. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/meta.json +0 -115
  183. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001-root-cause-attribution.yaml +0 -57
  184. package/src/skills/create-report/tests/index.yaml +0 -20
  185. package/src/skills/create-report/tests/rubrics/root-cause-attribution.md +0 -21
  186. package/src/skills/create-report/workflows/standard.md +0 -175
  187. package/src/skills/decompose-gaps/README.md +0 -39
  188. package/src/skills/decompose-gaps/algorithms/scope-check.md +0 -110
  189. package/src/skills/decompose-gaps/knowledge/scope-validation.md +0 -65
  190. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-1.md +0 -41
  191. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-2.md +0 -41
  192. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-3.md +0 -56
  193. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/judge.json +0 -164
  194. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-1.md +0 -25
  195. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-2.md +0 -17
  196. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-3.md +0 -22
  197. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-1.md +0 -25
  198. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-2.md +0 -5
  199. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-3.md +0 -29
  200. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-1.md +0 -27
  201. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-2.md +0 -35
  202. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-3.md +0 -18
  203. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/meta.json +0 -116
  204. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001-scope-exclusion.yaml +0 -46
  205. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-1.md +0 -27
  206. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-2.md +0 -30
  207. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-3.md +0 -27
  208. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/judge.json +0 -163
  209. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-1.md +0 -0
  210. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-2.md +0 -15
  211. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-3.md +0 -7
  212. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-1.md +0 -21
  213. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-2.md +0 -38
  214. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-3.md +0 -16
  215. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-1.md +0 -5
  216. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-2.md +0 -10
  217. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-3.md +0 -9
  218. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/meta.json +0 -115
  219. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002-glob-before-write.yaml +0 -36
  220. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-1.md +0 -30
  221. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-2.md +0 -30
  222. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-3.md +0 -30
  223. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/judge.json +0 -165
  224. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-1.md +0 -5
  225. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-2.md +0 -26
  226. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-3.md +0 -5
  227. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-1.md +0 -39
  228. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-2.md +0 -37
  229. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-3.md +0 -45
  230. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-1.md +0 -26
  231. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-2.md +0 -27
  232. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-3.md +0 -7
  233. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/meta.json +0 -117
  234. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003-parent-plan-mandatory.yaml +0 -41
  235. package/src/skills/decompose-gaps/tests/index.yaml +0 -30
  236. package/src/skills/decompose-gaps/tests/rubrics/glob-before-write.md +0 -21
  237. package/src/skills/decompose-gaps/tests/rubrics/parent-plan-mandatory.md +0 -22
  238. package/src/skills/decompose-gaps/tests/rubrics/scope-exclusion.md +0 -21
  239. package/src/skills/decompose-gaps/workflows/decompose.md +0 -123
  240. package/src/skills/decompose-plan/README.md +0 -43
  241. package/src/skills/decompose-plan/algorithms/deduplication.md +0 -101
  242. package/src/skills/decompose-plan/knowledge/atomicity-checklist.md +0 -139
  243. package/src/skills/decompose-plan/knowledge/capabilities.md +0 -68
  244. package/src/skills/decompose-plan/knowledge/human-task-rules.md +0 -82
  245. package/src/skills/decompose-plan/knowledge/scope-guard-checklist.md +0 -73
  246. package/src/skills/decompose-plan/scripts/check-atomicity-limit.js +0 -47
  247. package/src/skills/decompose-plan/scripts/check-duplicates.js +0 -323
  248. package/src/skills/decompose-plan/scripts/verify-atomicity.js +0 -408
  249. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-1.md +0 -30
  250. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-2.md +0 -36
  251. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-3.md +0 -37
  252. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/judge.json +0 -163
  253. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-1.md +0 -20
  254. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-2.md +0 -17
  255. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-3.md +0 -28
  256. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-1.md +0 -114
  257. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-2.md +0 -137
  258. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-3.md +0 -188
  259. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-1.md +0 -0
  260. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-2.md +0 -32
  261. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-3.md +0 -110
  262. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/meta.json +0 -115
  263. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001-atomicity-no-1to1.yaml +0 -56
  264. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-1.md +0 -47
  265. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-2.md +0 -54
  266. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-3.md +0 -43
  267. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/judge.json +0 -163
  268. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-1.md +0 -15
  269. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-2.md +0 -5
  270. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-3.md +0 -12
  271. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-1.md +0 -34
  272. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-2.md +0 -30
  273. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-3.md +0 -35
  274. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-1.md +0 -0
  275. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-2.md +0 -31
  276. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-3.md +0 -0
  277. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/meta.json +0 -115
  278. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002-get-next-id-mandatory.yaml +0 -44
  279. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-1.md +0 -21
  280. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-2.md +0 -38
  281. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-3.md +0 -30
  282. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/judge.json +0 -163
  283. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-1.md +0 -31
  284. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-2.md +0 -35
  285. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-3.md +0 -48
  286. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-1.md +0 -167
  287. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-2.md +0 -62
  288. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-3.md +0 -174
  289. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-1.md +0 -0
  290. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-2.md +0 -0
  291. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-3.md +0 -0
  292. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/meta.json +0 -115
  293. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003-verbatim-dod-transfer.yaml +0 -42
  294. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-1.md +0 -55
  295. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-2.md +0 -49
  296. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-3.md +0 -49
  297. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/judge.json +0 -163
  298. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-1.md +0 -104
  299. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-2.md +0 -45
  300. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-3.md +0 -58
  301. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-1.md +0 -193
  302. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-2.md +0 -202
  303. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-3.md +0 -155
  304. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-1.md +0 -52
  305. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-2.md +0 -17
  306. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-3.md +0 -0
  307. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/meta.json +0 -115
  308. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004-executor-atomicity.yaml +0 -64
  309. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-1.md +0 -59
  310. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-2.md +0 -204
  311. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-3.md +0 -213
  312. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/judge.json +0 -163
  313. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-1.md +0 -0
  314. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-2.md +0 -57
  315. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-3.md +0 -54
  316. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-1.md +0 -147
  317. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-2.md +0 -165
  318. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-3.md +0 -133
  319. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-1.md +0 -81
  320. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-2.md +0 -108
  321. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-3.md +0 -3
  322. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/meta.json +0 -114
  323. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005-capabilities-registry.yaml +0 -78
  324. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-1.md +0 -225
  325. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-2.md +0 -66
  326. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-3.md +0 -36
  327. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/judge.json +0 -163
  328. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-1.md +0 -42
  329. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-2.md +0 -67
  330. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-3.md +0 -40
  331. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-1.md +0 -122
  332. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-2.md +0 -131
  333. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-3.md +0 -138
  334. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-1.md +0 -41
  335. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-2.md +0 -88
  336. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-3.md +0 -0
  337. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/meta.json +0 -115
  338. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006-dod-threshold.yaml +0 -72
  339. package/src/skills/decompose-plan/tests/index.yaml +0 -45
  340. package/src/skills/decompose-plan/tests/rubrics/atomicity-no-1to1.md +0 -21
  341. package/src/skills/decompose-plan/tests/rubrics/capabilities-registry.md +0 -21
  342. package/src/skills/decompose-plan/tests/rubrics/dod-threshold.md +0 -21
  343. package/src/skills/decompose-plan/tests/rubrics/executor-atomicity.md +0 -21
  344. package/src/skills/decompose-plan/tests/rubrics/get-next-id-mandatory.md +0 -21
  345. package/src/skills/decompose-plan/tests/rubrics/verbatim-dod-transfer.md +0 -21
  346. package/src/skills/decompose-plan/workflows/decompose.md +0 -305
  347. package/src/skills/deep-research/README.md +0 -36
  348. package/src/skills/deep-research/algorithms/source-scoring.md +0 -63
  349. package/src/skills/deep-research/algorithms/synthesis.md +0 -67
  350. package/src/skills/deep-research/knowledge/data-validation.md +0 -44
  351. package/src/skills/deep-research/knowledge/perplexity-config.md +0 -30
  352. package/src/skills/deep-research/knowledge/research-methodology.md +0 -54
  353. package/src/skills/deep-research/knowledge/source-evaluation.md +0 -33
  354. package/src/skills/deep-research/scripts/perplexity-research.js +0 -315
  355. package/src/skills/deep-research/templates/brief-summary.md +0 -25
  356. package/src/skills/deep-research/templates/research-report.md +0 -76
  357. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-1.md +0 -48
  358. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-2.md +0 -88
  359. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-3.md +0 -56
  360. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/judge.json +0 -163
  361. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-1.md +0 -58
  362. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-2.md +0 -249
  363. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-3.md +0 -44
  364. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-1.md +0 -96
  365. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-2.md +0 -56
  366. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-3.md +0 -94
  367. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-1.md +0 -11
  368. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-2.md +0 -1
  369. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-3.md +0 -1
  370. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/meta.json +0 -115
  371. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001-self-check-url.yaml +0 -58
  372. package/src/skills/deep-research/tests/index.yaml +0 -20
  373. package/src/skills/deep-research/tests/rubrics/self-check-url.md +0 -34
  374. package/src/skills/deep-research/workflows/base-checklist.md +0 -19
  375. package/src/skills/deep-research/workflows/benchmark.md +0 -38
  376. package/src/skills/deep-research/workflows/competitor.md +0 -44
  377. package/src/skills/deep-research/workflows/custom.md +0 -32
  378. package/src/skills/deep-research/workflows/market.md +0 -44
  379. package/src/skills/deep-research/workflows/technology.md +0 -40
  380. package/src/skills/deep-research/workflows/trend.md +0 -40
  381. package/src/skills/execute-task/README.md +0 -44
  382. package/src/skills/execute-task/algorithms/execution-strategy.md +0 -136
  383. package/src/skills/execute-task/knowledge/context-checkpoints.md +0 -75
  384. package/src/skills/execute-task/knowledge/ticket-structure.md +0 -70
  385. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-1.md +0 -5
  386. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-2.md +0 -5
  387. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-3.md +0 -5
  388. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/judge.json +0 -124
  389. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-1.md +0 -4
  390. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-2.md +0 -4
  391. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-3.md +0 -4
  392. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-1.md +0 -4
  393. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-2.md +0 -4
  394. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-3.md +0 -11
  395. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/meta.json +0 -88
  396. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001-no-ticket-creation.yaml +0 -48
  397. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-1.md +0 -5
  398. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-2.md +0 -6
  399. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-3.md +0 -5
  400. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/judge.json +0 -124
  401. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-1.md +0 -4
  402. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-2.md +0 -4
  403. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-3.md +0 -8
  404. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-1.md +0 -9
  405. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-2.md +0 -26
  406. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-3.md +0 -4
  407. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/meta.json +0 -89
  408. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002-no-duplicate-dod.yaml +0 -44
  409. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-1.md +0 -5
  410. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-2.md +0 -5
  411. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-3.md +0 -5
  412. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/judge.json +0 -46
  413. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/meta.json +0 -37
  414. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003-verification-proportionality.yaml +0 -46
  415. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-1.md +0 -18
  416. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-2.md +0 -16
  417. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-3.md +0 -14
  418. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/judge.json +0 -124
  419. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-1.md +0 -5
  420. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-2.md +0 -5
  421. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-3.md +0 -1
  422. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-1.md +0 -8
  423. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-2.md +0 -5
  424. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-3.md +0 -4
  425. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/meta.json +0 -89
  426. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004-no-foreign-ticket-edit.yaml +0 -50
  427. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-1.md +0 -5
  428. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-2.md +0 -5
  429. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-3.md +0 -5
  430. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/judge.json +0 -124
  431. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-1.md +0 -15
  432. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-2.md +0 -4
  433. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-3.md +0 -5
  434. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-1.md +0 -11
  435. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-2.md +0 -11
  436. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-3.md +0 -4
  437. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/meta.json +0 -88
  438. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005-ticket-fields-updated.yaml +0 -39
  439. package/src/skills/execute-task/tests/fixtures/IMPL-902-create-file.md +0 -41
  440. package/src/skills/execute-task/tests/fixtures/IMPL-904-current-task.md +0 -40
  441. package/src/skills/execute-task/tests/fixtures/IMPL-906-fill-ticket.md +0 -42
  442. package/src/skills/execute-task/tests/fixtures/QA-901-button-click.md +0 -41
  443. package/src/skills/execute-task/tests/fixtures/QA-903-visual-figma.md +0 -40
  444. package/src/skills/execute-task/tests/fixtures/TASK-905-done-with-typo.md +0 -36
  445. package/src/skills/execute-task/tests/index.yaml +0 -39
  446. package/src/skills/execute-task/tests/rubrics/no-duplicate-dod.md +0 -22
  447. package/src/skills/execute-task/tests/rubrics/no-foreign-ticket-edit.md +0 -20
  448. package/src/skills/execute-task/tests/rubrics/no-ticket-creation.md +0 -21
  449. package/src/skills/execute-task/tests/rubrics/ticket-fields-updated.md +0 -23
  450. package/src/skills/execute-task/tests/rubrics/verification-proportionality.md +0 -22
  451. package/src/skills/execute-task/workflows/execute.md +0 -104
  452. package/src/skills/manual-testing/README.md +0 -63
  453. package/src/skills/manual-testing/algorithms/blocked-tool-strategy.md +0 -74
  454. package/src/skills/manual-testing/algorithms/bug-severity.md +0 -73
  455. package/src/skills/manual-testing/algorithms/mcp-budget.md +0 -97
  456. package/src/skills/manual-testing/algorithms/test-prioritization.md +0 -69
  457. package/src/skills/manual-testing/knowledge/browser-extension-testing.md +0 -102
  458. package/src/skills/manual-testing/knowledge/browser-tools.md +0 -114
  459. package/src/skills/manual-testing/knowledge/desktop-tools-advanced.md +0 -92
  460. package/src/skills/manual-testing/knowledge/desktop-tools-core.md +0 -76
  461. package/src/skills/manual-testing/knowledge/sandbox-advanced.md +0 -83
  462. package/src/skills/manual-testing/knowledge/sandbox-core.md +0 -67
  463. package/src/skills/manual-testing/knowledge/stateful-edge-cases.md +0 -69
  464. package/src/skills/manual-testing/knowledge/test-case-design.md +0 -107
  465. package/src/skills/manual-testing/knowledge/testing-types.md +0 -45
  466. package/src/skills/manual-testing/templates/bug-report.md +0 -52
  467. package/src/skills/manual-testing/templates/test-case.md +0 -34
  468. package/src/skills/manual-testing/templates/test-plan.md +0 -97
  469. package/src/skills/manual-testing/templates/test-session-report.md +0 -56
  470. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-1.md +0 -34
  471. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-2.md +0 -32
  472. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-3.md +0 -30
  473. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/judge.json +0 -163
  474. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-1.md +0 -0
  475. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-2.md +0 -7
  476. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-3.md +0 -0
  477. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-1.md +0 -4
  478. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-2.md +0 -15
  479. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-3.md +0 -8
  480. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-1.md +0 -5
  481. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-2.md +0 -7
  482. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-3.md +0 -7
  483. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/meta.json +0 -114
  484. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001-sandbox-mandatory.yaml +0 -38
  485. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-1.md +0 -44
  486. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-2.md +0 -32
  487. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-3.md +0 -47
  488. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/judge.json +0 -163
  489. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-1.md +0 -19
  490. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-2.md +0 -15
  491. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-3.md +0 -24
  492. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-1.md +0 -19
  493. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-2.md +0 -13
  494. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-3.md +0 -18
  495. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-1.md +0 -21
  496. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-2.md +0 -15
  497. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-3.md +0 -14
  498. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/meta.json +0 -114
  499. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002-visual-tc-screenshot.yaml +0 -37
  500. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-1.md +0 -76
  501. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-2.md +0 -71
  502. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-3.md +0 -85
  503. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/judge.json +0 -46
  504. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/meta.json +0 -36
  505. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003-qa-non-ui-assertion.yaml +0 -65
  506. package/src/skills/manual-testing/tests/index.yaml +0 -30
  507. package/src/skills/manual-testing/tests/last-run-tc001-sonnet.log +0 -140
  508. package/src/skills/manual-testing/tests/last-run-tc002.log +0 -1
  509. package/src/skills/manual-testing/tests/last-run.log +0 -1469
  510. package/src/skills/manual-testing/tests/rubrics/qa-non-ui-assertion.md +0 -31
  511. package/src/skills/manual-testing/tests/rubrics/sandbox-mandatory.md +0 -20
  512. package/src/skills/manual-testing/tests/rubrics/visual-tc-screenshot.md +0 -21
  513. package/src/skills/manual-testing/workflows/acceptance.md +0 -80
  514. package/src/skills/manual-testing/workflows/exploratory.md +0 -84
  515. package/src/skills/manual-testing/workflows/regression.md +0 -76
  516. package/src/skills/manual-testing/workflows/smoke.md +0 -109
  517. package/src/skills/manual-testing/workflows/test-plan.md +0 -75
  518. package/src/skills/review-result/README.md +0 -59
  519. package/src/skills/review-result/algorithms/verification.md +0 -112
  520. package/src/skills/review-result/knowledge/baseline-snapshot-validation.md +0 -67
  521. package/src/skills/review-result/knowledge/dod-patterns.md +0 -116
  522. package/src/skills/review-result/knowledge/test-hygiene.md +0 -44
  523. package/src/skills/review-result/scripts/verify-artifacts.js +0 -497
  524. package/src/skills/review-result/templates/verdict.md +0 -153
  525. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-1.md +0 -22
  526. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-2.md +0 -7
  527. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-3.md +0 -21
  528. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-1.md +0 -6
  529. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-2.md +0 -6
  530. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-3.md +0 -6
  531. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/judge.json +0 -164
  532. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-1.md +0 -5
  533. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-2.md +0 -7
  534. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-3.md +0 -6
  535. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-1.md +0 -49
  536. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-2.md +0 -28
  537. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-3.md +0 -37
  538. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-1.md +0 -22
  539. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-2.md +0 -13
  540. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-3.md +0 -21
  541. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/meta.json +0 -116
  542. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001-visual-tc-trigger.yaml +0 -51
  543. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-1.md +0 -23
  544. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-2.md +0 -22
  545. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-3.md +0 -28
  546. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-1.md +0 -4
  547. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-2.md +0 -4
  548. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-3.md +0 -4
  549. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/judge.json +0 -163
  550. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-1.md +0 -4
  551. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-2.md +0 -0
  552. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-3.md +0 -4
  553. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-1.md +0 -39
  554. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-2.md +0 -25
  555. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-3.md +0 -32
  556. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-1.md +0 -34
  557. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-2.md +0 -8
  558. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-3.md +0 -23
  559. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/meta.json +0 -115
  560. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002-path-line-suffix.yaml +0 -39
  561. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-1.md +0 -40
  562. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-2.md +0 -15
  563. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-3.md +0 -7
  564. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/judge.json +0 -163
  565. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-1.md +0 -5
  566. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-2.md +0 -5
  567. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-3.md +0 -11
  568. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-1.md +0 -16
  569. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-2.md +0 -18
  570. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-3.md +0 -17
  571. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-1.md +0 -17
  572. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-2.md +0 -31
  573. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-3.md +0 -5
  574. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/meta.json +0 -115
  575. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003-test-isolation.yaml +0 -50
  576. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/claude-sonnet/trial-1.md +0 -5
  577. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/claude-sonnet/trial-2.md +0 -5
  578. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/claude-sonnet/trial-3.md +0 -6
  579. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/judge.json +0 -46
  580. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/meta.json +0 -37
  581. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004-baseline-snapshot.yaml +0 -50
  582. package/src/skills/review-result/tests/fixtures/IMPL-902-path-with-line.md +0 -43
  583. package/src/skills/review-result/tests/fixtures/QA-901-visual-button.md +0 -46
  584. package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/QA-904.md +0 -51
  585. package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/example-test.mjs +0 -36
  586. package/src/skills/review-result/tests/fixtures/QA-905-baseline-regex-instead-of-snapshot/QA-905.md +0 -62
  587. package/src/skills/review-result/tests/fixtures/QA-905-baseline-regex-instead-of-snapshot/baseline.test.mjs +0 -124
  588. package/src/skills/review-result/tests/index.yaml +0 -35
  589. package/src/skills/review-result/tests/rubrics/baseline-snapshot.md +0 -20
  590. package/src/skills/review-result/tests/rubrics/path-line-suffix.md +0 -19
  591. package/src/skills/review-result/tests/rubrics/test-isolation.md +0 -20
  592. package/src/skills/review-result/tests/rubrics/visual-tc-trigger.md +0 -19
  593. package/src/skills/review-result/workflows/review.md +0 -209
@@ -1,497 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * verify-artifacts.js — механическая предпроверка тикета перед AI-ревью.
5
- *
6
- * Парсит тикет и проверяет:
7
- * - Существование файлов из секции "Изменённые файлы"
8
- * - DoD completion %
9
- * - Заполненность секции Result (Summary)
10
- *
11
- * Использование (как стейдж пайплайна):
12
- * node verify-artifacts.js "<prompt>"
13
- * Парсит ticket_id из Context-блока в промпте, резолвит в .workflow/tickets/review/{id}.md
14
- *
15
- * Использование (как standalone-скрипт):
16
- * node verify-artifacts.js <path-to-ticket>
17
- * node verify-artifacts.js <TICKET-ID>
18
- *
19
- * Вывод (для runner'а):
20
- * ---RESULT---
21
- * status: passed|failed
22
- * dod_completion_pct: <int>
23
- * result_filled: <bool>
24
- * missing_files: <comma-separated list or empty>
25
- * ---RESULT---
26
- */
27
-
28
- import fs from 'fs';
29
- import path from 'path';
30
- import { pathToFileURL } from 'url';
31
- import { findProjectRoot } from 'workflow-ai/lib/find-root.mjs';
32
- import { parseFrontmatter } from 'workflow-ai/lib/utils.mjs';
33
-
34
- const PROJECT_DIR = findProjectRoot();
35
- const TICKETS_DIR = path.join(PROJECT_DIR, '.workflow', 'tickets');
36
- const REVIEW_STATUSES = ['review', 'in-progress', 'done', 'ready', 'backlog'];
37
-
38
- function parseChangedFiles(body) {
39
- const files = [];
40
- const changedFilesRegex = /^###\s*(?:Изменённые файлы|Changed files)\s*$/gm;
41
- const match = changedFilesRegex.exec(body);
42
-
43
- if (!match) return files;
44
-
45
- // Граница H3-секции — следующий H3 ИЛИ H2 (что встретится раньше),
46
- // иначе захватываем соседние подзаголовки вроде "### Время выполнения",
47
- // где в backticks лежат команды и цитаты, которые парсер принимает за пути.
48
- const startIdx = match.index + match[0].length;
49
- const nextH3 = body.indexOf('\n### ', startIdx);
50
- const nextH2 = body.indexOf('\n## ', startIdx);
51
- const candidates = [nextH3, nextH2].filter((i) => i !== -1);
52
- const sectionEnd = candidates.length > 0 ? Math.min(...candidates) : body.length;
53
- const sectionContent = body.substring(startIdx, sectionEnd);
54
-
55
- // Пути принимаем только из строк-буллетов ("- `path`" или "* `path`"):
56
- // это страхует от ложных срабатываний на цитатах/командах в инлайн-коде.
57
- const bulletFileRegex = /^[-*]\s+`([^`]+)`/gm;
58
- let fileMatch;
59
- while ((fileMatch = bulletFileRegex.exec(sectionContent)) !== null) {
60
- files.push(stripLineSuffix(fileMatch[1]));
61
- }
62
-
63
- return files;
64
- }
65
-
66
- // Поддержка отраслевой нотации ссылок на код: `path:line`, `path:start-end`.
67
- // Суффикс указывает на строки в файле, но не является частью имени файла —
68
- // отрезаем его перед проверкой существования на диске. Не трогаем `C:\...` на
69
- // Windows (после двоеточия идёт не число, а разделитель пути).
70
- function stripLineSuffix(filePath) {
71
- const match = filePath.match(/^(.*?):(\d+)(?:-\d+)?$/);
72
- return match ? match[1] : filePath;
73
- }
74
-
75
- function checkFilesExist(filePaths, workStartTime) {
76
- const ticketWorkStart = workStartTime ? new Date(workStartTime) : null;
77
- return filePaths.map(filePath => {
78
- const fullPath = path.isAbsolute(filePath) ? filePath : path.join(PROJECT_DIR, filePath);
79
- const exists = fs.existsSync(fullPath);
80
-
81
- if (!exists) {
82
- return { path: filePath, exists: false, unchanged: false };
83
- }
84
-
85
- if (!ticketWorkStart) {
86
- return { path: filePath, exists: true, unchanged: false };
87
- }
88
-
89
- const stats = fs.statSync(fullPath);
90
- const fileMtime = new Date(stats.mtime);
91
- const unchanged = fileMtime < ticketWorkStart;
92
-
93
- return { path: filePath, exists: true, unchanged };
94
- });
95
- }
96
-
97
- function parseDoDCompletion(body) {
98
- // Канонический формат в этом проекте — "## Критерии готовности (Definition of Done)",
99
- // но поддерживаем и чистые варианты (обе локали, с/без уточнения в скобках).
100
- const dodSectionRegex = /^##\s*(?:Критерии готовности|Definition of Done)(?:\s*\([^)]*\))?\s*$/gm;
101
- const match = dodSectionRegex.exec(body);
102
-
103
- if (!match) return { checked: 0, completed: 0, percentage: 0 };
104
-
105
- const startIdx = match.index + match[0].length;
106
- const nextH2 = body.indexOf('\n## ', startIdx);
107
- const sectionEnd = nextH2 === -1 ? body.length : nextH2;
108
- const sectionContent = body.substring(startIdx, sectionEnd);
109
-
110
- const checkedBoxes = (sectionContent.match(/\[x\]/gi) || []).length;
111
- const totalBoxes = (sectionContent.match(/\[ \]|\[x\]/gi) || []).length;
112
-
113
- const percentage = totalBoxes > 0 ? Math.round((checkedBoxes / totalBoxes) * 100) : 0;
114
-
115
- return {
116
- checked: totalBoxes,
117
- completed: checkedBoxes,
118
- percentage
119
- };
120
- }
121
-
122
- function checkResultSection(body) {
123
- // Порядок альтернатив важен: «Результат выполнения» перед «Результат»,
124
- // чтобы более длинный вариант матчился первым.
125
- const resultSectionRegex = /^##\s*(Результат выполнения|Результат|Result)\s*$/m;
126
- const sectionMatch = resultSectionRegex.exec(body);
127
-
128
- if (!sectionMatch) return { exists: false, summaryFilled: false };
129
-
130
- const startIdx = sectionMatch.index + sectionMatch[0].length;
131
- const nextH2 = body.indexOf('\n## ', startIdx);
132
- const sectionEnd = nextH2 === -1 ? body.length : nextH2;
133
- const sectionContent = body.substring(startIdx, sectionEnd);
134
-
135
- // Сначала пытаемся найти явную подсекцию Summary
136
- const summaryRegex = /^###\s*(Summary|Что сделано)\s*$/m;
137
- const summaryMatch = summaryRegex.exec(sectionContent);
138
-
139
- let summaryContent;
140
- if (summaryMatch) {
141
- // Есть явная подсекция — берём контент только из неё
142
- const summaryStartIdx = summaryMatch.index + summaryMatch[0].length;
143
- const nextSubsection = sectionContent.indexOf('\n### ', summaryStartIdx);
144
- const summaryEnd = nextSubsection === -1 ? sectionContent.length : nextSubsection;
145
- summaryContent = sectionContent.substring(summaryStartIdx, summaryEnd);
146
- } else {
147
- // Нет явной Summary — проверяем, есть ли вообще контент в секции Result
148
- // (любые подсекции, таблицы, текст считаются заполненной секцией)
149
- summaryContent = sectionContent;
150
- }
151
-
152
- const withoutComments = summaryContent.replace(/<!--[\s\S]*?-->/g, '').trim();
153
- const hasContent = withoutComments.length > 0;
154
-
155
- return {
156
- exists: true,
157
- summaryFilled: hasContent
158
- };
159
- }
160
-
161
- /**
162
- * E2E assertion против ghost-execution: парсит секцию `### Implementation assertions`
163
- * в теле тикета и возвращает список проверок вида
164
- * { module, export, method?, type? }
165
- *
166
- * Формат каждой строки-bullet'а (значения в backticks, ключи через запятую):
167
- * - module: `path/to/file.mjs`, export: `ClassName`, method: `methodName`
168
- * - module: `path/to/file.mjs`, export: `namedExport`
169
- * - module: `path/to/file.mjs`, export: `helper`, type: `function`
170
- *
171
- * Секция необязательна. Если её нет — возвращаем пустой массив
172
- * (тикеты без исполняемых артефактов — например, DOCS/HUMAN — проходят без гейта).
173
- */
174
- function parseImplementationAssertions(body) {
175
- const headerRegex = /^###\s*(?:Implementation assertions|E2E assertions)\s*$/m;
176
- const match = headerRegex.exec(body);
177
- if (!match) return [];
178
-
179
- const startIdx = match.index + match[0].length;
180
- const nextH3 = body.indexOf('\n### ', startIdx);
181
- const nextH2 = body.indexOf('\n## ', startIdx);
182
- const candidates = [nextH3, nextH2].filter(i => i !== -1);
183
- const sectionEnd = candidates.length > 0 ? Math.min(...candidates) : body.length;
184
- const sectionContent = body.substring(startIdx, sectionEnd);
185
-
186
- const assertions = [];
187
- const bulletRegex = /^[-*]\s+(.+)$/gm;
188
- let bulletMatch;
189
- while ((bulletMatch = bulletRegex.exec(sectionContent)) !== null) {
190
- const line = bulletMatch[1];
191
- const kv = {};
192
- const pairRegex = /(\w+)\s*:\s*`([^`]+)`/g;
193
- let pair;
194
- while ((pair = pairRegex.exec(line)) !== null) {
195
- kv[pair[1]] = pair[2];
196
- }
197
- if (kv.module && kv.export) {
198
- assertions.push({
199
- module: kv.module,
200
- export: kv.export,
201
- method: kv.method || null,
202
- type: kv.type || 'function',
203
- });
204
- }
205
- }
206
- return assertions;
207
- }
208
-
209
- /**
210
- * Выполняет список implementation assertions против живого кода.
211
- * Для каждой: dynamic import модуля → достаём export → проверяем method/type.
212
- * Возвращает массив { ...assertion, ok, reason? }.
213
- */
214
- async function runImplementationAssertions(assertions) {
215
- const results = [];
216
- for (const a of assertions) {
217
- const absPath = path.isAbsolute(a.module) ? a.module : path.join(PROJECT_DIR, a.module);
218
- if (!fs.existsSync(absPath)) {
219
- results.push({ ...a, ok: false, reason: `module_not_found: ${a.module}` });
220
- continue;
221
- }
222
- let mod;
223
- try {
224
- mod = await import(pathToFileURL(absPath).href);
225
- } catch (err) {
226
- results.push({ ...a, ok: false, reason: `import_failed: ${err.message.replace(/\n/g, ' ')}` });
227
- continue;
228
- }
229
- const exported = mod[a.export];
230
- if (exported === undefined) {
231
- results.push({ ...a, ok: false, reason: `export_not_found: ${a.export}` });
232
- continue;
233
- }
234
- if (a.method) {
235
- // Класс → метод на prototype; объект → метод как свойство
236
- const target = typeof exported === 'function' ? exported.prototype : exported;
237
- const fn = target ? target[a.method] : undefined;
238
- if (typeof fn !== 'function') {
239
- results.push({ ...a, ok: false, reason: `method_not_function: ${a.export}.${a.method}` });
240
- continue;
241
- }
242
- } else {
243
- if (typeof exported !== a.type) {
244
- results.push({ ...a, ok: false, reason: `type_mismatch: expected ${a.type}, got ${typeof exported}` });
245
- continue;
246
- }
247
- }
248
- results.push({ ...a, ok: true });
249
- }
250
- return results;
251
- }
252
-
253
- function verifyTicket(ticketPath) {
254
- if (!fs.existsSync(ticketPath)) {
255
- throw new Error(`Ticket file not found: ${ticketPath}`);
256
- }
257
-
258
- const content = fs.readFileSync(ticketPath, 'utf8');
259
- const { frontmatter, body } = parseFrontmatter(content);
260
-
261
- const filePaths = parseChangedFiles(body);
262
- // Точка отсчёта для mtime — created_at: это стабильная метка, которая не
263
- // перезаписывается при move-ticket / retry-циклах. updated_at мутирует на
264
- // каждом перемещении (ready → in-progress → review → ready → …), поэтому
265
- // в retry файлы, реально изменённые в ранней попытке, становятся формально
266
- // «unchanged» относительно нового updated_at и тикет ложно блокируется.
267
- const filesExist = checkFilesExist(filePaths, frontmatter.created_at || frontmatter.updated_at);
268
-
269
- const dodStats = parseDoDCompletion(body);
270
-
271
- const resultStats = checkResultSection(body);
272
-
273
- const assertions = parseImplementationAssertions(body);
274
-
275
- return {
276
- ticket_id: frontmatter.id,
277
- created_at: frontmatter.created_at,
278
- files_exist: filesExist,
279
- dod_completion_pct: dodStats.percentage,
280
- dod_checked: dodStats.checked,
281
- dod_completed: dodStats.completed,
282
- result_exists: resultStats.exists,
283
- result_filled: resultStats.summaryFilled,
284
- assertions,
285
- };
286
- }
287
-
288
- function resolveTicketPath(arg) {
289
- // 1. Промпт от runner'а — ищем "ticket_id: XXX" в тексте.
290
- // Проверяем первым, потому что промпт содержит пути (plans/current/...)
291
- // и символы '/', '\', '.md', которые ложно срабатывают в проверке на путь.
292
- const promptMatch = arg.match(/ticket_id:\s*([A-Z]+-\d+)/i);
293
- if (promptMatch) {
294
- return resolveTicketPath(promptMatch[1]);
295
- }
296
-
297
- // 2. Явный путь — absolute или relative
298
- if (arg.includes('/') || arg.includes('\\') || arg.endsWith('.md')) {
299
- return path.isAbsolute(arg) ? arg : path.resolve(process.cwd(), arg);
300
- }
301
-
302
- // 3. Чистый ticket_id (QA-009) — резолвим по статусам
303
- if (/^[A-Z]+-\d+$/i.test(arg)) {
304
- for (const status of REVIEW_STATUSES) {
305
- const candidate = path.join(TICKETS_DIR, status, `${arg}.md`);
306
- if (fs.existsSync(candidate)) return candidate;
307
- }
308
- return path.join(TICKETS_DIR, 'review', `${arg}.md`);
309
- }
310
-
311
- return null;
312
- }
313
-
314
- function formatVerdict(result) {
315
- const missingFiles = result.files_exist
316
- .filter((f) => !f.exists)
317
- .map((f) => f.path);
318
-
319
- const unchangedFiles = result.files_exist
320
- .filter((f) => f.exists && f.unchanged)
321
- .map((f) => f.path);
322
-
323
- // Критерии failed:
324
- // - result_filled == false (секция Result пуста)
325
- // - dod_completion_pct == 0 (ни один пункт DoD не отмечен)
326
- // - есть отсутствующие файлы из "Изменённые файлы"
327
- // - есть неизменённые файлы (file_unchanged)
328
- const failReasons = [];
329
- const humanIssues = [];
330
- if (!result.result_filled) {
331
- failReasons.push('result_filled=false');
332
- humanIssues.push(result.result_exists
333
- ? 'секция Результата пуста (Summary не заполнен)'
334
- : 'секция Результата отсутствует');
335
- }
336
- if (result.dod_completion_pct === 0) {
337
- failReasons.push('dod_completion_pct=0');
338
- humanIssues.push(`ни один пункт DoD не отмечен (0/${result.dod_checked || 0})`);
339
- }
340
- if (missingFiles.length > 0) {
341
- failReasons.push(`missing_files=${missingFiles.join(',')}`);
342
- humanIssues.push(`не найдены заявленные файлы: ${missingFiles.join(', ')}`);
343
- }
344
- if (unchangedFiles.length > 0) {
345
- failReasons.push(`file_unchanged=${unchangedFiles.join(',')}`);
346
- humanIssues.push(
347
- `файлы не были изменены после начала выполнения тикета: ${unchangedFiles.join(', ')}`
348
- );
349
- }
350
-
351
- const assertionFailures = (result.assertionResults || []).filter(r => !r.ok);
352
- if (assertionFailures.length > 0) {
353
- const descriptions = assertionFailures.map(r => {
354
- const target = r.method ? `${r.export}.${r.method}` : r.export;
355
- return `${target} в ${r.module} (${r.reason})`;
356
- });
357
- failReasons.push(`assertion_failed=${descriptions.length}`);
358
- humanIssues.push(`не прошли E2E-assertions (ghost execution): ${descriptions.join('; ')}`);
359
- }
360
-
361
- const status = failReasons.length === 0 ? 'passed' : 'failed';
362
-
363
- return { status, missingFiles, unchangedFiles, failReasons, humanIssues };
364
- }
365
-
366
- function buildReviewRow(humanIssues) {
367
- const date = new Date().toISOString().slice(0, 10);
368
- const summary = `verify-artifacts: ${humanIssues.join('; ')}`;
369
- return `| ${date} | ❌ failed | ${summary} |`;
370
- }
371
-
372
- function appendReviewNote(ticketPath, humanIssues) {
373
- const content = fs.readFileSync(ticketPath, 'utf8');
374
- const newRow = buildReviewRow(humanIssues);
375
-
376
- const reviewHeaderRegex = /^##\s*(Ревью|Review)\s*$/m;
377
- const headerMatch = reviewHeaderRegex.exec(content);
378
-
379
- if (headerMatch) {
380
- // Секция существует — добавить строку в конец таблицы.
381
- const startIdx = headerMatch.index + headerMatch[0].length;
382
- const nextH2 = content.indexOf('\n## ', startIdx);
383
- const sectionEnd = nextH2 === -1 ? content.length : nextH2;
384
- const sectionContent = content.substring(startIdx, sectionEnd);
385
-
386
- // Идемпотентность: не дублировать, если последняя непустая строка
387
- // таблицы уже совпадает с новой по самари (дата игнорируется).
388
- const lines = sectionContent.split('\n').map((l) => l.trimEnd()).filter(Boolean);
389
- const lastRow = [...lines].reverse().find((l) => l.startsWith('|'));
390
- if (lastRow) {
391
- const lastSummary = lastRow.split('|').slice(3, -1).join('|').trim();
392
- const newSummary = newRow.split('|').slice(3, -1).join('|').trim();
393
- if (lastSummary === newSummary) return false;
394
- }
395
-
396
- const trimmedSection = sectionContent.replace(/\s+$/, '');
397
- const hasTable = /\|\s*Дата\s*\|/i.test(trimmedSection);
398
- const tableHeader = hasTable
399
- ? ''
400
- : '\n\n| Дата | Статус | Самари |\n|------|--------|--------|';
401
- const updatedSection = `${trimmedSection}${tableHeader}\n${newRow}\n`;
402
- const suffix = nextH2 === -1 ? '' : content.substring(sectionEnd);
403
- const updated = content.substring(0, startIdx) + updatedSection + (suffix.startsWith('\n') ? suffix : `\n${suffix}`);
404
- fs.writeFileSync(ticketPath, updated, 'utf8');
405
- return true;
406
- }
407
-
408
- // Секции нет — создать перед "## Результат выполнения" / "## Result".
409
- const resultHeaderRegex = /^##\s*(Результат выполнения|Результат|Result)\s*$/m;
410
- const resultMatch = resultHeaderRegex.exec(content);
411
-
412
- const newSection = `## Ревью\n\n| Дата | Статус | Самари |\n|------|--------|--------|\n${newRow}\n\n`;
413
-
414
- let updated;
415
- if (resultMatch) {
416
- updated = content.substring(0, resultMatch.index) + newSection + content.substring(resultMatch.index);
417
- } else {
418
- // Fallback: в конец файла.
419
- const sep = content.endsWith('\n') ? '' : '\n';
420
- updated = `${content}${sep}\n${newSection}`;
421
- }
422
- fs.writeFileSync(ticketPath, updated, 'utf8');
423
- return true;
424
- }
425
-
426
- async function main() {
427
- const args = process.argv.slice(2);
428
-
429
- if (args.length === 0) {
430
- console.error('Usage: node verify-artifacts.js <path-to-ticket|ticket_id|prompt>');
431
- process.exit(1);
432
- }
433
-
434
- const arg = args.join(' ');
435
- const ticketPath = resolveTicketPath(arg);
436
-
437
- if (!ticketPath) {
438
- console.error('Error: could not resolve ticket path from argument');
439
- console.log('---RESULT---');
440
- console.log('status: failed');
441
- console.log('reason: ticket_path_unresolved');
442
- console.log('---RESULT---');
443
- process.exit(1);
444
- }
445
-
446
- if (!fs.existsSync(ticketPath)) {
447
- console.error(`Error: ticket file not found: ${ticketPath}`);
448
- console.log('---RESULT---');
449
- console.log('status: failed');
450
- console.log(`reason: ticket_file_not_found`);
451
- console.log(`ticket_path: ${ticketPath}`);
452
- console.log('---RESULT---');
453
- process.exit(1);
454
- }
455
-
456
- try {
457
- const result = verifyTicket(ticketPath);
458
- result.assertionResults = await runImplementationAssertions(result.assertions || []);
459
-
460
- const verdict = formatVerdict(result);
461
-
462
- let reviewNoteWritten = false;
463
- if (verdict.status === 'failed' && verdict.humanIssues.length > 0) {
464
- reviewNoteWritten = appendReviewNote(ticketPath, verdict.humanIssues);
465
- }
466
-
467
- const assertionsTotal = result.assertionResults.length;
468
- const assertionsFailed = result.assertionResults.filter(r => !r.ok).length;
469
-
470
- console.log('---RESULT---');
471
- console.log(`status: ${verdict.status}`);
472
- console.log(`ticket_id: ${result.ticket_id || ''}`);
473
- console.log(`dod_completion_pct: ${result.dod_completion_pct}`);
474
- console.log(`dod_total: ${result.dod_checked}`);
475
- console.log(`dod_completed: ${result.dod_completed}`);
476
- console.log(`result_filled: ${result.result_filled}`);
477
- console.log(`missing_files: ${verdict.missingFiles.join(',')}`);
478
- console.log(`unchanged_files: ${verdict.unchangedFiles.join(',')}`);
479
- console.log(`assertions_total: ${assertionsTotal}`);
480
- console.log(`assertions_failed: ${assertionsFailed}`);
481
- if (verdict.failReasons.length > 0) {
482
- console.log(`fail_reasons: ${verdict.failReasons.join('; ')}`);
483
- console.log(`issues: ${verdict.humanIssues.join('; ')}`);
484
- console.log(`review_note_written: ${reviewNoteWritten}`);
485
- }
486
- console.log('---RESULT---');
487
- } catch (err) {
488
- console.error(`Error: ${err.message}`);
489
- console.log('---RESULT---');
490
- console.log('status: failed');
491
- console.log(`reason: ${err.message.replace(/\n/g, ' ')}`);
492
- console.log('---RESULT---');
493
- process.exit(1);
494
- }
495
- }
496
-
497
- main();
@@ -1,153 +0,0 @@
1
- # Шаблон вердикта ревью
2
-
3
- Шаблон используется для структурированного формирования вердикта после проверки выполнения тикета. Заполняется агентом-ревьюером в секции `## Ревью` тикета.
4
-
5
- ## Обязательные поля
6
-
7
- | Поле | Описание | Формат |
8
- |------|----------|--------|
9
- | **ticket_id** | ID проверяемого тикета | `[a-zA-Z]+-\d+` (например, `IMPL-123`, `COACH-009`) |
10
- | **verdict** | Итоговый статус проверки | `PASS` / `FAIL` |
11
- | **criteria_checked** | Список проверенных критериев с результатом | Массив объектов `{criterion, result, evidence}` |
12
- | **issues** | Найденные проблемы | Массив строк, пустой если проблем нет |
13
- | **recommendations** | Рекомендации для следующего агента | Массив строк с конкретными действиями |
14
-
15
- ## Формат JSON (для автоматической обработки)
16
-
17
- ```json
18
- {
19
- "ticket_id": "XXX-001",
20
- "verdict": "PASS",
21
- "criteria_checked": [
22
- {
23
- "criterion": "Описание критерия из DoD",
24
- "result": "passed",
25
- "evidence": "file:line или ссылка на артефакт"
26
- }
27
- ],
28
- "issues": [],
29
- "recommendations": []
30
- }
31
- ```
32
-
33
- ## Расшифровка статусов
34
-
35
- - **PASS** → `status: passed` — все критерии DoD выполнены, артефакты верифицированы, результат соответствует ожиданиям.
36
- - **FAIL** → `status: failed` — хотя бы один критерий DoD не выполнен, артефакты отсутствуют или не соответствуют требованиям.
37
-
38
- > **КРИТИЧНО:** `status` в блоке `---RESULT---` принимает ТОЛЬКО `passed` или `failed`. `PARTIAL`, `default`, `ok` и любые другие значения — ОШИБКА, тикет попадёт в `blocked`.
39
-
40
- ## Правила заполнения
41
-
42
- ### 1. `criteria_checked`
43
-
44
- Для каждого пункта DoD в тикете добавь запись:
45
-
46
- ```json
47
- {
48
- "criterion": "Создан файл src/components/Button.tsx",
49
- "result": "passed",
50
- "evidence": "src/components/Button.tsx:1-50"
51
- }
52
- ```
53
-
54
- Если критерий не выполнен:
55
-
56
- ```json
57
- {
58
- "criterion": "Написаны unit-тесты для компонента",
59
- "result": "failed",
60
- "evidence": "tests/components/Button.test.tsx отсутствует"
61
- }
62
- ```
63
-
64
- ### 2. `issues`
65
-
66
- Перечисли конкретные проблемы, мешающие принять результат:
67
-
68
- ```yaml
69
- - "Пункт DoD #3 не выполнен: отсутствует файл config.yaml"
70
- - "Артефакт содержит синтаксические ошибки (см. src/utils/parser.ts:45)"
71
- - "Не все зависимости обновлены (package.json:12)"
72
- ```
73
-
74
- ### 3. `recommendations`
75
-
76
- Дай actionable советы для следующего исполнителя (если требуется retry):
77
-
78
- ```yaml
79
- - "Добавить недостающий файл config.yaml по шаблону из .workflow/templates/"
80
- - "Исправить синтаксическую ошибку в строке 45 файла parser.ts"
81
- - "Обновить версию lodash в package.json до ^4.17.21"
82
- ```
83
-
84
- ## Пример заполнения
85
-
86
- **Тикет:** `IMPL-045`
87
- **DoD:**
88
- - [x] Создан компонент `Header`
89
- - [x] Добавлены пропсы `title`, `onClick`
90
- - [ ] Написаны тесты для `Header`
91
-
92
- **Вердикт:**
93
-
94
- ```json
95
- {
96
- "ticket_id": "IMPL-045",
97
- "verdict": "FAIL",
98
- "criteria_checked": [
99
- {
100
- "criterion": "Создан компонент Header",
101
- "result": "passed",
102
- "evidence": "src/components/Header.tsx:1-30"
103
- },
104
- {
105
- "criterion": "Добавлены пропсы title, onClick",
106
- "result": "passed",
107
- "evidence": "src/components/Header.tsx:5-15"
108
- },
109
- {
110
- "criterion": "Написаны тесты для Header",
111
- "result": "failed",
112
- "evidence": "tests/components/Header.test.tsx отсутствует"
113
- }
114
- ],
115
- "issues": [
116
- "Пункт DoD #3 не выполнен: отсутствует файл tests/components/Header.test.tsx"
117
- ],
118
- "recommendations": [
119
- "Создать файл tests/components/Header.test.tsx с тестами на рендеринг и клики"
120
- ]
121
- }
122
- ```
123
-
124
- ## Интеграция с секцией ревью тикета
125
-
126
- После формирования вердикта добавь в тикет таблицу:
127
-
128
- ```markdown
129
- ## Ревью
130
-
131
- | Дата | Статус | Самари |
132
- |------|--------|--------|
133
- | 2026-03-30 14:20 | ✅ PASS | Все критерии выполнены, артефакты верифицированы |
134
- ```
135
-
136
- И приложи детали вердикта в виде спойлера:
137
-
138
- <details>
139
- <summary>Детали вердикта (JSON)</summary>
140
-
141
- ```json
142
- {...}
143
- ```
144
-
145
- </details>
146
- ```
147
-
148
- ## Примечания
149
-
150
- - Шаблон содержит 78 строк (включая пустые), что укладывается в лимит ≤100 строк.
151
- - Поля `verdict` и `status` в блоке `---RESULT---` должны совпадать.
152
- - Для тикетов с `executor_type: human` достаточно текстового описания, JSON не обязателен.
153
- - Используй этот шаблон как руководство, адаптируя уровень детализации под сложность тикета.
@@ -1,22 +0,0 @@
1
- **Шаг 4.7 — Проверка визуального evidence:**
2
-
3
- Обнаружен визуальный критерий DoD: "Кнопка визуально соответствует макету". По алгоритму шага 4.7 требуется:
4
- 1. Поиск скриншотов по типичным местам → не найдены
5
- 2. Проверка файла-артефакта `src/components/SubmitButton.tsx` → не существует
6
-
7
- **Критические проблемы:**
8
-
9
- 1. **Визуальный критерий без скриншота** — DoD содержит критерий "Кнопка визуально соответствует макету", но скриншотов приложено не было. Исполнитель указал "Скриншоты не прикладывал — проверял локально в браузере". Визуальное свойство кнопки не может быть верифицировано без визуального артефакта.
10
-
11
- 2. **Отсутствие файла-артефакта** — В «Изменённые файлы» указан `src/components/SubmitButton.tsx`, но физически файл не существует в проекте. Проверка через Glob и поиск в директории не дали результатов.
12
-
13
- Оба условия соответствуют критериям `failed` для QA-тикетов из dod-patterns.md:
14
- - HIGH issue об отсутствующих файлах-артефактах блокирует `passed`
15
- - Визуальный TC без скриншота не может быть подтверждён
16
-
17
- ---RESULT---
18
- status: failed
19
- issues:
20
- - "DoD пункт 1 содержит визуальный критерий 'Кнопка визуально соответствует макету', но visual evidence (скриншот) отсутствует. Исполнитель указал 'проверял локально в браузере' без приложения артефактов. Визуальное соответствие макету не может быть верифицировано программной проверкой — требуется скриншот или видеозапись."
21
- - "Файл src/components/SubmitButton.tsx из раздела 'Изменённые файлы' не существует. Проверка через Glob и файловую систему не дала результатов. Артефакт не обнаружен."
22
- ---RESULT---
@@ -1,7 +0,0 @@
1
- ---RESULT---
2
- status: failed
3
- issues:
4
- - "DoD п.1 (Кнопка визуально соответствует макету): визуальный критерий требует скриншота, но evidence отсутствует"
5
- - "DoD п.3 (Скругление углов 8px): визуальный критерий требует скриншота или проверки в коде через визуальное свойство, скриншоты не приложены"
6
- - "По правилу QA-ревью (п.5.1 review.md): скриншоты обязательны если указаны в DoD. Исполнитель заявил скриншоты не прикладывал, что блокирует валидацию визуальных свойств"
7
- ---RESULT---