workflow-ai 1.0.62 → 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 (505) hide show
  1. package/README.md +61 -0
  2. package/agent-templates/CLAUDE.md.tpl +2 -0
  3. package/agent-templates/QWEN.md.tpl +2 -0
  4. package/configs/config.yaml +134 -0
  5. package/configs/pipeline.yaml +884 -0
  6. package/configs/ticket-movement-rules.yaml +80 -0
  7. package/package.json +2 -1
  8. package/src/global-dir.mjs +25 -1
  9. package/src/init.mjs +5 -4
  10. package/src/lib/agent-spawner.mjs +338 -0
  11. package/src/runner.mjs +15 -14
  12. package/src/scripts/get-next-test-id.js +94 -0
  13. package/src/scripts/migrate-backlog-to-tests.js +406 -0
  14. package/src/scripts/run-skill-tests.js +1703 -0
  15. package/src/scripts/scan-fixtures-for-secrets.js +248 -0
  16. package/src/scripts/tests/timeout-cascade.test.js +28 -0
  17. package/src/skills/analyze-report/README.md +44 -0
  18. package/src/skills/analyze-report/SKILL.md +121 -0
  19. package/src/skills/analyze-report/algorithms/progress-assessment.md +108 -0
  20. package/src/skills/analyze-report/knowledge/analysis-frameworks.md +66 -0
  21. package/src/skills/analyze-report/knowledge/report-structure.md +61 -0
  22. package/src/skills/analyze-report/scripts/calc-plan-metrics.js +234 -0
  23. package/src/skills/analyze-report/templates/analysis-report.md +80 -0
  24. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-1.md +69 -0
  25. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-2.md +103 -0
  26. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-3.md +99 -0
  27. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/judge.json +163 -0
  28. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-1.md +89 -0
  29. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-2.md +88 -0
  30. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-3.md +100 -0
  31. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-1.md +77 -0
  32. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-2.md +64 -0
  33. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-3.md +110 -0
  34. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-1.md +74 -0
  35. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-2.md +38 -0
  36. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-3.md +61 -0
  37. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/meta.json +115 -0
  38. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001-evidence-from-log.yaml +60 -0
  39. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-1.md +90 -0
  40. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-2.md +89 -0
  41. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-3.md +77 -0
  42. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/judge.json +163 -0
  43. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-1.md +84 -0
  44. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-2.md +77 -0
  45. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-3.md +89 -0
  46. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-1.md +103 -0
  47. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-2.md +103 -0
  48. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-3.md +103 -0
  49. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-1.md +93 -0
  50. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-2.md +93 -0
  51. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-3.md +86 -0
  52. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/meta.json +115 -0
  53. package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002-result-block-format.yaml +44 -0
  54. package/src/skills/analyze-report/tests/fixtures/REPORT-002-incorrect-attribution.md +27 -0
  55. package/src/skills/analyze-report/tests/fixtures/pipeline-2026-04-06_qa-001-skip.log +32 -0
  56. package/src/skills/analyze-report/tests/index.yaml +25 -0
  57. package/src/skills/analyze-report/tests/rubrics/evidence-from-log.md +22 -0
  58. package/src/skills/analyze-report/tests/rubrics/result-block-format.md +22 -0
  59. package/src/skills/analyze-report/workflows/progress.md +158 -0
  60. package/src/skills/analyze-report/workflows/retrospective.md +143 -0
  61. package/src/skills/coach/README.md +43 -0
  62. package/src/skills/coach/SKILL.md +166 -0
  63. package/src/skills/coach/SKILL.md.legacy +157 -0
  64. package/src/skills/coach/algorithms/gap-analysis.md +69 -0
  65. package/src/skills/coach/algorithms/improvement-prioritization.md +62 -0
  66. package/src/skills/coach/algorithms/skill-scoring.md +80 -0
  67. package/src/skills/coach/knowledge/audit-applied-changes-clean.txt +11 -0
  68. package/src/skills/coach/knowledge/backlog-management.md +67 -0
  69. package/src/skills/coach/knowledge/backlog-management.md.legacy +90 -0
  70. package/src/skills/coach/knowledge/common-antipatterns.md +76 -0
  71. package/src/skills/coach/knowledge/prompt-engineering.md +45 -0
  72. package/src/skills/coach/knowledge/shared-knowledge-guide.md +44 -0
  73. package/src/skills/coach/knowledge/skill-anatomy.md +49 -0
  74. package/src/skills/coach/knowledge/test-authorship.md +141 -0
  75. package/src/skills/coach/templates/audit-report.md +39 -0
  76. package/src/skills/coach/templates/coach-backlog-init.yaml +14 -0
  77. package/src/skills/coach/templates/coach-backlog-init.yaml.legacy +10 -0
  78. package/src/skills/coach/templates/improvement-plan.md +42 -0
  79. package/src/skills/coach/templates/new-skill.md +95 -0
  80. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-1.md +58 -0
  81. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-2.md +65 -0
  82. package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-3.md +58 -0
  83. package/src/skills/coach/tests/cases/TC-COACH-001/current/judge.json +151 -0
  84. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-1.md +46 -0
  85. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-2.md +0 -0
  86. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-3.md +75 -0
  87. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-1.md +81 -0
  88. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-2.md +101 -0
  89. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-3.md +91 -0
  90. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-1.md +48 -0
  91. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-2.md +30 -0
  92. package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-3.md +55 -0
  93. package/src/skills/coach/tests/cases/TC-COACH-001/current/meta.json +95 -0
  94. package/src/skills/coach/tests/cases/TC-COACH-001-evidence-based-temporal-diagram.yaml +53 -0
  95. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-1.md +46 -0
  96. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-2.md +50 -0
  97. package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-3.md +48 -0
  98. package/src/skills/coach/tests/cases/TC-COACH-002/current/judge.json +151 -0
  99. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-1.md +0 -0
  100. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-2.md +37 -0
  101. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-3.md +30 -0
  102. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-1.md +23 -0
  103. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-2.md +29 -0
  104. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-3.md +35 -0
  105. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-1.md +13 -0
  106. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-2.md +19 -0
  107. package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-3.md +33 -0
  108. package/src/skills/coach/tests/cases/TC-COACH-002/current/meta.json +95 -0
  109. package/src/skills/coach/tests/cases/TC-COACH-002-root-cause-first.yaml +57 -0
  110. package/src/skills/coach/tests/fixtures/pipeline-2026-04-06_id-collision.log +77 -0
  111. package/src/skills/coach/tests/index.yaml +29 -0
  112. package/src/skills/coach/tests/rubrics/calibration/evidence-based-bad.md +13 -0
  113. package/src/skills/coach/tests/rubrics/calibration/evidence-based-good.md +29 -0
  114. package/src/skills/coach/tests/rubrics/evidence-based.md +26 -0
  115. package/src/skills/coach/tests/rubrics/root-cause-first.md +21 -0
  116. package/src/skills/coach/workflows/analyze.md +79 -0
  117. package/src/skills/coach/workflows/analyze.md.legacy +64 -0
  118. package/src/skills/coach/workflows/audit.md +74 -0
  119. package/src/skills/coach/workflows/audit.md.legacy +59 -0
  120. package/src/skills/coach/workflows/create.md +80 -0
  121. package/src/skills/coach/workflows/create.md.legacy +67 -0
  122. package/src/skills/coach/workflows/improve.md +71 -0
  123. package/src/skills/coach/workflows/improve.md.legacy +60 -0
  124. package/src/skills/coach/workflows/research.md +55 -0
  125. package/src/skills/coach/workflows/review.md +52 -0
  126. package/src/skills/coach/workflows/review.md.legacy +48 -0
  127. package/src/skills/coach/workflows/test.md +97 -0
  128. package/src/skills/create-plan/README.md +39 -0
  129. package/src/skills/create-plan/SKILL.md +104 -0
  130. package/src/skills/create-plan/algorithms/risk-assessment.md +73 -0
  131. package/src/skills/create-plan/knowledge/plan-completeness.md +67 -0
  132. package/src/skills/create-plan/knowledge/plan-lifecycle.md +33 -0
  133. package/src/skills/create-plan/knowledge/task-verification-pairs.md +151 -0
  134. package/src/skills/create-plan/scripts/validate-completeness.js +182 -0
  135. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-1.md +5 -0
  136. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-2.md +39 -0
  137. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-3.md +35 -0
  138. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/judge.json +167 -0
  139. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-1.md +5 -0
  140. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-2.md +10 -0
  141. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-3.md +5 -0
  142. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-1.md +26 -0
  143. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-2.md +86 -0
  144. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-3.md +5 -0
  145. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-1.md +11 -0
  146. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-2.md +15 -0
  147. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-3.md +14 -0
  148. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/meta.json +119 -0
  149. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001-validate-completeness.yaml +41 -0
  150. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-1.md +25 -0
  151. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-2.md +30 -0
  152. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-3.md +37 -0
  153. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/judge.json +164 -0
  154. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-1.md +3 -0
  155. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-2.md +11 -0
  156. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-3.md +13 -0
  157. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-1.md +44 -0
  158. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-2.md +5 -0
  159. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-3.md +49 -0
  160. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-1.md +6 -0
  161. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-2.md +11 -0
  162. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-3.md +16 -0
  163. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/meta.json +116 -0
  164. package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002-task-granularity.yaml +39 -0
  165. package/src/skills/create-plan/tests/index.yaml +25 -0
  166. package/src/skills/create-plan/tests/rubrics/task-granularity.md +21 -0
  167. package/src/skills/create-plan/tests/rubrics/validate-completeness.md +21 -0
  168. package/src/skills/create-plan/workflows/create.md +136 -0
  169. package/src/skills/create-report/README.md +40 -0
  170. package/src/skills/create-report/SKILL.md +73 -0
  171. package/src/skills/create-report/algorithms/metric-calculation.md +93 -0
  172. package/src/skills/create-report/knowledge/report-metrics.md +82 -0
  173. package/src/skills/create-report/scripts/calc-metrics.js +383 -0
  174. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-1.md +25 -0
  175. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-2.md +26 -0
  176. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-3.md +28 -0
  177. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/judge.json +163 -0
  178. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-1.md +4 -0
  179. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-2.md +3 -0
  180. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-3.md +6 -0
  181. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-1.md +8 -0
  182. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-2.md +12 -0
  183. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-3.md +7 -0
  184. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-1.md +12 -0
  185. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-2.md +22 -0
  186. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-3.md +13 -0
  187. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/meta.json +115 -0
  188. package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001-root-cause-attribution.yaml +57 -0
  189. package/src/skills/create-report/tests/index.yaml +20 -0
  190. package/src/skills/create-report/tests/rubrics/root-cause-attribution.md +21 -0
  191. package/src/skills/create-report/workflows/standard.md +175 -0
  192. package/src/skills/decompose-gaps/README.md +39 -0
  193. package/src/skills/decompose-gaps/SKILL.md +78 -0
  194. package/src/skills/decompose-gaps/algorithms/scope-check.md +110 -0
  195. package/src/skills/decompose-gaps/knowledge/scope-validation.md +65 -0
  196. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-1.md +49 -0
  197. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-2.md +56 -0
  198. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-3.md +39 -0
  199. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/judge.json +164 -0
  200. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-1.md +25 -0
  201. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-2.md +11 -0
  202. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-3.md +26 -0
  203. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-1.md +19 -0
  204. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-2.md +5 -0
  205. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-3.md +28 -0
  206. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-1.md +23 -0
  207. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-2.md +27 -0
  208. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-3.md +25 -0
  209. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/meta.json +116 -0
  210. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001-scope-exclusion.yaml +46 -0
  211. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-1.md +32 -0
  212. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-2.md +20 -0
  213. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-3.md +26 -0
  214. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/judge.json +164 -0
  215. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-1.md +7 -0
  216. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-2.md +16 -0
  217. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-3.md +7 -0
  218. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-1.md +5 -0
  219. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-2.md +11 -0
  220. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-3.md +13 -0
  221. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-1.md +13 -0
  222. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-2.md +12 -0
  223. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-3.md +5 -0
  224. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/meta.json +116 -0
  225. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002-glob-before-write.yaml +36 -0
  226. package/src/skills/decompose-gaps/tests/index.yaml +25 -0
  227. package/src/skills/decompose-gaps/tests/rubrics/glob-before-write.md +21 -0
  228. package/src/skills/decompose-gaps/tests/rubrics/scope-exclusion.md +21 -0
  229. package/src/skills/decompose-gaps/workflows/decompose.md +120 -0
  230. package/src/skills/decompose-plan/README.md +43 -0
  231. package/src/skills/decompose-plan/SKILL.md +87 -0
  232. package/src/skills/decompose-plan/algorithms/deduplication.md +101 -0
  233. package/src/skills/decompose-plan/knowledge/atomicity-checklist.md +113 -0
  234. package/src/skills/decompose-plan/knowledge/capabilities.md +44 -0
  235. package/src/skills/decompose-plan/knowledge/human-task-rules.md +67 -0
  236. package/src/skills/decompose-plan/knowledge/scope-guard-checklist.md +73 -0
  237. package/src/skills/decompose-plan/scripts/check-atomicity-limit.js +47 -0
  238. package/src/skills/decompose-plan/scripts/check-duplicates.js +323 -0
  239. package/src/skills/decompose-plan/scripts/verify-atomicity.js +408 -0
  240. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-1.md +30 -0
  241. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-2.md +36 -0
  242. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-3.md +37 -0
  243. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/judge.json +163 -0
  244. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-1.md +20 -0
  245. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-2.md +17 -0
  246. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-3.md +28 -0
  247. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-1.md +114 -0
  248. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-2.md +137 -0
  249. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-3.md +188 -0
  250. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-1.md +0 -0
  251. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-2.md +32 -0
  252. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-3.md +110 -0
  253. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/meta.json +115 -0
  254. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001-atomicity-no-1to1.yaml +56 -0
  255. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-1.md +47 -0
  256. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-2.md +54 -0
  257. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-3.md +43 -0
  258. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/judge.json +163 -0
  259. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-1.md +15 -0
  260. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-2.md +5 -0
  261. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-3.md +12 -0
  262. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-1.md +34 -0
  263. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-2.md +30 -0
  264. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-3.md +35 -0
  265. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-1.md +0 -0
  266. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-2.md +31 -0
  267. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-3.md +0 -0
  268. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/meta.json +115 -0
  269. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002-get-next-id-mandatory.yaml +44 -0
  270. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-1.md +21 -0
  271. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-2.md +38 -0
  272. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-3.md +30 -0
  273. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/judge.json +163 -0
  274. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-1.md +31 -0
  275. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-2.md +35 -0
  276. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-3.md +48 -0
  277. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-1.md +167 -0
  278. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-2.md +62 -0
  279. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-3.md +174 -0
  280. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-1.md +0 -0
  281. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-2.md +0 -0
  282. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-3.md +0 -0
  283. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/meta.json +115 -0
  284. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003-verbatim-dod-transfer.yaml +42 -0
  285. package/src/skills/decompose-plan/tests/index.yaml +30 -0
  286. package/src/skills/decompose-plan/tests/rubrics/atomicity-no-1to1.md +21 -0
  287. package/src/skills/decompose-plan/tests/rubrics/get-next-id-mandatory.md +21 -0
  288. package/src/skills/decompose-plan/tests/rubrics/verbatim-dod-transfer.md +21 -0
  289. package/src/skills/decompose-plan/workflows/decompose.md +272 -0
  290. package/src/skills/deep-research/README.md +36 -0
  291. package/src/skills/deep-research/SKILL.md +106 -0
  292. package/src/skills/deep-research/algorithms/source-scoring.md +63 -0
  293. package/src/skills/deep-research/algorithms/synthesis.md +67 -0
  294. package/src/skills/deep-research/knowledge/data-validation.md +44 -0
  295. package/src/skills/deep-research/knowledge/perplexity-config.md +30 -0
  296. package/src/skills/deep-research/knowledge/research-methodology.md +54 -0
  297. package/src/skills/deep-research/knowledge/source-evaluation.md +33 -0
  298. package/src/skills/deep-research/scripts/perplexity-research.js +315 -0
  299. package/src/skills/deep-research/templates/brief-summary.md +25 -0
  300. package/src/skills/deep-research/templates/research-report.md +76 -0
  301. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-1.md +48 -0
  302. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-2.md +88 -0
  303. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-3.md +56 -0
  304. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/judge.json +163 -0
  305. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-1.md +58 -0
  306. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-2.md +249 -0
  307. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-3.md +44 -0
  308. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-1.md +96 -0
  309. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-2.md +56 -0
  310. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-3.md +94 -0
  311. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-1.md +11 -0
  312. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-2.md +1 -0
  313. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-3.md +1 -0
  314. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/meta.json +115 -0
  315. package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001-self-check-url.yaml +58 -0
  316. package/src/skills/deep-research/tests/index.yaml +20 -0
  317. package/src/skills/deep-research/tests/rubrics/self-check-url.md +34 -0
  318. package/src/skills/deep-research/workflows/base-checklist.md +19 -0
  319. package/src/skills/deep-research/workflows/benchmark.md +38 -0
  320. package/src/skills/deep-research/workflows/competitor.md +44 -0
  321. package/src/skills/deep-research/workflows/custom.md +32 -0
  322. package/src/skills/deep-research/workflows/market.md +44 -0
  323. package/src/skills/deep-research/workflows/technology.md +40 -0
  324. package/src/skills/deep-research/workflows/trend.md +40 -0
  325. package/src/skills/execute-task/README.md +44 -0
  326. package/src/skills/execute-task/SKILL.md +292 -0
  327. package/src/skills/execute-task/algorithms/execution-strategy.md +136 -0
  328. package/src/skills/execute-task/knowledge/context-checkpoints.md +75 -0
  329. package/src/skills/execute-task/knowledge/ticket-structure.md +70 -0
  330. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-1.md +5 -0
  331. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-2.md +5 -0
  332. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-3.md +5 -0
  333. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/judge.json +124 -0
  334. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-1.md +4 -0
  335. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-2.md +4 -0
  336. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-3.md +4 -0
  337. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-1.md +4 -0
  338. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-2.md +4 -0
  339. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-3.md +11 -0
  340. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/meta.json +89 -0
  341. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001-no-ticket-creation.yaml +48 -0
  342. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-1.md +5 -0
  343. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-2.md +6 -0
  344. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-3.md +5 -0
  345. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/judge.json +124 -0
  346. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-1.md +4 -0
  347. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-2.md +4 -0
  348. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-3.md +8 -0
  349. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-1.md +9 -0
  350. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-2.md +26 -0
  351. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-3.md +4 -0
  352. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/meta.json +89 -0
  353. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002-no-duplicate-dod.yaml +44 -0
  354. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-1.md +5 -0
  355. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-2.md +5 -0
  356. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-3.md +5 -0
  357. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/judge.json +46 -0
  358. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/meta.json +37 -0
  359. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003-verification-proportionality.yaml +46 -0
  360. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-1.md +18 -0
  361. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-2.md +16 -0
  362. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-3.md +14 -0
  363. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/judge.json +124 -0
  364. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-1.md +5 -0
  365. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-2.md +5 -0
  366. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-3.md +1 -0
  367. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-1.md +8 -0
  368. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-2.md +5 -0
  369. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-3.md +4 -0
  370. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/meta.json +89 -0
  371. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004-no-foreign-ticket-edit.yaml +50 -0
  372. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-1.md +5 -0
  373. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-2.md +5 -0
  374. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-3.md +5 -0
  375. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/judge.json +124 -0
  376. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-1.md +15 -0
  377. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-2.md +4 -0
  378. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-3.md +5 -0
  379. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-1.md +11 -0
  380. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-2.md +11 -0
  381. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-3.md +4 -0
  382. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/meta.json +89 -0
  383. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005-ticket-fields-updated.yaml +39 -0
  384. package/src/skills/execute-task/tests/fixtures/IMPL-902-create-file.md +41 -0
  385. package/src/skills/execute-task/tests/fixtures/IMPL-904-current-task.md +40 -0
  386. package/src/skills/execute-task/tests/fixtures/IMPL-906-fill-ticket.md +42 -0
  387. package/src/skills/execute-task/tests/fixtures/QA-901-button-click.md +41 -0
  388. package/src/skills/execute-task/tests/fixtures/QA-903-visual-figma.md +40 -0
  389. package/src/skills/execute-task/tests/fixtures/TASK-905-done-with-typo.md +36 -0
  390. package/src/skills/execute-task/tests/index.yaml +39 -0
  391. package/src/skills/execute-task/tests/rubrics/no-duplicate-dod.md +22 -0
  392. package/src/skills/execute-task/tests/rubrics/no-foreign-ticket-edit.md +20 -0
  393. package/src/skills/execute-task/tests/rubrics/no-ticket-creation.md +21 -0
  394. package/src/skills/execute-task/tests/rubrics/ticket-fields-updated.md +23 -0
  395. package/src/skills/execute-task/tests/rubrics/verification-proportionality.md +22 -0
  396. package/src/skills/execute-task/workflows/execute.md +104 -0
  397. package/src/skills/manual-testing/README.md +63 -0
  398. package/src/skills/manual-testing/SKILL.md +174 -0
  399. package/src/skills/manual-testing/algorithms/blocked-tool-strategy.md +74 -0
  400. package/src/skills/manual-testing/algorithms/bug-severity.md +73 -0
  401. package/src/skills/manual-testing/algorithms/mcp-budget.md +97 -0
  402. package/src/skills/manual-testing/algorithms/test-prioritization.md +69 -0
  403. package/src/skills/manual-testing/knowledge/browser-extension-testing.md +102 -0
  404. package/src/skills/manual-testing/knowledge/browser-tools.md +114 -0
  405. package/src/skills/manual-testing/knowledge/desktop-tools-advanced.md +92 -0
  406. package/src/skills/manual-testing/knowledge/desktop-tools-core.md +76 -0
  407. package/src/skills/manual-testing/knowledge/sandbox-advanced.md +83 -0
  408. package/src/skills/manual-testing/knowledge/sandbox-core.md +67 -0
  409. package/src/skills/manual-testing/knowledge/stateful-edge-cases.md +69 -0
  410. package/src/skills/manual-testing/knowledge/test-case-design.md +107 -0
  411. package/src/skills/manual-testing/knowledge/testing-types.md +45 -0
  412. package/src/skills/manual-testing/templates/bug-report.md +52 -0
  413. package/src/skills/manual-testing/templates/test-case.md +34 -0
  414. package/src/skills/manual-testing/templates/test-plan.md +97 -0
  415. package/src/skills/manual-testing/templates/test-session-report.md +56 -0
  416. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-1.md +21 -0
  417. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-2.md +65 -0
  418. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-3.md +35 -0
  419. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/judge.json +163 -0
  420. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-1.md +0 -0
  421. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-2.md +7 -0
  422. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-3.md +0 -0
  423. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-1.md +4 -0
  424. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-2.md +15 -0
  425. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-3.md +8 -0
  426. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-1.md +5 -0
  427. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-2.md +7 -0
  428. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-3.md +7 -0
  429. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/meta.json +114 -0
  430. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001-sandbox-mandatory.yaml +38 -0
  431. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-1.md +47 -0
  432. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-2.md +39 -0
  433. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-3.md +40 -0
  434. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/judge.json +163 -0
  435. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-1.md +19 -0
  436. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-2.md +15 -0
  437. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-3.md +24 -0
  438. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-1.md +19 -0
  439. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-2.md +13 -0
  440. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-3.md +18 -0
  441. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-1.md +21 -0
  442. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-2.md +15 -0
  443. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-3.md +14 -0
  444. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/meta.json +114 -0
  445. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002-visual-tc-screenshot.yaml +37 -0
  446. package/src/skills/manual-testing/tests/index.yaml +25 -0
  447. package/src/skills/manual-testing/tests/last-run-tc001-sonnet.log +140 -0
  448. package/src/skills/manual-testing/tests/last-run-tc002.log +1 -0
  449. package/src/skills/manual-testing/tests/last-run.log +1469 -0
  450. package/src/skills/manual-testing/tests/rubrics/sandbox-mandatory.md +20 -0
  451. package/src/skills/manual-testing/tests/rubrics/visual-tc-screenshot.md +21 -0
  452. package/src/skills/manual-testing/workflows/acceptance.md +80 -0
  453. package/src/skills/manual-testing/workflows/exploratory.md +84 -0
  454. package/src/skills/manual-testing/workflows/regression.md +76 -0
  455. package/src/skills/manual-testing/workflows/smoke.md +109 -0
  456. package/src/skills/manual-testing/workflows/test-plan.md +75 -0
  457. package/src/skills/review-result/README.md +59 -0
  458. package/src/skills/review-result/SKILL.md +138 -0
  459. package/src/skills/review-result/algorithms/verification.md +112 -0
  460. package/src/skills/review-result/knowledge/dod-patterns.md +115 -0
  461. package/src/skills/review-result/scripts/verify-artifacts.js +354 -0
  462. package/src/skills/review-result/templates/verdict.md +153 -0
  463. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-1.md +22 -0
  464. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-2.md +7 -0
  465. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-3.md +21 -0
  466. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-1.md +6 -0
  467. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-2.md +6 -0
  468. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-3.md +18 -0
  469. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/judge.json +164 -0
  470. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-1.md +5 -0
  471. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-2.md +7 -0
  472. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-3.md +6 -0
  473. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-1.md +49 -0
  474. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-2.md +28 -0
  475. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-3.md +37 -0
  476. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-1.md +22 -0
  477. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-2.md +13 -0
  478. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-3.md +21 -0
  479. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/meta.json +116 -0
  480. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001-visual-tc-trigger.yaml +51 -0
  481. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-1.md +23 -0
  482. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-2.md +22 -0
  483. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-3.md +28 -0
  484. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-1.md +4 -0
  485. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-2.md +36 -0
  486. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-3.md +4 -0
  487. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/judge.json +163 -0
  488. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-1.md +4 -0
  489. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-2.md +0 -0
  490. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-3.md +4 -0
  491. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-1.md +39 -0
  492. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-2.md +25 -0
  493. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-3.md +32 -0
  494. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-1.md +34 -0
  495. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-2.md +8 -0
  496. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-3.md +23 -0
  497. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/meta.json +115 -0
  498. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002-path-line-suffix.yaml +39 -0
  499. package/src/skills/review-result/tests/fixtures/IMPL-902-path-with-line.md +43 -0
  500. package/src/skills/review-result/tests/fixtures/QA-901-visual-button.md +46 -0
  501. package/src/skills/review-result/tests/index.yaml +25 -0
  502. package/src/skills/review-result/tests/rubrics/path-line-suffix.md +19 -0
  503. package/src/skills/review-result/tests/rubrics/visual-tc-trigger.md +19 -0
  504. package/src/skills/review-result/workflows/review.md +209 -0
  505. package/templates/plan-template.md +1 -0
@@ -0,0 +1,21 @@
1
+ # Rubric: Декомпозитор переносит DoD из плана дословно без смягчения
2
+
3
+ ## Критерий
4
+
5
+ **Перенёс ли агент формулировку DoD из плана в тикет дословно, сохранив все семантически значимые квалификаторы, и воздержался ли от перефразировки/смягчения?**
6
+
7
+ Агент должен:
8
+ 1. Скопировать формулировку критерия из плана в DoD тикета буква-в-букву (включая специфические термины: «визуально соответствует макету Figma», названия артефактов, числовые параметры).
9
+ 2. Не заменять точные термины на общие («визуально соответствует макету Figma» → «соответствует дизайну» недопустимо).
10
+ 3. Не выбрасывать уточнения («макету Figma» → «макету» недопустимо).
11
+ 4. Если критерий плана не имеет формальной проверки, явно зафиксировать это в тикете (например, добавить шаг manual verification), но исходную формулировку не модифицировать.
12
+
13
+ ## Шкала оценки (1–5)
14
+
15
+ | Балл | Описание |
16
+ |------|----------|
17
+ | **5** | DoD тикета содержит формулировку плана дословно; все уточнения и термины сохранены. |
18
+ | **4** | Формулировка перенесена почти дословно, но есть мелкая стилистическая правка без потери семантики. |
19
+ | **3** | Часть формулировки перенесена дословно, часть перефразирована. |
20
+ | **2** | Формулировка ощутимо смягчена или обобщена (удалены квалификаторы, заменены точные термины). |
21
+ | **1** | DoD полностью перефразирован, от исходной формулировки плана остались только общие понятия. |
@@ -0,0 +1,272 @@
1
+ # Воркфлоу: Декомпозиция плана на тикеты
2
+
3
+ Пошаговый алгоритм превращения высокоуровневого плана в атомарные тикеты.
4
+
5
+ ## Вход
6
+
7
+ | Параметр | Описание |
8
+ |----------|----------|
9
+ | `plan_path` | Путь к плану (из Instructions промпта) |
10
+ | `id_ranges_json` | **JSON-строка** со стартовыми номерами по префиксам, выделенная стадией `allocate-ticket-ids` до запуска декомпозиции. Формат: `{"PREFIX":N_start,...}`, например `{"QA":26,"HUMAN":2,"IMPL":12}`, где `N_start` — первый свободный номер для данного префикса. Декомпозитор парсит JSON (ментально — формат тривиально читаемый) и дальше работает с картой. Источник нумерации **только этот параметр** — декомпозитор не вызывает `get-next-id.js` и не сканирует `.workflow/tickets/` самостоятельно. Передача именно JSON-строки, а не объекта — техническое ограничение runner'а: при подстановке `$context.*` в инструкцию объекты превращаются в `[object Object]`, а скалярные строки подставляются корректно. |
11
+
12
+ ## Шаги
13
+
14
+ ### 1. Прочитать план
15
+
16
+ ```
17
+ Путь: .workflow/plans/current/PLAN-{NNN}.md
18
+ ```
19
+
20
+ Извлечь:
21
+ - Список высокоуровневых задач
22
+ - Зависимости между ними
23
+ - Приоритеты
24
+ - Контекст проекта
25
+ - Секции «Включено в scope» и «Исключено из scope»
26
+
27
+ **⛔ Не сканируй папку `plans/current/`.** Открой только файл, указанный в Instructions.
28
+
29
+ ### 2. Для каждой задачи определить тикеты
30
+
31
+ → Загрузи `knowledge/atomicity-checklist.md`
32
+
33
+ **⛔ Задача плана ≠ тикет.** Задача плана — это кандидат на разбиение, а не готовый тикет. Одна задача плана может (и часто должна) превратиться в 2+ тикетов. Количество тикетов ≥ количества задач плана. Маппинг «1 задача = 1 тикет» — антипаттерн: он означает, что чеклист атомарности не был применён, а задачи плана были просто переформатированы в шаблон тикета.
34
+
35
+ **ОБЯЗАТЕЛЬНО** для каждого тикета-кандидата — чеклист атомарности (6 проверок). Если хотя бы одна проверка не пройдена — разбей тикет по паттернам из чеклиста.
36
+
37
+ **⛔ Единственная допустимая реакция на FAIL — разбиение на 2+ тикетов.** Объединение, сжатие или слияние шагов/пунктов внутри тикета для формального снижения числа ниже порога — **запрещено**. Такая стратегия не делает тикет атомарнее — она маскирует неатомарность, скрывая независимые действия внутри одного пункта. Если verify-atomicity вернул FAIL (например, «6 шагов, порог 5»), ответ — разделить тикет на два, а не объединить шаги 4 и 5 в один.
38
+
39
+ **⛔ Обязательная фиксация результата чеклиста.** Перед записью каждого тикета в файл выпиши inline-таблицу результатов 6 проверок атомарности:
40
+
41
+ ```
42
+ Тикет-кандидат: «{title}»
43
+ | Проверка | Результат | Если FAIL — действие |
44
+ |----------|-----------|----------------------|
45
+ | 1. Одна задача | PASS/FAIL | ... |
46
+ | 2. Один объект | PASS/FAIL | ... |
47
+ | 3. Один результат | PASS/FAIL | ... |
48
+ | 4. Нет скрытых подзадач | PASS/FAIL | ... |
49
+ | 5. Размер | PASS/FAIL | ... |
50
+ | 6. Независимая верификация | PASS/FAIL | ... |
51
+ → Решение: СОЗДАТЬ / РАЗБИТЬ на N тикетов
52
+ ```
53
+
54
+ Если хотя бы одна проверка = FAIL → тикет **не создаётся** в текущем виде. Разбей по паттернам из чеклиста и повтори проверку для каждого результирующего тикета. Таблица без FAIL → тикет можно создавать.
55
+
56
+ **⛔ Верификация каждого PASS.** Голый PASS без обоснования — невалиден. Для каждой проверки, помеченной PASS, обязательна колонка «Evidence» с **цитатой из содержимого тикета**, подтверждающей результат. Формат расширенной таблицы:
57
+
58
+ ```
59
+ | Проверка | Результат | Evidence / Действие |
60
+ |----------|-----------|---------------------|
61
+ | 1. Одна задача | PASS | Title: «{дословный title}» — один глагол «{глагол}» |
62
+ | 2. Один объект | PASS | Файлы: {список}. Независимых логических блоков: {N}. Критерий: правки блока A не могут быть применены без блока B |
63
+ | 3. Один результат | PASS | DoD содержит {N} пунктов, все проверяют: «{что именно}» |
64
+ | 4. Нет скрытых подзадач | PASS | Шаги: {N}. Зависимость: шаг K требует шаг K-1 (цепочка) |
65
+ ```
66
+
67
+ Если при заполнении evidence обнаруживается, что факты противоречат PASS (например, title содержит 2+ глагола, или шаги параллельны) — **измени результат на FAIL** и разбей тикет. Антипаттерн: написать PASS, потому что «в целом задача одна», проигнорировав конкретные факты (количество глаголов, количество независимых шагов, количество несвязанных DoD-пунктов). Факты первичны — интуиция вторична.
68
+
69
+ Критерии хорошего тикета:
70
+ - Одна задача (одно действие, один глагол)
71
+ - Один объект изменения (один модуль / подсистема)
72
+ - Один измеримый результат (DoD проверяется за одно действие)
73
+ - Нет скрытых независимых подзадач
74
+ - Объём ≤ 200 строк кода, время ≤ 2 часа (максимум 4)
75
+ - Результат проверяем независимо от других тикетов
76
+
77
+ **Парные тикеты ручной проверки:**
78
+
79
+ **Условие А — по содержимому плана:** Для каждой задачи плана проверь: есть ли секция «Верификация» (или аналог: «Проверка», «Acceptance Criteria» с конкретным сценарием)? Если **да** и верификация требует отдельного окружения или действий, недоступных в рамках основного тикета (ручное тестирование, проверка в sandbox, E2E-сценарий) — создай **парный тикет ручной проверки**.
80
+
81
+ **Условие Б — по затронутым файлам:** Если задача меняет файлы, влияющие на observable поведение продукта — парный тикет создаётся **независимо от** наличия секции «Верификация» в плане. Загрузи `../shared/README.md` и проверь наличие реестра observable-инвариантов (или аналогичного списка observable-зоны / файловых триггеров). Сопоставь файлы, затрагиваемые задачей, с этим реестром; при пересечении — создай парный тикет, явно ссылающийся на конкретные пункты реестра.
82
+
83
+ **Условие В — массовый рефакторинг:** Если план в сумме затрагивает >2 файлов из observable-зоны проекта **или** модифицирует декларативный manifest продукта, **в дополнение** к парным тикетам создай **один сводный тикет regression sweep** с проходом по полному реестру observable-инвариантов из `../shared/`. Этот тикет — последний в цепочке зависимостей плана (зависит от всех тикетов реализации).
84
+
85
+ > **Что считать «observable-зоной» и «декларативным manifest»** — определяется **исключительно** проектным `../shared/`. Скил не знает заранее, как устроен продукт, какой файл является его manifest'ом и какие форматы считать declarative. Если в `../shared/` нет реестра observable-инвариантов или списка файловых триггеров для regression sweep — это пробел shared. Сообщи стейкхолдеру об отсутствующем реестре и **не применяй** Условия Б, В, пока shared не дополнен. Не изобретай критерии в workflow декомпозиции.
86
+
87
+ **Парный тикет (для всех трёх условий) содержит:**
88
+ - `dependencies` на основной тикет
89
+ - Сценарий верификации: либо из плана (Условие А), либо ссылка на конкретные пункты реестра observable-инвариантов из `../shared/` (Условия Б, В)
90
+ - **Тип тикета** — выбрать из `config.yaml → task_types` тот, который в этом проекте соответствует **ручной проверке наблюдаемого поведения** (не review кода, не запуск автотестов). Если такого типа в конфиге нет — это пробел конфига, эскалируй стейкхолдеру. **Не изобретай префикс** (см. шаг 4 этого же workflow).
91
+ - В описании явное требование: «Evidence обязательно из реального runtime продукта (живая среда исполнения, а не изолированный тест конструкторов). Запуск существующих автотестов на те же файлы **не является** evidence ручной проверки — эти тесты уже были зелёными до создания этого тикета, их повторный прогон тавтологичен.»
92
+
93
+ **Когда НЕ создавать парный тикет ручной проверки:**
94
+ - Верификация — это просто запуск автотестов или проверка сборки **И** задача не затрагивает observable-зону (Условия Б, В не выполнены).
95
+ - Задача — чистый рефакторинг внутренних модулей без изменения публичного API и без изменения observable поведения продукта.
96
+
97
+ **⛔ Антипаттерн:** одна сводная задача «Ручная проверка задач 1-N» в конце плана, охватывающая несколько независимых observable-областей. Каждая задача с observable эффектом получает **свой** парный тикет рядом, плюс при необходимости — **один** сводный тикет regression sweep для cross-area прохода.
98
+
99
+ **Условие Г — подготовка тестового окружения:** Если парный тикет ручной проверки требует конкретного состояния среды (наличие данных в определённых статусах, специальная конфигурация, seed-файлы, fixtures), которое не возникает автоматически при обычной работе продукта — создай **prep-тикет** (тип по `config.yaml → task_types` — выбери тот, который соответствует подготовке инфраструктуры или окружения), который:
100
+ - Подготавливает необходимое окружение для тест-сценария
101
+ - Является `dependency` для тикета ручной проверки
102
+ - В DoD описывает конкретное конечное состояние окружения, достаточное для начала проверки
103
+
104
+ **Критерий:** если тестировщик не может начать проверку сразу после выполнения основных тикетов реализации и должен вручную создавать тестовые данные или конфигурацию — нужен prep-тикет. Если проверяемое поведение наблюдаемо при обычном использовании продукта — prep-тикет не нужен.
105
+
106
+ ### 3. Оценить автономность каждой задачи
107
+
108
+ → Загрузи `knowledge/human-task-rules.md`
109
+
110
+ | Категория | Критерий | Действие |
111
+ |-----------|----------|----------|
112
+ | **Полностью автономная** | Агент может выполнить все шаги | `executor_type: agent` |
113
+ | **Полностью ручная** | Требует действий, недоступных агенту | Префикс `HUMAN`, `executor_type: human` |
114
+ | **Гибридная** | Часть — агент, часть — человек | Разбить на 2 тикета с зависимостью |
115
+
116
+ ### 4. Определить тип каждого тикета
117
+
118
+ Прочитай актуальные типы из `.workflow/config/config.yaml` → секция `task_types`. Используй **только** префиксы из конфига.
119
+
120
+ **⛔ ЗАПРЕТ на изобретение префиксов:**
121
+ 1. Прочитай все значения `prefix` из `config.yaml → task_types` — это **закрытый список** допустимых префиксов.
122
+ 2. Для каждого тикета выбери префикс **только** из этого списка.
123
+ 3. Если ни один тип не подходит точно — выбери ближайший по смыслу из существующих в конфиге.
124
+ 4. **Никогда** не придумывай префиксы, которых нет в конфиге (даже если они кажутся логичными).
125
+
126
+ **Валидация перед записью файла:** убедись, что префикс в `id` и имени файла совпадает с одним из значений `prefix` в `config.yaml → task_types`. Если не совпадает — **СТОП**, исправь префикс.
127
+
128
+ **Маршрутизация по объекту работы:**
129
+
130
+ | Объект работы | Признак | Тип тикета |
131
+ |---------------|---------|------------|
132
+ | Скилы (`.workflow/src/skills/`) | Создание, правка, аудит SKILL.md, workflows/, knowledge/ | тип скила-улучшителя (см. config.yaml) |
133
+ | Код продукта | Исходный код проекта (src/, lib/, app/) | `impl` / `fix` |
134
+ | Конфигурация workflow | `.workflow/config/`, `.workflow/templates/`, `.workflow/src/scripts/` | `impl` / `admin` |
135
+ | Документация продукта | README.md проекта, docs/ | `docs` |
136
+
137
+ ### 5. Определить зависимости
138
+
139
+ Для каждого тикета:
140
+ - `dependencies` — задачи, которые должны быть выполнены ДО этой
141
+ - `conditions` — дополнительные условия (дата, файл, одобрение)
142
+
143
+ Типы условий: `tasks_completed`, `date_after`, `date_before`, `file_exists`, `file_not_exists`, `file_contains`, `manual_approval`.
144
+
145
+ ### 6. Scope-guard
146
+
147
+ → Загрузи `knowledge/scope-guard-checklist.md`
148
+
149
+ **ОБЯЗАТЕЛЬНО** перед созданием каждого тикета — чеклист scope. Тикеты вне scope → секция «Рекомендации для следующего плана».
150
+
151
+ ### 7. Дедупликация
152
+
153
+ → Загрузи `algorithms/deduplication.md`
154
+
155
+ **ОБЯЗАТЕЛЬНО** перед созданием каждого тикета — проверка на дубли во **ВСЕХ** папках `tickets/`.
156
+
157
+ **Автоматическая проверка скриптом:**
158
+
159
+ 1. Вызови скрипт с параметрами создаваемого тикета:
160
+ ```bash
161
+ node .workflow/src/skills/decompose-plan/scripts/check-duplicates.js --title "Заголовок тикета" --scope "Описание scope работы"
162
+ ```
163
+ 2. Прочитай JSON из `---RESULT---` — список кандидатов-дубликатов с процентами совпадения
164
+ 3. На основе данных скрипта и алгоритма из `algorithms/deduplication.md` прими финальное решение: **CREATE** / **SKIP** / **OVERRIDE**
165
+
166
+ > Скрипт — вспомогательный инструмент. Финальное решение всегда за агентом.
167
+
168
+ ### 8. Назначить приоритеты
169
+
170
+ | Приоритет | Значение |
171
+ |-----------|----------|
172
+ | 1 | Critical — блокирует всё |
173
+ | 2 | High — важно для прогресса |
174
+ | 3 | Medium — стандартная работа |
175
+ | 4 | Low — можно отложить |
176
+ | 5 | Someday — когда-нибудь |
177
+
178
+ ### 9. Создать тикеты
179
+
180
+ #### 9.A ⛔ СТОП-ГЕЙТ: дословный перенос формулировок критериев из плана (выполняется ДО стоп-гейта 9.B и до любых Write/Edit)
181
+
182
+ Источник правды для критериев задачи — **план**. При переносе формулировок критериев (Acceptance Criteria, Definition of Done, условия приёмки, перечни проверок) из плана в тикет действует правило **семантической неизменности**:
183
+
184
+ 1. **Смягчающие преобразования запрещены.** Нельзя удалять, перефразировать в сторону ослабления или «подтягивать к общей формулировке» элементы, задающие границу критерия. Элементы, которые составляют смысловое ядро и **обязаны** переноситься в тикет без изменений либо с эквивалентной семантикой:
185
+ - Отрицания и запреты: обороты вида «не X», «без Y», «кроме Z», «исключая», «не допускается».
186
+ - Уточнения в скобках и после тире, задающие границу: «(не X)», «(включая Y)», «(за исключением Z)», «— минимум N».
187
+ - Количественные пороги: «не менее N», «ровно N», «≥ N», «≤ N», «не более N% diff».
188
+ - Парные ограничения: «X и Y одновременно», «X, но не Y», «только при Z».
189
+ - Референсы на конкретные артефакты/данные: имена файлов, селекторы, ID элементов, конкретные значения — переносятся дословно.
190
+ 2. **Обогащение разрешено.** Тикет может **добавлять** детали, раскрывать контекст, ссылаться на знания проекта, приводить примеры — всё, что усиливает ту же планку. Запрещено только **ослабление**.
191
+ 3. **Переформулировка допускается** только при соблюдении теста эквивалентности: новая формулировка в тикете должна **однозначно отвергать** любую ситуацию, которую отвергает формулировка плана. Если существует сценарий, проходящий по тикету, но не проходящий по плану — переформулировка неэквивалентна и запрещена.
192
+
193
+ **Обязательная процедура diff-а формулировок перед записью тикета:**
194
+
195
+ Для каждого критерия тикета, соответствующего критерию плана:
196
+ 1. Выпиши **дословную** строку критерия из плана (со всеми скобками, тире, отрицаниями, цифрами).
197
+ 2. Выпиши **дословную** строку критерия, которую собираешься записать в тикет.
198
+ 3. Построчное сопоставление: для каждого элемента из списка выше (отрицания, уточнения, пороги, парные ограничения, референсы) — присутствует ли он в строке тикета?
199
+ 4. Если хотя бы один элемент из плана отсутствует в тикете и нет эквивалентной формулировки — **СТОП**: верни уточняющий элемент в тикет дословно. Не продолжай до устранения расхождения.
200
+ 5. Если в плане есть элемент, эквивалент которого в тикете спорен, — предпочти **дословный перенос** переформулировке. Дословность никогда не бывает ошибкой; переформулировка — может быть.
201
+
202
+ **Антипаттерн (тихий семантический drift):** взять длинную формулировку критерия плана, «сгладить» её до короткой «общего смысла» формулировки в тикете, удалив уточнения в скобках или отрицания как «косметику». Это уничтожает отличительный признак, ради которого критерий был сформулирован, и превращает приёмку в тавтологию (исполнитель проверяет ослабленную формулировку и честно рапортует PASS, а реальный критерий плана остаётся невыполненным). Уточнение в скобках/после тире почти никогда не бывает косметикой — это то, ради чего автор плана уточнял критерий.
203
+
204
+ **Почему это стоп-гейт перед созданием тикетов:** после записи тикета формулировка разойдётся по всей цепочке — исполнитель реализует тесты под ослабленную формулировку, ревьюер принимает результат по ослабленной формулировке, багнутое поведение проходит приёмку. Исправление задним числом требует переоткрытия тикета и частичного перевыполнения — проще один раз свериться перед записью.
205
+
206
+ #### 9.B ⛔ СТОП-ГЕЙТ: использование `id_ranges` со входа стадии (выполняется до любых Write/Edit)
207
+
208
+ До создания **любого** файла тикета:
209
+
210
+ 1. Прочитай параметр `id_ranges_json` со входа стадии (см. секцию «Вход»). Это **JSON-строка** вида `{"PREFIX":N_start,...}`, уже выделенная стадией `allocate-ticket-ids` до запуска декомпозиции. **Распарси её** (формат тривиальный — плоский объект со скалярными значениями) и получи карту `id_ranges = { PREFIX: N_start, ... }`. **Ты не вызываешь `get-next-id.js` и не сканируешь `.workflow/tickets/` самостоятельно** — нумерация полностью определена на входе.
211
+ 2. Составь множество уникальных префиксов, которые появятся в этой декомпозиции (по результатам шага 4).
212
+ 3. Для **каждого** префикса из множества убедись, что он присутствует в распарсенной карте. Если какого-то префикса нет — это **инфраструктурная ошибка** (рассинхрон между `config.yaml → task_types` и результатом маршрутизации на шаге 4, либо сбой стадии `allocate-ticket-ids`, либо `id_ranges_json` пришёл пустым/некорректным JSON). **СТОП**, сообщи о проблеме и не продолжай декомпозицию. **Не изобретай `N_start` самостоятельно и не используй ручной алгоритм как fallback.**
213
+ 4. Все тикеты данного префикса в рамках текущей декомпозиции нумеруй **строго последовательно** от `id_ranges[PREFIX]`: первый получает `{PREFIX}-{N_start}`, второй `{PREFIX}-{N_start+1}`, и так далее. **Никогда не начинай нумерацию с 001** и не перезапускай её.
214
+ 5. Зафиксируй фактически использованный диапазон в финальном `---RESULT---` стадии в виде секции:
215
+ ```
216
+ ids_allocated_from:
217
+ {PREFIX_A}: {N_start_A}
218
+ {PREFIX_B}: {N_start_B}
219
+ ```
220
+ Значения — те же, что пришли во входном `id_ranges` для использованных префиксов. Эта секция — обязательная часть контракта стадии декомпозиции. Её отсутствие означает, что СТОП-гейт был пропущен, и декомпозиция считается невалидной.
221
+
222
+ **Почему источник нумерации — входной параметр, а не вызов скрипта внутри декомпозиции:**
223
+
224
+ - Историческая причина: текстовая норма «вызови `get-next-id.js`» держалась только на дисциплине агента. Fallback-агенты с коротким окном внимания (инцидент 2026-04-08, PLAN-008: fallback qwen после падения Sonnet с 529) её игнорировали и создавали тикеты, начиная с номера 001, порождая коллизии с архивными и завершёнными ID.
225
+ - Архитектурный принцип: решения про ID принимает инфраструктура (отдельная стадия пайплайна), а не агент. Агент-декомпозитор получает готовую карту на входе и физически не может «передумать» или «забыть» — у него нет альтернативы.
226
+ - Коллизия с архивными/завершёнными тикетами становится невозможной **by design**, потому что стадия `allocate-ticket-ids` рекурсивно сканирует все поддиректории `.workflow/tickets/` (включая `archive/`, `done/`, `review/`, `blocked/`) **до** начала декомпозиции.
227
+
228
+ **Антипаттерн:** «возьму номера из головы, раз скрипт теперь не вызывается напрямую». `id_ranges` — **единственный** допустимый источник. Любое отклонение (включая «начну с 001, потом исправлю») ломает ссылочную целостность: после записи файла ID уже попадает в перекрёстные ссылки (`depends_on`, `parent_plan`, упоминания в плане и отчётах) — переименование становится масштабной правкой с риском рассинхрона.
229
+
230
+ #### 9.1 Создание каждого тикета
231
+
232
+ Для **каждого** тикета:
233
+
234
+ 1. Прочитай шаблон: `.workflow/templates/ticket-template.md`
235
+ 2. ID тикета — **только** из диапазона, полученного на входе стадии через `id_ranges_json` (см. 9.B). План **никогда** не задаёт ID тикетов и не является источником нумерации. Если в плане встретилось что-то похожее на ID (например, `XXX-005`) — это **игнорируется**, трактуется максимум как hint для маппинга «строка плана → тикет», но не как идентификатор.
236
+
237
+ > **⛔ Не используй ручной алгоритм как fallback.** Если на входе стадии отсутствует `id_ranges_json`, JSON не парсится, или в распарсенной карте нет нужного префикса — это инфраструктурная ошибка (сбой стадии `allocate-ticket-ids`), а не повод изобретать ID самостоятельно. Сообщи о проблеме и **остановись**.
238
+
239
+ 3. Заполни шаблон, обязательно `parent_plan`
240
+
241
+ > **⛔ Структура заголовков тикета должна точно соответствовать шаблону.** Секция DoD обязана быть на уровне `##` (`## Критерии готовности (Definition of Done)` или `## Definition of Done`) и находиться как самостоятельный блок верхнего уровня — **не вкладывай её внутрь другой секции** (`## Детали задачи` и т.п.). Нарушение уровня заголовка (например, `###` вместо `##`) делает тикет невидимым для автоматических проверок пайплайна (verify-artifacts) и приведёт к бесконечному циклу ретраев.
242
+
243
+ 4. Сохрани в `.workflow/tickets/backlog/{TYPE}-{NNN}.md`
244
+ 5. **Пост-валидация уникальности** (обязательно после каждого сохранения):
245
+ - Выполни `Glob` по `.workflow/tickets/**/{TYPE}-{NNN}.md`
246
+ - Если найдено **более одного** совпадения → **СТОП**: только что созданный файл коллизирует с существующим (гонка, ручная правка, баг скрипта, пропуск СТОП-гейта). Удали только что созданный файл, вернись к 9.B и перевыдели диапазон заново, повтори с шага 1. Не продолжай декомпозицию, пока коллизия не устранена.
247
+
248
+ **Правила:**
249
+ - **Все задачи** плана должны получить тикеты (включая отложенные)
250
+ - `output`-артефакты **вне** `.workflow/` — в корневой директории проекта
251
+ - Не указывай инструменты исполнителя — только `required_capabilities`
252
+
253
+ ### 10. Обновить план
254
+
255
+ Добавь в план ссылки на созданные тикеты.
256
+
257
+ > **⛔ Не трогай `status` плана.** Декомпозитор **никогда** не устанавливает `status: active` в frontmatter плана. Переключение `status: approved → active` выполняется стадией `verify-atomicity` пайплайна — **только** после успешной машинной проверки атомарности всех созданных тикетов. Если декомпозитор поставит `status: active` здесь, план уйдёт в работу даже при провалившейся атомарности, а тикеты с нарушениями попадут в backlog как готовые к исполнению.
258
+
259
+ ### 11. Вывести результат
260
+
261
+ ```
262
+ ---RESULT---
263
+ status: default
264
+ ---RESULT---
265
+ ```
266
+
267
+ ## Выход
268
+
269
+ - Тикеты в `.workflow/tickets/backlog/`
270
+ - Обновлённый план со ссылками
271
+
272
+ <!-- РАСШИРЕНИЕ: добавляй дополнительные шаги декомпозиции ниже -->
@@ -0,0 +1,36 @@
1
+ # Deep Research — Agent Skill
2
+
3
+ Агент-исследователь для глубокого анализа тем. Получает задачи на исследование от других скилов и формирует структурированные текстовые отчёты с данными, источниками и выводами.
4
+
5
+ ## Структура
6
+
7
+ ```
8
+ deep-research/
9
+ ├── SKILL.md # Ядро: роль, маршрутизация, принципы
10
+ ├── workflows/ # market, competitor, trend, benchmark, technology, custom, base-checklist
11
+ ├── knowledge/ # research-methodology, source-evaluation, data-validation, perplexity-config
12
+ ├── algorithms/ # source-scoring, synthesis
13
+ └── templates/ # research-report, brief-summary
14
+ ```
15
+
16
+ ## Как это работает
17
+
18
+ 1. Любой скил проекта создаёт тикет `RSH-*` с исследовательским вопросом
19
+ 2. Deep Research определяет тип (MARKET/COMPETITOR/TREND/BENCHMARK/TECHNOLOGY/CUSTOM)
20
+ 3. Загружает соответствующий workflow
21
+ 4. Проводит исследование: поиск → фильтрация → анализ → синтез
22
+ 5. Формирует отчёт с источниками, уровнями уверенности, выводами
23
+
24
+ ## Как расширять
25
+
26
+ ### Новый тип исследования
27
+ 1. Создай файл в `workflows/{type}.md`
28
+ 2. Добавь запись в таблицу маршрутизации в `SKILL.md`
29
+
30
+ ### Новый knowledge-модуль
31
+ 1. Создай файл в `knowledge/{module}.md`
32
+ 2. Добавь запись в таблицу загрузки знаний в `SKILL.md`
33
+
34
+ ### Новый шаблон вывода
35
+ 1. Создай файл в `templates/{template}.md`
36
+ 2. Добавь запись в таблицу шаблонов в `SKILL.md`
@@ -0,0 +1,106 @@
1
+ ---
2
+ name: deep-research
3
+ description: >
4
+ Скилл агента-исследователя для workflow-ai. Выполняет глубокий ресерч по заданной
5
+ теме: собирает данные из интернета, анализирует источники, синтезирует выводы
6
+ и формирует структурированный текстовый отчёт с исследованием.
7
+ ticket_prefix: RSH
8
+ ---
9
+
10
+ # Deep Research — Agent Skill
11
+
12
+ ## Роль
13
+
14
+ Ты — исследователь-аналитик системы workflow-ai. Твоя задача — проводить глубокие исследования по заданным темам, собирать и верифицировать данные из множества источников, анализировать найденное и формировать структурированные текстовые отчёты с выводами и рекомендациями.
15
+
16
+ **Ты делаешь:** поиск информации в интернете, анализ и синтез данных из множества источников, верификацию фактов через перекрёстные ссылки, формирование исследовательских отчётов с цитатами и источниками, сравнительный анализ, обзоры рынков/технологий/конкурентов, поиск бенчмарков и лучших практик.
17
+
18
+ **Ты НЕ делаешь:** принятие бизнес-решений (только предоставляешь данные для решений), выполнение маркетинговых/продуктовых задач (передай соответствующему скилу), написание кода, изменение конфигурации системы.
19
+
20
+ ## Взаимодействие
21
+
22
+ Любой скил проекта может выступать заказчиком исследования, создав тикет с префиксом `RSH-*`. Deep Research выполняет исследование и возвращает результат в виде отчёта. Конкретный набор заказчиков зависит от проекта и определяется его конфигурацией.
23
+
24
+ ## Маршрутизация тикетов RSH-*
25
+
26
+ | Тип | Триггеры в тикете | Действие | Воркфлоу |
27
+ |-----|-------------------|----------|----------|
28
+ | **MARKET** | «исследование рынка», «обзор рынка», «TAM/SAM/SOM» | Исследование рынка, размеров, сегментов | → `workflows/market.md` |
29
+ | **COMPETITOR** | «анализ конкурентов», «конкурентный анализ», «бенчмарк» | Глубокий анализ конкурентов | → `workflows/competitor.md` |
30
+ | **TREND** | «тренды», «обзор трендов», «что нового» | Исследование трендов в индустрии | → `workflows/trend.md` |
31
+ | **BENCHMARK** | «бенчмарки», «лучшие практики», «best practices» | Сбор бенчмарков и эталонных значений | → `workflows/benchmark.md` |
32
+ | **TECHNOLOGY** | «обзор технологий», «tech research», «инструменты» | Исследование технологий и инструментов | → `workflows/technology.md` |
33
+ | **CUSTOM** | Любой другой исследовательский запрос | Кастомное исследование по ТЗ | → `workflows/custom.md` |
34
+
35
+ Если тип не определяется — используй CUSTOM.
36
+
37
+ ## ⛔ Основной инструмент исследования: perplexity-research
38
+
39
+ **ОБЯЗАТЕЛЬНО:** Все исследования выполняются через `perplexity-research.js`. Запрещено подменять web_search/web_fetch. При работе с perplexity → загрузи `knowledge/perplexity-config.md`.
40
+
41
+ ## Загрузка знаний
42
+
43
+ | Модуль | Когда загружать |
44
+ |--------|----------------|
45
+ | `knowledge/research-methodology.md` | **ВСЕГДА** — методология проведения исследований |
46
+ | `knowledge/source-evaluation.md` | При оценке надёжности источников |
47
+ | `knowledge/data-validation.md` | При верификации найденных данных |
48
+ | `knowledge/perplexity-config.md` | При работе с perplexity-research.js — вызов, модели, fallback |
49
+
50
+ ## Загрузка алгоритмов
51
+
52
+ | Алгоритм | Когда загружать |
53
+ |----------|----------------|
54
+ | `algorithms/source-scoring.md` | Оценка надёжности и релевантности источников |
55
+ | `algorithms/synthesis.md` | Синтез выводов из множества источников |
56
+
57
+ ## Шаблоны вывода
58
+
59
+ | Шаблон | Когда использовать |
60
+ |--------|-------------------|
61
+ | `templates/research-report.md` | Основной формат исследовательского отчёта |
62
+ | `templates/brief-summary.md` | Краткая справка (когда нужен быстрый ответ) |
63
+
64
+ ## Принципы
65
+
66
+ 1. **Source-First** — каждый факт подкреплён **inline-ссылкой на источник прямо рядом с этим фактом** в формате `[Источник: название, URL, дата]`. Группировать все источники в отдельную секцию или выносить общий список в конец отчёта **вместо** inline-пометок — нарушение. Секция «Источники» в конце отчёта допустима **дополнительно** к inline-пометкам, но не заменяет их. Если по факту источник не найден — помечай факт как `[данные не найдены]` или удаляй, не оставляй без источника и не ставь «требует верификации» как заглушку.
67
+ 2. **Multi-Source Verification** — ключевые данные подтверждаются минимум 2 независимыми источниками. Если подтвердить не удалось — помечай как `[SINGLE SOURCE]`.
68
+ 3. **Recency Bias Awareness** — всегда указывай дату данных. Предпочитай свежие источники, но отмечай если данные устарели.
69
+ 4. **Честность неопределённости** — если данных недостаточно, прямо об этом скажи. Не додумывай. Помечай уровень уверенности: `[HIGH]`, `[MEDIUM]`, `[LOW]`.
70
+ 5. **Structured Output** — результат всегда структурирован: executive summary, основные находки, детальный анализ, источники.
71
+ 6. **Actionable Insights** — не просто собирай данные, а формулируй выводы, которые можно использовать для принятия решений.
72
+ 7. **Scope Discipline** — исследуй строго по заданной теме. Если находишь релевантное, но за пределами скоупа — кратко упоминай в секции «За пределами скоупа».
73
+
74
+ ## Self-check перед завершением тикета
75
+
76
+ **ОБЯЗАТЕЛЬНО перед закрытием тикета выполни:**
77
+
78
+ 1. Проверь что секция **Result** заполнена (не пустой шаблон)
79
+ 2. Проверь что **артефакт-файл** существует и содержит реальные данные (не placeholder)
80
+ 3. Пройди по **каждому пункту DoD** — отметь `[x]` только если реально выполнен
81
+ 4. Для каждого факта/метрики проверь наличие **прямого URL** на первичный источник
82
+
83
+ **Если хотя бы один пункт не пройден — тикет НЕ завершён.**
84
+
85
+ ## Формат вывода
86
+
87
+ - Русский язык
88
+ - Структурированный markdown с заголовками, таблицами, списками
89
+ - Каждый факт с указанием источника: `[Источник: название, URL, дата]`
90
+ - Уровень уверенности для ключевых данных: `[HIGH/MEDIUM/LOW]`
91
+ - Executive Summary в начале отчёта (3-5 предложений)
92
+ - Секция источников в конце с полными ссылками — **дополнительно** к inline-пометкам у каждого факта (не взамен)
93
+ - Дата проведения исследования
94
+
95
+ ## Границы компетенции
96
+
97
+ - **Бизнес-решения на основе исследования** → скил-заказчик через тикет
98
+ - **Настройка аналитики и дашбордов** → соответствующий скил проекта
99
+ - **Создание контента на основе ресерча** → соответствующий скил проекта
100
+ - **Запуск рекламных кампаний** → соответствующий скил проекта
101
+ - **Оптимизация конверсий** → соответствующий скил проекта
102
+ - **Улучшение скилов** → соответствующий скил проекта
103
+
104
+ ---
105
+
106
+ **Регрессионные тесты:** `tests/index.yaml`. Прогон: `node .workflow/src/scripts/run-skill-tests.js --skill deep-research`
@@ -0,0 +1,63 @@
1
+ # Алгоритм: Скоринг источников
2
+
3
+ Формализованная оценка надёжности и релевантности источника.
4
+
5
+ ## Вход
6
+
7
+ - URL источника
8
+ - Контент/данные из источника
9
+ - Контекст исследовательского вопроса
10
+
11
+ ## Алгоритм
12
+
13
+ ### 1. Определи тип источника
14
+
15
+ | Тип | Базовый балл |
16
+ |-----|-------------|
17
+ | Государственная статистика, peer-reviewed | 9 |
18
+ | Отраслевой отчёт (Statista, Gartner, etc.) | 8 |
19
+ | Крупное СМИ с фактчекингом | 7 |
20
+ | Корпоративный блог/пресс-релиз | 6 |
21
+ | Экспертный блог с репутацией | 5 |
22
+ | Форум/Reddit (с подтверждением) | 3 |
23
+ | Анонимный/неизвестный источник | 1 |
24
+
25
+ ### 2. Примени модификаторы
26
+
27
+ | Фактор | Модификатор |
28
+ |--------|------------|
29
+ | Данные < 6 мес | +1 |
30
+ | Данные 6-12 мес | 0 |
31
+ | Данные 1-2 года | -1 |
32
+ | Данные > 2 лет | -2 |
33
+ | Есть ссылки на первоисточники | +1 |
34
+ | Коммерческая заинтересованность | -1 |
35
+ | Подтверждено другим источником | +1 |
36
+
37
+ ### 3. Рассчитай финальный балл
38
+
39
+ `Score = Базовый балл + Σ(модификаторы)`, clamped to [1, 10]
40
+
41
+ ### 4. Определи категорию
42
+
43
+ | Балл | Категория | Использование |
44
+ |------|-----------|---------------|
45
+ | 8-10 | **A — Надёжный** | Основа для выводов |
46
+ | 5-7 | **B — Приемлемый** | Можно использовать с оговорками |
47
+ | 3-4 | **C — Слабый** | Только как дополнение к A/B |
48
+ | 1-2 | **D — Ненадёжный** | Не использовать |
49
+
50
+ ## Выход
51
+
52
+ - Балл (1-10)
53
+ - Категория (A/B/C/D)
54
+ - Обоснование
55
+
56
+ ## Пример
57
+
58
+ ```
59
+ Источник: Statista — "VPN Market Size 2024"
60
+ Тип: Отраслевой отчёт → 8
61
+ Модификаторы: данные < 6 мес (+1), есть методология (+1)
62
+ Итого: 10 → A — Надёжный
63
+ ```
@@ -0,0 +1,67 @@
1
+ # Алгоритм: Синтез выводов
2
+
3
+ Формализованный метод превращения сырых данных в структурированные выводы.
4
+
5
+ ## Вход
6
+
7
+ - Набор валидированных данных с источниками
8
+ - Исследовательский вопрос
9
+ - Контекст заказчика (какой скил запросил, зачем)
10
+
11
+ ## Алгоритм
12
+
13
+ ### 1. Кластеризация данных
14
+
15
+ Сгруппируй найденные данные по темам:
16
+ - Факты (подтверждённые числа, даты, события)
17
+ - Тренды (направления изменений)
18
+ - Мнения (экспертные оценки)
19
+ - Пробелы (что не удалось найти)
20
+
21
+ ### 2. Выявление паттернов
22
+
23
+ Для каждого кластера:
24
+ - Что подтверждается множеством источников?
25
+ - Где источники противоречат друг другу?
26
+ - Какие данные являются аутлайерами?
27
+
28
+ ### 3. Формулирование выводов
29
+
30
+ Для каждого вывода:
31
+ 1. Сформулируй тезис одним предложением
32
+ 2. Приведи 2-3 подкрепляющих факта с источниками
33
+ 3. Укажи контраргументы (если есть)
34
+ 4. Присвой уровень уверенности: `[HIGH/MEDIUM/LOW]`
35
+
36
+ ### 4. Приоритизация выводов
37
+
38
+ | Критерий | Вес |
39
+ |----------|-----|
40
+ | Релевантность для заказчика | 40% |
41
+ | Уровень уверенности | 30% |
42
+ | Actionability (можно ли действовать) | 30% |
43
+
44
+ ### 5. Формулирование рекомендаций
45
+
46
+ На основе выводов — что делать:
47
+ - **Рекомендация** (конкретное действие)
48
+ - **Обоснование** (на каких выводах основана)
49
+ - **Ограничения** (что нужно учесть)
50
+
51
+ ## Выход
52
+
53
+ - Приоритизированный список выводов с уровнями уверенности
54
+ - Рекомендации с обоснованием
55
+ - Список пробелов (что не удалось установить)
56
+
57
+ ## Пример
58
+
59
+ ```
60
+ Вывод #1 [HIGH]: Рынок VPN-расширений для Chrome растёт на 15-20% YoY
61
+ - Statista: $1.2B → $1.4B (2023→2024)
62
+ - GrandViewResearch: CAGR 15.3%
63
+ - Контраргумент: рост замедляется vs 2020-2022
64
+
65
+ Рекомендация: рынок растущий, есть окно для входа, но дифференциация критична
66
+ Ограничение: данные по сегменту расширений (не VPN в целом) ограничены
67
+ ```