workflow-ai 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/README.md +105 -7
- package/configs/pipeline.yaml +23 -2
- package/package.json +44 -44
- package/src/lib/operations/tickets.mjs +305 -207
- package/src/lib/utils.mjs +286 -286
- package/src/runner.mjs +314 -34
- package/src/scripts/check-conditions.js +2 -2
- package/src/scripts/get-next-id.js +144 -41
- package/src/scripts/move-ticket.js +225 -68
- package/src/scripts/pick-next-task.js +753 -93
- package/src/skills/coach/SKILL.md +1 -1
- package/src/skills/manual-testing/SKILL.md +2 -0
- package/src/scripts/tests/timeout-cascade.test.js +0 -28
- package/src/skills/analyze-report/README.md +0 -44
- package/src/skills/analyze-report/algorithms/progress-assessment.md +0 -108
- package/src/skills/analyze-report/knowledge/analysis-frameworks.md +0 -66
- package/src/skills/analyze-report/knowledge/report-structure.md +0 -61
- package/src/skills/analyze-report/scripts/calc-plan-metrics.js +0 -234
- package/src/skills/analyze-report/templates/analysis-report.md +0 -80
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-1.md +0 -5
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-2.md +0 -98
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-3.md +0 -99
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/judge.json +0 -163
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-1.md +0 -89
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-2.md +0 -88
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-deepseek/trial-3.md +0 -100
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-1.md +0 -77
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-2.md +0 -64
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-glm/trial-3.md +0 -110
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-1.md +0 -74
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-2.md +0 -38
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/kilo-minimax/trial-3.md +0 -61
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/meta.json +0 -115
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001-evidence-from-log.yaml +0 -60
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-1.md +0 -90
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-2.md +0 -89
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-3.md +0 -5
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/judge.json +0 -163
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-1.md +0 -84
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-2.md +0 -77
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-deepseek/trial-3.md +0 -89
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-1.md +0 -103
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-2.md +0 -103
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-glm/trial-3.md +0 -103
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-1.md +0 -93
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-2.md +0 -93
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/kilo-minimax/trial-3.md +0 -86
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/meta.json +0 -115
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002-result-block-format.yaml +0 -44
- package/src/skills/analyze-report/tests/fixtures/REPORT-002-incorrect-attribution.md +0 -27
- package/src/skills/analyze-report/tests/fixtures/pipeline-2026-04-06_qa-001-skip.log +0 -32
- package/src/skills/analyze-report/tests/index.yaml +0 -25
- package/src/skills/analyze-report/tests/rubrics/evidence-from-log.md +0 -22
- package/src/skills/analyze-report/tests/rubrics/result-block-format.md +0 -22
- package/src/skills/analyze-report/workflows/progress.md +0 -158
- package/src/skills/analyze-report/workflows/retrospective.md +0 -143
- package/src/skills/coach/README.md +0 -43
- package/src/skills/coach/SKILL.md.legacy +0 -157
- package/src/skills/coach/algorithms/gap-analysis.md +0 -69
- package/src/skills/coach/algorithms/improvement-prioritization.md +0 -62
- package/src/skills/coach/algorithms/skill-scoring.md +0 -80
- package/src/skills/coach/knowledge/audit-applied-changes-clean.txt +0 -11
- package/src/skills/coach/knowledge/backlog-management.md +0 -67
- package/src/skills/coach/knowledge/backlog-management.md.legacy +0 -90
- package/src/skills/coach/knowledge/common-antipatterns.md +0 -76
- package/src/skills/coach/knowledge/prompt-engineering.md +0 -45
- package/src/skills/coach/knowledge/shared-knowledge-guide.md +0 -44
- package/src/skills/coach/knowledge/skill-anatomy.md +0 -49
- package/src/skills/coach/knowledge/test-authorship.md +0 -141
- package/src/skills/coach/templates/audit-report.md +0 -39
- package/src/skills/coach/templates/coach-backlog-init.yaml +0 -14
- package/src/skills/coach/templates/coach-backlog-init.yaml.legacy +0 -10
- package/src/skills/coach/templates/improvement-plan.md +0 -42
- package/src/skills/coach/templates/new-skill.md +0 -95
- package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-1.md +0 -58
- package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-2.md +0 -65
- package/src/skills/coach/tests/cases/TC-COACH-001/current/claude-sonnet/trial-3.md +0 -58
- package/src/skills/coach/tests/cases/TC-COACH-001/current/judge.json +0 -151
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-deepseek/trial-1.md +0 -46
- 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 +0 -75
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-1.md +0 -81
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-2.md +0 -101
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-glm/trial-3.md +0 -91
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-1.md +0 -48
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-2.md +0 -30
- package/src/skills/coach/tests/cases/TC-COACH-001/current/kilo-minimax/trial-3.md +0 -55
- package/src/skills/coach/tests/cases/TC-COACH-001/current/meta.json +0 -94
- package/src/skills/coach/tests/cases/TC-COACH-001-evidence-based-temporal-diagram.yaml +0 -53
- package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-1.md +0 -46
- package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-2.md +0 -50
- package/src/skills/coach/tests/cases/TC-COACH-002/current/claude-sonnet/trial-3.md +0 -48
- package/src/skills/coach/tests/cases/TC-COACH-002/current/judge.json +0 -151
- 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 +0 -37
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-deepseek/trial-3.md +0 -30
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-1.md +0 -23
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-2.md +0 -29
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-glm/trial-3.md +0 -35
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-1.md +0 -13
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-2.md +0 -19
- package/src/skills/coach/tests/cases/TC-COACH-002/current/kilo-minimax/trial-3.md +0 -33
- package/src/skills/coach/tests/cases/TC-COACH-002/current/meta.json +0 -94
- package/src/skills/coach/tests/cases/TC-COACH-002-root-cause-first.yaml +0 -57
- package/src/skills/coach/tests/fixtures/pipeline-2026-04-06_id-collision.log +0 -77
- package/src/skills/coach/tests/index.yaml +0 -29
- package/src/skills/coach/tests/rubrics/calibration/evidence-based-bad.md +0 -13
- package/src/skills/coach/tests/rubrics/calibration/evidence-based-good.md +0 -29
- package/src/skills/coach/tests/rubrics/evidence-based.md +0 -26
- package/src/skills/coach/tests/rubrics/root-cause-first.md +0 -21
- package/src/skills/coach/workflows/analyze.md +0 -79
- package/src/skills/coach/workflows/analyze.md.legacy +0 -64
- package/src/skills/coach/workflows/audit.md +0 -74
- package/src/skills/coach/workflows/audit.md.legacy +0 -59
- package/src/skills/coach/workflows/create.md +0 -80
- package/src/skills/coach/workflows/create.md.legacy +0 -67
- package/src/skills/coach/workflows/improve.md +0 -71
- package/src/skills/coach/workflows/improve.md.legacy +0 -60
- package/src/skills/coach/workflows/research.md +0 -55
- package/src/skills/coach/workflows/review.md +0 -52
- package/src/skills/coach/workflows/review.md.legacy +0 -48
- package/src/skills/coach/workflows/test.md +0 -97
- package/src/skills/create-plan/README.md +0 -39
- package/src/skills/create-plan/algorithms/risk-assessment.md +0 -73
- package/src/skills/create-plan/knowledge/plan-completeness.md +0 -67
- package/src/skills/create-plan/knowledge/plan-lifecycle.md +0 -33
- package/src/skills/create-plan/knowledge/task-verification-pairs.md +0 -151
- package/src/skills/create-plan/knowledge/test-hygiene.md +0 -47
- package/src/skills/create-plan/scripts/validate-completeness.js +0 -182
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-1.md +0 -5
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-2.md +0 -39
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/claude-sonnet/trial-3.md +0 -35
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/judge.json +0 -167
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-1.md +0 -5
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-2.md +0 -10
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-deepseek/trial-3.md +0 -5
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-1.md +0 -26
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-2.md +0 -86
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-glm/trial-3.md +0 -5
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-1.md +0 -11
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-2.md +0 -15
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/kilo-minimax/trial-3.md +0 -14
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001/current/meta.json +0 -119
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-001-validate-completeness.yaml +0 -41
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-1.md +0 -25
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-2.md +0 -30
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/claude-sonnet/trial-3.md +0 -37
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/judge.json +0 -164
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-1.md +0 -3
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-2.md +0 -11
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-deepseek/trial-3.md +0 -13
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-1.md +0 -44
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-2.md +0 -5
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-glm/trial-3.md +0 -49
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-1.md +0 -6
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-2.md +0 -11
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/kilo-minimax/trial-3.md +0 -16
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002/current/meta.json +0 -116
- package/src/skills/create-plan/tests/cases/TC-CREATE-PLAN-002-task-granularity.yaml +0 -39
- package/src/skills/create-plan/tests/index.yaml +0 -25
- package/src/skills/create-plan/tests/rubrics/task-granularity.md +0 -21
- package/src/skills/create-plan/tests/rubrics/validate-completeness.md +0 -21
- package/src/skills/create-plan/workflows/create.md +0 -136
- package/src/skills/create-report/README.md +0 -40
- package/src/skills/create-report/algorithms/metric-calculation.md +0 -93
- package/src/skills/create-report/knowledge/report-metrics.md +0 -82
- package/src/skills/create-report/scripts/calc-metrics.js +0 -383
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-1.md +0 -25
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-2.md +0 -26
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/claude-sonnet/trial-3.md +0 -28
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/judge.json +0 -163
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-1.md +0 -4
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-2.md +0 -3
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-deepseek/trial-3.md +0 -6
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-1.md +0 -8
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-2.md +0 -12
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-glm/trial-3.md +0 -7
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-1.md +0 -12
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-2.md +0 -22
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/kilo-minimax/trial-3.md +0 -13
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001/current/meta.json +0 -115
- package/src/skills/create-report/tests/cases/TC-CREATE-REPORT-001-root-cause-attribution.yaml +0 -57
- package/src/skills/create-report/tests/index.yaml +0 -20
- package/src/skills/create-report/tests/rubrics/root-cause-attribution.md +0 -21
- package/src/skills/create-report/workflows/standard.md +0 -175
- package/src/skills/decompose-gaps/README.md +0 -39
- package/src/skills/decompose-gaps/algorithms/scope-check.md +0 -110
- package/src/skills/decompose-gaps/knowledge/scope-validation.md +0 -65
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-1.md +0 -41
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-2.md +0 -41
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-3.md +0 -56
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/judge.json +0 -164
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-1.md +0 -25
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-2.md +0 -17
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-3.md +0 -22
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-1.md +0 -25
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-2.md +0 -5
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-3.md +0 -29
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-1.md +0 -27
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-2.md +0 -35
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-3.md +0 -18
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/meta.json +0 -116
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001-scope-exclusion.yaml +0 -46
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-1.md +0 -27
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-2.md +0 -30
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-3.md +0 -27
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/judge.json +0 -163
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-1.md +0 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-2.md +0 -15
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-3.md +0 -7
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-1.md +0 -21
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-2.md +0 -38
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-3.md +0 -16
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-1.md +0 -5
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-2.md +0 -10
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-3.md +0 -9
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/meta.json +0 -115
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002-glob-before-write.yaml +0 -36
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-1.md +0 -30
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-2.md +0 -30
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-3.md +0 -30
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/judge.json +0 -165
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-1.md +0 -5
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-2.md +0 -26
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-3.md +0 -5
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-1.md +0 -39
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-2.md +0 -37
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-3.md +0 -45
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-1.md +0 -26
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-2.md +0 -27
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-3.md +0 -7
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/meta.json +0 -117
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003-parent-plan-mandatory.yaml +0 -41
- package/src/skills/decompose-gaps/tests/index.yaml +0 -30
- package/src/skills/decompose-gaps/tests/rubrics/glob-before-write.md +0 -21
- package/src/skills/decompose-gaps/tests/rubrics/parent-plan-mandatory.md +0 -22
- package/src/skills/decompose-gaps/tests/rubrics/scope-exclusion.md +0 -21
- package/src/skills/decompose-gaps/workflows/decompose.md +0 -123
- package/src/skills/decompose-plan/README.md +0 -43
- package/src/skills/decompose-plan/algorithms/deduplication.md +0 -101
- package/src/skills/decompose-plan/knowledge/atomicity-checklist.md +0 -139
- package/src/skills/decompose-plan/knowledge/capabilities.md +0 -68
- package/src/skills/decompose-plan/knowledge/human-task-rules.md +0 -82
- package/src/skills/decompose-plan/knowledge/scope-guard-checklist.md +0 -73
- package/src/skills/decompose-plan/scripts/check-atomicity-limit.js +0 -47
- package/src/skills/decompose-plan/scripts/check-duplicates.js +0 -323
- package/src/skills/decompose-plan/scripts/verify-atomicity.js +0 -408
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-1.md +0 -30
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-2.md +0 -36
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/claude-sonnet/trial-3.md +0 -37
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/judge.json +0 -163
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-1.md +0 -20
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-2.md +0 -17
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-deepseek/trial-3.md +0 -28
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-1.md +0 -114
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-2.md +0 -137
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-glm/trial-3.md +0 -188
- 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 +0 -32
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/kilo-minimax/trial-3.md +0 -110
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001/current/meta.json +0 -115
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-001-atomicity-no-1to1.yaml +0 -56
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-1.md +0 -47
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-2.md +0 -54
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/claude-sonnet/trial-3.md +0 -43
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/judge.json +0 -163
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-1.md +0 -15
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-2.md +0 -5
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-deepseek/trial-3.md +0 -12
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-1.md +0 -34
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-2.md +0 -30
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002/current/kilo-glm/trial-3.md +0 -35
- 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 +0 -31
- 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 +0 -115
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-002-get-next-id-mandatory.yaml +0 -44
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-1.md +0 -21
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-2.md +0 -38
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/claude-sonnet/trial-3.md +0 -30
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/judge.json +0 -163
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-1.md +0 -31
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-2.md +0 -35
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-deepseek/trial-3.md +0 -48
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-1.md +0 -167
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-2.md +0 -62
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003/current/kilo-glm/trial-3.md +0 -174
- 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 +0 -115
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-003-verbatim-dod-transfer.yaml +0 -42
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-1.md +0 -55
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-2.md +0 -49
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-3.md +0 -49
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/judge.json +0 -163
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-1.md +0 -104
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-2.md +0 -45
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-3.md +0 -58
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-1.md +0 -193
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-2.md +0 -202
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-3.md +0 -155
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-1.md +0 -52
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-2.md +0 -17
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-3.md +0 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/meta.json +0 -115
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004-executor-atomicity.yaml +0 -64
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-1.md +0 -59
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-2.md +0 -204
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-3.md +0 -213
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/judge.json +0 -163
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-1.md +0 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-2.md +0 -57
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-3.md +0 -54
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-1.md +0 -147
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-2.md +0 -165
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-3.md +0 -133
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-1.md +0 -81
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-2.md +0 -108
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-3.md +0 -3
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/meta.json +0 -114
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005-capabilities-registry.yaml +0 -78
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-1.md +0 -225
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-2.md +0 -66
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-3.md +0 -36
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/judge.json +0 -163
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-1.md +0 -42
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-2.md +0 -67
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-3.md +0 -40
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-1.md +0 -122
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-2.md +0 -131
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-3.md +0 -138
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-1.md +0 -41
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-2.md +0 -88
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-3.md +0 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/meta.json +0 -115
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006-dod-threshold.yaml +0 -72
- package/src/skills/decompose-plan/tests/index.yaml +0 -45
- package/src/skills/decompose-plan/tests/rubrics/atomicity-no-1to1.md +0 -21
- package/src/skills/decompose-plan/tests/rubrics/capabilities-registry.md +0 -21
- package/src/skills/decompose-plan/tests/rubrics/dod-threshold.md +0 -21
- package/src/skills/decompose-plan/tests/rubrics/executor-atomicity.md +0 -21
- package/src/skills/decompose-plan/tests/rubrics/get-next-id-mandatory.md +0 -21
- package/src/skills/decompose-plan/tests/rubrics/verbatim-dod-transfer.md +0 -21
- package/src/skills/decompose-plan/workflows/decompose.md +0 -305
- package/src/skills/deep-research/README.md +0 -36
- package/src/skills/deep-research/algorithms/source-scoring.md +0 -63
- package/src/skills/deep-research/algorithms/synthesis.md +0 -67
- package/src/skills/deep-research/knowledge/data-validation.md +0 -44
- package/src/skills/deep-research/knowledge/perplexity-config.md +0 -30
- package/src/skills/deep-research/knowledge/research-methodology.md +0 -54
- package/src/skills/deep-research/knowledge/source-evaluation.md +0 -33
- package/src/skills/deep-research/scripts/perplexity-research.js +0 -315
- package/src/skills/deep-research/templates/brief-summary.md +0 -25
- package/src/skills/deep-research/templates/research-report.md +0 -76
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-1.md +0 -48
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-2.md +0 -88
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/claude-haiku/trial-3.md +0 -56
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/judge.json +0 -163
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-1.md +0 -58
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-2.md +0 -249
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-free/trial-3.md +0 -44
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-1.md +0 -96
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-2.md +0 -56
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm/trial-3.md +0 -94
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-1.md +0 -11
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-2.md +0 -1
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/kilo-glm-air/trial-3.md +0 -1
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001/current/meta.json +0 -115
- package/src/skills/deep-research/tests/cases/TC-DEEP-RESEARCH-001-self-check-url.yaml +0 -58
- package/src/skills/deep-research/tests/index.yaml +0 -20
- package/src/skills/deep-research/tests/rubrics/self-check-url.md +0 -34
- package/src/skills/deep-research/workflows/base-checklist.md +0 -19
- package/src/skills/deep-research/workflows/benchmark.md +0 -38
- package/src/skills/deep-research/workflows/competitor.md +0 -44
- package/src/skills/deep-research/workflows/custom.md +0 -32
- package/src/skills/deep-research/workflows/market.md +0 -44
- package/src/skills/deep-research/workflows/technology.md +0 -40
- package/src/skills/deep-research/workflows/trend.md +0 -40
- package/src/skills/execute-task/README.md +0 -44
- package/src/skills/execute-task/algorithms/execution-strategy.md +0 -136
- package/src/skills/execute-task/knowledge/context-checkpoints.md +0 -75
- package/src/skills/execute-task/knowledge/ticket-structure.md +0 -70
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-1.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-2.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/claude-haiku/trial-3.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/judge.json +0 -124
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-1.md +0 -4
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-2.md +0 -4
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-free/trial-3.md +0 -4
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-1.md +0 -4
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-2.md +0 -4
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/kilo-glm-air/trial-3.md +0 -11
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/meta.json +0 -88
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001-no-ticket-creation.yaml +0 -48
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-1.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-2.md +0 -6
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/claude-haiku/trial-3.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/judge.json +0 -124
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-1.md +0 -4
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-2.md +0 -4
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-free/trial-3.md +0 -8
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-1.md +0 -9
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-2.md +0 -26
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/kilo-glm-air/trial-3.md +0 -4
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002/current/meta.json +0 -89
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-002-no-duplicate-dod.yaml +0 -44
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-1.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-2.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/claude-haiku/trial-3.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/judge.json +0 -46
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003/current/meta.json +0 -37
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-003-verification-proportionality.yaml +0 -46
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-1.md +0 -18
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-2.md +0 -16
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/claude-haiku/trial-3.md +0 -14
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/judge.json +0 -124
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-1.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-2.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-free/trial-3.md +0 -1
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-1.md +0 -8
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-2.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/kilo-glm-air/trial-3.md +0 -4
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004/current/meta.json +0 -89
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-004-no-foreign-ticket-edit.yaml +0 -50
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-1.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-2.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/claude-haiku/trial-3.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/judge.json +0 -124
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-1.md +0 -15
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-2.md +0 -4
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-free/trial-3.md +0 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-1.md +0 -11
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-2.md +0 -11
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/kilo-glm-air/trial-3.md +0 -4
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/meta.json +0 -88
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005-ticket-fields-updated.yaml +0 -39
- package/src/skills/execute-task/tests/fixtures/IMPL-902-create-file.md +0 -41
- package/src/skills/execute-task/tests/fixtures/IMPL-904-current-task.md +0 -40
- package/src/skills/execute-task/tests/fixtures/IMPL-906-fill-ticket.md +0 -42
- package/src/skills/execute-task/tests/fixtures/QA-901-button-click.md +0 -41
- package/src/skills/execute-task/tests/fixtures/QA-903-visual-figma.md +0 -40
- package/src/skills/execute-task/tests/fixtures/TASK-905-done-with-typo.md +0 -36
- package/src/skills/execute-task/tests/index.yaml +0 -39
- package/src/skills/execute-task/tests/rubrics/no-duplicate-dod.md +0 -22
- package/src/skills/execute-task/tests/rubrics/no-foreign-ticket-edit.md +0 -20
- package/src/skills/execute-task/tests/rubrics/no-ticket-creation.md +0 -21
- package/src/skills/execute-task/tests/rubrics/ticket-fields-updated.md +0 -23
- package/src/skills/execute-task/tests/rubrics/verification-proportionality.md +0 -22
- package/src/skills/execute-task/workflows/execute.md +0 -104
- package/src/skills/manual-testing/README.md +0 -63
- package/src/skills/manual-testing/algorithms/blocked-tool-strategy.md +0 -74
- package/src/skills/manual-testing/algorithms/bug-severity.md +0 -73
- package/src/skills/manual-testing/algorithms/mcp-budget.md +0 -97
- package/src/skills/manual-testing/algorithms/test-prioritization.md +0 -69
- package/src/skills/manual-testing/knowledge/browser-extension-testing.md +0 -102
- package/src/skills/manual-testing/knowledge/browser-tools.md +0 -114
- package/src/skills/manual-testing/knowledge/desktop-tools-advanced.md +0 -92
- package/src/skills/manual-testing/knowledge/desktop-tools-core.md +0 -76
- package/src/skills/manual-testing/knowledge/sandbox-advanced.md +0 -83
- package/src/skills/manual-testing/knowledge/sandbox-core.md +0 -67
- package/src/skills/manual-testing/knowledge/stateful-edge-cases.md +0 -69
- package/src/skills/manual-testing/knowledge/test-case-design.md +0 -107
- package/src/skills/manual-testing/knowledge/testing-types.md +0 -45
- package/src/skills/manual-testing/templates/bug-report.md +0 -52
- package/src/skills/manual-testing/templates/test-case.md +0 -34
- package/src/skills/manual-testing/templates/test-plan.md +0 -97
- package/src/skills/manual-testing/templates/test-session-report.md +0 -56
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-1.md +0 -34
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-2.md +0 -32
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-3.md +0 -30
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/judge.json +0 -163
- 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 +0 -7
- 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 +0 -4
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-2.md +0 -15
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-glm/trial-3.md +0 -8
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-1.md +0 -5
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-2.md +0 -7
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/kilo-minimax/trial-3.md +0 -7
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/meta.json +0 -114
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001-sandbox-mandatory.yaml +0 -38
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-1.md +0 -44
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-2.md +0 -32
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-3.md +0 -47
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/judge.json +0 -163
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-1.md +0 -19
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-2.md +0 -15
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-deepseek/trial-3.md +0 -24
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-1.md +0 -19
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-2.md +0 -13
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-glm/trial-3.md +0 -18
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-1.md +0 -21
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-2.md +0 -15
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/kilo-minimax/trial-3.md +0 -14
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/meta.json +0 -114
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002-visual-tc-screenshot.yaml +0 -37
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-1.md +0 -76
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-2.md +0 -71
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-3.md +0 -85
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/judge.json +0 -46
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/meta.json +0 -36
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003-qa-non-ui-assertion.yaml +0 -65
- package/src/skills/manual-testing/tests/index.yaml +0 -30
- package/src/skills/manual-testing/tests/last-run-tc001-sonnet.log +0 -140
- package/src/skills/manual-testing/tests/last-run-tc002.log +0 -1
- package/src/skills/manual-testing/tests/last-run.log +0 -1469
- package/src/skills/manual-testing/tests/rubrics/qa-non-ui-assertion.md +0 -31
- package/src/skills/manual-testing/tests/rubrics/sandbox-mandatory.md +0 -20
- package/src/skills/manual-testing/tests/rubrics/visual-tc-screenshot.md +0 -21
- package/src/skills/manual-testing/workflows/acceptance.md +0 -80
- package/src/skills/manual-testing/workflows/exploratory.md +0 -84
- package/src/skills/manual-testing/workflows/regression.md +0 -76
- package/src/skills/manual-testing/workflows/smoke.md +0 -109
- package/src/skills/manual-testing/workflows/test-plan.md +0 -75
- package/src/skills/review-result/README.md +0 -59
- package/src/skills/review-result/algorithms/verification.md +0 -112
- package/src/skills/review-result/knowledge/baseline-snapshot-validation.md +0 -67
- package/src/skills/review-result/knowledge/dod-patterns.md +0 -116
- package/src/skills/review-result/knowledge/test-hygiene.md +0 -44
- package/src/skills/review-result/scripts/verify-artifacts.js +0 -497
- package/src/skills/review-result/templates/verdict.md +0 -153
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-1.md +0 -22
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-2.md +0 -7
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-haiku/trial-3.md +0 -21
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-1.md +0 -6
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-2.md +0 -6
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-3.md +0 -6
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/judge.json +0 -164
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-1.md +0 -5
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-2.md +0 -7
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-deepseek/trial-3.md +0 -6
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-1.md +0 -49
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-2.md +0 -28
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-glm/trial-3.md +0 -37
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-1.md +0 -22
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-2.md +0 -13
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/kilo-minimax/trial-3.md +0 -21
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/meta.json +0 -116
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001-visual-tc-trigger.yaml +0 -51
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-1.md +0 -23
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-2.md +0 -22
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-haiku/trial-3.md +0 -28
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-1.md +0 -4
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-2.md +0 -4
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-3.md +0 -4
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/judge.json +0 -163
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-deepseek/trial-1.md +0 -4
- 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 +0 -4
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-1.md +0 -39
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-2.md +0 -25
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-glm/trial-3.md +0 -32
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-1.md +0 -34
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-2.md +0 -8
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/kilo-minimax/trial-3.md +0 -23
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/meta.json +0 -115
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002-path-line-suffix.yaml +0 -39
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-1.md +0 -40
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-2.md +0 -15
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-3.md +0 -7
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/judge.json +0 -163
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-1.md +0 -5
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-2.md +0 -5
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-3.md +0 -11
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-1.md +0 -16
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-2.md +0 -18
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-3.md +0 -17
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-1.md +0 -17
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-2.md +0 -31
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-3.md +0 -5
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/meta.json +0 -115
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003-test-isolation.yaml +0 -50
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/claude-sonnet/trial-1.md +0 -5
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/claude-sonnet/trial-2.md +0 -5
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/claude-sonnet/trial-3.md +0 -6
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/judge.json +0 -46
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/meta.json +0 -37
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004-baseline-snapshot.yaml +0 -50
- package/src/skills/review-result/tests/fixtures/IMPL-902-path-with-line.md +0 -43
- package/src/skills/review-result/tests/fixtures/QA-901-visual-button.md +0 -46
- package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/QA-904.md +0 -51
- package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/example-test.mjs +0 -36
- package/src/skills/review-result/tests/fixtures/QA-905-baseline-regex-instead-of-snapshot/QA-905.md +0 -62
- package/src/skills/review-result/tests/fixtures/QA-905-baseline-regex-instead-of-snapshot/baseline.test.mjs +0 -124
- package/src/skills/review-result/tests/index.yaml +0 -35
- package/src/skills/review-result/tests/rubrics/baseline-snapshot.md +0 -20
- package/src/skills/review-result/tests/rubrics/path-line-suffix.md +0 -19
- package/src/skills/review-result/tests/rubrics/test-isolation.md +0 -20
- package/src/skills/review-result/tests/rubrics/visual-tc-trigger.md +0 -19
- package/src/skills/review-result/workflows/review.md +0 -209
|
@@ -148,7 +148,7 @@ ticket_prefix: COACH
|
|
|
148
148
|
Если на (1), (2) или (4) ответ «да» — замени на общую формулировку или критерий, либо перенеси в shared knowledge проекта. Правка должна быть применима к любому проекту, использующему этот скил.
|
|
149
149
|
|
|
150
150
|
**Дополнительная проверка на копирование старого текста:** если правка **заменяет** существующий блок, не воспроизводи автоматически терминологию исходника. Pre-existing нарушения в заменяемом тексте — твоя ответственность; молча скопировав их в новый текст, ты унаследуешь нарушения и они станут частью твоей правки. Прогон чеклиста по 4 вопросам обязателен **по новому тексту целиком**, а не только по дельте «новое - старое».
|
|
151
|
-
10. **Self-Correct** — после каждой правки в скил **обязательно** перечитай принципы коуча (1-12) и проверь, не нарушает ли внесённая правка какой-либо из них. Не жди указания стейкхолдера — проверяй проактивно. **Процедура:** после каждого Edit/Write в файл скила — прежде чем отвечать пользователю — (1) перечитай `Read` записанный файл, (2) пройди по каждому принципу 1-12, (3) если нарушение найдено — исправь сразу, не дожидаясь фидбека. **(4) Проверка доставки:** если правка добавляет знание в shared или knowledge — открой SKILL.md целевого скила и убедись, что файл загружается по триггеру текущей задачи. Если триггер загрузки отсутствует или слишком слабый (последняя строка таблицы, без ⛔, без «обязательно») — **усиль триггер в том же CHG**, иначе правка не дойдёт до агента-исполнителя. Когда стейкхолдер указывает на ошибку — это сигнал, что проактивная проверка не сработала: исправь не только текущую работу и целевой скил, но и усиль собственные инструкции коуча, чтобы ошибка не повторялась.
|
|
151
|
+
10. **Self-Correct** — после каждой правки в скил **обязательно** перечитай принципы коуча (1-12) и проверь, не нарушает ли внесённая правка какой-либо из них. Не жди указания стейкхолдера — проверяй проактивно. **Процедура:** после каждого Edit/Write в файл скила — прежде чем отвечать пользователю — (1) перечитай `Read` записанный файл, (2) пройди по каждому принципу 1-12, (3) если нарушение найдено — исправь сразу, не дожидаясь фидбека. **(4) Проверка доставки:** если правка добавляет знание в shared или knowledge — открой SKILL.md целевого скила и убедись, что файл загружается по триггеру текущей задачи. Если триггер загрузки отсутствует или слишком слабый (последняя строка таблицы, без ⛔, без «обязательно») — **усиль триггер в том же CHG**, иначе правка не дойдёт до агента-исполнителя. **(5) Тест:** после проверки принципов 1-12 **обязательно** выполни секцию «Обязательный шаг: Тест» (→ `workflows/test.md`). Self-check без теста — незавершённый self-check: принципы проверяют корректность текста, тест проверяет корректность поведения агента при чтении этого текста. Когда стейкхолдер указывает на ошибку — это сигнал, что проактивная проверка не сработала: исправь не только текущую работу и целевой скил, но и усиль собственные инструкции коуча, чтобы ошибка не повторялась.
|
|
152
152
|
11. **Context Budget** — при анализе и аудите скила обязательно оценивай его **суммарный размер** (SKILL.md + все файлы из knowledge/ + algorithms/ + workflows/). Агент загружает эти файлы в контекст перед работой. **Порог:** если суммарный размер > 800 строк — это finding уровня HIGH. Каждая правка, добавляющая текст, должна оцениваться: «Не приведёт ли это к context overflow у агента-исполнителя?» **При аудите:** измерь `wc -l` всех файлов скила, укажи суммарный размер и сравни с порогом. Если превышен — рекомендуй консолидацию: объединение дублирующих секций, вынос редко используемых блоков в отдельные файлы с ленивой загрузкой (загружать только по триггеру, а не всегда), сжатие примеров.
|
|
153
153
|
12. **Consistency** — скил не должен содержать взаимоисключающих или противоречащих друг другу инструкций. При каждой правке и аудите проверяй: не конфликтует ли новая инструкция с существующими. **Процедура:** после внесения правки grep'ни файл на ключевые термины правки и прочитай все совпадения — убедись, что нигде не сказано противоположное. **Типичные противоречия:** «всегда делай X» в одном месте и «никогда не делай X» в другом; разные значения по умолчанию для одного параметра; разные приоритеты действий в SKILL.md и в workflow. При обнаружении противоречия — устрани его сразу, выбрав одну версию и обновив все места.
|
|
154
154
|
|
|
@@ -119,6 +119,8 @@ ticket_prefix: QA
|
|
|
119
119
|
|
|
120
120
|
Перед сохранением убедись, что директория `reports/` существует. Если нет — создай её.
|
|
121
121
|
|
|
122
|
+
**⚠️ Переиспользование существующего теста (discovery вариант C):** если тест уже существует и сохраняет артефакты с hardcoded prefix другого тикета — **обнови prefix на ID текущего тикета в тест-файле перед запуском**. Ручное копирование/переименование файлов после запуска — антипаттерн: создаёт гонку mtime между артефактами и `updated_at` тикета, ломает artifact-snapshot diff верификатора.
|
|
123
|
+
|
|
122
124
|
### Cleanup evidence
|
|
123
125
|
|
|
124
126
|
После завершения тестирования в `reports/` должны остаться **только файлы, на которые ссылается тикет**. Удали промежуточные и отладочные файлы (пробные скриншоты, дубликаты, скриншоты с неверным содержимым). Имя файла evidence должно соответствовать TC, для которого он используется — если evidence для TC-001 фактически сохранён как `TC-002-*.png`, переименуй или пересохрани с корректным именем.
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
function parseTimeout(testCase, index) {
|
|
2
|
-
return testCase.execution?.timeout_s || index.execution?.default_timeout_s || 300;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
function testTimeoutCascade() {
|
|
6
|
-
const index = { execution: { default_timeout_s: 300 } };
|
|
7
|
-
|
|
8
|
-
const testCases = [
|
|
9
|
-
{ name: 'TC-001', execution: { timeout_s: 600 } },
|
|
10
|
-
{ name: 'TC-002', execution: {} },
|
|
11
|
-
{ name: 'TC-003' }
|
|
12
|
-
];
|
|
13
|
-
|
|
14
|
-
const results = testCases.map(tc => ({
|
|
15
|
-
case: tc.name,
|
|
16
|
-
timeout: parseTimeout(tc, index)
|
|
17
|
-
}));
|
|
18
|
-
|
|
19
|
-
console.log('Timeout cascade results:', results);
|
|
20
|
-
|
|
21
|
-
const expected = [600, 300, 300];
|
|
22
|
-
const passed = results.every((r, i) => r.timeout === expected[i]);
|
|
23
|
-
|
|
24
|
-
console.log(`Test ${passed ? 'PASSED' : 'FAILED'}`);
|
|
25
|
-
process.exit(passed ? 0 : 1);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
testTimeoutCascade();
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# Analyze Report — Agent Skill
|
|
2
|
-
|
|
3
|
-
Аналитик отчётов для workflow-ai. Анализирует отчёты о выполненных задачах, оценивает прогресс по планам, проводит ретроспективы и формирует actionable рекомендации.
|
|
4
|
-
|
|
5
|
-
## Структура
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
analyze-report/
|
|
9
|
-
├── SKILL.md # Ядро: роль, маршрутизация, принципы
|
|
10
|
-
├── README.md # Документация
|
|
11
|
-
├── workflows/
|
|
12
|
-
│ ├── progress.md # Оценка прогресса по плану
|
|
13
|
-
│ └── retrospective.md # Ретроспектива завершённого плана
|
|
14
|
-
├── knowledge/
|
|
15
|
-
│ ├── analysis-frameworks.md # Методологии анализа, метрики, паттерны
|
|
16
|
-
│ └── report-structure.md # Структура отчётов, правила извлечения данных
|
|
17
|
-
├── algorithms/
|
|
18
|
-
│ └── progress-assessment.md # Алгоритм оценки прогресса (формулы, пороги)
|
|
19
|
-
└── templates/
|
|
20
|
-
└── analysis-report.md # Шаблон результата анализа
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Как это работает
|
|
24
|
-
|
|
25
|
-
1. Любой скил проекта создаёт тикет `ANL-*` с запросом на анализ
|
|
26
|
-
2. Analyze Report определяет тип (PROGRESS / RETROSPECTIVE)
|
|
27
|
-
3. Загружает соответствующий workflow
|
|
28
|
-
4. Собирает данные из отчётов, тикетов, планов
|
|
29
|
-
5. Рассчитывает метрики, выявляет проблемы, формулирует рекомендации
|
|
30
|
-
6. Формирует структурированный результат анализа
|
|
31
|
-
|
|
32
|
-
## Как расширять
|
|
33
|
-
|
|
34
|
-
### Новый тип анализа
|
|
35
|
-
1. Создай файл в `workflows/{type}.md`
|
|
36
|
-
2. Добавь запись в таблицу маршрутизации в `SKILL.md`
|
|
37
|
-
|
|
38
|
-
### Новый knowledge-модуль
|
|
39
|
-
1. Создай файл в `knowledge/{module}.md`
|
|
40
|
-
2. Добавь запись в таблицу загрузки знаний в `SKILL.md`
|
|
41
|
-
|
|
42
|
-
### Новый шаблон вывода
|
|
43
|
-
1. Создай файл в `templates/{template}.md`
|
|
44
|
-
2. Добавь запись в таблицу шаблонов в `SKILL.md`
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
# Алгоритм: Оценка прогресса по плану
|
|
2
|
-
|
|
3
|
-
Формализованный метод оценки текущего прогресса выполнения плана.
|
|
4
|
-
|
|
5
|
-
## Вход
|
|
6
|
-
|
|
7
|
-
- Список всех тикетов плана с их статусами (done, in-progress, ready, blocked, backlog)
|
|
8
|
-
- Сложность каждого тикета (simple, medium, complex)
|
|
9
|
-
- Даты создания и завершения тикетов
|
|
10
|
-
- Данные ревью (прошёл / не прошёл / пропущен)
|
|
11
|
-
|
|
12
|
-
## Алгоритм
|
|
13
|
-
|
|
14
|
-
### 1. Подсчитай распределение по статусам
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
total = count(all tickets)
|
|
18
|
-
done = count(status == done)
|
|
19
|
-
in_progress = count(status == in-progress)
|
|
20
|
-
ready = count(status == ready)
|
|
21
|
-
blocked = count(status == blocked)
|
|
22
|
-
backlog = count(status == backlog)
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
### 2. Рассчитай Completion Rate
|
|
26
|
-
|
|
27
|
-
**Простой (по количеству):**
|
|
28
|
-
```
|
|
29
|
-
completion_rate = done / total × 100%
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
**Взвешенный (по сложности):**
|
|
33
|
-
|
|
34
|
-
| Сложность | Вес |
|
|
35
|
-
|-----------|-----|
|
|
36
|
-
| simple | 1 |
|
|
37
|
-
| medium | 2 |
|
|
38
|
-
| complex | 3 |
|
|
39
|
-
|
|
40
|
-
```
|
|
41
|
-
weighted_done = Σ(weight[t] for t in done_tickets)
|
|
42
|
-
weighted_total = Σ(weight[t] for t in all_tickets)
|
|
43
|
-
weighted_completion = weighted_done / weighted_total × 100%
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### 3. Рассчитай Quality Rate
|
|
47
|
-
|
|
48
|
-
```
|
|
49
|
-
reviewed = count(tickets with review)
|
|
50
|
-
passed_first = count(tickets passed review on first attempt)
|
|
51
|
-
first_pass_rate = passed_first / reviewed × 100%
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### 4. Рассчитай Block Rate
|
|
55
|
-
|
|
56
|
-
```
|
|
57
|
-
block_rate = blocked / total × 100%
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### 5. Определи статус прогресса
|
|
61
|
-
|
|
62
|
-
| Completion | Block Rate | First-Pass Rate | Статус | Рекомендация |
|
|
63
|
-
|------------|-----------|-----------------|--------|-------------|
|
|
64
|
-
| ≥80% | <10% | ≥70% | 🟢 ON_TRACK | Продолжить по плану |
|
|
65
|
-
| 50-80% | <20% | ≥50% | 🟡 ATTENTION | Обратить внимание на отстающие задачи |
|
|
66
|
-
| 30-50% | <30% | Любой | 🟠 AT_RISK | Пересмотреть приоритеты, разблокировать |
|
|
67
|
-
| <30% | ≥30% | Любой | 🔴 CRITICAL | Эскалировать, пересмотреть план |
|
|
68
|
-
|
|
69
|
-
### 6. Оцени тренд
|
|
70
|
-
|
|
71
|
-
Если есть данные за несколько периодов:
|
|
72
|
-
```
|
|
73
|
-
velocity_current = done_last_period / period_length
|
|
74
|
-
velocity_previous = done_prev_period / period_length
|
|
75
|
-
trend = velocity_current - velocity_previous
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
| Тренд | Интерпретация |
|
|
79
|
-
|-------|---------------|
|
|
80
|
-
| trend > 0 | 📈 Ускорение |
|
|
81
|
-
| trend ≈ 0 | ➡️ Стабильно |
|
|
82
|
-
| trend < 0 | 📉 Замедление |
|
|
83
|
-
|
|
84
|
-
## Выход
|
|
85
|
-
|
|
86
|
-
- Completion Rate (простой и взвешенный)
|
|
87
|
-
- Quality Rate (First-Pass Rate)
|
|
88
|
-
- Block Rate
|
|
89
|
-
- Статус прогресса (ON_TRACK / ATTENTION / AT_RISK / CRITICAL)
|
|
90
|
-
- Тренд (если данных достаточно)
|
|
91
|
-
- Распределение тикетов по статусам
|
|
92
|
-
|
|
93
|
-
## Пример
|
|
94
|
-
|
|
95
|
-
```
|
|
96
|
-
Total: 12 тикетов
|
|
97
|
-
Done: 7 (3 simple, 3 medium, 1 complex)
|
|
98
|
-
In-progress: 2 (1 medium, 1 complex)
|
|
99
|
-
Ready: 1 (simple)
|
|
100
|
-
Blocked: 2 (1 medium, 1 complex)
|
|
101
|
-
|
|
102
|
-
Completion Rate: 7/12 = 58%
|
|
103
|
-
Weighted: (3×1 + 3×2 + 1×3) / (4×1 + 4×2 + 4×3) = 12/24 = 50%
|
|
104
|
-
Block Rate: 2/12 = 17%
|
|
105
|
-
First-Pass Rate: 5/7 = 71%
|
|
106
|
-
|
|
107
|
-
Статус: 🟡 ATTENTION (50% weighted, 17% blocked, 71% first-pass)
|
|
108
|
-
```
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
# Методологии анализа отчётов
|
|
2
|
-
|
|
3
|
-
Базовые фреймворки и метрики для анализа отчётов о выполненных задачах.
|
|
4
|
-
|
|
5
|
-
## Фреймворк анализа прогресса
|
|
6
|
-
|
|
7
|
-
### Количественные метрики
|
|
8
|
-
|
|
9
|
-
| Метрика | Формула | Интерпретация |
|
|
10
|
-
|---------|---------|---------------|
|
|
11
|
-
| **Completion Rate** | done / total × 100% | Общий прогресс по плану |
|
|
12
|
-
| **Weighted Completion** | Σ(done × complexity) / Σ(total × complexity) × 100% | Прогресс с учётом сложности |
|
|
13
|
-
| **Throughput** | done / time_elapsed | Скорость выполнения |
|
|
14
|
-
| **Block Rate** | blocked / total × 100% | Доля заблокированных задач |
|
|
15
|
-
| **Rework Rate** | reworked / done × 100% | Доля задач с переделками |
|
|
16
|
-
| **First-Pass Rate** | passed_review_first / done × 100% | Качество выполнения с первого раза |
|
|
17
|
-
|
|
18
|
-
### Качественные индикаторы
|
|
19
|
-
|
|
20
|
-
| Индикатор | Сигнал | Действие |
|
|
21
|
-
|-----------|--------|----------|
|
|
22
|
-
| Много заблокированных задач | Проблемы с зависимостями | Пересмотреть порядок задач |
|
|
23
|
-
| Низкий First-Pass Rate | Проблемы с качеством | Усилить критерии DoD |
|
|
24
|
-
| Высокий Rework Rate | Нечёткие требования | Улучшить описания задач |
|
|
25
|
-
| Throughput падает | Усталость / сложность растёт | Декомпозировать оставшиеся задачи |
|
|
26
|
-
|
|
27
|
-
## Фреймворк ретроспективы: Keep / Stop / Try
|
|
28
|
-
|
|
29
|
-
### Keep (Продолжать)
|
|
30
|
-
Практики, которые доказали эффективность:
|
|
31
|
-
- Что конкретно делалось?
|
|
32
|
-
- Какой результат это дало?
|
|
33
|
-
- Почему это сработало?
|
|
34
|
-
|
|
35
|
-
### Stop (Прекратить)
|
|
36
|
-
Практики, которые создавали проблемы:
|
|
37
|
-
- Что конкретно происходило?
|
|
38
|
-
- Какой вред это наносило?
|
|
39
|
-
- Что вызвало эту практику?
|
|
40
|
-
|
|
41
|
-
### Try (Попробовать)
|
|
42
|
-
Новые подходы для эксперимента:
|
|
43
|
-
- Что конкретно предлагается?
|
|
44
|
-
- Какую проблему это решает?
|
|
45
|
-
- Как измерить результат?
|
|
46
|
-
|
|
47
|
-
## Паттерны типичных проблем
|
|
48
|
-
|
|
49
|
-
| Паттерн | Симптомы | Корневая причина | Рекомендация |
|
|
50
|
-
|---------|---------|-----------------|--------------|
|
|
51
|
-
| **Scope Creep** | Количество задач растёт, прогресс стоит | Нечёткие границы плана | Зафиксировать скоуп, новые задачи — в следующий план |
|
|
52
|
-
| **Dependency Hell** | Много заблокированных задач | Плохая декомпозиция зависимостей | Пересмотреть порядок, разблокировать критический путь |
|
|
53
|
-
| **Quality Debt** | Высокий rework rate | Слабые критерии DoD | Усилить DoD, добавить чеклисты |
|
|
54
|
-
| **Single Point of Failure** | Один тип задач блокирует всё | Отсутствие параллелизма | Декомпозировать для параллельного выполнения |
|
|
55
|
-
| **Velocity Decay** | Throughput падает со временем | Растущая сложность / усталость | Декомпозировать крупные задачи, ротация фокуса |
|
|
56
|
-
|
|
57
|
-
## Классификация серьёзности проблем
|
|
58
|
-
|
|
59
|
-
| Уровень | Описание | Действие |
|
|
60
|
-
|---------|----------|----------|
|
|
61
|
-
| **CRITICAL** | Блокирует весь план, прогресс невозможен | Немедленное вмешательство |
|
|
62
|
-
| **HIGH** | Значительно замедляет прогресс | Решить в текущей итерации |
|
|
63
|
-
| **MEDIUM** | Влияет на качество, но не блокирует | Запланировать решение |
|
|
64
|
-
| **LOW** | Мелкие недочёты, потенциальные улучшения | Учесть при следующем планировании |
|
|
65
|
-
|
|
66
|
-
<!-- РАСШИРЕНИЕ: добавляй новые паттерны и фреймворки ниже -->
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# Структура отчётов и извлечение данных
|
|
2
|
-
|
|
3
|
-
Описание типовой структуры отчётов workflow-ai и правила извлечения данных из них.
|
|
4
|
-
|
|
5
|
-
## Типовая структура отчёта
|
|
6
|
-
|
|
7
|
-
Отчёты находятся в `.workflow/reports/` и содержат:
|
|
8
|
-
|
|
9
|
-
| Секция | Что извлекать |
|
|
10
|
-
|--------|--------------|
|
|
11
|
-
| **Frontmatter** | ID, дата, связанный план, период |
|
|
12
|
-
| **Выполненные задачи** | Список завершённых тикетов, результаты |
|
|
13
|
-
| **Проблемы** | Заблокированные задачи, ошибки, отклонения |
|
|
14
|
-
| **Статистика** | Количественные данные: done/total, время |
|
|
15
|
-
| **Рекомендации** | Выводы предыдущего анализа (если есть) |
|
|
16
|
-
|
|
17
|
-
## Извлечение данных из тикетов
|
|
18
|
-
|
|
19
|
-
### Из завершённых тикетов (done/)
|
|
20
|
-
|
|
21
|
-
| Поле | Где искать | Зачем |
|
|
22
|
-
|------|-----------|-------|
|
|
23
|
-
| `id` | Frontmatter | Идентификация |
|
|
24
|
-
| `complexity` | Frontmatter | Weighted completion |
|
|
25
|
-
| `created_at` / `completed_at` | Frontmatter | Время выполнения |
|
|
26
|
-
| **Result** | Секция `## Result` | Что реально сделано |
|
|
27
|
-
| **DoD** | Секция критериев | Все ли выполнены |
|
|
28
|
-
| **Ревью** | Секция `## Ревью` | Прошёл ли с первого раза |
|
|
29
|
-
|
|
30
|
-
### Из заблокированных тикетов (blocked/)
|
|
31
|
-
|
|
32
|
-
| Поле | Зачем |
|
|
33
|
-
|------|-------|
|
|
34
|
-
| `id`, `title` | Идентификация |
|
|
35
|
-
| `dependencies` | Что блокирует |
|
|
36
|
-
| Причина блокировки | Для рекомендаций по разблокировке |
|
|
37
|
-
|
|
38
|
-
### Из тикетов в работе (in-progress/)
|
|
39
|
-
|
|
40
|
-
| Поле | Зачем |
|
|
41
|
-
|------|-------|
|
|
42
|
-
| `id`, `title` | Текущая работа |
|
|
43
|
-
| `created_at` | Как давно в работе |
|
|
44
|
-
|
|
45
|
-
## Извлечение данных из планов
|
|
46
|
-
|
|
47
|
-
| Секция плана | Что извлекать |
|
|
48
|
-
|-------------|--------------|
|
|
49
|
-
| **Цели** | Ожидаемые результаты для сравнения |
|
|
50
|
-
| **Задачи** | Полный список для подсчёта покрытия |
|
|
51
|
-
| **Приоритеты** | Для оценки порядка выполнения |
|
|
52
|
-
| **Риски** | Для проверки — сработали ли |
|
|
53
|
-
|
|
54
|
-
## Правила работы с данными
|
|
55
|
-
|
|
56
|
-
- **Считай только то, что есть** — не экстраполируй, не предполагай
|
|
57
|
-
- **Указывай источник** — для каждой метрики укажи откуда взяты данные
|
|
58
|
-
- **Отмечай пробелы** — если данных не хватает для вывода, явно укажи
|
|
59
|
-
- **Разделяй факты и выводы** — сначала данные, потом интерпретация
|
|
60
|
-
|
|
61
|
-
<!-- РАСШИРЕНИЕ: обновляй при изменении структуры отчётов -->
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* calc-plan-metrics.js — аналитические метрики плана для analyze-report.
|
|
5
|
-
*
|
|
6
|
-
* Рассчитывает:
|
|
7
|
-
* 1. Distribution by status
|
|
8
|
-
* 2. Completion %
|
|
9
|
-
* 3. Avg time-to-done
|
|
10
|
-
* 4. Blocked rate
|
|
11
|
-
* 5. Rework count
|
|
12
|
-
*
|
|
13
|
-
* Использование:
|
|
14
|
-
* node calc-plan-metrics.js <PLAN-NNN>
|
|
15
|
-
*
|
|
16
|
-
* Вывод: JSON через маркеры ---RESULT---
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import fs from 'fs';
|
|
20
|
-
import path from 'path';
|
|
21
|
-
import { findProjectRoot } from 'workflow-ai/lib/find-root.mjs';
|
|
22
|
-
import { parseFrontmatter } from 'workflow-ai/lib/utils.mjs';
|
|
23
|
-
import { createLogger } from 'workflow-ai/lib/logger.mjs';
|
|
24
|
-
|
|
25
|
-
const logger = createLogger();
|
|
26
|
-
|
|
27
|
-
const PROJECT_DIR = findProjectRoot();
|
|
28
|
-
const TICKETS_DIR = path.join(PROJECT_DIR, '.workflow', 'tickets');
|
|
29
|
-
const PLANS_DIR = path.join(PROJECT_DIR, '.workflow', 'plans', 'current');
|
|
30
|
-
const TICKET_DIRS = ['done', 'in-progress', 'blocked', 'ready', 'backlog', 'archive'];
|
|
31
|
-
|
|
32
|
-
function normalizePlanId(raw) {
|
|
33
|
-
if (!raw) return null;
|
|
34
|
-
const basename = path.basename(raw, '.md');
|
|
35
|
-
const full = basename.match(/^plan-(\d+)$/i);
|
|
36
|
-
if (full) return `PLAN-${String(parseInt(full[1], 10)).padStart(3, '0')}`;
|
|
37
|
-
const num = raw.trim().match(/^(\d+)$/);
|
|
38
|
-
if (num) return `PLAN-${String(parseInt(num[1], 10)).padStart(3, '0')}`;
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function collectPlanTickets(planId) {
|
|
43
|
-
const tickets = [];
|
|
44
|
-
const warnings = [];
|
|
45
|
-
|
|
46
|
-
for (const dirName of TICKET_DIRS) {
|
|
47
|
-
const dir = path.join(TICKETS_DIR, dirName);
|
|
48
|
-
if (!fs.existsSync(dir)) continue;
|
|
49
|
-
|
|
50
|
-
const files = fs.readdirSync(dir).filter(f => f.endsWith('.md') && f !== '.gitkeep.md');
|
|
51
|
-
for (const file of files) {
|
|
52
|
-
const filePath = path.join(dir, file);
|
|
53
|
-
let content;
|
|
54
|
-
try {
|
|
55
|
-
content = fs.readFileSync(filePath, 'utf8');
|
|
56
|
-
} catch (e) {
|
|
57
|
-
warnings.push(`Failed to read ${file}: ${e.message}`);
|
|
58
|
-
continue;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
let parsed;
|
|
62
|
-
try {
|
|
63
|
-
parsed = parseFrontmatter(content);
|
|
64
|
-
} catch (e) {
|
|
65
|
-
warnings.push(`Failed to parse frontmatter in ${file}: ${e.message}`);
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const { frontmatter } = parsed;
|
|
70
|
-
if (!frontmatter || typeof frontmatter !== 'object') {
|
|
71
|
-
warnings.push(`Invalid frontmatter in ${file}`);
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const ticketPlanId = normalizePlanId(frontmatter.parent_plan);
|
|
76
|
-
if (ticketPlanId === normalizePlanId(planId)) {
|
|
77
|
-
tickets.push({
|
|
78
|
-
id: frontmatter.id || file.replace('.md', ''),
|
|
79
|
-
title: frontmatter.title || 'Unknown',
|
|
80
|
-
type: frontmatter.type || 'unknown',
|
|
81
|
-
status: dirName,
|
|
82
|
-
created_at: frontmatter.created_at || null,
|
|
83
|
-
updated_at: frontmatter.updated_at || null,
|
|
84
|
-
completed_at: frontmatter.completed_at || null,
|
|
85
|
-
raw: frontmatter,
|
|
86
|
-
body: parsed.body || ''
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return { tickets, warnings };
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function findPlanFile(planId) {
|
|
96
|
-
if (!fs.existsSync(PLANS_DIR)) return null;
|
|
97
|
-
const files = fs.readdirSync(PLANS_DIR).filter(f => f.endsWith('.md'));
|
|
98
|
-
const normalized = normalizePlanId(planId);
|
|
99
|
-
return files.find(f => normalizePlanId(f) === normalized) || null;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function parsePlan(planFileName) {
|
|
103
|
-
if (!planFileName) return null;
|
|
104
|
-
const planPath = path.join(PLANS_DIR, planFileName);
|
|
105
|
-
try {
|
|
106
|
-
const content = fs.readFileSync(planPath, 'utf8');
|
|
107
|
-
const { frontmatter } = parseFrontmatter(content);
|
|
108
|
-
return frontmatter;
|
|
109
|
-
} catch (e) {
|
|
110
|
-
logger.warn(`Failed to parse plan ${planFileName}: ${e.message}`);
|
|
111
|
-
return null;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
function calcDistributionByStatus(tickets) {
|
|
116
|
-
const distribution = {};
|
|
117
|
-
for (const dirName of TICKET_DIRS) {
|
|
118
|
-
const count = tickets.filter(t => t.status === dirName).length;
|
|
119
|
-
if (count > 0) {
|
|
120
|
-
distribution[dirName] = count;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return distribution;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
function calcCompletionPct(tickets) {
|
|
127
|
-
const total = tickets.length;
|
|
128
|
-
const doneCount = tickets.filter(t => t.status === 'done' || t.status === 'archive').length;
|
|
129
|
-
return total > 0 ? Math.round((doneCount / total) * 100 * 100) / 100 : 0;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function calcAvgTimeToDone(tickets) {
|
|
133
|
-
const doneTickets = tickets.filter(t => t.status === 'done' || t.status === 'archive');
|
|
134
|
-
const times = [];
|
|
135
|
-
|
|
136
|
-
for (const ticket of doneTickets) {
|
|
137
|
-
if (ticket.created_at && ticket.completed_at) {
|
|
138
|
-
const created = new Date(ticket.created_at);
|
|
139
|
-
const completed = new Date(ticket.completed_at);
|
|
140
|
-
const diffMs = completed.getTime() - created.getTime();
|
|
141
|
-
const diffDays = diffMs / (1000 * 60 * 60 * 24);
|
|
142
|
-
if (diffDays >= 0) {
|
|
143
|
-
times.push(diffDays);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
if (times.length === 0) {
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const avg = times.reduce((sum, d) => sum + d, 0) / times.length;
|
|
153
|
-
return Math.round(avg * 100) / 100;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
function calcBlockedRate(tickets) {
|
|
157
|
-
const total = tickets.length;
|
|
158
|
-
const blockedCount = tickets.filter(t => t.status === 'blocked').length;
|
|
159
|
-
return total > 0 ? Math.round((blockedCount / total) * 100 * 100) / 100 : 0;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
function calcReworkCount(tickets) {
|
|
163
|
-
let count = 0;
|
|
164
|
-
for (const ticket of tickets) {
|
|
165
|
-
const notes = ticket.raw?.notes || '';
|
|
166
|
-
if (/повторная работа/i.test(notes) || /Повторная/i.test(notes)) {
|
|
167
|
-
count++;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return count;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
async function main() {
|
|
174
|
-
const planIdArg = process.argv[2];
|
|
175
|
-
|
|
176
|
-
if (!planIdArg) {
|
|
177
|
-
console.error('Ошибка: не указан ID плана');
|
|
178
|
-
console.error('Использование: node calc-plan-metrics.js <PLAN-NNN>');
|
|
179
|
-
process.exit(1);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
const planId = normalizePlanId(planIdArg);
|
|
183
|
-
if (!planId) {
|
|
184
|
-
console.error(`Ошибка: невалидный ID плана "${planIdArg}". Ожидается формат PLAN-NNN или число.`);
|
|
185
|
-
process.exit(1);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
logger.info(`Calculating analytics for ${planId}`);
|
|
189
|
-
|
|
190
|
-
const { tickets, warnings } = collectPlanTickets(planId);
|
|
191
|
-
if (tickets.length === 0) {
|
|
192
|
-
logger.warn(`No tickets found for plan ${planId}`);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
const planFileName = findPlanFile(planId);
|
|
196
|
-
const planData = parsePlan(planFileName);
|
|
197
|
-
|
|
198
|
-
const distribution = calcDistributionByStatus(tickets);
|
|
199
|
-
const completionPct = calcCompletionPct(tickets);
|
|
200
|
-
const avgTimeToDone = calcAvgTimeToDone(tickets);
|
|
201
|
-
const blockedRate = calcBlockedRate(tickets);
|
|
202
|
-
const reworkCount = calcReworkCount(tickets);
|
|
203
|
-
|
|
204
|
-
const result = {
|
|
205
|
-
plan_id: planId,
|
|
206
|
-
total_tickets: tickets.length,
|
|
207
|
-
distribution,
|
|
208
|
-
completion_pct: completionPct,
|
|
209
|
-
avg_time_to_done: avgTimeToDone,
|
|
210
|
-
avg_time_to_done_unit: 'days',
|
|
211
|
-
blocked_rate: blockedRate,
|
|
212
|
-
blocked_rate_unit: 'pct',
|
|
213
|
-
rework_count: reworkCount,
|
|
214
|
-
plan_data: planData ? {
|
|
215
|
-
title: planData.title,
|
|
216
|
-
status: planData.status
|
|
217
|
-
} : null,
|
|
218
|
-
warnings: warnings.length > 0 ? warnings : undefined
|
|
219
|
-
};
|
|
220
|
-
|
|
221
|
-
console.log('---RESULT---');
|
|
222
|
-
console.log(JSON.stringify(result, null, 2));
|
|
223
|
-
console.log('---RESULT---');
|
|
224
|
-
|
|
225
|
-
logger.info(`Analytics calculated: ${tickets.length} tickets`);
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
main().catch(err => {
|
|
229
|
-
console.error(`Ошибка: ${err.message}`);
|
|
230
|
-
console.log('---RESULT---');
|
|
231
|
-
console.log(JSON.stringify({ error: err.message }, null, 2));
|
|
232
|
-
console.log('---RESULT---');
|
|
233
|
-
process.exit(1);
|
|
234
|
-
});
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
# Шаблон: Отчёт анализа
|
|
2
|
-
|
|
3
|
-
## Структура отчёта
|
|
4
|
-
|
|
5
|
-
```markdown
|
|
6
|
-
# Анализ: {тип — прогресс / ретроспектива}
|
|
7
|
-
|
|
8
|
-
**Дата анализа:** {YYYY-MM-DD}
|
|
9
|
-
**Анализируемый план:** {ID плана}
|
|
10
|
-
**Анализируемый отчёт:** {ID отчёта, если есть}
|
|
11
|
-
**Тип анализа:** {PROGRESS / RETROSPECTIVE}
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Executive Summary
|
|
16
|
-
|
|
17
|
-
{3-5 предложений: общий статус, ключевые находки, главная рекомендация}
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## Метрики
|
|
22
|
-
|
|
23
|
-
| Метрика | Значение | Статус |
|
|
24
|
-
|---------|----------|--------|
|
|
25
|
-
| Completion Rate | {X}% | {🟢/🟡/🟠/🔴} |
|
|
26
|
-
| Weighted Completion | {X}% | {🟢/🟡/🟠/🔴} |
|
|
27
|
-
| First-Pass Rate | {X}% | {🟢/🟡/🟠/🔴} |
|
|
28
|
-
| Block Rate | {X}% | {🟢/🟡/🟠/🔴} |
|
|
29
|
-
| Тренд | {📈/➡️/📉} | — |
|
|
30
|
-
|
|
31
|
-
## Распределение задач
|
|
32
|
-
|
|
33
|
-
| Статус | Количество | % |
|
|
34
|
-
|--------|-----------|---|
|
|
35
|
-
| Done | {N} | {X}% |
|
|
36
|
-
| In Progress | {N} | {X}% |
|
|
37
|
-
| Ready | {N} | {X}% |
|
|
38
|
-
| Blocked | {N} | {X}% |
|
|
39
|
-
| Backlog | {N} | {X}% |
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
## Ключевые находки
|
|
44
|
-
|
|
45
|
-
### 1. {Находка}
|
|
46
|
-
**Уверенность:** [HIGH/MEDIUM/LOW]
|
|
47
|
-
**Данные:** {конкретные данные из отчёта/тикетов}
|
|
48
|
-
|
|
49
|
-
### 2. {Находка}
|
|
50
|
-
...
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## Проблемы и риски
|
|
55
|
-
|
|
56
|
-
| # | Проблема | Серьёзность | Данные | Рекомендация |
|
|
57
|
-
|---|---------|-------------|--------|-------------|
|
|
58
|
-
| 1 | {описание} | {CRITICAL/HIGH/MEDIUM/LOW} | {факты} | {действие} |
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## Рекомендации
|
|
63
|
-
|
|
64
|
-
| # | Действие | Приоритет | Почему | Ожидаемый результат |
|
|
65
|
-
|---|---------|-----------|--------|-------------------|
|
|
66
|
-
| 1 | {что сделать} | {CRITICAL/HIGH/MEDIUM/LOW} | {причина} | {результат} |
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
## За пределами скоупа
|
|
71
|
-
|
|
72
|
-
{Находки, не входящие в скоуп анализа, но потенциально полезные}
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## Решение
|
|
77
|
-
|
|
78
|
-
**Статус плана:** {ON_TRACK / ATTENTION / AT_RISK / CRITICAL}
|
|
79
|
-
**Рекомендуемое действие:** {продолжить / скорректировать / эскалировать}
|
|
80
|
-
```
|