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.
- package/configs/config.yaml +134 -0
- package/configs/pipeline.yaml +884 -0
- package/configs/ticket-movement-rules.yaml +80 -0
- package/package.json +1 -1
- package/src/global-dir.mjs +25 -1
- package/src/scripts/run-skill-tests.js +348 -136
- package/src/skills/analyze-report/README.md +44 -0
- package/src/skills/analyze-report/SKILL.md +121 -0
- package/src/skills/analyze-report/algorithms/progress-assessment.md +108 -0
- package/src/skills/analyze-report/knowledge/analysis-frameworks.md +66 -0
- package/src/skills/analyze-report/knowledge/report-structure.md +61 -0
- package/src/skills/analyze-report/scripts/calc-plan-metrics.js +234 -0
- package/src/skills/analyze-report/templates/analysis-report.md +80 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-1.md +69 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-2.md +103 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-3.md +99 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/judge.json +163 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-1.md +89 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-2.md +88 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-3.md +100 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-1.md +77 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-2.md +64 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-3.md +110 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-1.md +74 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-2.md +38 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-3.md +61 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/meta.json +115 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001-evidence-from-log.yaml +60 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-1.md +90 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-2.md +89 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-3.md +77 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/judge.json +163 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-1.md +84 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-2.md +77 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-3.md +89 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-1.md +103 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-2.md +103 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-3.md +103 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-1.md +93 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-2.md +93 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-3.md +86 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/meta.json +115 -0
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002-result-block-format.yaml +44 -0
- package/src/skills/analyze-report/tests/fixtures/REPORT-002-incorrect-attribution.md +27 -0
- package/src/skills/analyze-report/tests/fixtures/pipeline-2026-04-06_qa-001-skip.log +32 -0
- package/src/skills/analyze-report/tests/index.yaml +25 -0
- package/src/skills/analyze-report/tests/rubrics/evidence-from-log.md +22 -0
- package/src/skills/analyze-report/tests/rubrics/result-block-format.md +22 -0
- package/src/skills/analyze-report/workflows/progress.md +158 -0
- package/src/skills/analyze-report/workflows/retrospective.md +143 -0
- package/src/skills/coach/README.md +43 -0
- package/src/skills/coach/SKILL.md +166 -0
- package/src/skills/coach/SKILL.md.legacy +157 -0
- package/src/skills/coach/algorithms/gap-analysis.md +69 -0
- package/src/skills/coach/algorithms/improvement-prioritization.md +62 -0
- package/src/skills/coach/algorithms/skill-scoring.md +80 -0
- package/src/skills/coach/knowledge/audit-applied-changes-clean.txt +11 -0
- package/src/skills/coach/knowledge/backlog-management.md +67 -0
- package/src/skills/coach/knowledge/backlog-management.md.legacy +90 -0
- package/src/skills/coach/knowledge/common-antipatterns.md +76 -0
- package/src/skills/coach/knowledge/prompt-engineering.md +45 -0
- package/src/skills/coach/knowledge/shared-knowledge-guide.md +44 -0
- package/src/skills/coach/knowledge/skill-anatomy.md +49 -0
- package/src/skills/coach/knowledge/test-authorship.md +141 -0
- package/src/skills/coach/templates/audit-report.md +39 -0
- package/src/skills/coach/templates/coach-backlog-init.yaml +14 -0
- package/src/skills/coach/templates/coach-backlog-init.yaml.legacy +10 -0
- package/src/skills/coach/templates/improvement-plan.md +42 -0
- package/src/skills/coach/templates/new-skill.md +95 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-1.md +58 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-2.md +65 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-3.md +58 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/judge.json +151 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-1.md +46 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-2.md +0 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-3.md +75 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-1.md +81 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-2.md +101 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-3.md +91 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-1.md +48 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-2.md +30 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-3.md +55 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/meta.json +95 -0
- package/src/skills/coach/tests/cases/TC-COACH-001-evidence-based-temporal-diagram.yaml +53 -0
- package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-1.md +46 -0
- package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-2.md +50 -0
- package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-3.md +48 -0
- package/src/skills/coach/tests/cases/TC-COACH-002/current/judge.json +151 -0
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-1.md +0 -0
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-2.md +37 -0
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-3.md +30 -0
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-1.md +23 -0
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-2.md +29 -0
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-3.md +35 -0
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-1.md +13 -0
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-2.md +19 -0
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-3.md +33 -0
- package/src/skills/coach/tests/cases/TC-COACH-002/current/meta.json +95 -0
- package/src/skills/coach/tests/cases/TC-COACH-002-root-cause-first.yaml +57 -0
- package/src/skills/coach/tests/fixtures/pipeline-2026-04-06_id-collision.log +77 -0
- package/src/skills/coach/tests/index.yaml +29 -0
- package/src/skills/coach/tests/rubrics/calibration/evidence-based-bad.md +13 -0
- package/src/skills/coach/tests/rubrics/calibration/evidence-based-good.md +29 -0
- package/src/skills/coach/tests/rubrics/evidence-based.md +26 -0
- package/src/skills/coach/tests/rubrics/root-cause-first.md +21 -0
- package/src/skills/coach/workflows/analyze.md +79 -0
- package/src/skills/coach/workflows/analyze.md.legacy +64 -0
- package/src/skills/coach/workflows/audit.md +74 -0
- package/src/skills/coach/workflows/audit.md.legacy +59 -0
- package/src/skills/coach/workflows/create.md +80 -0
- package/src/skills/coach/workflows/create.md.legacy +67 -0
- package/src/skills/coach/workflows/improve.md +71 -0
- package/src/skills/coach/workflows/improve.md.legacy +60 -0
- package/src/skills/coach/workflows/research.md +55 -0
- package/src/skills/coach/workflows/review.md +52 -0
- package/src/skills/coach/workflows/review.md.legacy +48 -0
- package/src/skills/coach/workflows/test.md +97 -0
- package/src/skills/create-plan/README.md +39 -0
- package/src/skills/create-plan/SKILL.md +104 -0
- package/src/skills/create-plan/algorithms/risk-assessment.md +73 -0
- package/src/skills/create-plan/knowledge/plan-completeness.md +67 -0
- package/src/skills/create-plan/knowledge/plan-lifecycle.md +33 -0
- package/src/skills/create-plan/knowledge/task-verification-pairs.md +151 -0
- package/src/skills/create-plan/scripts/validate-completeness.js +182 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-1.md +5 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-2.md +39 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-3.md +35 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/judge.json +167 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-1.md +5 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-2.md +10 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-3.md +5 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-1.md +26 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-2.md +86 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-3.md +5 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-1.md +11 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-2.md +15 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-3.md +14 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/meta.json +119 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001-validate-completeness.yaml +41 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-1.md +25 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-2.md +30 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-3.md +37 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/judge.json +164 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-1.md +3 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-2.md +11 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-3.md +13 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-1.md +44 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-2.md +5 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-3.md +49 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-1.md +6 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-2.md +11 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-3.md +16 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/meta.json +116 -0
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002-task-granularity.yaml +39 -0
- package/src/skills/create-plan/tests/index.yaml +25 -0
- package/src/skills/create-plan/tests/rubrics/task-granularity.md +21 -0
- package/src/skills/create-plan/tests/rubrics/validate-completeness.md +21 -0
- package/src/skills/create-plan/workflows/create.md +136 -0
- package/src/skills/create-report/README.md +40 -0
- package/src/skills/create-report/SKILL.md +73 -0
- package/src/skills/create-report/algorithms/metric-calculation.md +93 -0
- package/src/skills/create-report/knowledge/report-metrics.md +82 -0
- package/src/skills/create-report/scripts/calc-metrics.js +383 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-1.md +25 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-2.md +26 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-3.md +28 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/judge.json +163 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-1.md +4 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-2.md +3 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-3.md +6 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-1.md +8 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-2.md +12 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-3.md +7 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-1.md +12 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-2.md +22 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-3.md +13 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/meta.json +115 -0
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001-root-cause-attribution.yaml +57 -0
- package/src/skills/create-report/tests/index.yaml +20 -0
- package/src/skills/create-report/tests/rubrics/root-cause-attribution.md +21 -0
- package/src/skills/create-report/workflows/standard.md +175 -0
- package/src/skills/decompose-gaps/README.md +39 -0
- package/src/skills/decompose-gaps/SKILL.md +78 -0
- package/src/skills/decompose-gaps/algorithms/scope-check.md +110 -0
- package/src/skills/decompose-gaps/knowledge/scope-validation.md +65 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-1.md +49 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-2.md +56 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-3.md +39 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/judge.json +164 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-1.md +25 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-2.md +11 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-3.md +26 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-1.md +19 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-2.md +5 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-3.md +28 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-1.md +23 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-2.md +27 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-3.md +25 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/meta.json +116 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001-scope-exclusion.yaml +46 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-1.md +32 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-2.md +20 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-3.md +26 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/judge.json +164 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-1.md +7 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-2.md +16 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-3.md +7 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-1.md +5 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-2.md +11 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-3.md +13 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-1.md +13 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-2.md +12 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-3.md +5 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/meta.json +116 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002-glob-before-write.yaml +36 -0
- package/src/skills/decompose-gaps/tests/index.yaml +25 -0
- package/src/skills/decompose-gaps/tests/rubrics/glob-before-write.md +21 -0
- package/src/skills/decompose-gaps/tests/rubrics/scope-exclusion.md +21 -0
- package/src/skills/decompose-gaps/workflows/decompose.md +120 -0
- package/src/skills/decompose-plan/README.md +43 -0
- package/src/skills/decompose-plan/SKILL.md +87 -0
- package/src/skills/decompose-plan/algorithms/deduplication.md +101 -0
- package/src/skills/decompose-plan/knowledge/atomicity-checklist.md +113 -0
- package/src/skills/decompose-plan/knowledge/capabilities.md +44 -0
- package/src/skills/decompose-plan/knowledge/human-task-rules.md +67 -0
- package/src/skills/decompose-plan/knowledge/scope-guard-checklist.md +73 -0
- package/src/skills/decompose-plan/scripts/check-atomicity-limit.js +47 -0
- package/src/skills/decompose-plan/scripts/check-duplicates.js +323 -0
- package/src/skills/decompose-plan/scripts/verify-atomicity.js +408 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-1.md +30 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-2.md +36 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-3.md +37 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/judge.json +163 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-1.md +20 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-2.md +17 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-3.md +28 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-1.md +114 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-2.md +137 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-3.md +188 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-1.md +0 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-2.md +32 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-3.md +110 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/meta.json +115 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001-atomicity-no-1to1.yaml +56 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-1.md +47 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-2.md +54 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-3.md +43 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/judge.json +163 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-1.md +15 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-2.md +5 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-3.md +12 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-1.md +34 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-2.md +30 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-3.md +35 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-1.md +0 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-2.md +31 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-minimax/trial-3.md +0 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/meta.json +115 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002-get-next-id-mandatory.yaml +44 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-1.md +21 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-2.md +38 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-3.md +30 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/judge.json +163 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-1.md +31 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-2.md +35 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-3.md +48 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-1.md +167 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-2.md +62 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-3.md +174 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-1.md +0 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-2.md +0 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-minimax/trial-3.md +0 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/meta.json +115 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003-verbatim-dod-transfer.yaml +42 -0
- package/src/skills/decompose-plan/tests/index.yaml +30 -0
- package/src/skills/decompose-plan/tests/rubrics/atomicity-no-1to1.md +21 -0
- package/src/skills/decompose-plan/tests/rubrics/get-next-id-mandatory.md +21 -0
- package/src/skills/decompose-plan/tests/rubrics/verbatim-dod-transfer.md +21 -0
- package/src/skills/decompose-plan/workflows/decompose.md +272 -0
- package/src/skills/deep-research/README.md +36 -0
- package/src/skills/deep-research/SKILL.md +106 -0
- package/src/skills/deep-research/algorithms/source-scoring.md +63 -0
- package/src/skills/deep-research/algorithms/synthesis.md +67 -0
- package/src/skills/deep-research/knowledge/data-validation.md +44 -0
- package/src/skills/deep-research/knowledge/perplexity-config.md +30 -0
- package/src/skills/deep-research/knowledge/research-methodology.md +54 -0
- package/src/skills/deep-research/knowledge/source-evaluation.md +33 -0
- package/src/skills/deep-research/scripts/perplexity-research.js +315 -0
- package/src/skills/deep-research/templates/brief-summary.md +25 -0
- package/src/skills/deep-research/templates/research-report.md +76 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-1.md +48 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-2.md +88 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-3.md +56 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/judge.json +163 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-1.md +58 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-2.md +249 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-3.md +44 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-1.md +96 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-2.md +56 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-3.md +94 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-1.md +11 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-2.md +1 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-3.md +1 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/meta.json +115 -0
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001-self-check-url.yaml +58 -0
- package/src/skills/deep-research/tests/index.yaml +20 -0
- package/src/skills/deep-research/tests/rubrics/self-check-url.md +34 -0
- package/src/skills/deep-research/workflows/base-checklist.md +19 -0
- package/src/skills/deep-research/workflows/benchmark.md +38 -0
- package/src/skills/deep-research/workflows/competitor.md +44 -0
- package/src/skills/deep-research/workflows/custom.md +32 -0
- package/src/skills/deep-research/workflows/market.md +44 -0
- package/src/skills/deep-research/workflows/technology.md +40 -0
- package/src/skills/deep-research/workflows/trend.md +40 -0
- package/src/skills/execute-task/README.md +44 -0
- package/src/skills/execute-task/SKILL.md +292 -0
- package/src/skills/execute-task/algorithms/execution-strategy.md +136 -0
- package/src/skills/execute-task/knowledge/context-checkpoints.md +75 -0
- package/src/skills/execute-task/knowledge/ticket-structure.md +70 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-1.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-2.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-3.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/judge.json +124 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-1.md +4 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-2.md +4 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-3.md +4 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-1.md +4 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-2.md +4 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-3.md +11 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/meta.json +89 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001-no-ticket-creation.yaml +48 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-1.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-2.md +6 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-3.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/judge.json +124 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-1.md +4 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-2.md +4 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-3.md +8 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-1.md +9 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-2.md +26 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-3.md +4 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/meta.json +89 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002-no-duplicate-dod.yaml +44 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-1.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-2.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-3.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/judge.json +46 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/meta.json +37 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003-verification-proportionality.yaml +46 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-1.md +18 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-2.md +16 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-3.md +14 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/judge.json +124 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-1.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-2.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-3.md +1 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-1.md +8 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-2.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-3.md +4 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/meta.json +89 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004-no-foreign-ticket-edit.yaml +50 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-1.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-2.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-3.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/judge.json +124 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-1.md +15 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-2.md +4 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-3.md +5 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-1.md +11 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-2.md +11 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-3.md +4 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/meta.json +89 -0
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005-ticket-fields-updated.yaml +39 -0
- package/src/skills/execute-task/tests/fixtures/IMPL-902-create-file.md +41 -0
- package/src/skills/execute-task/tests/fixtures/IMPL-904-current-task.md +40 -0
- package/src/skills/execute-task/tests/fixtures/IMPL-906-fill-ticket.md +42 -0
- package/src/skills/execute-task/tests/fixtures/QA-901-button-click.md +41 -0
- package/src/skills/execute-task/tests/fixtures/QA-903-visual-figma.md +40 -0
- package/src/skills/execute-task/tests/fixtures/TASK-905-done-with-typo.md +36 -0
- package/src/skills/execute-task/tests/index.yaml +39 -0
- package/src/skills/execute-task/tests/rubrics/no-duplicate-dod.md +22 -0
- package/src/skills/execute-task/tests/rubrics/no-foreign-ticket-edit.md +20 -0
- package/src/skills/execute-task/tests/rubrics/no-ticket-creation.md +21 -0
- package/src/skills/execute-task/tests/rubrics/ticket-fields-updated.md +23 -0
- package/src/skills/execute-task/tests/rubrics/verification-proportionality.md +22 -0
- package/src/skills/execute-task/workflows/execute.md +104 -0
- package/src/skills/manual-testing/README.md +63 -0
- package/src/skills/manual-testing/SKILL.md +174 -0
- package/src/skills/manual-testing/algorithms/blocked-tool-strategy.md +74 -0
- package/src/skills/manual-testing/algorithms/bug-severity.md +73 -0
- package/src/skills/manual-testing/algorithms/mcp-budget.md +97 -0
- package/src/skills/manual-testing/algorithms/test-prioritization.md +69 -0
- package/src/skills/manual-testing/knowledge/browser-extension-testing.md +102 -0
- package/src/skills/manual-testing/knowledge/browser-tools.md +114 -0
- package/src/skills/manual-testing/knowledge/desktop-tools-advanced.md +92 -0
- package/src/skills/manual-testing/knowledge/desktop-tools-core.md +76 -0
- package/src/skills/manual-testing/knowledge/sandbox-advanced.md +83 -0
- package/src/skills/manual-testing/knowledge/sandbox-core.md +67 -0
- package/src/skills/manual-testing/knowledge/stateful-edge-cases.md +69 -0
- package/src/skills/manual-testing/knowledge/test-case-design.md +107 -0
- package/src/skills/manual-testing/knowledge/testing-types.md +45 -0
- package/src/skills/manual-testing/templates/bug-report.md +52 -0
- package/src/skills/manual-testing/templates/test-case.md +34 -0
- package/src/skills/manual-testing/templates/test-plan.md +97 -0
- package/src/skills/manual-testing/templates/test-session-report.md +56 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-1.md +21 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-2.md +65 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-3.md +35 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/judge.json +163 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-1.md +0 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-2.md +7 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-deepseek/trial-3.md +0 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-1.md +4 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-2.md +15 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-3.md +8 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-1.md +5 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-2.md +7 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-3.md +7 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/meta.json +114 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001-sandbox-mandatory.yaml +38 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-1.md +47 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-2.md +39 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-3.md +40 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/judge.json +163 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-1.md +19 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-2.md +15 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-3.md +24 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-1.md +19 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-2.md +13 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-3.md +18 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-1.md +21 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-2.md +15 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-3.md +14 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/meta.json +114 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002-visual-tc-screenshot.yaml +37 -0
- package/src/skills/manual-testing/tests/index.yaml +25 -0
- package/src/skills/manual-testing/tests/last-run-tc001-sonnet.log +140 -0
- package/src/skills/manual-testing/tests/last-run-tc002.log +1 -0
- package/src/skills/manual-testing/tests/last-run.log +1469 -0
- package/src/skills/manual-testing/tests/rubrics/sandbox-mandatory.md +20 -0
- package/src/skills/manual-testing/tests/rubrics/visual-tc-screenshot.md +21 -0
- package/src/skills/manual-testing/workflows/acceptance.md +80 -0
- package/src/skills/manual-testing/workflows/exploratory.md +84 -0
- package/src/skills/manual-testing/workflows/regression.md +76 -0
- package/src/skills/manual-testing/workflows/smoke.md +109 -0
- package/src/skills/manual-testing/workflows/test-plan.md +75 -0
- package/src/skills/review-result/README.md +59 -0
- package/src/skills/review-result/SKILL.md +138 -0
- package/src/skills/review-result/algorithms/verification.md +112 -0
- package/src/skills/review-result/knowledge/dod-patterns.md +115 -0
- package/src/skills/review-result/scripts/verify-artifacts.js +354 -0
- package/src/skills/review-result/templates/verdict.md +153 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-1.md +22 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-2.md +7 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-3.md +21 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-1.md +6 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-2.md +6 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-3.md +18 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/judge.json +164 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-1.md +5 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-2.md +7 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-3.md +6 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-1.md +49 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-2.md +28 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-3.md +37 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-1.md +22 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-2.md +13 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-3.md +21 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/meta.json +116 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001-visual-tc-trigger.yaml +51 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-1.md +23 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-2.md +22 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-3.md +28 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-1.md +4 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-2.md +36 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-3.md +4 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/judge.json +163 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-1.md +4 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-2.md +0 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-3.md +4 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-1.md +39 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-2.md +25 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-3.md +32 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-1.md +34 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-2.md +8 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-3.md +23 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/meta.json +115 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002-path-line-suffix.yaml +39 -0
- package/src/skills/review-result/tests/fixtures/IMPL-902-path-with-line.md +43 -0
- package/src/skills/review-result/tests/fixtures/QA-901-visual-button.md +46 -0
- package/src/skills/review-result/tests/index.yaml +25 -0
- package/src/skills/review-result/tests/rubrics/path-line-suffix.md +19 -0
- package/src/skills/review-result/tests/rubrics/visual-tc-trigger.md +19 -0
- package/src/skills/review-result/workflows/review.md +209 -0
|
@@ -0,0 +1,884 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# Pipeline Configuration — формат конфигурации пайплайна
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Описывает цепочку этапов (stages), доступных агентов, goto-логику переходов,
|
|
5
|
+
# retry-стратегии и настройки выполнения.
|
|
6
|
+
#
|
|
7
|
+
# Runner читает этот файл и автономно оркестрирует работу:
|
|
8
|
+
# node .workflow/src/runner.mjs --config .workflow/config/pipeline.yaml
|
|
9
|
+
#
|
|
10
|
+
# Переменные в goto.params:
|
|
11
|
+
# $result.* — поля из результата текущего stage
|
|
12
|
+
# $context.* — переменные из секции context (обновляются через params)
|
|
13
|
+
# $counter.* — значения счётчиков (обновляются стейджами type: update-counter)
|
|
14
|
+
# =============================================================================
|
|
15
|
+
|
|
16
|
+
pipeline:
|
|
17
|
+
name: "default"
|
|
18
|
+
version: "1.0"
|
|
19
|
+
|
|
20
|
+
# ===========================================================================
|
|
21
|
+
# Агенты (agents)
|
|
22
|
+
# ===========================================================================
|
|
23
|
+
# Каждый агент — это CLI-инструмент, который runner вызывает через child_process.
|
|
24
|
+
# Формат:
|
|
25
|
+
# <agent-id>:
|
|
26
|
+
# command: <string> — исполняемый файл (должен быть в PATH)
|
|
27
|
+
# args: <string[]> — аргументы командной строки
|
|
28
|
+
# workdir: <string> — рабочая директория (по умолчанию ".")
|
|
29
|
+
# capabilities: <string[]> — возможности агента (text, multimodal, ...)
|
|
30
|
+
# description: <string> — описание агента (опционально)
|
|
31
|
+
#
|
|
32
|
+
# Runner добавляет промпт последним аргументом автоматически.
|
|
33
|
+
# Роль (skill) передаётся через stage.instructions, а не через args.
|
|
34
|
+
# Скрипт-агенты (script-*) — детерминированы, capabilities к ним не применяются.
|
|
35
|
+
# ===========================================================================
|
|
36
|
+
agents:
|
|
37
|
+
claude-haiku:
|
|
38
|
+
command: "claude"
|
|
39
|
+
args: ["--model", "claude-haiku-4-5", "--permission-mode", "bypassPermissions", "-p"]
|
|
40
|
+
workdir: "."
|
|
41
|
+
capabilities: [text, multimodal]
|
|
42
|
+
description: "Claude Haiku — лёгкая быстрая модель, поддержка изображений"
|
|
43
|
+
|
|
44
|
+
claude-sonnet:
|
|
45
|
+
command: "claude"
|
|
46
|
+
args: ["--model", "claude-sonnet-4-6", "--permission-mode", "bypassPermissions", "-p"]
|
|
47
|
+
workdir: "."
|
|
48
|
+
capabilities: [text, multimodal]
|
|
49
|
+
description: "Claude Sonnet — быстрая модель, поддержка изображений"
|
|
50
|
+
|
|
51
|
+
claude-opus:
|
|
52
|
+
command: "claude"
|
|
53
|
+
args: ["--model", "claude-opus-4-7", "--permission-mode", "bypassPermissions", "-p"]
|
|
54
|
+
workdir: "."
|
|
55
|
+
capabilities: [text, multimodal]
|
|
56
|
+
description: "Claude Opus — мощная модель, поддержка изображений"
|
|
57
|
+
|
|
58
|
+
qwen-code:
|
|
59
|
+
command: "qwen"
|
|
60
|
+
args: ["-y", "-p"]
|
|
61
|
+
workdir: "."
|
|
62
|
+
capabilities: [text]
|
|
63
|
+
description: "Qwen Code — кодовый агент, только текст"
|
|
64
|
+
|
|
65
|
+
kilo-code:
|
|
66
|
+
command: "kilo"
|
|
67
|
+
args: ["-m", "kilo/kilo-auto/free", "--agent", "orchestrator", "run"]
|
|
68
|
+
workdir: "."
|
|
69
|
+
capabilities: [text]
|
|
70
|
+
description: "Kilo мульти-режимный (architect, code, debug)"
|
|
71
|
+
|
|
72
|
+
kilo-glm:
|
|
73
|
+
command: "kilo"
|
|
74
|
+
args: ["-m", "zai/glm-5.1", "--agent", "code", "run"]
|
|
75
|
+
workdir: "."
|
|
76
|
+
capabilities: [text]
|
|
77
|
+
description: "Kilo GLM"
|
|
78
|
+
|
|
79
|
+
kilo-glm-air:
|
|
80
|
+
command: "kilo"
|
|
81
|
+
args: ["-m", "zai/glm-4.5-air", "--agent", "code", "run"]
|
|
82
|
+
workdir: "."
|
|
83
|
+
capabilities: [text]
|
|
84
|
+
description: "Kilo GLM air"
|
|
85
|
+
|
|
86
|
+
kilo-deepseek:
|
|
87
|
+
command: "kilo"
|
|
88
|
+
args: ["-m", "deepseek/deepseek-reasoner", "--agent", "code", "run"]
|
|
89
|
+
workdir: "."
|
|
90
|
+
capabilities: [text]
|
|
91
|
+
description: "Kilo deepseek"
|
|
92
|
+
|
|
93
|
+
kilo-minimax:
|
|
94
|
+
command: "kilo"
|
|
95
|
+
args: ["-m", "kilo/minimax/minimax-m2.7", "--agent", "code", "run"]
|
|
96
|
+
workdir: "."
|
|
97
|
+
capabilities: [text]
|
|
98
|
+
description: "Kilo minimax"
|
|
99
|
+
|
|
100
|
+
kilo-free:
|
|
101
|
+
command: "kilo"
|
|
102
|
+
args: ["-m", "kilo/kilo-auto/free", "--agent", "code", "run"]
|
|
103
|
+
workdir: "."
|
|
104
|
+
capabilities: [text]
|
|
105
|
+
description: "Kilo free"
|
|
106
|
+
|
|
107
|
+
script-move:
|
|
108
|
+
command: "node"
|
|
109
|
+
args: [".workflow/src/scripts/move-ticket.js"]
|
|
110
|
+
workdir: "."
|
|
111
|
+
description: "Скрипт для перемещения тикетов между директориями"
|
|
112
|
+
|
|
113
|
+
script-pick:
|
|
114
|
+
command: "node"
|
|
115
|
+
args: [".workflow/src/scripts/pick-next-task.js"]
|
|
116
|
+
workdir: "."
|
|
117
|
+
description: "Скрипт для выбора следующего тикета из ready/"
|
|
118
|
+
|
|
119
|
+
script-move-ready:
|
|
120
|
+
command: "node"
|
|
121
|
+
args: [".workflow/src/scripts/move-to-ready.js"]
|
|
122
|
+
workdir: "."
|
|
123
|
+
description: "Скрипт для перемещения тикетов из backlog/ в ready/"
|
|
124
|
+
|
|
125
|
+
script-check-conditions:
|
|
126
|
+
command: "node"
|
|
127
|
+
args: [".workflow/src/scripts/check-conditions.js"]
|
|
128
|
+
workdir: "."
|
|
129
|
+
description: "Скрипт для проверки условий тикетов в backlog/"
|
|
130
|
+
|
|
131
|
+
script-check-plan-decomposed:
|
|
132
|
+
command: "node"
|
|
133
|
+
args: [".workflow/src/scripts/check-plan-decomposed.js"]
|
|
134
|
+
workdir: "."
|
|
135
|
+
description: "Скрипт для проверки, декомпозирован ли текущий план"
|
|
136
|
+
|
|
137
|
+
script-get-all-ids:
|
|
138
|
+
command: "node"
|
|
139
|
+
args: [".workflow/src/scripts/get-next-id.js", "--all-from-config"]
|
|
140
|
+
workdir: "."
|
|
141
|
+
description: "Выделяет стартовые номера для всех префиксов из config.yaml → task_types (используется стадией allocate-ticket-ids перед decompose-plan)"
|
|
142
|
+
|
|
143
|
+
script-check-relevance:
|
|
144
|
+
command: "node"
|
|
145
|
+
args: [".workflow/src/scripts/check-relevance.js"]
|
|
146
|
+
workdir: "."
|
|
147
|
+
description: "Скрипт проверки актуальности тикета (заменяет скил check-relevance)"
|
|
148
|
+
|
|
149
|
+
script-move-to-review:
|
|
150
|
+
command: "node"
|
|
151
|
+
args: [".workflow/src/scripts/move-to-review.js"]
|
|
152
|
+
workdir: "."
|
|
153
|
+
description: "Скрипт для перемещения завершённых тикетов из in-progress/ в review/"
|
|
154
|
+
|
|
155
|
+
script-check-templates:
|
|
156
|
+
command: "node"
|
|
157
|
+
args: [".workflow/src/scripts/check-plan-templates.js"]
|
|
158
|
+
workdir: "."
|
|
159
|
+
description: "Проверка и активация шаблонов планов по триггерам"
|
|
160
|
+
|
|
161
|
+
script-check-mcp:
|
|
162
|
+
command: "node"
|
|
163
|
+
args: [".workflow/src/scripts/check-mcp.js"]
|
|
164
|
+
workdir: "."
|
|
165
|
+
description: "Проверка доступности MCP-серверов"
|
|
166
|
+
|
|
167
|
+
script-verify-artifacts:
|
|
168
|
+
command: "node"
|
|
169
|
+
args: [".workflow/src/skills/review-result/scripts/verify-artifacts.js"]
|
|
170
|
+
workdir: "."
|
|
171
|
+
description: "Механическая предпроверка артефактов тикета перед AI-ревью (DoD %, result_filled, files_exist)"
|
|
172
|
+
|
|
173
|
+
script-complete-plan:
|
|
174
|
+
command: "node"
|
|
175
|
+
args: [".workflow/src/scripts/complete-plan.js"]
|
|
176
|
+
workdir: "."
|
|
177
|
+
description: "Завершает план (status: completed) и архивирует done-тикеты"
|
|
178
|
+
|
|
179
|
+
script-verify-atomicity:
|
|
180
|
+
command: "node"
|
|
181
|
+
args: [".workflow/src/skills/decompose-plan/scripts/verify-atomicity.js"]
|
|
182
|
+
workdir: "."
|
|
183
|
+
description: "Машинная проверка атомарности тикетов после декомпозиции"
|
|
184
|
+
|
|
185
|
+
script-check-atomicity-limit:
|
|
186
|
+
command: "node"
|
|
187
|
+
args: [".workflow/src/skills/decompose-plan/scripts/check-atomicity-limit.js"]
|
|
188
|
+
workdir: "."
|
|
189
|
+
description: "Проверка лимита попыток атомарности без инкремента счётчика"
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
# Дефолтный список агентов для стейджа, если у него не задан свой agents / agents_by_type.
|
|
193
|
+
default_agents: [claude-sonnet, kilo-deepseek]
|
|
194
|
+
|
|
195
|
+
# ===========================================================================
|
|
196
|
+
# Этапы (stages)
|
|
197
|
+
# ===========================================================================
|
|
198
|
+
# Каждый stage описывает один шаг пайплайна.
|
|
199
|
+
# Формат:
|
|
200
|
+
# <stage-id>:
|
|
201
|
+
# description: <string> — что делает этот этап
|
|
202
|
+
# agents: <id[]> — упорядоченный список кандидатов (по приоритету)
|
|
203
|
+
# skill: <skill-id> — какой skill использовать (.workflow/src/skills/<skill>/SKILL.md)
|
|
204
|
+
# instructions: <string> — доп. инструкции, передаваемые агенту в промпте
|
|
205
|
+
# counter: <string> — имя счётчика попыток для этого stage
|
|
206
|
+
# agents_by_type: — маршрутизация списка агентов по типу задачи (task_type);
|
|
207
|
+
# полностью перекрывает stage.agents / stage.instructions
|
|
208
|
+
# <type>:
|
|
209
|
+
# agents: <id[]>
|
|
210
|
+
# instructions: <string>
|
|
211
|
+
# goto: — логика переходов по результату
|
|
212
|
+
# <status>: — ключ = статус результата агента
|
|
213
|
+
# stage: <stage-id> — следующий stage
|
|
214
|
+
# params: <map> — параметры, передаваемые в context следующего stage
|
|
215
|
+
# default: — fallback если статус не совпал ни с одним ключом
|
|
216
|
+
#
|
|
217
|
+
# Логика выбора агента (единая для всех стейджей):
|
|
218
|
+
# 1. Взять список: agents_by_type[task_type].agents (если задан), иначе stage.agents,
|
|
219
|
+
# иначе pipeline.default_agents.
|
|
220
|
+
# 2. Отфильтровать по required_capabilities тикета: агент должен покрывать ВСЕ.
|
|
221
|
+
# 3. Если список пуст → тикет/стейдж уходит в blocked со статусом "no_capable_agent".
|
|
222
|
+
# 4. Попытка N (1-based) берёт элемент N списка.
|
|
223
|
+
# 5. Если N > длины списка → blocked "attempts_exhausted".
|
|
224
|
+
# 6. Любая неудача (exit≠0 / review: failed) → cursor++, attempt++.
|
|
225
|
+
#
|
|
226
|
+
# Специальные значения stage:
|
|
227
|
+
# "end" — завершение пайплайна
|
|
228
|
+
#
|
|
229
|
+
# Встроенный тип стейджа (type: update-counter):
|
|
230
|
+
# Инкрементирует счётчик без вызова агента.
|
|
231
|
+
# type: update-counter — встроенный обработчик runner'а
|
|
232
|
+
# counter: <string> — имя счётчика
|
|
233
|
+
# max: <int> — при достижении max возвращает статус "max_reached"
|
|
234
|
+
# goto:
|
|
235
|
+
# default: <stage> — следующий стейдж (счётчик < max)
|
|
236
|
+
# max_reached: <stage> — стейдж при достижении max
|
|
237
|
+
# ===========================================================================
|
|
238
|
+
stages:
|
|
239
|
+
|
|
240
|
+
# -------------------------------------------------------------------------
|
|
241
|
+
# 0. pick-first-task
|
|
242
|
+
# Выбирает следующую задачу из ready/ по приоритету и зависимостям
|
|
243
|
+
# Если ready/ пуст — проверяет review/
|
|
244
|
+
# -------------------------------------------------------------------------
|
|
245
|
+
pick-first-task:
|
|
246
|
+
description: "Выбрать задачу задачу из ready по приоритету"
|
|
247
|
+
agent: script-pick
|
|
248
|
+
goto:
|
|
249
|
+
found:
|
|
250
|
+
stage: move-to-in-progress
|
|
251
|
+
params:
|
|
252
|
+
ticket_id: "$result.ticket_id"
|
|
253
|
+
task_type: "$result.type"
|
|
254
|
+
required_capabilities: "$result.required_capabilities"
|
|
255
|
+
target: in-progress
|
|
256
|
+
in_review:
|
|
257
|
+
stage: verify-artifacts
|
|
258
|
+
params:
|
|
259
|
+
ticket_id: "$result.ticket_id"
|
|
260
|
+
required_capabilities: "$result.required_capabilities"
|
|
261
|
+
attempt: "1"
|
|
262
|
+
completed_in_progress:
|
|
263
|
+
stage: move-to-review
|
|
264
|
+
params:
|
|
265
|
+
ticket_id: "$result.ticket_id"
|
|
266
|
+
required_capabilities: "$result.required_capabilities"
|
|
267
|
+
in_progress:
|
|
268
|
+
stage: check-relevance
|
|
269
|
+
params:
|
|
270
|
+
ticket_id: "$result.ticket_id"
|
|
271
|
+
task_type: "$result.type"
|
|
272
|
+
required_capabilities: "$result.required_capabilities"
|
|
273
|
+
empty: check-plan-templates
|
|
274
|
+
error: create-report
|
|
275
|
+
|
|
276
|
+
# -------------------------------------------------------------------------
|
|
277
|
+
# 0a. check-plan-templates
|
|
278
|
+
# Проверяет шаблоны планов в plans/templates/.
|
|
279
|
+
# Если триггер сработал — создаёт план в plans/current/ со статусом approved.
|
|
280
|
+
# Всегда переходит на check-plan-decomposition.
|
|
281
|
+
# -------------------------------------------------------------------------
|
|
282
|
+
check-plan-templates:
|
|
283
|
+
description: "Проверить шаблоны планов и создать планы по триггерам"
|
|
284
|
+
agent: script-check-templates
|
|
285
|
+
goto:
|
|
286
|
+
plan_created: check-plan-decomposition
|
|
287
|
+
no_triggers: check-plan-decomposition
|
|
288
|
+
default: check-plan-decomposition
|
|
289
|
+
error: check-plan-decomposition
|
|
290
|
+
|
|
291
|
+
# -------------------------------------------------------------------------
|
|
292
|
+
# 0b. check-plan-decomposition
|
|
293
|
+
# Проверяет состояние декомпозиции планов и статус активации.
|
|
294
|
+
# Результаты:
|
|
295
|
+
# - needs_decomposition — approved-план без тикетов → allocate-ticket-ids → decompose
|
|
296
|
+
# - awaiting_atomicity — approved-план с тикетами, но без активации → verify-atomicity
|
|
297
|
+
# (защита от сценария: decompose отработал, но verify-atomicity
|
|
298
|
+
# был пропущен/прерван — план не должен тихо уйти в check-conditions
|
|
299
|
+
# со статусом approved; атомарность обязана быть проверена до активации).
|
|
300
|
+
# - decomposed — active-план с тикетами → штатный check-conditions
|
|
301
|
+
# - no_plan / default — нет работы для pipeline → check-conditions
|
|
302
|
+
# -------------------------------------------------------------------------
|
|
303
|
+
check-plan-decomposition:
|
|
304
|
+
description: "Проверить состояние декомпозиции и активации планов"
|
|
305
|
+
agent: script-check-plan-decomposed
|
|
306
|
+
goto:
|
|
307
|
+
needs_decomposition:
|
|
308
|
+
stage: allocate-ticket-ids
|
|
309
|
+
params:
|
|
310
|
+
plan_file: "$result.plan_file"
|
|
311
|
+
awaiting_atomicity:
|
|
312
|
+
stage: check-atomicity-limit
|
|
313
|
+
params:
|
|
314
|
+
plan_file: "$result.plan_file"
|
|
315
|
+
decomposed: check-conditions
|
|
316
|
+
no_plan: check-conditions
|
|
317
|
+
default: check-conditions
|
|
318
|
+
error: check-conditions
|
|
319
|
+
|
|
320
|
+
# -------------------------------------------------------------------------
|
|
321
|
+
# 0c. allocate-ticket-ids
|
|
322
|
+
# Выделяет стартовые номера для всех префиксов из config.yaml → task_types
|
|
323
|
+
# ДО запуска декомпозиции. Результат (id_ranges) передаётся в context и
|
|
324
|
+
# далее в decompose-plan через instructions. Это устраняет класс ошибок
|
|
325
|
+
# с коллизиями ID, когда агент-декомпозитор начинает нумерацию с 001
|
|
326
|
+
# Архитектурный принцип: решения про ID принимает инфраструктура, а не агент.
|
|
327
|
+
# -------------------------------------------------------------------------
|
|
328
|
+
allocate-ticket-ids:
|
|
329
|
+
description: "Выделить стартовые номера ID для всех префиксов перед декомпозицией"
|
|
330
|
+
agent: script-get-all-ids
|
|
331
|
+
timeout: 60
|
|
332
|
+
goto:
|
|
333
|
+
default:
|
|
334
|
+
stage: decompose-plan
|
|
335
|
+
params:
|
|
336
|
+
plan_file: "$context.plan_file"
|
|
337
|
+
id_ranges_json: "$result.id_ranges_json"
|
|
338
|
+
error: check-conditions
|
|
339
|
+
|
|
340
|
+
# -------------------------------------------------------------------------
|
|
341
|
+
# 0d. decompose-plan
|
|
342
|
+
# Декомпозирует план на тикеты в backlog/
|
|
343
|
+
# На входе ОБЯЗАТЕЛЬНО: plan_file и id_ranges_json (выделенные стадией
|
|
344
|
+
# allocate-ticket-ids). id_ranges_json — это JSON-строка вида
|
|
345
|
+
# {"QA":26,"HUMAN":2,...}; декомпозитор парсит её сам (см. decompose.md,
|
|
346
|
+
# шаг 9.0). Передача именно строки, а не объекта, обусловлена тем, что
|
|
347
|
+
# runner workflow-ai при подстановке $context.* в instructions применяет
|
|
348
|
+
# неявный toString() — объекты превращаются в "[object Object]".
|
|
349
|
+
# Декомпозитор НЕ вызывает get-next-id.js самостоятельно.
|
|
350
|
+
# -------------------------------------------------------------------------
|
|
351
|
+
decompose-plan:
|
|
352
|
+
description: "Декомпозировать план на тикеты"
|
|
353
|
+
agents: [claude-sonnet, kilo-glm, kilo-deepseek]
|
|
354
|
+
skill: decompose-plan
|
|
355
|
+
instructions: "Декомпозируй план .workflow/$context.plan_file на тикеты. ID тикетов бери ТОЛЬКО из JSON-карты id_ranges_json=$context.id_ranges_json — это стартовые номера по префиксам в формате {\"PREFIX\":N_start,...}, уже выделенные стадией allocate-ticket-ids. Распарси JSON, используй значения как есть. НЕ вызывай get-next-id.js и НЕ изобретай номера самостоятельно. Подробности: см. шаг 9.0 в workflows/decompose.md. При наличии $context.atomicity_failures — учти их при декомпозиции: исправь неатомарные тикеты."
|
|
356
|
+
goto:
|
|
357
|
+
default: check-atomicity-limit
|
|
358
|
+
|
|
359
|
+
# -------------------------------------------------------------------------
|
|
360
|
+
# 0e. check-atomicity-limit
|
|
361
|
+
# Проверяет counter atomicity_check_attempts без инкремента перед запуском verify-atomicity.
|
|
362
|
+
# Если counter >= max (3) — bypass на check-conditions (защита от бесконечного цикла).
|
|
363
|
+
# ВАЖНО: использует скрипт (НЕ update-counter), чтобы НЕ инкрементировать счётчик.
|
|
364
|
+
# Инкремент происходит только в increment-atomicity-counter при failed verify-atomicity.
|
|
365
|
+
# -------------------------------------------------------------------------
|
|
366
|
+
check-atomicity-limit:
|
|
367
|
+
description: "Проверить лимит попыток проверки атомарности (без инкремента)"
|
|
368
|
+
agent: script-check-atomicity-limit
|
|
369
|
+
timeout: 10
|
|
370
|
+
goto:
|
|
371
|
+
passed:
|
|
372
|
+
stage: verify-atomicity
|
|
373
|
+
params:
|
|
374
|
+
plan_file: "$context.plan_file"
|
|
375
|
+
failed:
|
|
376
|
+
stage: check-conditions
|
|
377
|
+
default:
|
|
378
|
+
stage: verify-atomicity
|
|
379
|
+
params:
|
|
380
|
+
plan_file: "$context.plan_file"
|
|
381
|
+
error:
|
|
382
|
+
stage: check-conditions
|
|
383
|
+
|
|
384
|
+
# -------------------------------------------------------------------------
|
|
385
|
+
# 0f. verify-atomicity
|
|
386
|
+
# Машинная проверка атомарности тикетов после декомпозиции.
|
|
387
|
+
# При passed → plan.status: approved → active (через activatePlan в скрипте) → check-conditions.
|
|
388
|
+
# При failed → increment-atomicity-counter → decompose-plan (feedback loop с atomicity_failures).
|
|
389
|
+
# plan_file берётся из $context (передан через decompose-plan.params или через
|
|
390
|
+
# check-plan-decomposition → check-atomicity-limit при awaiting_atomicity-сценарии).
|
|
391
|
+
# -------------------------------------------------------------------------
|
|
392
|
+
verify-atomicity:
|
|
393
|
+
description: "Машинная проверка атомарности тикетов и активация плана при passed"
|
|
394
|
+
agent: script-verify-atomicity
|
|
395
|
+
timeout: 60
|
|
396
|
+
goto:
|
|
397
|
+
passed:
|
|
398
|
+
stage: check-conditions
|
|
399
|
+
failed:
|
|
400
|
+
stage: increment-atomicity-counter
|
|
401
|
+
params:
|
|
402
|
+
atomicity_failures: "$result.atomicity_failures"
|
|
403
|
+
default:
|
|
404
|
+
stage: check-conditions
|
|
405
|
+
error:
|
|
406
|
+
stage: check-conditions
|
|
407
|
+
|
|
408
|
+
# -------------------------------------------------------------------------
|
|
409
|
+
# 0g. increment-atomicity-counter
|
|
410
|
+
# Инкрементирует counter при failed verify-atomicity.
|
|
411
|
+
# При max_reached — bypass на check-conditions. Иначе — возврат на decompose-plan.
|
|
412
|
+
# -------------------------------------------------------------------------
|
|
413
|
+
increment-atomicity-counter:
|
|
414
|
+
description: "Инкрементировать счётчик попыток проверки атомарности"
|
|
415
|
+
type: update-counter
|
|
416
|
+
counter: atomicity_check_attempts
|
|
417
|
+
max: 3
|
|
418
|
+
goto:
|
|
419
|
+
default:
|
|
420
|
+
stage: decompose-plan
|
|
421
|
+
params:
|
|
422
|
+
atomicity_failures: "$context.atomicity_failures"
|
|
423
|
+
max_reached:
|
|
424
|
+
stage: check-conditions
|
|
425
|
+
|
|
426
|
+
# -------------------------------------------------------------------------
|
|
427
|
+
# 1. check-conditions
|
|
428
|
+
# Проверяет условия тикетов в backlog/, выводит список готовых
|
|
429
|
+
# -------------------------------------------------------------------------
|
|
430
|
+
check-conditions:
|
|
431
|
+
description: "Проверить условия тикетов в backlog, вывести готовые"
|
|
432
|
+
agent: script-check-conditions
|
|
433
|
+
goto:
|
|
434
|
+
has_ready:
|
|
435
|
+
stage: move-to-ready
|
|
436
|
+
params:
|
|
437
|
+
ready_tickets: "$result.ready_tickets"
|
|
438
|
+
default: pick-next-task
|
|
439
|
+
empty: create-report
|
|
440
|
+
error: create-report
|
|
441
|
+
|
|
442
|
+
# -------------------------------------------------------------------------
|
|
443
|
+
# 1b. move-to-ready
|
|
444
|
+
# Перемещает тикеты из backlog/ в ready/ (по списку из check-conditions)
|
|
445
|
+
# -------------------------------------------------------------------------
|
|
446
|
+
move-to-ready:
|
|
447
|
+
description: "Переместить готовые тикеты из backlog в ready"
|
|
448
|
+
agent: script-move-ready
|
|
449
|
+
timeout: 120
|
|
450
|
+
goto:
|
|
451
|
+
default: pick-next-task
|
|
452
|
+
|
|
453
|
+
# -------------------------------------------------------------------------
|
|
454
|
+
# 2. pick-next-task
|
|
455
|
+
# Выбирает следующую задачу из ready/ по приоритету и зависимостям
|
|
456
|
+
# Если ready/ пуст — проверяет review/
|
|
457
|
+
# -------------------------------------------------------------------------
|
|
458
|
+
pick-next-task:
|
|
459
|
+
description: "Выбрать следующую задачу из ready по приоритету"
|
|
460
|
+
agent: script-pick
|
|
461
|
+
goto:
|
|
462
|
+
found:
|
|
463
|
+
stage: move-to-in-progress
|
|
464
|
+
params:
|
|
465
|
+
ticket_id: "$result.ticket_id"
|
|
466
|
+
task_type: "$result.type"
|
|
467
|
+
required_capabilities: "$result.required_capabilities"
|
|
468
|
+
target: in-progress
|
|
469
|
+
in_review:
|
|
470
|
+
stage: verify-artifacts
|
|
471
|
+
params:
|
|
472
|
+
ticket_id: "$result.ticket_id"
|
|
473
|
+
required_capabilities: "$result.required_capabilities"
|
|
474
|
+
attempt: "1"
|
|
475
|
+
completed_in_progress:
|
|
476
|
+
stage: move-to-review
|
|
477
|
+
params:
|
|
478
|
+
ticket_id: "$result.ticket_id"
|
|
479
|
+
required_capabilities: "$result.required_capabilities"
|
|
480
|
+
in_progress:
|
|
481
|
+
stage: check-relevance
|
|
482
|
+
params:
|
|
483
|
+
ticket_id: "$result.ticket_id"
|
|
484
|
+
task_type: "$result.type"
|
|
485
|
+
required_capabilities: "$result.required_capabilities"
|
|
486
|
+
empty: check-conditions
|
|
487
|
+
default: check-conditions
|
|
488
|
+
error: create-report
|
|
489
|
+
|
|
490
|
+
# -------------------------------------------------------------------------
|
|
491
|
+
# 2b. move-to-in-progress
|
|
492
|
+
# Перемещает тикет из ready/ в in-progress/ перед выполнением
|
|
493
|
+
# -------------------------------------------------------------------------
|
|
494
|
+
move-to-in-progress:
|
|
495
|
+
description: "Переместить тикет из ready в in-progress"
|
|
496
|
+
agent: script-move
|
|
497
|
+
timeout: 120
|
|
498
|
+
goto:
|
|
499
|
+
default:
|
|
500
|
+
stage: check-relevance
|
|
501
|
+
params:
|
|
502
|
+
ticket_id: "$context.ticket_id"
|
|
503
|
+
error:
|
|
504
|
+
stage: check-relevance
|
|
505
|
+
params:
|
|
506
|
+
ticket_id: "$context.ticket_id"
|
|
507
|
+
|
|
508
|
+
# -------------------------------------------------------------------------
|
|
509
|
+
# 2c. check-relevance
|
|
510
|
+
# Проверяет актуальность тикета перед выполнением (план активен, DoD не выполнен)
|
|
511
|
+
# Fail-safe: default fallback → execute-task (лучше выполнить лишний, чем пропустить)
|
|
512
|
+
# -------------------------------------------------------------------------
|
|
513
|
+
check-relevance:
|
|
514
|
+
description: "Проверить актуальность тикета перед выполнением (детерминированный скрипт)"
|
|
515
|
+
agent: script-check-relevance
|
|
516
|
+
timeout: 120
|
|
517
|
+
goto:
|
|
518
|
+
relevant:
|
|
519
|
+
stage: check-mcp
|
|
520
|
+
params:
|
|
521
|
+
ticket_id: "$context.ticket_id"
|
|
522
|
+
irrelevant:
|
|
523
|
+
stage: move-ticket
|
|
524
|
+
params:
|
|
525
|
+
ticket_id: "$context.ticket_id"
|
|
526
|
+
target: done
|
|
527
|
+
default:
|
|
528
|
+
stage: check-mcp
|
|
529
|
+
params:
|
|
530
|
+
ticket_id: "$context.ticket_id"
|
|
531
|
+
|
|
532
|
+
# -------------------------------------------------------------------------
|
|
533
|
+
# 2d. check-mcp
|
|
534
|
+
# Проверяет доступность MCP-серверов перед запуском задач, которым они нужны.
|
|
535
|
+
# Список типов тикетов задаётся в context.mcp_require_for (см. секцию context
|
|
536
|
+
# в конце файла). Это проектная настройка — менять там.
|
|
537
|
+
#
|
|
538
|
+
# Поведение:
|
|
539
|
+
# - task_type входит в mcp_require_for + MCP доступны → status: ok → execute-task
|
|
540
|
+
# - task_type входит в mcp_require_for + MCP упали → status: fail → blocked
|
|
541
|
+
# - task_type НЕ входит в mcp_require_for → status: skipped → execute-task
|
|
542
|
+
# -------------------------------------------------------------------------
|
|
543
|
+
check-mcp:
|
|
544
|
+
description: "Проверить доступность MCP-серверов для типов тикетов из mcp_require_for"
|
|
545
|
+
agent: script-check-mcp
|
|
546
|
+
timeout: 60
|
|
547
|
+
# ВАЖНО: workflow-ai runner нормализует статусы через STATUS_ALIASES:
|
|
548
|
+
# "ok" → "passed"
|
|
549
|
+
# "fail" → "failed"
|
|
550
|
+
# Поэтому в goto используются канонические passed/failed, а не ok/fail из вывода скрипта.
|
|
551
|
+
# "skipped" не входит в таблицу синонимов, остаётся как есть.
|
|
552
|
+
goto:
|
|
553
|
+
passed:
|
|
554
|
+
stage: execute-task
|
|
555
|
+
params:
|
|
556
|
+
ticket_id: "$context.ticket_id"
|
|
557
|
+
skipped:
|
|
558
|
+
stage: execute-task
|
|
559
|
+
params:
|
|
560
|
+
ticket_id: "$context.ticket_id"
|
|
561
|
+
failed:
|
|
562
|
+
stage: move-ticket
|
|
563
|
+
params:
|
|
564
|
+
ticket_id: "$context.ticket_id"
|
|
565
|
+
target: blocked
|
|
566
|
+
default:
|
|
567
|
+
stage: execute-task
|
|
568
|
+
params:
|
|
569
|
+
ticket_id: "$context.ticket_id"
|
|
570
|
+
|
|
571
|
+
# -------------------------------------------------------------------------
|
|
572
|
+
# 3. execute-task
|
|
573
|
+
# Выполняет выбранную задачу (код, документация, план и т.д.)
|
|
574
|
+
# -------------------------------------------------------------------------
|
|
575
|
+
execute-task:
|
|
576
|
+
description: "Выполнить выбранную задачу"
|
|
577
|
+
skill: execute-task
|
|
578
|
+
counter: task_attempts
|
|
579
|
+
agents: [kilo-free, kilo-glm-air, claude-haiku, claude-sonnet, claude-opus, kilo-minimax, kilo-deepseek]
|
|
580
|
+
agents_by_type:
|
|
581
|
+
coach:
|
|
582
|
+
agents: [kilo-glm, claude-sonnet, kilo-minimax, kilo-deepseek]
|
|
583
|
+
instructions: "Твоя роль: coach"
|
|
584
|
+
qa:
|
|
585
|
+
agents: [claude-haiku, kilo-glm, claude-sonnet, claude-opus, kilo-minimax]
|
|
586
|
+
instructions: "Твоя роль: manual-testing"
|
|
587
|
+
arch:
|
|
588
|
+
agents: [claude-opus, kilo-glm]
|
|
589
|
+
goto:
|
|
590
|
+
default:
|
|
591
|
+
stage: move-to-review
|
|
592
|
+
params:
|
|
593
|
+
ticket_id: "$context.ticket_id"
|
|
594
|
+
attempt: "$counter.task_attempts"
|
|
595
|
+
target: review
|
|
596
|
+
error:
|
|
597
|
+
stage: move-to-review
|
|
598
|
+
params:
|
|
599
|
+
ticket_id: "$context.ticket_id"
|
|
600
|
+
attempt: "$counter.task_attempts"
|
|
601
|
+
target: review
|
|
602
|
+
|
|
603
|
+
# -------------------------------------------------------------------------
|
|
604
|
+
# 3b. move-to-review
|
|
605
|
+
# Перемещает тикет в review/ после выполнения задачи
|
|
606
|
+
# -------------------------------------------------------------------------
|
|
607
|
+
move-to-review:
|
|
608
|
+
description: "Переместить тикет в review после выполнения"
|
|
609
|
+
agent: script-move-to-review
|
|
610
|
+
timeout: 120
|
|
611
|
+
goto:
|
|
612
|
+
skipped:
|
|
613
|
+
stage: pick-next-task
|
|
614
|
+
default:
|
|
615
|
+
stage: verify-artifacts
|
|
616
|
+
params:
|
|
617
|
+
ticket_id: "$context.ticket_id"
|
|
618
|
+
attempt: "$counter.task_attempts"
|
|
619
|
+
|
|
620
|
+
# -------------------------------------------------------------------------
|
|
621
|
+
# 3c. verify-artifacts
|
|
622
|
+
# Механическая предпроверка артефактов тикета перед AI-ревью.
|
|
623
|
+
# Блокирует AI-рационализацию: если DoD пустой или Result не заполнен —
|
|
624
|
+
# сразу failed → increment-task-attempts, без вызова дорогой модели.
|
|
625
|
+
# Критерии failed: result_filled==false | dod_completion_pct==0 | missing_files.
|
|
626
|
+
# Runner нормализует ok→passed, fail→failed через STATUS_ALIASES.
|
|
627
|
+
# -------------------------------------------------------------------------
|
|
628
|
+
verify-artifacts:
|
|
629
|
+
description: "Механическая предпроверка артефактов тикета перед AI-ревью"
|
|
630
|
+
agent: script-verify-artifacts
|
|
631
|
+
timeout: 60
|
|
632
|
+
goto:
|
|
633
|
+
passed:
|
|
634
|
+
stage: review-result
|
|
635
|
+
params:
|
|
636
|
+
ticket_id: "$context.ticket_id"
|
|
637
|
+
attempt: "$counter.task_attempts"
|
|
638
|
+
failed:
|
|
639
|
+
stage: increment-task-attempts
|
|
640
|
+
params:
|
|
641
|
+
ticket_id: "$context.ticket_id"
|
|
642
|
+
default:
|
|
643
|
+
stage: review-result
|
|
644
|
+
params:
|
|
645
|
+
ticket_id: "$context.ticket_id"
|
|
646
|
+
attempt: "$counter.task_attempts"
|
|
647
|
+
error:
|
|
648
|
+
stage: review-result
|
|
649
|
+
params:
|
|
650
|
+
ticket_id: "$context.ticket_id"
|
|
651
|
+
attempt: "$counter.task_attempts"
|
|
652
|
+
|
|
653
|
+
# -------------------------------------------------------------------------
|
|
654
|
+
# 4. review-result
|
|
655
|
+
# Проверяет результат выполнения на соответствие DoD тикета.
|
|
656
|
+
# При failed — переходит на increment-task-attempts для учёта попытки.
|
|
657
|
+
# -------------------------------------------------------------------------
|
|
658
|
+
review-result:
|
|
659
|
+
description: "Проверить результат выполнения на соответствие DoD тикета"
|
|
660
|
+
agents: [claude-haiku, kilo-glm, claude-sonnet, kilo-minimax]
|
|
661
|
+
skill: review-result
|
|
662
|
+
counter: task_attempts
|
|
663
|
+
goto:
|
|
664
|
+
passed:
|
|
665
|
+
stage: move-ticket
|
|
666
|
+
params:
|
|
667
|
+
ticket_id: "$context.ticket_id"
|
|
668
|
+
target: done
|
|
669
|
+
failed:
|
|
670
|
+
stage: increment-task-attempts
|
|
671
|
+
params:
|
|
672
|
+
ticket_id: "$context.ticket_id"
|
|
673
|
+
default:
|
|
674
|
+
stage: move-ticket
|
|
675
|
+
params:
|
|
676
|
+
ticket_id: "$context.ticket_id"
|
|
677
|
+
target: backlog
|
|
678
|
+
error:
|
|
679
|
+
stage: increment-task-attempts
|
|
680
|
+
params:
|
|
681
|
+
ticket_id: "$context.ticket_id"
|
|
682
|
+
|
|
683
|
+
# -------------------------------------------------------------------------
|
|
684
|
+
# 4b. increment-task-attempts
|
|
685
|
+
# Отдельный стейдж обновления счётчика попыток выполнения тикета.
|
|
686
|
+
# При достижении max — блокирует тикет. Иначе — возвращает в очередь.
|
|
687
|
+
# -------------------------------------------------------------------------
|
|
688
|
+
increment-task-attempts:
|
|
689
|
+
description: "Обновить счётчик попыток выполнения тикета"
|
|
690
|
+
type: update-counter
|
|
691
|
+
counter: task_attempts
|
|
692
|
+
max: 6
|
|
693
|
+
goto:
|
|
694
|
+
default:
|
|
695
|
+
stage: move-ticket
|
|
696
|
+
params:
|
|
697
|
+
ticket_id: "$context.ticket_id"
|
|
698
|
+
target: ready
|
|
699
|
+
max_reached:
|
|
700
|
+
stage: move-ticket
|
|
701
|
+
params:
|
|
702
|
+
ticket_id: "$context.ticket_id"
|
|
703
|
+
target: blocked
|
|
704
|
+
|
|
705
|
+
# -------------------------------------------------------------------------
|
|
706
|
+
# 5. move-ticket
|
|
707
|
+
# Перемещает тикет в целевую директорию (done/ или blocked/)
|
|
708
|
+
# -------------------------------------------------------------------------
|
|
709
|
+
move-ticket:
|
|
710
|
+
description: "Переместить тикет (done / blocked)"
|
|
711
|
+
agent: script-move
|
|
712
|
+
timeout: 120
|
|
713
|
+
goto:
|
|
714
|
+
default: pick-next-task
|
|
715
|
+
error: pick-next-task
|
|
716
|
+
|
|
717
|
+
# -------------------------------------------------------------------------
|
|
718
|
+
# 6. create-report
|
|
719
|
+
# Создаёт итоговый отчёт по выполненным задачам текущего цикла
|
|
720
|
+
# -------------------------------------------------------------------------
|
|
721
|
+
create-report:
|
|
722
|
+
description: "Создать итоговый отчёт по выполненным задачам"
|
|
723
|
+
agents: [kilo-glm, claude-sonnet, kilo-minimax, kilo-deepseek]
|
|
724
|
+
skill: create-report
|
|
725
|
+
counter: create_report_attempts
|
|
726
|
+
goto:
|
|
727
|
+
default:
|
|
728
|
+
stage: analyze-report
|
|
729
|
+
params:
|
|
730
|
+
report_id: "$result.report_id"
|
|
731
|
+
error:
|
|
732
|
+
stage: increment-create-report-attempts
|
|
733
|
+
|
|
734
|
+
# Счётчик попыток для create-report (ротация моделей при API-ошибках)
|
|
735
|
+
increment-create-report-attempts:
|
|
736
|
+
description: "Обновить счётчик попыток create-report"
|
|
737
|
+
type: update-counter
|
|
738
|
+
counter: create_report_attempts
|
|
739
|
+
max: 3
|
|
740
|
+
goto:
|
|
741
|
+
default: create-report
|
|
742
|
+
max_reached: end
|
|
743
|
+
|
|
744
|
+
# -------------------------------------------------------------------------
|
|
745
|
+
# 7. analyze-report
|
|
746
|
+
# Анализирует отчёт: план выполнен полностью или есть пробелы?
|
|
747
|
+
# При has_gaps — переходит на increment-plan-iterations для учёта итерации.
|
|
748
|
+
# -------------------------------------------------------------------------
|
|
749
|
+
analyze-report:
|
|
750
|
+
description: "Проанализировать отчёт: план выполнен полностью?"
|
|
751
|
+
agents: [kilo-glm, claude-sonnet, kilo-minimax, kilo-deepseek]
|
|
752
|
+
skill: analyze-report
|
|
753
|
+
counter: analyze_report_attempts
|
|
754
|
+
goto:
|
|
755
|
+
completed: complete-plan
|
|
756
|
+
has_gaps:
|
|
757
|
+
stage: increment-plan-iterations
|
|
758
|
+
params:
|
|
759
|
+
gaps: "$result.gaps"
|
|
760
|
+
report_id: "$context.report_id"
|
|
761
|
+
error:
|
|
762
|
+
stage: increment-analyze-report-attempts
|
|
763
|
+
|
|
764
|
+
# Счётчик попыток для analyze-report (ротация моделей при API-ошибках)
|
|
765
|
+
increment-analyze-report-attempts:
|
|
766
|
+
description: "Обновить счётчик попыток analyze-report"
|
|
767
|
+
type: update-counter
|
|
768
|
+
counter: analyze_report_attempts
|
|
769
|
+
max: 3
|
|
770
|
+
goto:
|
|
771
|
+
default: analyze-report
|
|
772
|
+
max_reached: end
|
|
773
|
+
|
|
774
|
+
# -------------------------------------------------------------------------
|
|
775
|
+
# 7a. complete-plan
|
|
776
|
+
# Завершает план: обновляет status → completed, архивирует done-тикеты.
|
|
777
|
+
# Если plan_id не задан в контексте — ищет единственный активный план.
|
|
778
|
+
# При not_ready (не все тикеты завершены) — тоже завершает пайплайн (end),
|
|
779
|
+
# т.к. analyze-report уже подтвердил completed.
|
|
780
|
+
# -------------------------------------------------------------------------
|
|
781
|
+
complete-plan:
|
|
782
|
+
description: "Завершить план (status: completed) и архивировать тикеты"
|
|
783
|
+
agent: script-complete-plan
|
|
784
|
+
timeout: 120
|
|
785
|
+
goto:
|
|
786
|
+
completed: end
|
|
787
|
+
not_ready: end
|
|
788
|
+
no_plan: end
|
|
789
|
+
default: end
|
|
790
|
+
error: end
|
|
791
|
+
|
|
792
|
+
# -------------------------------------------------------------------------
|
|
793
|
+
# 7b. increment-plan-iterations
|
|
794
|
+
# Отдельный стейдж обновления счётчика итераций анализа плана.
|
|
795
|
+
# При достижении max — завершает пайплайн. Иначе — декомпозирует пробелы.
|
|
796
|
+
# -------------------------------------------------------------------------
|
|
797
|
+
increment-plan-iterations:
|
|
798
|
+
description: "Обновить счётчик итераций анализа плана"
|
|
799
|
+
type: update-counter
|
|
800
|
+
counter: plan_iterations
|
|
801
|
+
max: 2
|
|
802
|
+
goto:
|
|
803
|
+
default:
|
|
804
|
+
stage: decompose-gaps
|
|
805
|
+
max_reached: end
|
|
806
|
+
|
|
807
|
+
# -------------------------------------------------------------------------
|
|
808
|
+
# 8. decompose-gaps
|
|
809
|
+
# Декомпозирует недочёты из анализа отчёта в новые тикеты (backlog/)
|
|
810
|
+
# -------------------------------------------------------------------------
|
|
811
|
+
decompose-gaps:
|
|
812
|
+
description: "Декомпозировать недочёты из отчёта в новые тикеты"
|
|
813
|
+
agents: [claude-sonnet, kilo-minimax, kilo-deepseek, kilo-glm]
|
|
814
|
+
skill: decompose-gaps
|
|
815
|
+
goto:
|
|
816
|
+
default: check-conditions
|
|
817
|
+
|
|
818
|
+
# ===========================================================================
|
|
819
|
+
# Точка входа (entry)
|
|
820
|
+
# ===========================================================================
|
|
821
|
+
# Stage, с которого начинается выполнение пайплайна.
|
|
822
|
+
# ===========================================================================
|
|
823
|
+
entry: pick-first-task
|
|
824
|
+
|
|
825
|
+
# ===========================================================================
|
|
826
|
+
# Контекст (context)
|
|
827
|
+
# ===========================================================================
|
|
828
|
+
# Переменные, доступные всем stages через $context.*.
|
|
829
|
+
# Runner автоматически обновляет context через params в goto-переходах.
|
|
830
|
+
# Начальные значения задаются здесь или через CLI:
|
|
831
|
+
# node runner.mjs --plan PLAN-003
|
|
832
|
+
# ===========================================================================
|
|
833
|
+
context:
|
|
834
|
+
plan_id: "" # ID плана (задаётся при запуске)
|
|
835
|
+
mcp_require_for: "qa" # comma-separated типы тикетов, для которых check-mcp проверяет MCP
|
|
836
|
+
|
|
837
|
+
# ===========================================================================
|
|
838
|
+
# Защита файлов (protected_files)
|
|
839
|
+
# ===========================================================================
|
|
840
|
+
# Glob-паттерны файлов, в которые агентам запрещена запись.
|
|
841
|
+
# Runner проверяет эти паттерны и блокирует изменения.
|
|
842
|
+
# Пути указываются относительно корня проекта (без префикса .workflow/)
|
|
843
|
+
# ===========================================================================
|
|
844
|
+
protected_files:
|
|
845
|
+
- ".workflow/plans/**" # Планы — только для чтения
|
|
846
|
+
- ".workflow/config/**" # Конфигурация
|
|
847
|
+
- pattern: ".workflow/tickets/**"
|
|
848
|
+
mode: structure # Защита только структуры (создание/удаление файлов)
|
|
849
|
+
|
|
850
|
+
# ===========================================================================
|
|
851
|
+
# Доверенные агенты (trusted_agents)
|
|
852
|
+
# ===========================================================================
|
|
853
|
+
# Агенты, для которых FileGuard не откатывает изменения в protected_files.
|
|
854
|
+
# Поддерживает glob-паттерны: "script-*" соответствует "script-move" и т.д.
|
|
855
|
+
# ===========================================================================
|
|
856
|
+
trusted_agents:
|
|
857
|
+
- "script-check-templates" # Создаёт планы в plans/current/
|
|
858
|
+
- "script-*" # Все скрипты
|
|
859
|
+
|
|
860
|
+
# ===========================================================================
|
|
861
|
+
# Доверенные стейджи (trusted_stages)
|
|
862
|
+
# ===========================================================================
|
|
863
|
+
# Стейджи, которые могут создавать/удалять файлы в protected_files.
|
|
864
|
+
# Например, decompose-plan и decompose-gaps создают тикеты.
|
|
865
|
+
# ===========================================================================
|
|
866
|
+
trusted_stages:
|
|
867
|
+
- "decompose-plan"
|
|
868
|
+
- "decompose-gaps"
|
|
869
|
+
|
|
870
|
+
# ===========================================================================
|
|
871
|
+
# Настройки выполнения (execution)
|
|
872
|
+
# ===========================================================================
|
|
873
|
+
# Параметры, управляющие поведением runner'а.
|
|
874
|
+
#
|
|
875
|
+
# max_steps: — абсолютный лимит шагов за один запуск (защита от зацикливания)
|
|
876
|
+
# delay_between_stages: — пауза между этапами в секундах
|
|
877
|
+
# timeout_per_stage: — таймаут на один этап в секундах (по истечении — ошибка)
|
|
878
|
+
# log_file: — путь к файлу логов (относительно корня проекта)
|
|
879
|
+
# ===========================================================================
|
|
880
|
+
execution:
|
|
881
|
+
max_steps: 1500
|
|
882
|
+
delay_between_stages: 5
|
|
883
|
+
timeout_per_stage: 1800
|
|
884
|
+
log_file: ".workflow/logs/pipeline.log"
|