workflow-ai 1.0.63 → 1.0.64

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 (494) hide show
  1. package/configs/config.yaml +134 -0
  2. package/configs/pipeline.yaml +884 -0
  3. package/configs/ticket-movement-rules.yaml +80 -0
  4. package/package.json +1 -1
  5. package/src/global-dir.mjs +25 -1
  6. package/src/scripts/run-skill-tests.js +348 -136
  7. package/src/skills/analyze-report/README.md +44 -0
  8. package/src/skills/analyze-report/SKILL.md +121 -0
  9. package/src/skills/analyze-report/algorithms/progress-assessment.md +108 -0
  10. package/src/skills/analyze-report/knowledge/analysis-frameworks.md +66 -0
  11. package/src/skills/analyze-report/knowledge/report-structure.md +61 -0
  12. package/src/skills/analyze-report/scripts/calc-plan-metrics.js +234 -0
  13. package/src/skills/analyze-report/templates/analysis-report.md +80 -0
  14. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-1.md +69 -0
  15. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-2.md +103 -0
  16. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-3.md +99 -0
  17. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/judge.json +163 -0
  18. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-1.md +89 -0
  19. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-2.md +88 -0
  20. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-3.md +100 -0
  21. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-1.md +77 -0
  22. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-2.md +64 -0
  23. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-3.md +110 -0
  24. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-1.md +74 -0
  25. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-2.md +38 -0
  26. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-3.md +61 -0
  27. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/meta.json +115 -0
  28. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001-evidence-from-log.yaml +60 -0
  29. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-1.md +90 -0
  30. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-2.md +89 -0
  31. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-3.md +77 -0
  32. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/judge.json +163 -0
  33. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-1.md +84 -0
  34. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-2.md +77 -0
  35. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-3.md +89 -0
  36. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-1.md +103 -0
  37. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-2.md +103 -0
  38. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-3.md +103 -0
  39. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-1.md +93 -0
  40. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-2.md +93 -0
  41. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-3.md +86 -0
  42. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/meta.json +115 -0
  43. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002-result-block-format.yaml +44 -0
  44. package/src/skills/analyze-report/tests/fixtures/REPORT-002-incorrect-attribution.md +27 -0
  45. package/src/skills/analyze-report/tests/fixtures/pipeline-2026-04-06_qa-001-skip.log +32 -0
  46. package/src/skills/analyze-report/tests/index.yaml +25 -0
  47. package/src/skills/analyze-report/tests/rubrics/evidence-from-log.md +22 -0
  48. package/src/skills/analyze-report/tests/rubrics/result-block-format.md +22 -0
  49. package/src/skills/analyze-report/workflows/progress.md +158 -0
  50. package/src/skills/analyze-report/workflows/retrospective.md +143 -0
  51. package/src/skills/coach/README.md +43 -0
  52. package/src/skills/coach/SKILL.md +166 -0
  53. package/src/skills/coach/SKILL.md.legacy +157 -0
  54. package/src/skills/coach/algorithms/gap-analysis.md +69 -0
  55. package/src/skills/coach/algorithms/improvement-prioritization.md +62 -0
  56. package/src/skills/coach/algorithms/skill-scoring.md +80 -0
  57. package/src/skills/coach/knowledge/audit-applied-changes-clean.txt +11 -0
  58. package/src/skills/coach/knowledge/backlog-management.md +67 -0
  59. package/src/skills/coach/knowledge/backlog-management.md.legacy +90 -0
  60. package/src/skills/coach/knowledge/common-antipatterns.md +76 -0
  61. package/src/skills/coach/knowledge/prompt-engineering.md +45 -0
  62. package/src/skills/coach/knowledge/shared-knowledge-guide.md +44 -0
  63. package/src/skills/coach/knowledge/skill-anatomy.md +49 -0
  64. package/src/skills/coach/knowledge/test-authorship.md +141 -0
  65. package/src/skills/coach/templates/audit-report.md +39 -0
  66. package/src/skills/coach/templates/coach-backlog-init.yaml +14 -0
  67. package/src/skills/coach/templates/coach-backlog-init.yaml.legacy +10 -0
  68. package/src/skills/coach/templates/improvement-plan.md +42 -0
  69. package/src/skills/coach/templates/new-skill.md +95 -0
  70. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-1.md +58 -0
  71. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-2.md +65 -0
  72. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-3.md +58 -0
  73. package/src/skills/coach/tests/cases/TC-COACH-001/current/judge.json +151 -0
  74. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-1.md +46 -0
  75. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-2.md +0 -0
  76. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-3.md +75 -0
  77. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-1.md +81 -0
  78. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-2.md +101 -0
  79. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-3.md +91 -0
  80. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-1.md +48 -0
  81. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-2.md +30 -0
  82. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-3.md +55 -0
  83. package/src/skills/coach/tests/cases/TC-COACH-001/current/meta.json +95 -0
  84. package/src/skills/coach/tests/cases/TC-COACH-001-evidence-based-temporal-diagram.yaml +53 -0
  85. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-1.md +46 -0
  86. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-2.md +50 -0
  87. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-3.md +48 -0
  88. package/src/skills/coach/tests/cases/TC-COACH-002/current/judge.json +151 -0
  89. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-1.md +0 -0
  90. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-2.md +37 -0
  91. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-3.md +30 -0
  92. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-1.md +23 -0
  93. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-2.md +29 -0
  94. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-3.md +35 -0
  95. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-1.md +13 -0
  96. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-2.md +19 -0
  97. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-3.md +33 -0
  98. package/src/skills/coach/tests/cases/TC-COACH-002/current/meta.json +95 -0
  99. package/src/skills/coach/tests/cases/TC-COACH-002-root-cause-first.yaml +57 -0
  100. package/src/skills/coach/tests/fixtures/pipeline-2026-04-06_id-collision.log +77 -0
  101. package/src/skills/coach/tests/index.yaml +29 -0
  102. package/src/skills/coach/tests/rubrics/calibration/evidence-based-bad.md +13 -0
  103. package/src/skills/coach/tests/rubrics/calibration/evidence-based-good.md +29 -0
  104. package/src/skills/coach/tests/rubrics/evidence-based.md +26 -0
  105. package/src/skills/coach/tests/rubrics/root-cause-first.md +21 -0
  106. package/src/skills/coach/workflows/analyze.md +79 -0
  107. package/src/skills/coach/workflows/analyze.md.legacy +64 -0
  108. package/src/skills/coach/workflows/audit.md +74 -0
  109. package/src/skills/coach/workflows/audit.md.legacy +59 -0
  110. package/src/skills/coach/workflows/create.md +80 -0
  111. package/src/skills/coach/workflows/create.md.legacy +67 -0
  112. package/src/skills/coach/workflows/improve.md +71 -0
  113. package/src/skills/coach/workflows/improve.md.legacy +60 -0
  114. package/src/skills/coach/workflows/research.md +55 -0
  115. package/src/skills/coach/workflows/review.md +52 -0
  116. package/src/skills/coach/workflows/review.md.legacy +48 -0
  117. package/src/skills/coach/workflows/test.md +97 -0
  118. package/src/skills/create-plan/README.md +39 -0
  119. package/src/skills/create-plan/SKILL.md +104 -0
  120. package/src/skills/create-plan/algorithms/risk-assessment.md +73 -0
  121. package/src/skills/create-plan/knowledge/plan-completeness.md +67 -0
  122. package/src/skills/create-plan/knowledge/plan-lifecycle.md +33 -0
  123. package/src/skills/create-plan/knowledge/task-verification-pairs.md +151 -0
  124. package/src/skills/create-plan/scripts/validate-completeness.js +182 -0
  125. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-1.md +5 -0
  126. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-2.md +39 -0
  127. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-3.md +35 -0
  128. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/judge.json +167 -0
  129. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-1.md +5 -0
  130. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-2.md +10 -0
  131. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-3.md +5 -0
  132. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-1.md +26 -0
  133. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-2.md +86 -0
  134. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-3.md +5 -0
  135. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-1.md +11 -0
  136. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-2.md +15 -0
  137. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-3.md +14 -0
  138. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/meta.json +119 -0
  139. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001-validate-completeness.yaml +41 -0
  140. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-1.md +25 -0
  141. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-2.md +30 -0
  142. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-3.md +37 -0
  143. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/judge.json +164 -0
  144. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-1.md +3 -0
  145. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-2.md +11 -0
  146. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-3.md +13 -0
  147. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-1.md +44 -0
  148. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-2.md +5 -0
  149. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-3.md +49 -0
  150. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-1.md +6 -0
  151. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-2.md +11 -0
  152. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-3.md +16 -0
  153. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/meta.json +116 -0
  154. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002-task-granularity.yaml +39 -0
  155. package/src/skills/create-plan/tests/index.yaml +25 -0
  156. package/src/skills/create-plan/tests/rubrics/task-granularity.md +21 -0
  157. package/src/skills/create-plan/tests/rubrics/validate-completeness.md +21 -0
  158. package/src/skills/create-plan/workflows/create.md +136 -0
  159. package/src/skills/create-report/README.md +40 -0
  160. package/src/skills/create-report/SKILL.md +73 -0
  161. package/src/skills/create-report/algorithms/metric-calculation.md +93 -0
  162. package/src/skills/create-report/knowledge/report-metrics.md +82 -0
  163. package/src/skills/create-report/scripts/calc-metrics.js +383 -0
  164. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-1.md +25 -0
  165. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-2.md +26 -0
  166. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-3.md +28 -0
  167. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/judge.json +163 -0
  168. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-1.md +4 -0
  169. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-2.md +3 -0
  170. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-3.md +6 -0
  171. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-1.md +8 -0
  172. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-2.md +12 -0
  173. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-3.md +7 -0
  174. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-1.md +12 -0
  175. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-2.md +22 -0
  176. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-3.md +13 -0
  177. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/meta.json +115 -0
  178. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001-root-cause-attribution.yaml +57 -0
  179. package/src/skills/create-report/tests/index.yaml +20 -0
  180. package/src/skills/create-report/tests/rubrics/root-cause-attribution.md +21 -0
  181. package/src/skills/create-report/workflows/standard.md +175 -0
  182. package/src/skills/decompose-gaps/README.md +39 -0
  183. package/src/skills/decompose-gaps/SKILL.md +78 -0
  184. package/src/skills/decompose-gaps/algorithms/scope-check.md +110 -0
  185. package/src/skills/decompose-gaps/knowledge/scope-validation.md +65 -0
  186. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-1.md +49 -0
  187. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-2.md +56 -0
  188. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-3.md +39 -0
  189. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/judge.json +164 -0
  190. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-1.md +25 -0
  191. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-2.md +11 -0
  192. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-3.md +26 -0
  193. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-1.md +19 -0
  194. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-2.md +5 -0
  195. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-3.md +28 -0
  196. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-1.md +23 -0
  197. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-2.md +27 -0
  198. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-3.md +25 -0
  199. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/meta.json +116 -0
  200. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001-scope-exclusion.yaml +46 -0
  201. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-1.md +32 -0
  202. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-2.md +20 -0
  203. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-3.md +26 -0
  204. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/judge.json +164 -0
  205. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-1.md +7 -0
  206. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-2.md +16 -0
  207. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-3.md +7 -0
  208. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-1.md +5 -0
  209. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-2.md +11 -0
  210. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-3.md +13 -0
  211. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-1.md +13 -0
  212. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-2.md +12 -0
  213. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-3.md +5 -0
  214. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/meta.json +116 -0
  215. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002-glob-before-write.yaml +36 -0
  216. package/src/skills/decompose-gaps/tests/index.yaml +25 -0
  217. package/src/skills/decompose-gaps/tests/rubrics/glob-before-write.md +21 -0
  218. package/src/skills/decompose-gaps/tests/rubrics/scope-exclusion.md +21 -0
  219. package/src/skills/decompose-gaps/workflows/decompose.md +120 -0
  220. package/src/skills/decompose-plan/README.md +43 -0
  221. package/src/skills/decompose-plan/SKILL.md +87 -0
  222. package/src/skills/decompose-plan/algorithms/deduplication.md +101 -0
  223. package/src/skills/decompose-plan/knowledge/atomicity-checklist.md +113 -0
  224. package/src/skills/decompose-plan/knowledge/capabilities.md +44 -0
  225. package/src/skills/decompose-plan/knowledge/human-task-rules.md +67 -0
  226. package/src/skills/decompose-plan/knowledge/scope-guard-checklist.md +73 -0
  227. package/src/skills/decompose-plan/scripts/check-atomicity-limit.js +47 -0
  228. package/src/skills/decompose-plan/scripts/check-duplicates.js +323 -0
  229. package/src/skills/decompose-plan/scripts/verify-atomicity.js +408 -0
  230. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-1.md +30 -0
  231. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-2.md +36 -0
  232. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-3.md +37 -0
  233. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/judge.json +163 -0
  234. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-1.md +20 -0
  235. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-2.md +17 -0
  236. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-3.md +28 -0
  237. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-1.md +114 -0
  238. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-2.md +137 -0
  239. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-3.md +188 -0
  240. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-1.md +0 -0
  241. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-2.md +32 -0
  242. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-3.md +110 -0
  243. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/meta.json +115 -0
  244. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001-atomicity-no-1to1.yaml +56 -0
  245. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-1.md +47 -0
  246. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-2.md +54 -0
  247. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-3.md +43 -0
  248. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/judge.json +163 -0
  249. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-1.md +15 -0
  250. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-2.md +5 -0
  251. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-3.md +12 -0
  252. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-1.md +34 -0
  253. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-2.md +30 -0
  254. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-3.md +35 -0
  255. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-1.md +0 -0
  256. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-2.md +31 -0
  257. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-3.md +0 -0
  258. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/meta.json +115 -0
  259. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002-get-next-id-mandatory.yaml +44 -0
  260. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-1.md +21 -0
  261. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-2.md +38 -0
  262. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-3.md +30 -0
  263. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/judge.json +163 -0
  264. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-1.md +31 -0
  265. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-2.md +35 -0
  266. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-3.md +48 -0
  267. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-1.md +167 -0
  268. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-2.md +62 -0
  269. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-3.md +174 -0
  270. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-1.md +0 -0
  271. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-2.md +0 -0
  272. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-3.md +0 -0
  273. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/meta.json +115 -0
  274. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003-verbatim-dod-transfer.yaml +42 -0
  275. package/src/skills/decompose-plan/tests/index.yaml +30 -0
  276. package/src/skills/decompose-plan/tests/rubrics/atomicity-no-1to1.md +21 -0
  277. package/src/skills/decompose-plan/tests/rubrics/get-next-id-mandatory.md +21 -0
  278. package/src/skills/decompose-plan/tests/rubrics/verbatim-dod-transfer.md +21 -0
  279. package/src/skills/decompose-plan/workflows/decompose.md +272 -0
  280. package/src/skills/deep-research/README.md +36 -0
  281. package/src/skills/deep-research/SKILL.md +106 -0
  282. package/src/skills/deep-research/algorithms/source-scoring.md +63 -0
  283. package/src/skills/deep-research/algorithms/synthesis.md +67 -0
  284. package/src/skills/deep-research/knowledge/data-validation.md +44 -0
  285. package/src/skills/deep-research/knowledge/perplexity-config.md +30 -0
  286. package/src/skills/deep-research/knowledge/research-methodology.md +54 -0
  287. package/src/skills/deep-research/knowledge/source-evaluation.md +33 -0
  288. package/src/skills/deep-research/scripts/perplexity-research.js +315 -0
  289. package/src/skills/deep-research/templates/brief-summary.md +25 -0
  290. package/src/skills/deep-research/templates/research-report.md +76 -0
  291. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-1.md +48 -0
  292. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-2.md +88 -0
  293. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-3.md +56 -0
  294. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/judge.json +163 -0
  295. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-1.md +58 -0
  296. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-2.md +249 -0
  297. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-3.md +44 -0
  298. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-1.md +96 -0
  299. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-2.md +56 -0
  300. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-3.md +94 -0
  301. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-1.md +11 -0
  302. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-2.md +1 -0
  303. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-3.md +1 -0
  304. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/meta.json +115 -0
  305. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001-self-check-url.yaml +58 -0
  306. package/src/skills/deep-research/tests/index.yaml +20 -0
  307. package/src/skills/deep-research/tests/rubrics/self-check-url.md +34 -0
  308. package/src/skills/deep-research/workflows/base-checklist.md +19 -0
  309. package/src/skills/deep-research/workflows/benchmark.md +38 -0
  310. package/src/skills/deep-research/workflows/competitor.md +44 -0
  311. package/src/skills/deep-research/workflows/custom.md +32 -0
  312. package/src/skills/deep-research/workflows/market.md +44 -0
  313. package/src/skills/deep-research/workflows/technology.md +40 -0
  314. package/src/skills/deep-research/workflows/trend.md +40 -0
  315. package/src/skills/execute-task/README.md +44 -0
  316. package/src/skills/execute-task/SKILL.md +292 -0
  317. package/src/skills/execute-task/algorithms/execution-strategy.md +136 -0
  318. package/src/skills/execute-task/knowledge/context-checkpoints.md +75 -0
  319. package/src/skills/execute-task/knowledge/ticket-structure.md +70 -0
  320. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-1.md +5 -0
  321. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-2.md +5 -0
  322. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-3.md +5 -0
  323. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/judge.json +124 -0
  324. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-1.md +4 -0
  325. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-2.md +4 -0
  326. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-3.md +4 -0
  327. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-1.md +4 -0
  328. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-2.md +4 -0
  329. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-3.md +11 -0
  330. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/meta.json +89 -0
  331. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001-no-ticket-creation.yaml +48 -0
  332. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-1.md +5 -0
  333. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-2.md +6 -0
  334. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-3.md +5 -0
  335. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/judge.json +124 -0
  336. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-1.md +4 -0
  337. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-2.md +4 -0
  338. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-3.md +8 -0
  339. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-1.md +9 -0
  340. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-2.md +26 -0
  341. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-3.md +4 -0
  342. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/meta.json +89 -0
  343. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002-no-duplicate-dod.yaml +44 -0
  344. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-1.md +5 -0
  345. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-2.md +5 -0
  346. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-3.md +5 -0
  347. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/judge.json +46 -0
  348. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/meta.json +37 -0
  349. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003-verification-proportionality.yaml +46 -0
  350. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-1.md +18 -0
  351. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-2.md +16 -0
  352. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-3.md +14 -0
  353. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/judge.json +124 -0
  354. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-1.md +5 -0
  355. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-2.md +5 -0
  356. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-3.md +1 -0
  357. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-1.md +8 -0
  358. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-2.md +5 -0
  359. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-3.md +4 -0
  360. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/meta.json +89 -0
  361. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004-no-foreign-ticket-edit.yaml +50 -0
  362. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-1.md +5 -0
  363. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-2.md +5 -0
  364. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-3.md +5 -0
  365. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/judge.json +124 -0
  366. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-1.md +15 -0
  367. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-2.md +4 -0
  368. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-3.md +5 -0
  369. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-1.md +11 -0
  370. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-2.md +11 -0
  371. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-3.md +4 -0
  372. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/meta.json +89 -0
  373. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005-ticket-fields-updated.yaml +39 -0
  374. package/src/skills/execute-task/tests/fixtures/IMPL-902-create-file.md +41 -0
  375. package/src/skills/execute-task/tests/fixtures/IMPL-904-current-task.md +40 -0
  376. package/src/skills/execute-task/tests/fixtures/IMPL-906-fill-ticket.md +42 -0
  377. package/src/skills/execute-task/tests/fixtures/QA-901-button-click.md +41 -0
  378. package/src/skills/execute-task/tests/fixtures/QA-903-visual-figma.md +40 -0
  379. package/src/skills/execute-task/tests/fixtures/TASK-905-done-with-typo.md +36 -0
  380. package/src/skills/execute-task/tests/index.yaml +39 -0
  381. package/src/skills/execute-task/tests/rubrics/no-duplicate-dod.md +22 -0
  382. package/src/skills/execute-task/tests/rubrics/no-foreign-ticket-edit.md +20 -0
  383. package/src/skills/execute-task/tests/rubrics/no-ticket-creation.md +21 -0
  384. package/src/skills/execute-task/tests/rubrics/ticket-fields-updated.md +23 -0
  385. package/src/skills/execute-task/tests/rubrics/verification-proportionality.md +22 -0
  386. package/src/skills/execute-task/workflows/execute.md +104 -0
  387. package/src/skills/manual-testing/README.md +63 -0
  388. package/src/skills/manual-testing/SKILL.md +174 -0
  389. package/src/skills/manual-testing/algorithms/blocked-tool-strategy.md +74 -0
  390. package/src/skills/manual-testing/algorithms/bug-severity.md +73 -0
  391. package/src/skills/manual-testing/algorithms/mcp-budget.md +97 -0
  392. package/src/skills/manual-testing/algorithms/test-prioritization.md +69 -0
  393. package/src/skills/manual-testing/knowledge/browser-extension-testing.md +102 -0
  394. package/src/skills/manual-testing/knowledge/browser-tools.md +114 -0
  395. package/src/skills/manual-testing/knowledge/desktop-tools-advanced.md +92 -0
  396. package/src/skills/manual-testing/knowledge/desktop-tools-core.md +76 -0
  397. package/src/skills/manual-testing/knowledge/sandbox-advanced.md +83 -0
  398. package/src/skills/manual-testing/knowledge/sandbox-core.md +67 -0
  399. package/src/skills/manual-testing/knowledge/stateful-edge-cases.md +69 -0
  400. package/src/skills/manual-testing/knowledge/test-case-design.md +107 -0
  401. package/src/skills/manual-testing/knowledge/testing-types.md +45 -0
  402. package/src/skills/manual-testing/templates/bug-report.md +52 -0
  403. package/src/skills/manual-testing/templates/test-case.md +34 -0
  404. package/src/skills/manual-testing/templates/test-plan.md +97 -0
  405. package/src/skills/manual-testing/templates/test-session-report.md +56 -0
  406. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-1.md +21 -0
  407. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-2.md +65 -0
  408. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-3.md +35 -0
  409. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/judge.json +163 -0
  410. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-1.md +0 -0
  411. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-2.md +7 -0
  412. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-3.md +0 -0
  413. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-1.md +4 -0
  414. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-2.md +15 -0
  415. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-3.md +8 -0
  416. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-1.md +5 -0
  417. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-2.md +7 -0
  418. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-3.md +7 -0
  419. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/meta.json +114 -0
  420. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001-sandbox-mandatory.yaml +38 -0
  421. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-1.md +47 -0
  422. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-2.md +39 -0
  423. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-3.md +40 -0
  424. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/judge.json +163 -0
  425. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-1.md +19 -0
  426. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-2.md +15 -0
  427. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-3.md +24 -0
  428. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-1.md +19 -0
  429. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-2.md +13 -0
  430. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-3.md +18 -0
  431. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-1.md +21 -0
  432. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-2.md +15 -0
  433. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-3.md +14 -0
  434. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/meta.json +114 -0
  435. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002-visual-tc-screenshot.yaml +37 -0
  436. package/src/skills/manual-testing/tests/index.yaml +25 -0
  437. package/src/skills/manual-testing/tests/last-run-tc001-sonnet.log +140 -0
  438. package/src/skills/manual-testing/tests/last-run-tc002.log +1 -0
  439. package/src/skills/manual-testing/tests/last-run.log +1469 -0
  440. package/src/skills/manual-testing/tests/rubrics/sandbox-mandatory.md +20 -0
  441. package/src/skills/manual-testing/tests/rubrics/visual-tc-screenshot.md +21 -0
  442. package/src/skills/manual-testing/workflows/acceptance.md +80 -0
  443. package/src/skills/manual-testing/workflows/exploratory.md +84 -0
  444. package/src/skills/manual-testing/workflows/regression.md +76 -0
  445. package/src/skills/manual-testing/workflows/smoke.md +109 -0
  446. package/src/skills/manual-testing/workflows/test-plan.md +75 -0
  447. package/src/skills/review-result/README.md +59 -0
  448. package/src/skills/review-result/SKILL.md +138 -0
  449. package/src/skills/review-result/algorithms/verification.md +112 -0
  450. package/src/skills/review-result/knowledge/dod-patterns.md +115 -0
  451. package/src/skills/review-result/scripts/verify-artifacts.js +354 -0
  452. package/src/skills/review-result/templates/verdict.md +153 -0
  453. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-1.md +22 -0
  454. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-2.md +7 -0
  455. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-3.md +21 -0
  456. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-1.md +6 -0
  457. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-2.md +6 -0
  458. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-3.md +18 -0
  459. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/judge.json +164 -0
  460. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-1.md +5 -0
  461. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-2.md +7 -0
  462. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-3.md +6 -0
  463. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-1.md +49 -0
  464. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-2.md +28 -0
  465. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-3.md +37 -0
  466. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-1.md +22 -0
  467. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-2.md +13 -0
  468. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-3.md +21 -0
  469. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/meta.json +116 -0
  470. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001-visual-tc-trigger.yaml +51 -0
  471. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-1.md +23 -0
  472. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-2.md +22 -0
  473. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-3.md +28 -0
  474. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-1.md +4 -0
  475. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-2.md +36 -0
  476. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-3.md +4 -0
  477. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/judge.json +163 -0
  478. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-1.md +4 -0
  479. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-2.md +0 -0
  480. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-3.md +4 -0
  481. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-1.md +39 -0
  482. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-2.md +25 -0
  483. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-3.md +32 -0
  484. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-1.md +34 -0
  485. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-2.md +8 -0
  486. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-3.md +23 -0
  487. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/meta.json +115 -0
  488. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002-path-line-suffix.yaml +39 -0
  489. package/src/skills/review-result/tests/fixtures/IMPL-902-path-with-line.md +43 -0
  490. package/src/skills/review-result/tests/fixtures/QA-901-visual-button.md +46 -0
  491. package/src/skills/review-result/tests/index.yaml +25 -0
  492. package/src/skills/review-result/tests/rubrics/path-line-suffix.md +19 -0
  493. package/src/skills/review-result/tests/rubrics/visual-tc-trigger.md +19 -0
  494. package/src/skills/review-result/workflows/review.md +209 -0
@@ -0,0 +1,44 @@
1
+ # Analyze Report — Agent Skill
2
+
3
+ Аналитик отчётов для workflow-ai. Анализирует отчёты о выполненных задачах, оценивает прогресс по планам, проводит ретроспективы и формирует actionable рекомендации.
4
+
5
+ ## Структура
6
+
7
+ ```
8
+ analyze-report/
9
+ ├── SKILL.md # Ядро: роль, маршрутизация, принципы
10
+ ├── README.md # Документация
11
+ ├── workflows/
12
+ │ ├── progress.md # Оценка прогресса по плану
13
+ │ └── retrospective.md # Ретроспектива завершённого плана
14
+ ├── knowledge/
15
+ │ ├── analysis-frameworks.md # Методологии анализа, метрики, паттерны
16
+ │ └── report-structure.md # Структура отчётов, правила извлечения данных
17
+ ├── algorithms/
18
+ │ └── progress-assessment.md # Алгоритм оценки прогресса (формулы, пороги)
19
+ └── templates/
20
+ └── analysis-report.md # Шаблон результата анализа
21
+ ```
22
+
23
+ ## Как это работает
24
+
25
+ 1. Любой скил проекта создаёт тикет `ANL-*` с запросом на анализ
26
+ 2. Analyze Report определяет тип (PROGRESS / RETROSPECTIVE)
27
+ 3. Загружает соответствующий workflow
28
+ 4. Собирает данные из отчётов, тикетов, планов
29
+ 5. Рассчитывает метрики, выявляет проблемы, формулирует рекомендации
30
+ 6. Формирует структурированный результат анализа
31
+
32
+ ## Как расширять
33
+
34
+ ### Новый тип анализа
35
+ 1. Создай файл в `workflows/{type}.md`
36
+ 2. Добавь запись в таблицу маршрутизации в `SKILL.md`
37
+
38
+ ### Новый knowledge-модуль
39
+ 1. Создай файл в `knowledge/{module}.md`
40
+ 2. Добавь запись в таблицу загрузки знаний в `SKILL.md`
41
+
42
+ ### Новый шаблон вывода
43
+ 1. Создай файл в `templates/{template}.md`
44
+ 2. Добавь запись в таблицу шаблонов в `SKILL.md`
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: analyze-report
3
+ description: >
4
+ Скилл аналитика отчётов для workflow-ai. Анализирует отчёты о выполненных
5
+ задачах, оценивает прогресс по планам, проводит ретроспективы завершённых
6
+ планов, выявляет проблемы и формирует actionable рекомендации.
7
+ ticket_prefix: ANL
8
+ ---
9
+
10
+ # Analyze Report — Agent Skill
11
+
12
+ ## Роль
13
+
14
+ Ты — аналитик системы workflow-ai. Твоя задача — анализировать отчёты о выполненных задачах, оценивать прогресс по планам, выявлять проблемы и паттерны, формулировать конкретные рекомендации для принятия решений.
15
+
16
+ **Ты делаешь:** анализ отчётов из `.workflow/reports/`, оценку прогресса по планам, ретроспективный анализ завершённых планов, выявление паттернов проблем и успехов, формирование actionable рекомендаций, сравнительный анализ между итерациями.
17
+
18
+ **Ты НЕ делаешь:** выполнение бизнес-задач, создание планов или тикетов, принятие решений (только рекомендации для принятия решений), изменение кода или конфигурации, создание отчётов (их создаёт соответствующий скил).
19
+
20
+ ## Маршрутизация тикетов ANL-*
21
+
22
+ | Тип | Триггеры в тикете | Действие | Воркфлоу |
23
+ |-----|-------------------|----------|----------|
24
+ | **PROGRESS** | «оценить прогресс», «статус плана», «как дела по плану» | Оценка прогресса по активному плану | → `workflows/progress.md` |
25
+ | **RETROSPECTIVE** | «ретроспектива», «итоги», «анализ завершённого» | Ретроспективный анализ завершённого плана | → `workflows/retrospective.md` |
26
+
27
+ Если тип не определяется — используй PROGRESS как дефолт.
28
+
29
+ ## Загрузка знаний
30
+
31
+ | Модуль | Когда загружать |
32
+ |--------|----------------|
33
+ | `knowledge/analysis-frameworks.md` | **ВСЕГДА** — методологии анализа, метрики, паттерны проблем |
34
+ | `knowledge/report-structure.md` | При работе с отчётами — что извлекать из отчётов |
35
+
36
+ ## Загрузка алгоритмов
37
+
38
+ | Алгоритм | Когда загружать |
39
+ |----------|----------------|
40
+ | `algorithms/progress-assessment.md` | Оценка прогресса по плану — пороги, формулы, классификация |
41
+
42
+ ## Шаблоны вывода
43
+
44
+ | Шаблон | Когда использовать |
45
+ |--------|-------------------|
46
+ | `templates/analysis-report.md` | Основной формат результата анализа |
47
+
48
+ ## Принципы
49
+
50
+ 1. **Evidence-Based** — все выводы основаны на данных из отчётов, тикетов и планов. Нет данных = нет вывода. Не додумывай.
51
+ 2. **Структурированность** — результат всегда структурирован: executive summary, находки, детали, рекомендации. Используй таблицы для сравнений и метрик.
52
+ 3. **Объективность** — разделяй факты и интерпретации. Указывай уровень уверенности: `[HIGH]`, `[MEDIUM]`, `[LOW]`.
53
+ 4. **Конкретность рекомендаций** — каждая рекомендация содержит: что сделать, почему, ожидаемый результат. Абстрактные рекомендации («улучшить процесс») запрещены.
54
+ 5. **Scope Discipline** — анализируй строго в рамках заданного отчёта/плана. Находки за пределами скоупа — кратко в секции «За пределами скоупа».
55
+
56
+ ## Self-check перед завершением тикета
57
+
58
+ **ОБЯЗАТЕЛЬНО перед закрытием тикета выполни:**
59
+
60
+ 1. Проверь что секция **Result** заполнена (не пустой шаблон)
61
+ 2. Проверь что каждый вывод подкреплён **конкретными данными** из отчёта
62
+ 3. Пройди по **каждому пункту DoD** — отметь `[x]` только если реально выполнен
63
+ 4. Проверь что рекомендации **actionable** (содержат конкретное действие)
64
+
65
+ **Если хотя бы один пункт не пройден — тикет НЕ завершён.**
66
+
67
+ ## Формат вывода
68
+
69
+ - Русский язык
70
+ - Структурированный markdown с заголовками, таблицами, списками
71
+ - Executive Summary в начале (3-5 предложений)
72
+ - Метрики в табличном виде
73
+ - Уровень уверенности для ключевых выводов: `[HIGH/MEDIUM/LOW]`
74
+ - Рекомендации с приоритетами: CRITICAL / HIGH / MEDIUM / LOW
75
+
76
+ ## Интеграция с пайплайном
77
+
78
+ > **ОБЯЗАТЕЛЬНО:** Последние строки твоего ответа ВСЕГДА должны быть блоком `---RESULT---`.
79
+ > Без этого блока пайплайн не распознает статус и завершит работу без декомпозиции пробелов.
80
+
81
+ По результатам анализа верни один из статусов:
82
+
83
+ ### completed — план завершён, пробелов нет
84
+
85
+ ```
86
+ ---RESULT---
87
+ status: completed
88
+ report_id: REPORT-NNN
89
+ ---RESULT---
90
+ ```
91
+
92
+ ### has_gaps — план не завершён или обнаружены проблемы/пробелы
93
+
94
+ Используй этот статус когда:
95
+ - есть тикеты в backlog/blocked/in-progress
96
+ - обнаружены CRITICAL или HIGH проблемы
97
+ - QA-верификация провалена
98
+ - статус плана ATTENTION, AT_RISK или CRITICAL
99
+
100
+ ```
101
+ ---RESULT---
102
+ status: has_gaps
103
+ report_id: REPORT-NNN
104
+ gaps: "Краткое описание пробелов для декомпозиции (1-2 предложения)"
105
+ ---RESULT---
106
+ ```
107
+
108
+ > **КРИТИЧНО**: `status` принимает ТОЛЬКО значения `completed` или `has_gaps`.
109
+ > Любой другой вывод (`default`, `ok`, `done`, и т.д.) — **ОШИБКА**, пайплайн завершится вместо декомпозиции пробелов.
110
+
111
+ ## Границы компетенции
112
+
113
+ - **Создание отчётов** → соответствующий скил проекта
114
+ - **Создание/изменение планов** → соответствующий скил проекта
115
+ - **Выполнение бизнес-задач** → соответствующий скил проекта
116
+ - **Улучшение скилов** → соответствующий скил проекта
117
+ - **Декомпозиция задач** → соответствующий скил проекта
118
+
119
+ ---
120
+
121
+ **Регрессионные тесты:** `tests/index.yaml`. Прогон: `node .workflow/src/scripts/run-skill-tests.js --skill analyze-report`
@@ -0,0 +1,108 @@
1
+ # Алгоритм: Оценка прогресса по плану
2
+
3
+ Формализованный метод оценки текущего прогресса выполнения плана.
4
+
5
+ ## Вход
6
+
7
+ - Список всех тикетов плана с их статусами (done, in-progress, ready, blocked, backlog)
8
+ - Сложность каждого тикета (simple, medium, complex)
9
+ - Даты создания и завершения тикетов
10
+ - Данные ревью (прошёл / не прошёл / пропущен)
11
+
12
+ ## Алгоритм
13
+
14
+ ### 1. Подсчитай распределение по статусам
15
+
16
+ ```
17
+ total = count(all tickets)
18
+ done = count(status == done)
19
+ in_progress = count(status == in-progress)
20
+ ready = count(status == ready)
21
+ blocked = count(status == blocked)
22
+ backlog = count(status == backlog)
23
+ ```
24
+
25
+ ### 2. Рассчитай Completion Rate
26
+
27
+ **Простой (по количеству):**
28
+ ```
29
+ completion_rate = done / total × 100%
30
+ ```
31
+
32
+ **Взвешенный (по сложности):**
33
+
34
+ | Сложность | Вес |
35
+ |-----------|-----|
36
+ | simple | 1 |
37
+ | medium | 2 |
38
+ | complex | 3 |
39
+
40
+ ```
41
+ weighted_done = Σ(weight[t] for t in done_tickets)
42
+ weighted_total = Σ(weight[t] for t in all_tickets)
43
+ weighted_completion = weighted_done / weighted_total × 100%
44
+ ```
45
+
46
+ ### 3. Рассчитай Quality Rate
47
+
48
+ ```
49
+ reviewed = count(tickets with review)
50
+ passed_first = count(tickets passed review on first attempt)
51
+ first_pass_rate = passed_first / reviewed × 100%
52
+ ```
53
+
54
+ ### 4. Рассчитай Block Rate
55
+
56
+ ```
57
+ block_rate = blocked / total × 100%
58
+ ```
59
+
60
+ ### 5. Определи статус прогресса
61
+
62
+ | Completion | Block Rate | First-Pass Rate | Статус | Рекомендация |
63
+ |------------|-----------|-----------------|--------|-------------|
64
+ | ≥80% | <10% | ≥70% | 🟢 ON_TRACK | Продолжить по плану |
65
+ | 50-80% | <20% | ≥50% | 🟡 ATTENTION | Обратить внимание на отстающие задачи |
66
+ | 30-50% | <30% | Любой | 🟠 AT_RISK | Пересмотреть приоритеты, разблокировать |
67
+ | <30% | ≥30% | Любой | 🔴 CRITICAL | Эскалировать, пересмотреть план |
68
+
69
+ ### 6. Оцени тренд
70
+
71
+ Если есть данные за несколько периодов:
72
+ ```
73
+ velocity_current = done_last_period / period_length
74
+ velocity_previous = done_prev_period / period_length
75
+ trend = velocity_current - velocity_previous
76
+ ```
77
+
78
+ | Тренд | Интерпретация |
79
+ |-------|---------------|
80
+ | trend > 0 | 📈 Ускорение |
81
+ | trend ≈ 0 | ➡️ Стабильно |
82
+ | trend < 0 | 📉 Замедление |
83
+
84
+ ## Выход
85
+
86
+ - Completion Rate (простой и взвешенный)
87
+ - Quality Rate (First-Pass Rate)
88
+ - Block Rate
89
+ - Статус прогресса (ON_TRACK / ATTENTION / AT_RISK / CRITICAL)
90
+ - Тренд (если данных достаточно)
91
+ - Распределение тикетов по статусам
92
+
93
+ ## Пример
94
+
95
+ ```
96
+ Total: 12 тикетов
97
+ Done: 7 (3 simple, 3 medium, 1 complex)
98
+ In-progress: 2 (1 medium, 1 complex)
99
+ Ready: 1 (simple)
100
+ Blocked: 2 (1 medium, 1 complex)
101
+
102
+ Completion Rate: 7/12 = 58%
103
+ Weighted: (3×1 + 3×2 + 1×3) / (4×1 + 4×2 + 4×3) = 12/24 = 50%
104
+ Block Rate: 2/12 = 17%
105
+ First-Pass Rate: 5/7 = 71%
106
+
107
+ Статус: 🟡 ATTENTION (50% weighted, 17% blocked, 71% first-pass)
108
+ ```
@@ -0,0 +1,66 @@
1
+ # Методологии анализа отчётов
2
+
3
+ Базовые фреймворки и метрики для анализа отчётов о выполненных задачах.
4
+
5
+ ## Фреймворк анализа прогресса
6
+
7
+ ### Количественные метрики
8
+
9
+ | Метрика | Формула | Интерпретация |
10
+ |---------|---------|---------------|
11
+ | **Completion Rate** | done / total × 100% | Общий прогресс по плану |
12
+ | **Weighted Completion** | Σ(done × complexity) / Σ(total × complexity) × 100% | Прогресс с учётом сложности |
13
+ | **Throughput** | done / time_elapsed | Скорость выполнения |
14
+ | **Block Rate** | blocked / total × 100% | Доля заблокированных задач |
15
+ | **Rework Rate** | reworked / done × 100% | Доля задач с переделками |
16
+ | **First-Pass Rate** | passed_review_first / done × 100% | Качество выполнения с первого раза |
17
+
18
+ ### Качественные индикаторы
19
+
20
+ | Индикатор | Сигнал | Действие |
21
+ |-----------|--------|----------|
22
+ | Много заблокированных задач | Проблемы с зависимостями | Пересмотреть порядок задач |
23
+ | Низкий First-Pass Rate | Проблемы с качеством | Усилить критерии DoD |
24
+ | Высокий Rework Rate | Нечёткие требования | Улучшить описания задач |
25
+ | Throughput падает | Усталость / сложность растёт | Декомпозировать оставшиеся задачи |
26
+
27
+ ## Фреймворк ретроспективы: Keep / Stop / Try
28
+
29
+ ### Keep (Продолжать)
30
+ Практики, которые доказали эффективность:
31
+ - Что конкретно делалось?
32
+ - Какой результат это дало?
33
+ - Почему это сработало?
34
+
35
+ ### Stop (Прекратить)
36
+ Практики, которые создавали проблемы:
37
+ - Что конкретно происходило?
38
+ - Какой вред это наносило?
39
+ - Что вызвало эту практику?
40
+
41
+ ### Try (Попробовать)
42
+ Новые подходы для эксперимента:
43
+ - Что конкретно предлагается?
44
+ - Какую проблему это решает?
45
+ - Как измерить результат?
46
+
47
+ ## Паттерны типичных проблем
48
+
49
+ | Паттерн | Симптомы | Корневая причина | Рекомендация |
50
+ |---------|---------|-----------------|--------------|
51
+ | **Scope Creep** | Количество задач растёт, прогресс стоит | Нечёткие границы плана | Зафиксировать скоуп, новые задачи — в следующий план |
52
+ | **Dependency Hell** | Много заблокированных задач | Плохая декомпозиция зависимостей | Пересмотреть порядок, разблокировать критический путь |
53
+ | **Quality Debt** | Высокий rework rate | Слабые критерии DoD | Усилить DoD, добавить чеклисты |
54
+ | **Single Point of Failure** | Один тип задач блокирует всё | Отсутствие параллелизма | Декомпозировать для параллельного выполнения |
55
+ | **Velocity Decay** | Throughput падает со временем | Растущая сложность / усталость | Декомпозировать крупные задачи, ротация фокуса |
56
+
57
+ ## Классификация серьёзности проблем
58
+
59
+ | Уровень | Описание | Действие |
60
+ |---------|----------|----------|
61
+ | **CRITICAL** | Блокирует весь план, прогресс невозможен | Немедленное вмешательство |
62
+ | **HIGH** | Значительно замедляет прогресс | Решить в текущей итерации |
63
+ | **MEDIUM** | Влияет на качество, но не блокирует | Запланировать решение |
64
+ | **LOW** | Мелкие недочёты, потенциальные улучшения | Учесть при следующем планировании |
65
+
66
+ <!-- РАСШИРЕНИЕ: добавляй новые паттерны и фреймворки ниже -->
@@ -0,0 +1,61 @@
1
+ # Структура отчётов и извлечение данных
2
+
3
+ Описание типовой структуры отчётов workflow-ai и правила извлечения данных из них.
4
+
5
+ ## Типовая структура отчёта
6
+
7
+ Отчёты находятся в `.workflow/reports/` и содержат:
8
+
9
+ | Секция | Что извлекать |
10
+ |--------|--------------|
11
+ | **Frontmatter** | ID, дата, связанный план, период |
12
+ | **Выполненные задачи** | Список завершённых тикетов, результаты |
13
+ | **Проблемы** | Заблокированные задачи, ошибки, отклонения |
14
+ | **Статистика** | Количественные данные: done/total, время |
15
+ | **Рекомендации** | Выводы предыдущего анализа (если есть) |
16
+
17
+ ## Извлечение данных из тикетов
18
+
19
+ ### Из завершённых тикетов (done/)
20
+
21
+ | Поле | Где искать | Зачем |
22
+ |------|-----------|-------|
23
+ | `id` | Frontmatter | Идентификация |
24
+ | `complexity` | Frontmatter | Weighted completion |
25
+ | `created_at` / `completed_at` | Frontmatter | Время выполнения |
26
+ | **Result** | Секция `## Result` | Что реально сделано |
27
+ | **DoD** | Секция критериев | Все ли выполнены |
28
+ | **Ревью** | Секция `## Ревью` | Прошёл ли с первого раза |
29
+
30
+ ### Из заблокированных тикетов (blocked/)
31
+
32
+ | Поле | Зачем |
33
+ |------|-------|
34
+ | `id`, `title` | Идентификация |
35
+ | `dependencies` | Что блокирует |
36
+ | Причина блокировки | Для рекомендаций по разблокировке |
37
+
38
+ ### Из тикетов в работе (in-progress/)
39
+
40
+ | Поле | Зачем |
41
+ |------|-------|
42
+ | `id`, `title` | Текущая работа |
43
+ | `created_at` | Как давно в работе |
44
+
45
+ ## Извлечение данных из планов
46
+
47
+ | Секция плана | Что извлекать |
48
+ |-------------|--------------|
49
+ | **Цели** | Ожидаемые результаты для сравнения |
50
+ | **Задачи** | Полный список для подсчёта покрытия |
51
+ | **Приоритеты** | Для оценки порядка выполнения |
52
+ | **Риски** | Для проверки — сработали ли |
53
+
54
+ ## Правила работы с данными
55
+
56
+ - **Считай только то, что есть** — не экстраполируй, не предполагай
57
+ - **Указывай источник** — для каждой метрики укажи откуда взяты данные
58
+ - **Отмечай пробелы** — если данных не хватает для вывода, явно укажи
59
+ - **Разделяй факты и выводы** — сначала данные, потом интерпретация
60
+
61
+ <!-- РАСШИРЕНИЕ: обновляй при изменении структуры отчётов -->
@@ -0,0 +1,234 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * calc-plan-metrics.js — аналитические метрики плана для analyze-report.
5
+ *
6
+ * Рассчитывает:
7
+ * 1. Distribution by status
8
+ * 2. Completion %
9
+ * 3. Avg time-to-done
10
+ * 4. Blocked rate
11
+ * 5. Rework count
12
+ *
13
+ * Использование:
14
+ * node calc-plan-metrics.js <PLAN-NNN>
15
+ *
16
+ * Вывод: JSON через маркеры ---RESULT---
17
+ */
18
+
19
+ import fs from 'fs';
20
+ import path from 'path';
21
+ import { findProjectRoot } from 'workflow-ai/lib/find-root.mjs';
22
+ import { parseFrontmatter } from 'workflow-ai/lib/utils.mjs';
23
+ import { createLogger } from 'workflow-ai/lib/logger.mjs';
24
+
25
+ const logger = createLogger();
26
+
27
+ const PROJECT_DIR = findProjectRoot();
28
+ const TICKETS_DIR = path.join(PROJECT_DIR, '.workflow', 'tickets');
29
+ const PLANS_DIR = path.join(PROJECT_DIR, '.workflow', 'plans', 'current');
30
+ const TICKET_DIRS = ['done', 'in-progress', 'blocked', 'ready', 'backlog', 'archive'];
31
+
32
+ function normalizePlanId(raw) {
33
+ if (!raw) return null;
34
+ const basename = path.basename(raw, '.md');
35
+ const full = basename.match(/^plan-(\d+)$/i);
36
+ if (full) return `PLAN-${String(parseInt(full[1], 10)).padStart(3, '0')}`;
37
+ const num = raw.trim().match(/^(\d+)$/);
38
+ if (num) return `PLAN-${String(parseInt(num[1], 10)).padStart(3, '0')}`;
39
+ return null;
40
+ }
41
+
42
+ function collectPlanTickets(planId) {
43
+ const tickets = [];
44
+ const warnings = [];
45
+
46
+ for (const dirName of TICKET_DIRS) {
47
+ const dir = path.join(TICKETS_DIR, dirName);
48
+ if (!fs.existsSync(dir)) continue;
49
+
50
+ const files = fs.readdirSync(dir).filter(f => f.endsWith('.md') && f !== '.gitkeep.md');
51
+ for (const file of files) {
52
+ const filePath = path.join(dir, file);
53
+ let content;
54
+ try {
55
+ content = fs.readFileSync(filePath, 'utf8');
56
+ } catch (e) {
57
+ warnings.push(`Failed to read ${file}: ${e.message}`);
58
+ continue;
59
+ }
60
+
61
+ let parsed;
62
+ try {
63
+ parsed = parseFrontmatter(content);
64
+ } catch (e) {
65
+ warnings.push(`Failed to parse frontmatter in ${file}: ${e.message}`);
66
+ continue;
67
+ }
68
+
69
+ const { frontmatter } = parsed;
70
+ if (!frontmatter || typeof frontmatter !== 'object') {
71
+ warnings.push(`Invalid frontmatter in ${file}`);
72
+ continue;
73
+ }
74
+
75
+ const ticketPlanId = normalizePlanId(frontmatter.parent_plan);
76
+ if (ticketPlanId === normalizePlanId(planId)) {
77
+ tickets.push({
78
+ id: frontmatter.id || file.replace('.md', ''),
79
+ title: frontmatter.title || 'Unknown',
80
+ type: frontmatter.type || 'unknown',
81
+ status: dirName,
82
+ created_at: frontmatter.created_at || null,
83
+ updated_at: frontmatter.updated_at || null,
84
+ completed_at: frontmatter.completed_at || null,
85
+ raw: frontmatter,
86
+ body: parsed.body || ''
87
+ });
88
+ }
89
+ }
90
+ }
91
+
92
+ return { tickets, warnings };
93
+ }
94
+
95
+ function findPlanFile(planId) {
96
+ if (!fs.existsSync(PLANS_DIR)) return null;
97
+ const files = fs.readdirSync(PLANS_DIR).filter(f => f.endsWith('.md'));
98
+ const normalized = normalizePlanId(planId);
99
+ return files.find(f => normalizePlanId(f) === normalized) || null;
100
+ }
101
+
102
+ function parsePlan(planFileName) {
103
+ if (!planFileName) return null;
104
+ const planPath = path.join(PLANS_DIR, planFileName);
105
+ try {
106
+ const content = fs.readFileSync(planPath, 'utf8');
107
+ const { frontmatter } = parseFrontmatter(content);
108
+ return frontmatter;
109
+ } catch (e) {
110
+ logger.warn(`Failed to parse plan ${planFileName}: ${e.message}`);
111
+ return null;
112
+ }
113
+ }
114
+
115
+ function calcDistributionByStatus(tickets) {
116
+ const distribution = {};
117
+ for (const dirName of TICKET_DIRS) {
118
+ const count = tickets.filter(t => t.status === dirName).length;
119
+ if (count > 0) {
120
+ distribution[dirName] = count;
121
+ }
122
+ }
123
+ return distribution;
124
+ }
125
+
126
+ function calcCompletionPct(tickets) {
127
+ const total = tickets.length;
128
+ const doneCount = tickets.filter(t => t.status === 'done' || t.status === 'archive').length;
129
+ return total > 0 ? Math.round((doneCount / total) * 100 * 100) / 100 : 0;
130
+ }
131
+
132
+ function calcAvgTimeToDone(tickets) {
133
+ const doneTickets = tickets.filter(t => t.status === 'done' || t.status === 'archive');
134
+ const times = [];
135
+
136
+ for (const ticket of doneTickets) {
137
+ if (ticket.created_at && ticket.completed_at) {
138
+ const created = new Date(ticket.created_at);
139
+ const completed = new Date(ticket.completed_at);
140
+ const diffMs = completed.getTime() - created.getTime();
141
+ const diffDays = diffMs / (1000 * 60 * 60 * 24);
142
+ if (diffDays >= 0) {
143
+ times.push(diffDays);
144
+ }
145
+ }
146
+ }
147
+
148
+ if (times.length === 0) {
149
+ return null;
150
+ }
151
+
152
+ const avg = times.reduce((sum, d) => sum + d, 0) / times.length;
153
+ return Math.round(avg * 100) / 100;
154
+ }
155
+
156
+ function calcBlockedRate(tickets) {
157
+ const total = tickets.length;
158
+ const blockedCount = tickets.filter(t => t.status === 'blocked').length;
159
+ return total > 0 ? Math.round((blockedCount / total) * 100 * 100) / 100 : 0;
160
+ }
161
+
162
+ function calcReworkCount(tickets) {
163
+ let count = 0;
164
+ for (const ticket of tickets) {
165
+ const notes = ticket.raw?.notes || '';
166
+ if (/повторная работа/i.test(notes) || /Повторная/i.test(notes)) {
167
+ count++;
168
+ }
169
+ }
170
+ return count;
171
+ }
172
+
173
+ async function main() {
174
+ const planIdArg = process.argv[2];
175
+
176
+ if (!planIdArg) {
177
+ console.error('Ошибка: не указан ID плана');
178
+ console.error('Использование: node calc-plan-metrics.js <PLAN-NNN>');
179
+ process.exit(1);
180
+ }
181
+
182
+ const planId = normalizePlanId(planIdArg);
183
+ if (!planId) {
184
+ console.error(`Ошибка: невалидный ID плана "${planIdArg}". Ожидается формат PLAN-NNN или число.`);
185
+ process.exit(1);
186
+ }
187
+
188
+ logger.info(`Calculating analytics for ${planId}`);
189
+
190
+ const { tickets, warnings } = collectPlanTickets(planId);
191
+ if (tickets.length === 0) {
192
+ logger.warn(`No tickets found for plan ${planId}`);
193
+ }
194
+
195
+ const planFileName = findPlanFile(planId);
196
+ const planData = parsePlan(planFileName);
197
+
198
+ const distribution = calcDistributionByStatus(tickets);
199
+ const completionPct = calcCompletionPct(tickets);
200
+ const avgTimeToDone = calcAvgTimeToDone(tickets);
201
+ const blockedRate = calcBlockedRate(tickets);
202
+ const reworkCount = calcReworkCount(tickets);
203
+
204
+ const result = {
205
+ plan_id: planId,
206
+ total_tickets: tickets.length,
207
+ distribution,
208
+ completion_pct: completionPct,
209
+ avg_time_to_done: avgTimeToDone,
210
+ avg_time_to_done_unit: 'days',
211
+ blocked_rate: blockedRate,
212
+ blocked_rate_unit: 'pct',
213
+ rework_count: reworkCount,
214
+ plan_data: planData ? {
215
+ title: planData.title,
216
+ status: planData.status
217
+ } : null,
218
+ warnings: warnings.length > 0 ? warnings : undefined
219
+ };
220
+
221
+ console.log('---RESULT---');
222
+ console.log(JSON.stringify(result, null, 2));
223
+ console.log('---RESULT---');
224
+
225
+ logger.info(`Analytics calculated: ${tickets.length} tickets`);
226
+ }
227
+
228
+ main().catch(err => {
229
+ console.error(`Ошибка: ${err.message}`);
230
+ console.log('---RESULT---');
231
+ console.log(JSON.stringify({ error: err.message }, null, 2));
232
+ console.log('---RESULT---');
233
+ process.exit(1);
234
+ });