workflow-ai 1.0.62 → 1.0.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -0
- package/agent-templates/CLAUDE.md.tpl +2 -0
- package/agent-templates/QWEN.md.tpl +2 -0
- package/configs/config.yaml +134 -0
- package/configs/pipeline.yaml +884 -0
- package/configs/ticket-movement-rules.yaml +80 -0
- package/package.json +2 -1
- package/src/global-dir.mjs +25 -1
- package/src/init.mjs +5 -4
- package/src/lib/agent-spawner.mjs +338 -0
- package/src/runner.mjs +15 -14
- package/src/scripts/get-next-test-id.js +94 -0
- package/src/scripts/migrate-backlog-to-tests.js +406 -0
- package/src/scripts/run-skill-tests.js +1703 -0
- package/src/scripts/scan-fixtures-for-secrets.js +248 -0
- package/src/scripts/tests/timeout-cascade.test.js +28 -0
- 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
- package/templates/plan-template.md +1 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* calc-plan-metrics.js — аналитические метрики плана для analyze-report.
|
|
5
|
+
*
|
|
6
|
+
* Рассчитывает:
|
|
7
|
+
* 1. Distribution by status
|
|
8
|
+
* 2. Completion %
|
|
9
|
+
* 3. Avg time-to-done
|
|
10
|
+
* 4. Blocked rate
|
|
11
|
+
* 5. Rework count
|
|
12
|
+
*
|
|
13
|
+
* Использование:
|
|
14
|
+
* node calc-plan-metrics.js <PLAN-NNN>
|
|
15
|
+
*
|
|
16
|
+
* Вывод: JSON через маркеры ---RESULT---
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import fs from 'fs';
|
|
20
|
+
import path from 'path';
|
|
21
|
+
import { findProjectRoot } from 'workflow-ai/lib/find-root.mjs';
|
|
22
|
+
import { parseFrontmatter } from 'workflow-ai/lib/utils.mjs';
|
|
23
|
+
import { createLogger } from 'workflow-ai/lib/logger.mjs';
|
|
24
|
+
|
|
25
|
+
const logger = createLogger();
|
|
26
|
+
|
|
27
|
+
const PROJECT_DIR = findProjectRoot();
|
|
28
|
+
const TICKETS_DIR = path.join(PROJECT_DIR, '.workflow', 'tickets');
|
|
29
|
+
const PLANS_DIR = path.join(PROJECT_DIR, '.workflow', 'plans', 'current');
|
|
30
|
+
const TICKET_DIRS = ['done', 'in-progress', 'blocked', 'ready', 'backlog', 'archive'];
|
|
31
|
+
|
|
32
|
+
function normalizePlanId(raw) {
|
|
33
|
+
if (!raw) return null;
|
|
34
|
+
const basename = path.basename(raw, '.md');
|
|
35
|
+
const full = basename.match(/^plan-(\d+)$/i);
|
|
36
|
+
if (full) return `PLAN-${String(parseInt(full[1], 10)).padStart(3, '0')}`;
|
|
37
|
+
const num = raw.trim().match(/^(\d+)$/);
|
|
38
|
+
if (num) return `PLAN-${String(parseInt(num[1], 10)).padStart(3, '0')}`;
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function collectPlanTickets(planId) {
|
|
43
|
+
const tickets = [];
|
|
44
|
+
const warnings = [];
|
|
45
|
+
|
|
46
|
+
for (const dirName of TICKET_DIRS) {
|
|
47
|
+
const dir = path.join(TICKETS_DIR, dirName);
|
|
48
|
+
if (!fs.existsSync(dir)) continue;
|
|
49
|
+
|
|
50
|
+
const files = fs.readdirSync(dir).filter(f => f.endsWith('.md') && f !== '.gitkeep.md');
|
|
51
|
+
for (const file of files) {
|
|
52
|
+
const filePath = path.join(dir, file);
|
|
53
|
+
let content;
|
|
54
|
+
try {
|
|
55
|
+
content = fs.readFileSync(filePath, 'utf8');
|
|
56
|
+
} catch (e) {
|
|
57
|
+
warnings.push(`Failed to read ${file}: ${e.message}`);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
let parsed;
|
|
62
|
+
try {
|
|
63
|
+
parsed = parseFrontmatter(content);
|
|
64
|
+
} catch (e) {
|
|
65
|
+
warnings.push(`Failed to parse frontmatter in ${file}: ${e.message}`);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const { frontmatter } = parsed;
|
|
70
|
+
if (!frontmatter || typeof frontmatter !== 'object') {
|
|
71
|
+
warnings.push(`Invalid frontmatter in ${file}`);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const ticketPlanId = normalizePlanId(frontmatter.parent_plan);
|
|
76
|
+
if (ticketPlanId === normalizePlanId(planId)) {
|
|
77
|
+
tickets.push({
|
|
78
|
+
id: frontmatter.id || file.replace('.md', ''),
|
|
79
|
+
title: frontmatter.title || 'Unknown',
|
|
80
|
+
type: frontmatter.type || 'unknown',
|
|
81
|
+
status: dirName,
|
|
82
|
+
created_at: frontmatter.created_at || null,
|
|
83
|
+
updated_at: frontmatter.updated_at || null,
|
|
84
|
+
completed_at: frontmatter.completed_at || null,
|
|
85
|
+
raw: frontmatter,
|
|
86
|
+
body: parsed.body || ''
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return { tickets, warnings };
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function findPlanFile(planId) {
|
|
96
|
+
if (!fs.existsSync(PLANS_DIR)) return null;
|
|
97
|
+
const files = fs.readdirSync(PLANS_DIR).filter(f => f.endsWith('.md'));
|
|
98
|
+
const normalized = normalizePlanId(planId);
|
|
99
|
+
return files.find(f => normalizePlanId(f) === normalized) || null;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function parsePlan(planFileName) {
|
|
103
|
+
if (!planFileName) return null;
|
|
104
|
+
const planPath = path.join(PLANS_DIR, planFileName);
|
|
105
|
+
try {
|
|
106
|
+
const content = fs.readFileSync(planPath, 'utf8');
|
|
107
|
+
const { frontmatter } = parseFrontmatter(content);
|
|
108
|
+
return frontmatter;
|
|
109
|
+
} catch (e) {
|
|
110
|
+
logger.warn(`Failed to parse plan ${planFileName}: ${e.message}`);
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function calcDistributionByStatus(tickets) {
|
|
116
|
+
const distribution = {};
|
|
117
|
+
for (const dirName of TICKET_DIRS) {
|
|
118
|
+
const count = tickets.filter(t => t.status === dirName).length;
|
|
119
|
+
if (count > 0) {
|
|
120
|
+
distribution[dirName] = count;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return distribution;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function calcCompletionPct(tickets) {
|
|
127
|
+
const total = tickets.length;
|
|
128
|
+
const doneCount = tickets.filter(t => t.status === 'done' || t.status === 'archive').length;
|
|
129
|
+
return total > 0 ? Math.round((doneCount / total) * 100 * 100) / 100 : 0;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function calcAvgTimeToDone(tickets) {
|
|
133
|
+
const doneTickets = tickets.filter(t => t.status === 'done' || t.status === 'archive');
|
|
134
|
+
const times = [];
|
|
135
|
+
|
|
136
|
+
for (const ticket of doneTickets) {
|
|
137
|
+
if (ticket.created_at && ticket.completed_at) {
|
|
138
|
+
const created = new Date(ticket.created_at);
|
|
139
|
+
const completed = new Date(ticket.completed_at);
|
|
140
|
+
const diffMs = completed.getTime() - created.getTime();
|
|
141
|
+
const diffDays = diffMs / (1000 * 60 * 60 * 24);
|
|
142
|
+
if (diffDays >= 0) {
|
|
143
|
+
times.push(diffDays);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (times.length === 0) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const avg = times.reduce((sum, d) => sum + d, 0) / times.length;
|
|
153
|
+
return Math.round(avg * 100) / 100;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function calcBlockedRate(tickets) {
|
|
157
|
+
const total = tickets.length;
|
|
158
|
+
const blockedCount = tickets.filter(t => t.status === 'blocked').length;
|
|
159
|
+
return total > 0 ? Math.round((blockedCount / total) * 100 * 100) / 100 : 0;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function calcReworkCount(tickets) {
|
|
163
|
+
let count = 0;
|
|
164
|
+
for (const ticket of tickets) {
|
|
165
|
+
const notes = ticket.raw?.notes || '';
|
|
166
|
+
if (/повторная работа/i.test(notes) || /Повторная/i.test(notes)) {
|
|
167
|
+
count++;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return count;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
async function main() {
|
|
174
|
+
const planIdArg = process.argv[2];
|
|
175
|
+
|
|
176
|
+
if (!planIdArg) {
|
|
177
|
+
console.error('Ошибка: не указан ID плана');
|
|
178
|
+
console.error('Использование: node calc-plan-metrics.js <PLAN-NNN>');
|
|
179
|
+
process.exit(1);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const planId = normalizePlanId(planIdArg);
|
|
183
|
+
if (!planId) {
|
|
184
|
+
console.error(`Ошибка: невалидный ID плана "${planIdArg}". Ожидается формат PLAN-NNN или число.`);
|
|
185
|
+
process.exit(1);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
logger.info(`Calculating analytics for ${planId}`);
|
|
189
|
+
|
|
190
|
+
const { tickets, warnings } = collectPlanTickets(planId);
|
|
191
|
+
if (tickets.length === 0) {
|
|
192
|
+
logger.warn(`No tickets found for plan ${planId}`);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const planFileName = findPlanFile(planId);
|
|
196
|
+
const planData = parsePlan(planFileName);
|
|
197
|
+
|
|
198
|
+
const distribution = calcDistributionByStatus(tickets);
|
|
199
|
+
const completionPct = calcCompletionPct(tickets);
|
|
200
|
+
const avgTimeToDone = calcAvgTimeToDone(tickets);
|
|
201
|
+
const blockedRate = calcBlockedRate(tickets);
|
|
202
|
+
const reworkCount = calcReworkCount(tickets);
|
|
203
|
+
|
|
204
|
+
const result = {
|
|
205
|
+
plan_id: planId,
|
|
206
|
+
total_tickets: tickets.length,
|
|
207
|
+
distribution,
|
|
208
|
+
completion_pct: completionPct,
|
|
209
|
+
avg_time_to_done: avgTimeToDone,
|
|
210
|
+
avg_time_to_done_unit: 'days',
|
|
211
|
+
blocked_rate: blockedRate,
|
|
212
|
+
blocked_rate_unit: 'pct',
|
|
213
|
+
rework_count: reworkCount,
|
|
214
|
+
plan_data: planData ? {
|
|
215
|
+
title: planData.title,
|
|
216
|
+
status: planData.status
|
|
217
|
+
} : null,
|
|
218
|
+
warnings: warnings.length > 0 ? warnings : undefined
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
console.log('---RESULT---');
|
|
222
|
+
console.log(JSON.stringify(result, null, 2));
|
|
223
|
+
console.log('---RESULT---');
|
|
224
|
+
|
|
225
|
+
logger.info(`Analytics calculated: ${tickets.length} tickets`);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
main().catch(err => {
|
|
229
|
+
console.error(`Ошибка: ${err.message}`);
|
|
230
|
+
console.log('---RESULT---');
|
|
231
|
+
console.log(JSON.stringify({ error: err.message }, null, 2));
|
|
232
|
+
console.log('---RESULT---');
|
|
233
|
+
process.exit(1);
|
|
234
|
+
});
|
|
@@ -0,0 +1,80 @@
|
|
|
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
|
+
```
|
package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-1.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
## Анализ прогресса PLAN-001 — Верификация атрибуции QA-001
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Executive Summary
|
|
6
|
+
|
|
7
|
+
Проведена верификация finding из REPORT-002 по логу пайплайна итерации от 2026-04-06. Root cause пропуска тикета QA-001 в REPORT-002 атрибутирован ошибочно: указан `check-conditions.js`, тогда как лог однозначно показывает, что `check-conditions` завершился с `conditions_ok`. Решение о пропуске приняла стадия `check-relevance` (Step 314, `decision=irrelevant`, `reason=dependencies_inactive`). Помимо некорректной атрибуции, лог выявляет внутреннее противоречие между показаниями двух стейджей по зависимостям — это самостоятельная проблема, требующая внимания.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Верификация по логу — пошаговая
|
|
12
|
+
|
|
13
|
+
| Step | Стейдж | Компонент | Результат по логу | Вывод REPORT-002 |
|
|
14
|
+
|------|--------|-----------|-------------------|-----------------|
|
|
15
|
+
| 312 | `pick-next-task` | `script-pick` | QA-001 выбран, `status=ready` | — |
|
|
16
|
+
| 313 | `check-conditions` | `check-conditions.js` | `conditions_ok` (dependencies.resolved: **true**, prerequisites.met: true, blocking_tickets: []) | ❌ атрибутирован как root cause |
|
|
17
|
+
| 314 | `check-relevance` | `check-relevance.js` | `irrelevant`, `reason=dependencies_inactive` | ❌ не упомянут |
|
|
18
|
+
| 315 | `skip-ticket` | `script-skip` | QA-001 → skipped, reason из check-relevance: `dependencies_inactive` | — |
|
|
19
|
+
|
|
20
|
+
**Вывод `[HIGH]`:** `check-conditions.js` на Step 313 явно вернул `conditions_ok` и не является причиной пропуска. Решение о `skip` принято исключительно стейджем `check-relevance` на Step 314.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Findings
|
|
25
|
+
|
|
26
|
+
### Finding 1 — Некорректная атрибуция root cause в REPORT-002 `[HIGH]`
|
|
27
|
+
|
|
28
|
+
**Факт:** REPORT-002 указывает `check-conditions.js` как компонент, передавший тикет дальше без обработки. Лог опровергает это: Step 313 завершён со статусом `conditions_ok`, все три проверки условий пройдены.
|
|
29
|
+
|
|
30
|
+
**Корректная атрибуция:** `check-relevance.js` (Step 314) — именно этот скрипт принял решение `decision=irrelevant` и выставил `reason=dependencies_inactive`, что и повлекло переход к `skip-ticket`.
|
|
31
|
+
|
|
32
|
+
**Некорректная рекомендация в REPORT-002:** «Пересмотреть пороги `check-conditions.js`» — не релевантна, так как этот компонент отработал корректно.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
### Finding 2 — Внутреннее противоречие между стейджами по зависимостям `[HIGH]`
|
|
37
|
+
|
|
38
|
+
**Факт:** Два стейджа дают взаимоисключающие данные о зависимостях QA-001:
|
|
39
|
+
|
|
40
|
+
| Стейдж | Поле | Значение |
|
|
41
|
+
|--------|------|----------|
|
|
42
|
+
| `check-conditions` (Step 313) | `dependencies.resolved` | `true` |
|
|
43
|
+
| `check-relevance` (Step 314) | `dependencies.status` | `inactive` |
|
|
44
|
+
|
|
45
|
+
**Интерпретация `[MEDIUM]`:** Вероятно, стейджи проверяют разные аспекты зависимостей — `check-conditions` проверяет блокирующие тикеты (есть ли незакрытые зависимости в трекере), `check-relevance` проверяет активность зависимых фич/компонентов в продукте. Это семантически разные проверки, но их терминология пересекается и создаёт риск будущих ошибок атрибуции.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Скорректированные рекомендации
|
|
50
|
+
|
|
51
|
+
| # | Действие | Приоритет | Обоснование | Ожидаемый результат |
|
|
52
|
+
|---|----------|-----------|-------------|---------------------|
|
|
53
|
+
| 1 | Исправить root cause в REPORT-002: заменить `check-conditions.js` на `check-relevance.js` | HIGH | Лог Step 313 доказывает, что `check-conditions` вернул `conditions_ok` | Корректная история инцидента, правильный вектор исправления |
|
|
54
|
+
| 2 | Изучить логику `check-relevance.js`: почему `dependencies.status=inactive` при `dependencies.resolved=true` | HIGH | Противоречие между стейджами может скрывать баг или неконсистентное определение «зависимости» | Понимание реального сбоя, устранение потенциального источника ложных пропусков |
|
|
55
|
+
| 3 | Переименовать поля: `check-conditions` → `blocking_deps_resolved`, `check-relevance` → `feature_deps_active` | MEDIUM | Текущая терминология (`dependencies.*`) в обоих стейджах неотличима при анализе логов | Снижение риска ошибок атрибуции в будущих отчётах |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## За пределами скоупа
|
|
60
|
+
|
|
61
|
+
Остальные 5 тикетов итерации упомянуты в REPORT-002 без деталей — их статусы не верифицировались в рамках данного анализа (лог содержит только шаги 312–315).
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
---RESULT---
|
|
66
|
+
status: has_gaps
|
|
67
|
+
report_id: REPORT-002
|
|
68
|
+
gaps: "Некорректная атрибуция root cause QA-001 (check-conditions.js вместо check-relevance.js); внутреннее противоречие между стейджами по статусу зависимостей требует расследования check-relevance.js."
|
|
69
|
+
---RESULT---
|
package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-2.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
## Анализ прогресса PLAN-001 — Верификация атрибуции QA-001
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Executive Summary
|
|
6
|
+
|
|
7
|
+
Отчёт REPORT-002 содержит **некорректную атрибуцию root cause** для пропуска тикета QA-001. По данным лога пайплайна, стейдж `check-conditions` (файл `check-conditions.js`) отработал корректно и вернул `conditions_ok`. Решение о пропуске принял следующий стейдж — `check-relevance` (`check-relevance.js`), выставив статус `irrelevant` по причине `dependencies_inactive`. Рекомендация из REPORT-002 направлена на исправление не того компонента, что делает её недействительной и потенциально опасной.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Верификация findings по логу пайплайна
|
|
12
|
+
|
|
13
|
+
### Трассировка шагов QA-001
|
|
14
|
+
|
|
15
|
+
| Step | Стейдж | Скрипт | Результат | Верификация |
|
|
16
|
+
|------|--------|--------|-----------|-------------|
|
|
17
|
+
| 312 | `pick-next-task` | `script-pick` | ticket=QA-001, status=picked | ✅ Лог строка 4: `Selected ticket: QA-001 (plan PLAN-001, status=ready)` |
|
|
18
|
+
| 313 | `check-conditions` | `check-conditions.js` | `conditions_ok` | ✅ Лог строки 13–18: все три проверки прошли, result=conditions_ok |
|
|
19
|
+
| 314 | `check-relevance` | `check-relevance.js` | `irrelevant`, reason=`dependencies_inactive` | ✅ Лог строка 29: `COMPLETE ... status="irrelevant" reason="dependencies_inactive"` |
|
|
20
|
+
| 315 | `skip-ticket` | `script-skip` | QA-001 → skipped/ | ✅ Лог строка 31: `Moving QA-001 → skipped/ (reason from check-relevance: dependencies_inactive)` |
|
|
21
|
+
|
|
22
|
+
### Детальный анализ стейджа check-conditions (Step 313)
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
[check-conditions] dependencies.resolved: true ← зависимости разрешены
|
|
26
|
+
[check-conditions] prerequisites.met: true ← предусловия выполнены
|
|
27
|
+
[check-conditions] blocking_tickets: [] ← блокеров нет
|
|
28
|
+
[check-conditions] Result: conditions_ok
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Вывод `[HIGH]`:** `check-conditions.js` принял корректное решение. Атрибуция root cause в REPORT-002 на этот компонент — **ошибочна**.
|
|
32
|
+
|
|
33
|
+
### Детальный анализ стейджа check-relevance (Step 314)
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
[check-relevance] dependencies.status: inactive
|
|
37
|
+
[check-relevance] decision: irrelevant (dependencies inactive)
|
|
38
|
+
[check-relevance] COMPLETE status="irrelevant" reason="dependencies_inactive"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Вывод `[HIGH]`:** Именно `check-relevance.js` принял решение о нерелевантности тикета. Причина — `dependencies.status: inactive`, тогда как на предыдущем стейдже `check-conditions` те же зависимости были оценены как `resolved: true`.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Корневая причина (скорректированная)
|
|
46
|
+
|
|
47
|
+
### Противоречие между стейджами `[HIGH]`
|
|
48
|
+
|
|
49
|
+
| Стейдж | Компонент | Оценка зависимостей | Решение |
|
|
50
|
+
|--------|-----------|---------------------|---------|
|
|
51
|
+
| `check-conditions` (Step 313) | `check-conditions.js` | `dependencies.resolved: true` | `conditions_ok` — пропускает дальше |
|
|
52
|
+
| `check-relevance` (Step 314) | `check-relevance.js` | `dependencies.status: inactive` | `irrelevant` → skip |
|
|
53
|
+
|
|
54
|
+
Два стейджа оценивают зависимости одного и того же тикета QA-001 **противоположно**: один видит их как resolved, другой — как inactive. Это указывает на одну из следующих причин:
|
|
55
|
+
|
|
56
|
+
1. **`[MEDIUM]`** `check-relevance.js` использует иной источник данных или иную семантику поля `dependencies` — без доступа к исходному коду не верифицируемо.
|
|
57
|
+
2. **`[MEDIUM]`** Между стейджами 313 и 314 произошло изменение состояния зависимостей — маловероятно при timestamps с разницей < 1 секунды.
|
|
58
|
+
3. **`[LOW]`** Оба стейджа смотрят на один источник, но интерпретируют разные поля (`resolved` vs `status`) — логическая несогласованность в дизайне.
|
|
59
|
+
|
|
60
|
+
**Реальный root cause:** `check-relevance.js` — единственный компонент, принявший решение о пропуске QA-001.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Findings: исправленная атрибуция
|
|
65
|
+
|
|
66
|
+
### Finding 1 — Некорректный skip QA-001
|
|
67
|
+
|
|
68
|
+
- **Статус в итерации:** skipped
|
|
69
|
+
- **Root cause (REPORT-002):** `check-conditions.js` — **НЕВЕРНО** `[HIGH]`
|
|
70
|
+
- **Root cause (скорректированный):** `check-relevance.js` — стейдж вернул `irrelevant` с reason=`dependencies_inactive`, несмотря на то что `check-conditions` подтвердил `conditions_ok` `[HIGH]`
|
|
71
|
+
- **Затронутый компонент:** `.workflow/src/scripts/check-relevance.js`
|
|
72
|
+
- **Приоритет:** HIGH
|
|
73
|
+
|
|
74
|
+
### Finding 2 — Противоречивая семантика зависимостей между стейджами
|
|
75
|
+
|
|
76
|
+
- **Описание:** `check-conditions.js` и `check-relevance.js` используют несогласованные метрики/источники для оценки зависимостей одного тикета `[MEDIUM]`
|
|
77
|
+
- **Риск:** любой тикет с «частично разрешёнными» зависимостями может быть ошибочно пропущен
|
|
78
|
+
- **Приоритет:** HIGH
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Рекомендации
|
|
83
|
+
|
|
84
|
+
| # | Действие | Компонент | Приоритет | Ожидаемый результат |
|
|
85
|
+
|---|----------|-----------|-----------|---------------------|
|
|
86
|
+
| 1 | Исправить логику оценки зависимостей в `check-relevance.js`: привести семантику `dependencies.status` в соответствие с `check-conditions.js` | `check-relevance.js` | **HIGH** | Устранение ложных срабатываний `irrelevant` при корректных зависимостях |
|
|
87
|
+
| 2 | Добавить cross-check: если `check-conditions` вернул `conditions_ok`, `check-relevance` не должен принимать решение на основе `dependencies` без явного изменения их состояния | Архитектура пайплайна | **HIGH** | Устранение класса противоречий между стейджами |
|
|
88
|
+
| 3 | Отозвать рекомендацию из REPORT-002 («пересмотреть пороги `check-conditions.js`») — она основана на ошибочной атрибуции и может привести к регрессии | REPORT-002 | **MEDIUM** | Предотвращение ненужных изменений в корректно работающем компоненте |
|
|
89
|
+
| 4 | Добавить интеграционный тест: сценарий, где `check-conditions` → `conditions_ok`, а `check-relevance` → `irrelevant`, должен логировать предупреждение или требовать явного объяснения | Тест-сьют | **MEDIUM** | Детектирование аналогичных противоречий в будущих итерациях |
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## За пределами скоупа
|
|
94
|
+
|
|
95
|
+
Остальные 4 тикета итерации не анализировались — данных по ним в предоставленных артефактах нет.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
---RESULT---
|
|
100
|
+
status: has_gaps
|
|
101
|
+
report_id: REPORT-002
|
|
102
|
+
gaps: "Некорректная атрибуция root cause в REPORT-002: `check-conditions.js` не причастен к пропуску QA-001 — решение принял `check-relevance.js` (reason=dependencies_inactive). Рекомендация из REPORT-002 направлена на неверный компонент; требуется исправление `check-relevance.js` и согласование семантики зависимостей между стейджами."
|
|
103
|
+
---RESULT---
|
package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-3.md
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
## Анализ прогресса PLAN-001 — Верификация атрибуции QA-001
|
|
2
|
+
|
|
3
|
+
**Дата анализа:** 2026-04-20
|
|
4
|
+
**Источники:** REPORT-002-incorrect-attribution.md, pipeline-2026-04-06_qa-001-skip.log
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Executive Summary
|
|
9
|
+
|
|
10
|
+
Верификация по логу пайплайна показала, что root cause в REPORT-002 атрибутирован **некорректно**. Стейдж `check-conditions` (шаг 313) вернул `conditions_ok` — QA-001 прошёл все проверки условий. Решение о skip принял стейдж `check-relevance` (шаг 314, строка с `decision=irrelevant, reason=dependencies_inactive`). REPORT-002 содержит ошибочное указание на `check-conditions.js` как источник проблемы, что ведёт к некорректной рекомендации. QA-001 остаётся невыполненным — план имеет пробел.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Верификация findings по логу
|
|
15
|
+
|
|
16
|
+
### Трассировка обработки QA-001
|
|
17
|
+
|
|
18
|
+
| Шаг | Стейдж | Компонент | Результат | Атрибуция проблемы |
|
|
19
|
+
|-----|--------|-----------|-----------|-------------------|
|
|
20
|
+
| 312 | `pick-next-task` | `script-pick` | `status=picked` — QA-001 выбран | — |
|
|
21
|
+
| 313 | `check-conditions` | `check-conditions.js` | `conditions_ok` — все условия пройдены | ❌ **Ложная атрибуция в REPORT-002** |
|
|
22
|
+
| 314 | `check-relevance` | `check-relevance.js` | `status=irrelevant`, `reason=dependencies_inactive` | ✅ **Реальный источник skip** |
|
|
23
|
+
| 315 | `skip-ticket` | `script-skip` | QA-001 → skipped/, причина из `check-relevance` | Следствие шага 314 |
|
|
24
|
+
|
|
25
|
+
### Детали шага 313 — `check-conditions` (лог)
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
- dependencies.resolved: true
|
|
29
|
+
- prerequisites.met: true
|
|
30
|
+
- blocking_tickets: []
|
|
31
|
+
Result: conditions_ok
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Вывод [HIGH]:** `check-conditions.js` выполнил проверку корректно. Зависимости резолвлены, пререквизиты выполнены, блокирующих тикетов нет. Компонент не является источником проблемы.
|
|
35
|
+
|
|
36
|
+
### Детали шага 314 — `check-relevance` (лог)
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
- dependencies.status: inactive
|
|
40
|
+
- decision: irrelevant (dependencies inactive)
|
|
41
|
+
COMPLETE status="irrelevant" reason="dependencies_inactive"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Вывод [HIGH]:** Стейдж `check-relevance` получил `dependencies.status: inactive` и принял решение `irrelevant`, инициировав skip. Это противоречит результату шага 313, где `dependencies.resolved: true`.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Ключевые находки
|
|
49
|
+
|
|
50
|
+
### F1 — Некорректная атрибуция root cause в REPORT-002 [HIGH]
|
|
51
|
+
|
|
52
|
+
- **Факт:** REPORT-002 указывает `check-conditions.js` как причину skip QA-001
|
|
53
|
+
- **Опровержение по логу:** `check-conditions.js` вернул `conditions_ok` на шаге 313
|
|
54
|
+
- **Реальная причина:** `check-relevance.js` на шаге 314 вернул `irrelevant` по `dependencies_inactive`
|
|
55
|
+
- **Следствие:** Рекомендация из REPORT-002 («пересмотреть пороги `check-conditions.js`») — **неверная**; применение этой рекомендации не устранит проблему
|
|
56
|
+
|
|
57
|
+
### F2 — Противоречие между `check-conditions` и `check-relevance` [HIGH]
|
|
58
|
+
|
|
59
|
+
- **Факт:** Шаг 313 — `dependencies.resolved: true`; Шаг 314 — `dependencies.status: inactive`
|
|
60
|
+
- **Интерпретация [MEDIUM]:** Два стейджа используют разные источники или разную семантику поля `dependencies`. Либо `check-conditions` проверяет факт наличия зависимостей (есть/нет), а `check-relevance` — их активность (active/inactive). Либо рассинхронизация данных между шагами.
|
|
61
|
+
- **Следствие:** Тикет QA-001 прошёл conditions-проверку, но был отклонён по relevance на основании состояния, которое conditions-проверка не охватывает
|
|
62
|
+
|
|
63
|
+
### F3 — QA-001 не выполнен, план имеет пробел [HIGH]
|
|
64
|
+
|
|
65
|
+
- **Факт:** QA-001 находится в `skipped/`, задача не выполнена
|
|
66
|
+
- **Следствие для PLAN-001:** Итерация закрыта без выполнения QA-001; прогресс по плану неполный
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Скорректированная атрибуция
|
|
71
|
+
|
|
72
|
+
| Компонент | Атрибуция в REPORT-002 | Корректная атрибуция | Обоснование |
|
|
73
|
+
|-----------|----------------------|---------------------|-------------|
|
|
74
|
+
| `check-conditions.js` | Root cause | Не причастен | Вернул `conditions_ok`, шаг 313 |
|
|
75
|
+
| `check-relevance.js` | Не упомянут | **Root cause** | Вернул `irrelevant/dependencies_inactive`, шаг 314 |
|
|
76
|
+
| `skip-ticket` | Не упомянут | Исполнитель skip | Выполнил skip по решению `check-relevance`, шаг 315 |
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Рекомендации
|
|
81
|
+
|
|
82
|
+
| # | Действие | Приоритет | Ожидаемый результат |
|
|
83
|
+
|---|----------|-----------|---------------------|
|
|
84
|
+
| 1 | Исследовать `check-relevance.js`: почему `dependencies.status=inactive` при уже резолвленных `dependencies.resolved=true` | **CRITICAL** | Устранение реальной причины skip QA-001 |
|
|
85
|
+
| 2 | Выявить семантическое расхождение между полями `dependencies.resolved` и `dependencies.status` в двух стейджах | **HIGH** | Устранение потенциальной системной ошибки классификации тикетов |
|
|
86
|
+
| 3 | Переоткрыть QA-001 и выполнить в следующей итерации после устранения причины | **HIGH** | Закрытие пробела в PLAN-001 |
|
|
87
|
+
| 4 | Обновить REPORT-002 с корректной атрибуцией (или создать REPORT-002-corrected) | **MEDIUM** | Устранение ложного следа для будущих ретроспектив |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## За пределами скоупа
|
|
92
|
+
|
|
93
|
+
Лог содержит только итерацию обработки QA-001 (шаги 312–315). Состояние остальных 4 тикетов итерации не верифицировано по логу — данных нет.
|
|
94
|
+
|
|
95
|
+
---RESULT---
|
|
96
|
+
status: has_gaps
|
|
97
|
+
report_id: REPORT-002
|
|
98
|
+
gaps: "QA-001 не выполнен (skipped по некорректной причине в check-relevance.js); root cause атрибуция в REPORT-002 ошибочна — требуется исследование check-relevance.js и переоткрытие QA-001"
|
|
99
|
+
---RESULT---
|