workflow-ai 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (599) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +37 -377
  3. package/configs/pipeline.yaml +113 -4
  4. package/package.json +54 -44
  5. package/src/lib/operations/tickets.mjs +305 -207
  6. package/src/lib/utils.mjs +286 -286
  7. package/src/runner.mjs +316 -35
  8. package/src/scripts/check-conditions.js +2 -2
  9. package/src/scripts/check-relevance.js +3 -1
  10. package/src/scripts/get-next-id.js +144 -41
  11. package/src/scripts/mark-blocked.js +160 -0
  12. package/src/scripts/move-ticket.js +305 -83
  13. package/src/scripts/pick-next-task.js +782 -93
  14. package/src/skills/__test-cal-001-1777553217513/SKILL.md +2 -0
  15. package/src/skills/__test-runner-1777553217483/SKILL.md +5 -0
  16. package/src/skills/coach/SKILL.md +2 -2
  17. package/src/skills/execute-task/SKILL.md +1 -1
  18. package/src/skills/manual-testing/SKILL.md +2 -0
  19. package/src/skills/review-result/SKILL.md +23 -1
  20. package/src/scripts/tests/timeout-cascade.test.js +0 -28
  21. package/src/skills/analyze-report/README.md +0 -44
  22. package/src/skills/analyze-report/algorithms/progress-assessment.md +0 -108
  23. package/src/skills/analyze-report/knowledge/analysis-frameworks.md +0 -66
  24. package/src/skills/analyze-report/knowledge/report-structure.md +0 -61
  25. package/src/skills/analyze-report/scripts/calc-plan-metrics.js +0 -234
  26. package/src/skills/analyze-report/templates/analysis-report.md +0 -80
  27. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-1.md +0 -5
  28. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-2.md +0 -98
  29. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-3.md +0 -99
  30. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/judge.json +0 -163
  31. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-1.md +0 -89
  32. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-2.md +0 -88
  33. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-3.md +0 -100
  34. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-1.md +0 -77
  35. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-2.md +0 -64
  36. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-3.md +0 -110
  37. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-1.md +0 -74
  38. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-2.md +0 -38
  39. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-3.md +0 -61
  40. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/meta.json +0 -115
  41. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001-evidence-from-log.yaml +0 -60
  42. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-1.md +0 -90
  43. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-2.md +0 -89
  44. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-3.md +0 -5
  45. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/judge.json +0 -163
  46. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-1.md +0 -84
  47. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-2.md +0 -77
  48. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-3.md +0 -89
  49. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-1.md +0 -103
  50. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-2.md +0 -103
  51. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-3.md +0 -103
  52. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-1.md +0 -93
  53. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-2.md +0 -93
  54. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-3.md +0 -86
  55. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/meta.json +0 -115
  56. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002-result-block-format.yaml +0 -44
  57. package/src/skills/analyze-report/tests/fixtures/REPORT-002-incorrect-attribution.md +0 -27
  58. package/src/skills/analyze-report/tests/fixtures/pipeline-2026-04-06_qa-001-skip.log +0 -32
  59. package/src/skills/analyze-report/tests/index.yaml +0 -25
  60. package/src/skills/analyze-report/tests/rubrics/evidence-from-log.md +0 -22
  61. package/src/skills/analyze-report/tests/rubrics/result-block-format.md +0 -22
  62. package/src/skills/analyze-report/workflows/progress.md +0 -158
  63. package/src/skills/analyze-report/workflows/retrospective.md +0 -143
  64. package/src/skills/coach/README.md +0 -43
  65. package/src/skills/coach/SKILL.md.legacy +0 -157
  66. package/src/skills/coach/algorithms/gap-analysis.md +0 -69
  67. package/src/skills/coach/algorithms/improvement-prioritization.md +0 -62
  68. package/src/skills/coach/algorithms/skill-scoring.md +0 -80
  69. package/src/skills/coach/knowledge/audit-applied-changes-clean.txt +0 -11
  70. package/src/skills/coach/knowledge/backlog-management.md +0 -67
  71. package/src/skills/coach/knowledge/backlog-management.md.legacy +0 -90
  72. package/src/skills/coach/knowledge/common-antipatterns.md +0 -76
  73. package/src/skills/coach/knowledge/prompt-engineering.md +0 -45
  74. package/src/skills/coach/knowledge/shared-knowledge-guide.md +0 -44
  75. package/src/skills/coach/knowledge/skill-anatomy.md +0 -49
  76. package/src/skills/coach/knowledge/test-authorship.md +0 -141
  77. package/src/skills/coach/templates/audit-report.md +0 -39
  78. package/src/skills/coach/templates/coach-backlog-init.yaml +0 -14
  79. package/src/skills/coach/templates/coach-backlog-init.yaml.legacy +0 -10
  80. package/src/skills/coach/templates/improvement-plan.md +0 -42
  81. package/src/skills/coach/templates/new-skill.md +0 -95
  82. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-1.md +0 -58
  83. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-2.md +0 -65
  84. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-3.md +0 -58
  85. package/src/skills/coach/tests/cases/TC-COACH-001/current/judge.json +0 -151
  86. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-1.md +0 -46
  87. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-2.md +0 -0
  88. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-3.md +0 -75
  89. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-1.md +0 -81
  90. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-2.md +0 -101
  91. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-3.md +0 -91
  92. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-1.md +0 -48
  93. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-2.md +0 -30
  94. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-3.md +0 -55
  95. package/src/skills/coach/tests/cases/TC-COACH-001/current/meta.json +0 -94
  96. package/src/skills/coach/tests/cases/TC-COACH-001-evidence-based-temporal-diagram.yaml +0 -53
  97. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-1.md +0 -46
  98. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-2.md +0 -50
  99. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-3.md +0 -48
  100. package/src/skills/coach/tests/cases/TC-COACH-002/current/judge.json +0 -151
  101. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-1.md +0 -0
  102. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-2.md +0 -37
  103. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-3.md +0 -30
  104. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-1.md +0 -23
  105. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-2.md +0 -29
  106. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-3.md +0 -35
  107. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-1.md +0 -13
  108. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-2.md +0 -19
  109. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-3.md +0 -33
  110. package/src/skills/coach/tests/cases/TC-COACH-002/current/meta.json +0 -94
  111. package/src/skills/coach/tests/cases/TC-COACH-002-root-cause-first.yaml +0 -57
  112. package/src/skills/coach/tests/fixtures/pipeline-2026-04-06_id-collision.log +0 -77
  113. package/src/skills/coach/tests/index.yaml +0 -29
  114. package/src/skills/coach/tests/rubrics/calibration/evidence-based-bad.md +0 -13
  115. package/src/skills/coach/tests/rubrics/calibration/evidence-based-good.md +0 -29
  116. package/src/skills/coach/tests/rubrics/evidence-based.md +0 -26
  117. package/src/skills/coach/tests/rubrics/root-cause-first.md +0 -21
  118. package/src/skills/coach/workflows/analyze.md +0 -79
  119. package/src/skills/coach/workflows/analyze.md.legacy +0 -64
  120. package/src/skills/coach/workflows/audit.md +0 -74
  121. package/src/skills/coach/workflows/audit.md.legacy +0 -59
  122. package/src/skills/coach/workflows/create.md +0 -80
  123. package/src/skills/coach/workflows/create.md.legacy +0 -67
  124. package/src/skills/coach/workflows/improve.md +0 -71
  125. package/src/skills/coach/workflows/improve.md.legacy +0 -60
  126. package/src/skills/coach/workflows/research.md +0 -55
  127. package/src/skills/coach/workflows/review.md +0 -52
  128. package/src/skills/coach/workflows/review.md.legacy +0 -48
  129. package/src/skills/coach/workflows/test.md +0 -97
  130. package/src/skills/create-plan/README.md +0 -39
  131. package/src/skills/create-plan/algorithms/risk-assessment.md +0 -73
  132. package/src/skills/create-plan/knowledge/plan-completeness.md +0 -67
  133. package/src/skills/create-plan/knowledge/plan-lifecycle.md +0 -33
  134. package/src/skills/create-plan/knowledge/task-verification-pairs.md +0 -151
  135. package/src/skills/create-plan/knowledge/test-hygiene.md +0 -47
  136. package/src/skills/create-plan/scripts/validate-completeness.js +0 -182
  137. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-1.md +0 -5
  138. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-2.md +0 -39
  139. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-3.md +0 -35
  140. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/judge.json +0 -167
  141. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-1.md +0 -5
  142. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-2.md +0 -10
  143. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-3.md +0 -5
  144. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-1.md +0 -26
  145. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-2.md +0 -86
  146. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-3.md +0 -5
  147. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-1.md +0 -11
  148. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-2.md +0 -15
  149. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-3.md +0 -14
  150. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/meta.json +0 -119
  151. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001-validate-completeness.yaml +0 -41
  152. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-1.md +0 -25
  153. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-2.md +0 -30
  154. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-3.md +0 -37
  155. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/judge.json +0 -164
  156. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-1.md +0 -3
  157. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-2.md +0 -11
  158. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-3.md +0 -13
  159. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-1.md +0 -44
  160. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-2.md +0 -5
  161. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-3.md +0 -49
  162. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-1.md +0 -6
  163. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-2.md +0 -11
  164. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-3.md +0 -16
  165. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/meta.json +0 -116
  166. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002-task-granularity.yaml +0 -39
  167. package/src/skills/create-plan/tests/index.yaml +0 -25
  168. package/src/skills/create-plan/tests/rubrics/task-granularity.md +0 -21
  169. package/src/skills/create-plan/tests/rubrics/validate-completeness.md +0 -21
  170. package/src/skills/create-plan/workflows/create.md +0 -136
  171. package/src/skills/create-report/README.md +0 -40
  172. package/src/skills/create-report/algorithms/metric-calculation.md +0 -93
  173. package/src/skills/create-report/knowledge/report-metrics.md +0 -82
  174. package/src/skills/create-report/scripts/calc-metrics.js +0 -383
  175. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-1.md +0 -25
  176. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-2.md +0 -26
  177. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-3.md +0 -28
  178. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/judge.json +0 -163
  179. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-1.md +0 -4
  180. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-2.md +0 -3
  181. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-3.md +0 -6
  182. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-1.md +0 -8
  183. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-2.md +0 -12
  184. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-3.md +0 -7
  185. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-1.md +0 -12
  186. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-2.md +0 -22
  187. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-3.md +0 -13
  188. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/meta.json +0 -115
  189. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001-root-cause-attribution.yaml +0 -57
  190. package/src/skills/create-report/tests/index.yaml +0 -20
  191. package/src/skills/create-report/tests/rubrics/root-cause-attribution.md +0 -21
  192. package/src/skills/create-report/workflows/standard.md +0 -175
  193. package/src/skills/decompose-gaps/README.md +0 -39
  194. package/src/skills/decompose-gaps/algorithms/scope-check.md +0 -110
  195. package/src/skills/decompose-gaps/knowledge/scope-validation.md +0 -65
  196. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-1.md +0 -41
  197. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-2.md +0 -41
  198. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-3.md +0 -56
  199. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/judge.json +0 -164
  200. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-1.md +0 -25
  201. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-2.md +0 -17
  202. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-3.md +0 -22
  203. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-1.md +0 -25
  204. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-2.md +0 -5
  205. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-3.md +0 -29
  206. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-1.md +0 -27
  207. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-2.md +0 -35
  208. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-3.md +0 -18
  209. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/meta.json +0 -116
  210. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001-scope-exclusion.yaml +0 -46
  211. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-1.md +0 -27
  212. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-2.md +0 -30
  213. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-3.md +0 -27
  214. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/judge.json +0 -163
  215. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-1.md +0 -0
  216. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-2.md +0 -15
  217. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-3.md +0 -7
  218. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-1.md +0 -21
  219. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-2.md +0 -38
  220. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-3.md +0 -16
  221. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-1.md +0 -5
  222. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-2.md +0 -10
  223. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-3.md +0 -9
  224. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/meta.json +0 -115
  225. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002-glob-before-write.yaml +0 -36
  226. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-1.md +0 -30
  227. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-2.md +0 -30
  228. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-3.md +0 -30
  229. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/judge.json +0 -165
  230. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-1.md +0 -5
  231. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-2.md +0 -26
  232. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-3.md +0 -5
  233. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-1.md +0 -39
  234. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-2.md +0 -37
  235. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-3.md +0 -45
  236. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-1.md +0 -26
  237. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-2.md +0 -27
  238. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-3.md +0 -7
  239. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/meta.json +0 -117
  240. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003-parent-plan-mandatory.yaml +0 -41
  241. package/src/skills/decompose-gaps/tests/index.yaml +0 -30
  242. package/src/skills/decompose-gaps/tests/rubrics/glob-before-write.md +0 -21
  243. package/src/skills/decompose-gaps/tests/rubrics/parent-plan-mandatory.md +0 -22
  244. package/src/skills/decompose-gaps/tests/rubrics/scope-exclusion.md +0 -21
  245. package/src/skills/decompose-gaps/workflows/decompose.md +0 -123
  246. package/src/skills/decompose-plan/README.md +0 -43
  247. package/src/skills/decompose-plan/algorithms/deduplication.md +0 -101
  248. package/src/skills/decompose-plan/knowledge/atomicity-checklist.md +0 -139
  249. package/src/skills/decompose-plan/knowledge/capabilities.md +0 -68
  250. package/src/skills/decompose-plan/knowledge/human-task-rules.md +0 -82
  251. package/src/skills/decompose-plan/knowledge/scope-guard-checklist.md +0 -73
  252. package/src/skills/decompose-plan/scripts/check-atomicity-limit.js +0 -47
  253. package/src/skills/decompose-plan/scripts/check-duplicates.js +0 -323
  254. package/src/skills/decompose-plan/scripts/verify-atomicity.js +0 -408
  255. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-1.md +0 -30
  256. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-2.md +0 -36
  257. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-3.md +0 -37
  258. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/judge.json +0 -163
  259. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-1.md +0 -20
  260. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-2.md +0 -17
  261. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-3.md +0 -28
  262. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-1.md +0 -114
  263. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-2.md +0 -137
  264. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-3.md +0 -188
  265. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-1.md +0 -0
  266. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-2.md +0 -32
  267. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-3.md +0 -110
  268. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/meta.json +0 -115
  269. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001-atomicity-no-1to1.yaml +0 -56
  270. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-1.md +0 -47
  271. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-2.md +0 -54
  272. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-3.md +0 -43
  273. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/judge.json +0 -163
  274. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-1.md +0 -15
  275. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-2.md +0 -5
  276. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-3.md +0 -12
  277. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-1.md +0 -34
  278. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-2.md +0 -30
  279. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-3.md +0 -35
  280. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-1.md +0 -0
  281. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-2.md +0 -31
  282. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-3.md +0 -0
  283. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/meta.json +0 -115
  284. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002-get-next-id-mandatory.yaml +0 -44
  285. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-1.md +0 -21
  286. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-2.md +0 -38
  287. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-3.md +0 -30
  288. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/judge.json +0 -163
  289. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-1.md +0 -31
  290. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-2.md +0 -35
  291. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-3.md +0 -48
  292. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-1.md +0 -167
  293. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-2.md +0 -62
  294. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-3.md +0 -174
  295. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-1.md +0 -0
  296. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-2.md +0 -0
  297. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-3.md +0 -0
  298. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/meta.json +0 -115
  299. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003-verbatim-dod-transfer.yaml +0 -42
  300. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-1.md +0 -55
  301. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-2.md +0 -49
  302. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-3.md +0 -49
  303. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/judge.json +0 -163
  304. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-1.md +0 -104
  305. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-2.md +0 -45
  306. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-3.md +0 -58
  307. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-1.md +0 -193
  308. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-2.md +0 -202
  309. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-3.md +0 -155
  310. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-1.md +0 -52
  311. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-2.md +0 -17
  312. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-3.md +0 -0
  313. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/meta.json +0 -115
  314. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004-executor-atomicity.yaml +0 -64
  315. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-1.md +0 -59
  316. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-2.md +0 -204
  317. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-3.md +0 -213
  318. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/judge.json +0 -163
  319. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-1.md +0 -0
  320. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-2.md +0 -57
  321. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-3.md +0 -54
  322. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-1.md +0 -147
  323. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-2.md +0 -165
  324. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-3.md +0 -133
  325. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-1.md +0 -81
  326. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-2.md +0 -108
  327. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-3.md +0 -3
  328. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/meta.json +0 -114
  329. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005-capabilities-registry.yaml +0 -78
  330. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-1.md +0 -225
  331. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-2.md +0 -66
  332. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-3.md +0 -36
  333. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/judge.json +0 -163
  334. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-1.md +0 -42
  335. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-2.md +0 -67
  336. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-3.md +0 -40
  337. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-1.md +0 -122
  338. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-2.md +0 -131
  339. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-3.md +0 -138
  340. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-1.md +0 -41
  341. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-2.md +0 -88
  342. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-3.md +0 -0
  343. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/meta.json +0 -115
  344. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006-dod-threshold.yaml +0 -72
  345. package/src/skills/decompose-plan/tests/index.yaml +0 -45
  346. package/src/skills/decompose-plan/tests/rubrics/atomicity-no-1to1.md +0 -21
  347. package/src/skills/decompose-plan/tests/rubrics/capabilities-registry.md +0 -21
  348. package/src/skills/decompose-plan/tests/rubrics/dod-threshold.md +0 -21
  349. package/src/skills/decompose-plan/tests/rubrics/executor-atomicity.md +0 -21
  350. package/src/skills/decompose-plan/tests/rubrics/get-next-id-mandatory.md +0 -21
  351. package/src/skills/decompose-plan/tests/rubrics/verbatim-dod-transfer.md +0 -21
  352. package/src/skills/decompose-plan/workflows/decompose.md +0 -305
  353. package/src/skills/deep-research/README.md +0 -36
  354. package/src/skills/deep-research/algorithms/source-scoring.md +0 -63
  355. package/src/skills/deep-research/algorithms/synthesis.md +0 -67
  356. package/src/skills/deep-research/knowledge/data-validation.md +0 -44
  357. package/src/skills/deep-research/knowledge/perplexity-config.md +0 -30
  358. package/src/skills/deep-research/knowledge/research-methodology.md +0 -54
  359. package/src/skills/deep-research/knowledge/source-evaluation.md +0 -33
  360. package/src/skills/deep-research/scripts/perplexity-research.js +0 -315
  361. package/src/skills/deep-research/templates/brief-summary.md +0 -25
  362. package/src/skills/deep-research/templates/research-report.md +0 -76
  363. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-1.md +0 -48
  364. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-2.md +0 -88
  365. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-3.md +0 -56
  366. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/judge.json +0 -163
  367. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-1.md +0 -58
  368. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-2.md +0 -249
  369. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-3.md +0 -44
  370. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-1.md +0 -96
  371. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-2.md +0 -56
  372. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-3.md +0 -94
  373. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-1.md +0 -11
  374. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-2.md +0 -1
  375. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-3.md +0 -1
  376. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/meta.json +0 -115
  377. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001-self-check-url.yaml +0 -58
  378. package/src/skills/deep-research/tests/index.yaml +0 -20
  379. package/src/skills/deep-research/tests/rubrics/self-check-url.md +0 -34
  380. package/src/skills/deep-research/workflows/base-checklist.md +0 -19
  381. package/src/skills/deep-research/workflows/benchmark.md +0 -38
  382. package/src/skills/deep-research/workflows/competitor.md +0 -44
  383. package/src/skills/deep-research/workflows/custom.md +0 -32
  384. package/src/skills/deep-research/workflows/market.md +0 -44
  385. package/src/skills/deep-research/workflows/technology.md +0 -40
  386. package/src/skills/deep-research/workflows/trend.md +0 -40
  387. package/src/skills/execute-task/README.md +0 -44
  388. package/src/skills/execute-task/algorithms/execution-strategy.md +0 -136
  389. package/src/skills/execute-task/knowledge/context-checkpoints.md +0 -75
  390. package/src/skills/execute-task/knowledge/ticket-structure.md +0 -70
  391. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-1.md +0 -5
  392. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-2.md +0 -5
  393. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-3.md +0 -5
  394. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/judge.json +0 -124
  395. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-1.md +0 -4
  396. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-2.md +0 -4
  397. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-3.md +0 -4
  398. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-1.md +0 -4
  399. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-2.md +0 -4
  400. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-3.md +0 -11
  401. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/meta.json +0 -88
  402. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001-no-ticket-creation.yaml +0 -48
  403. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-1.md +0 -5
  404. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-2.md +0 -6
  405. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-3.md +0 -5
  406. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/judge.json +0 -124
  407. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-1.md +0 -4
  408. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-2.md +0 -4
  409. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-3.md +0 -8
  410. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-1.md +0 -9
  411. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-2.md +0 -26
  412. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-3.md +0 -4
  413. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/meta.json +0 -89
  414. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002-no-duplicate-dod.yaml +0 -44
  415. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-1.md +0 -5
  416. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-2.md +0 -5
  417. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-3.md +0 -5
  418. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/judge.json +0 -46
  419. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/meta.json +0 -37
  420. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003-verification-proportionality.yaml +0 -46
  421. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-1.md +0 -18
  422. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-2.md +0 -16
  423. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-3.md +0 -14
  424. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/judge.json +0 -124
  425. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-1.md +0 -5
  426. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-2.md +0 -5
  427. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-3.md +0 -1
  428. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-1.md +0 -8
  429. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-2.md +0 -5
  430. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-3.md +0 -4
  431. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/meta.json +0 -89
  432. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004-no-foreign-ticket-edit.yaml +0 -50
  433. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-1.md +0 -5
  434. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-2.md +0 -5
  435. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-3.md +0 -5
  436. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/judge.json +0 -124
  437. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-1.md +0 -15
  438. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-2.md +0 -4
  439. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-3.md +0 -5
  440. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-1.md +0 -11
  441. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-2.md +0 -11
  442. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-3.md +0 -4
  443. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/meta.json +0 -88
  444. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005-ticket-fields-updated.yaml +0 -39
  445. package/src/skills/execute-task/tests/fixtures/IMPL-902-create-file.md +0 -41
  446. package/src/skills/execute-task/tests/fixtures/IMPL-904-current-task.md +0 -40
  447. package/src/skills/execute-task/tests/fixtures/IMPL-906-fill-ticket.md +0 -42
  448. package/src/skills/execute-task/tests/fixtures/QA-901-button-click.md +0 -41
  449. package/src/skills/execute-task/tests/fixtures/QA-903-visual-figma.md +0 -40
  450. package/src/skills/execute-task/tests/fixtures/TASK-905-done-with-typo.md +0 -36
  451. package/src/skills/execute-task/tests/index.yaml +0 -39
  452. package/src/skills/execute-task/tests/rubrics/no-duplicate-dod.md +0 -22
  453. package/src/skills/execute-task/tests/rubrics/no-foreign-ticket-edit.md +0 -20
  454. package/src/skills/execute-task/tests/rubrics/no-ticket-creation.md +0 -21
  455. package/src/skills/execute-task/tests/rubrics/ticket-fields-updated.md +0 -23
  456. package/src/skills/execute-task/tests/rubrics/verification-proportionality.md +0 -22
  457. package/src/skills/execute-task/workflows/execute.md +0 -104
  458. package/src/skills/manual-testing/README.md +0 -63
  459. package/src/skills/manual-testing/algorithms/blocked-tool-strategy.md +0 -74
  460. package/src/skills/manual-testing/algorithms/bug-severity.md +0 -73
  461. package/src/skills/manual-testing/algorithms/mcp-budget.md +0 -97
  462. package/src/skills/manual-testing/algorithms/test-prioritization.md +0 -69
  463. package/src/skills/manual-testing/knowledge/browser-extension-testing.md +0 -102
  464. package/src/skills/manual-testing/knowledge/browser-tools.md +0 -114
  465. package/src/skills/manual-testing/knowledge/desktop-tools-advanced.md +0 -92
  466. package/src/skills/manual-testing/knowledge/desktop-tools-core.md +0 -76
  467. package/src/skills/manual-testing/knowledge/sandbox-advanced.md +0 -83
  468. package/src/skills/manual-testing/knowledge/sandbox-core.md +0 -67
  469. package/src/skills/manual-testing/knowledge/stateful-edge-cases.md +0 -69
  470. package/src/skills/manual-testing/knowledge/test-case-design.md +0 -107
  471. package/src/skills/manual-testing/knowledge/testing-types.md +0 -45
  472. package/src/skills/manual-testing/templates/bug-report.md +0 -52
  473. package/src/skills/manual-testing/templates/test-case.md +0 -34
  474. package/src/skills/manual-testing/templates/test-plan.md +0 -97
  475. package/src/skills/manual-testing/templates/test-session-report.md +0 -56
  476. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-1.md +0 -34
  477. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-2.md +0 -32
  478. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-3.md +0 -30
  479. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/judge.json +0 -163
  480. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-1.md +0 -0
  481. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-2.md +0 -7
  482. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-3.md +0 -0
  483. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-1.md +0 -4
  484. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-2.md +0 -15
  485. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-3.md +0 -8
  486. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-1.md +0 -5
  487. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-2.md +0 -7
  488. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-3.md +0 -7
  489. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/meta.json +0 -114
  490. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001-sandbox-mandatory.yaml +0 -38
  491. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-1.md +0 -44
  492. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-2.md +0 -32
  493. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-3.md +0 -47
  494. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/judge.json +0 -163
  495. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-1.md +0 -19
  496. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-2.md +0 -15
  497. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-3.md +0 -24
  498. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-1.md +0 -19
  499. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-2.md +0 -13
  500. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-3.md +0 -18
  501. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-1.md +0 -21
  502. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-2.md +0 -15
  503. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-3.md +0 -14
  504. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/meta.json +0 -114
  505. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002-visual-tc-screenshot.yaml +0 -37
  506. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-1.md +0 -76
  507. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-2.md +0 -71
  508. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-3.md +0 -85
  509. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/judge.json +0 -46
  510. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/meta.json +0 -36
  511. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003-qa-non-ui-assertion.yaml +0 -65
  512. package/src/skills/manual-testing/tests/index.yaml +0 -30
  513. package/src/skills/manual-testing/tests/last-run-tc001-sonnet.log +0 -140
  514. package/src/skills/manual-testing/tests/last-run-tc002.log +0 -1
  515. package/src/skills/manual-testing/tests/last-run.log +0 -1469
  516. package/src/skills/manual-testing/tests/rubrics/qa-non-ui-assertion.md +0 -31
  517. package/src/skills/manual-testing/tests/rubrics/sandbox-mandatory.md +0 -20
  518. package/src/skills/manual-testing/tests/rubrics/visual-tc-screenshot.md +0 -21
  519. package/src/skills/manual-testing/workflows/acceptance.md +0 -80
  520. package/src/skills/manual-testing/workflows/exploratory.md +0 -84
  521. package/src/skills/manual-testing/workflows/regression.md +0 -76
  522. package/src/skills/manual-testing/workflows/smoke.md +0 -109
  523. package/src/skills/manual-testing/workflows/test-plan.md +0 -75
  524. package/src/skills/review-result/README.md +0 -59
  525. package/src/skills/review-result/algorithms/verification.md +0 -112
  526. package/src/skills/review-result/knowledge/baseline-snapshot-validation.md +0 -67
  527. package/src/skills/review-result/knowledge/dod-patterns.md +0 -116
  528. package/src/skills/review-result/knowledge/test-hygiene.md +0 -44
  529. package/src/skills/review-result/scripts/verify-artifacts.js +0 -497
  530. package/src/skills/review-result/templates/verdict.md +0 -153
  531. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-1.md +0 -22
  532. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-2.md +0 -7
  533. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-3.md +0 -21
  534. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-1.md +0 -6
  535. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-2.md +0 -6
  536. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-3.md +0 -6
  537. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/judge.json +0 -164
  538. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-1.md +0 -5
  539. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-2.md +0 -7
  540. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-3.md +0 -6
  541. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-1.md +0 -49
  542. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-2.md +0 -28
  543. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-3.md +0 -37
  544. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-1.md +0 -22
  545. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-2.md +0 -13
  546. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-3.md +0 -21
  547. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/meta.json +0 -116
  548. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001-visual-tc-trigger.yaml +0 -51
  549. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-1.md +0 -23
  550. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-2.md +0 -22
  551. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-3.md +0 -28
  552. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-1.md +0 -4
  553. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-2.md +0 -4
  554. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-3.md +0 -4
  555. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/judge.json +0 -163
  556. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-1.md +0 -4
  557. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-2.md +0 -0
  558. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-3.md +0 -4
  559. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-1.md +0 -39
  560. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-2.md +0 -25
  561. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-3.md +0 -32
  562. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-1.md +0 -34
  563. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-2.md +0 -8
  564. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-3.md +0 -23
  565. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/meta.json +0 -115
  566. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002-path-line-suffix.yaml +0 -39
  567. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-1.md +0 -40
  568. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-2.md +0 -15
  569. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-3.md +0 -7
  570. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/judge.json +0 -163
  571. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-1.md +0 -5
  572. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-2.md +0 -5
  573. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-3.md +0 -11
  574. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-1.md +0 -16
  575. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-2.md +0 -18
  576. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-3.md +0 -17
  577. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-1.md +0 -17
  578. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-2.md +0 -31
  579. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-3.md +0 -5
  580. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/meta.json +0 -115
  581. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003-test-isolation.yaml +0 -50
  582. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/claude-sonnet/trial-1.md +0 -5
  583. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/claude-sonnet/trial-2.md +0 -5
  584. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/claude-sonnet/trial-3.md +0 -6
  585. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/judge.json +0 -46
  586. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/meta.json +0 -37
  587. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004-baseline-snapshot.yaml +0 -50
  588. package/src/skills/review-result/tests/fixtures/IMPL-902-path-with-line.md +0 -43
  589. package/src/skills/review-result/tests/fixtures/QA-901-visual-button.md +0 -46
  590. package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/QA-904.md +0 -51
  591. package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/example-test.mjs +0 -36
  592. package/src/skills/review-result/tests/fixtures/QA-905-baseline-regex-instead-of-snapshot/QA-905.md +0 -62
  593. package/src/skills/review-result/tests/fixtures/QA-905-baseline-regex-instead-of-snapshot/baseline.test.mjs +0 -124
  594. package/src/skills/review-result/tests/index.yaml +0 -35
  595. package/src/skills/review-result/tests/rubrics/baseline-snapshot.md +0 -20
  596. package/src/skills/review-result/tests/rubrics/path-line-suffix.md +0 -19
  597. package/src/skills/review-result/tests/rubrics/test-isolation.md +0 -20
  598. package/src/skills/review-result/tests/rubrics/visual-tc-trigger.md +0 -19
  599. 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---