workflow-ai 1.0.64 → 1.0.66
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 +377 -277
- package/configs/agent-health-rules.yaml +75 -0
- package/configs/pipeline.yaml +24 -7
- package/package.json +1 -1
- package/src/init.mjs +20 -3
- package/src/lib/agent-health-registry.mjs +245 -0
- package/src/lib/agent-spawner.mjs +47 -6
- package/src/lib/artifact-snapshot.mjs +233 -0
- package/src/lib/error-classifier.mjs +311 -0
- package/src/lib/test-error-classifier.mjs +60 -0
- package/src/lib/test-extends.mjs +58 -0
- package/src/lib/test-version.mjs +21 -0
- package/src/runner.mjs +215 -58
- package/src/scripts/move-to-review.js +5 -7
- package/src/scripts/reset-agent-health.js +62 -0
- package/src/skills/coach/SKILL.md +1 -0
- package/src/skills/coach/tests/cases/TC-COACH-001/current/meta.json +93 -94
- package/src/skills/coach/tests/cases/TC-COACH-002/current/meta.json +93 -94
- package/src/skills/create-plan/SKILL.md +1 -0
- package/src/skills/create-plan/knowledge/test-hygiene.md +47 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-1.md +23 -31
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-2.md +20 -35
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-3.md +36 -19
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/judge.json +1 -1
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-2.md +11 -5
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-3.md +12 -16
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-1.md +15 -9
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-3.md +15 -14
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-1.md +22 -18
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-2.md +24 -16
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-3.md +13 -20
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/meta.json +2 -2
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-1.md +14 -19
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-2.md +24 -14
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-3.md +20 -19
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/judge.json +16 -17
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-1.md +0 -7
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-2.md +9 -10
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-3.md +5 -5
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-1.md +20 -4
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-2.md +36 -9
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-3.md +9 -6
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-1.md +4 -12
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-2.md +6 -8
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-3.md +8 -4
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/meta.json +10 -11
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-1.md +30 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-2.md +30 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-3.md +30 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/judge.json +165 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-1.md +5 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-2.md +26 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-3.md +5 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-1.md +39 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-2.md +37 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-3.md +45 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-1.md +26 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-2.md +27 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-3.md +7 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/meta.json +117 -0
- package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003-parent-plan-mandatory.yaml +41 -0
- package/src/skills/decompose-gaps/tests/index.yaml +5 -0
- package/src/skills/decompose-gaps/tests/rubrics/parent-plan-mandatory.md +22 -0
- package/src/skills/decompose-gaps/workflows/decompose.md +5 -2
- package/src/skills/decompose-plan/knowledge/atomicity-checklist.md +31 -5
- package/src/skills/decompose-plan/knowledge/capabilities.md +29 -5
- package/src/skills/decompose-plan/knowledge/human-task-rules.md +15 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-1.md +55 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-2.md +49 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-3.md +49 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/judge.json +163 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-1.md +104 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-2.md +45 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-3.md +58 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-1.md +193 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-2.md +202 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-3.md +155 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-1.md +52 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-2.md +17 -0
- 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 +115 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004-executor-atomicity.yaml +64 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-1.md +59 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-2.md +204 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-3.md +213 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/judge.json +163 -0
- 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 +57 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-3.md +54 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-1.md +147 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-2.md +165 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-3.md +133 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-1.md +81 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-2.md +108 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-3.md +3 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/meta.json +114 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005-capabilities-registry.yaml +78 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-1.md +225 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-2.md +66 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-3.md +36 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/judge.json +163 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-1.md +42 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-2.md +67 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-3.md +40 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-1.md +122 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-2.md +131 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-3.md +138 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-1.md +41 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-2.md +88 -0
- 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 +115 -0
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006-dod-threshold.yaml +72 -0
- package/src/skills/decompose-plan/tests/index.yaml +15 -0
- package/src/skills/decompose-plan/tests/rubrics/capabilities-registry.md +21 -0
- package/src/skills/decompose-plan/tests/rubrics/dod-threshold.md +21 -0
- package/src/skills/decompose-plan/tests/rubrics/executor-atomicity.md +21 -0
- package/src/skills/decompose-plan/workflows/decompose.md +38 -5
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/meta.json +87 -88
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/meta.json +87 -88
- package/src/skills/manual-testing/SKILL.md +6 -4
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-1.md +29 -16
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-2.md +21 -54
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-3.md +18 -23
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/judge.json +17 -17
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/meta.json +19 -19
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-1.md +27 -30
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-2.md +16 -23
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-3.md +35 -28
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/judge.json +13 -13
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/meta.json +15 -15
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-1.md +76 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-2.md +71 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-3.md +85 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/judge.json +46 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/meta.json +36 -0
- package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003-qa-non-ui-assertion.yaml +65 -0
- package/src/skills/manual-testing/tests/index.yaml +5 -0
- package/src/skills/manual-testing/tests/rubrics/qa-non-ui-assertion.md +31 -0
- package/src/skills/review-result/SKILL.md +1 -0
- package/src/skills/review-result/knowledge/test-hygiene.md +44 -0
- package/src/skills/review-result/scripts/verify-artifacts.js +157 -14
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-1.md +7 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-2.md +7 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-3.md +7 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/judge.json +163 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-1.md +5 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-2.md +5 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-3.md +11 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-1.md +16 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-2.md +18 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-3.md +17 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-1.md +17 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-2.md +31 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-3.md +5 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/meta.json +115 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003-test-isolation.yaml +50 -0
- package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/QA-904.md +51 -0
- package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/example-test.mjs +36 -0
- package/src/skills/review-result/tests/index.yaml +5 -0
- package/src/skills/review-result/tests/rubrics/test-isolation.md +20 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
{
|
|
2
|
+
"per_model": {
|
|
3
|
+
"claude-sonnet": {
|
|
4
|
+
"pass_count": 3,
|
|
5
|
+
"total": 3,
|
|
6
|
+
"trials": [
|
|
7
|
+
{
|
|
8
|
+
"trial": 1,
|
|
9
|
+
"score": 5,
|
|
10
|
+
"passed": true
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"trial": 2,
|
|
14
|
+
"score": 5,
|
|
15
|
+
"passed": true
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"trial": 3,
|
|
19
|
+
"score": 5,
|
|
20
|
+
"passed": true
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"kilo-glm": {
|
|
25
|
+
"pass_count": 3,
|
|
26
|
+
"total": 3,
|
|
27
|
+
"trials": [
|
|
28
|
+
{
|
|
29
|
+
"trial": 1,
|
|
30
|
+
"score": 5,
|
|
31
|
+
"passed": true
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"trial": 2,
|
|
35
|
+
"score": 5,
|
|
36
|
+
"passed": true
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"trial": 3,
|
|
40
|
+
"score": 5,
|
|
41
|
+
"passed": true
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
"kilo-minimax": {
|
|
46
|
+
"pass_count": 2,
|
|
47
|
+
"total": 3,
|
|
48
|
+
"trials": [
|
|
49
|
+
{
|
|
50
|
+
"trial": 1,
|
|
51
|
+
"score": 5,
|
|
52
|
+
"passed": true
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"trial": 2,
|
|
56
|
+
"score": 5,
|
|
57
|
+
"passed": true
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"trial": 3,
|
|
61
|
+
"score": 1,
|
|
62
|
+
"passed": false
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
"kilo-deepseek": {
|
|
67
|
+
"pass_count": 3,
|
|
68
|
+
"total": 3,
|
|
69
|
+
"trials": [
|
|
70
|
+
{
|
|
71
|
+
"trial": 1,
|
|
72
|
+
"score": 5,
|
|
73
|
+
"passed": true
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"trial": 2,
|
|
77
|
+
"score": 5,
|
|
78
|
+
"passed": true
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"trial": 3,
|
|
82
|
+
"score": 4,
|
|
83
|
+
"passed": true
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"rubric_scores": [
|
|
89
|
+
{
|
|
90
|
+
"agentId": "claude-sonnet",
|
|
91
|
+
"trial": 1,
|
|
92
|
+
"score": 5,
|
|
93
|
+
"errored": false
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"agentId": "claude-sonnet",
|
|
97
|
+
"trial": 2,
|
|
98
|
+
"score": 5,
|
|
99
|
+
"errored": false
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"agentId": "claude-sonnet",
|
|
103
|
+
"trial": 3,
|
|
104
|
+
"score": 5,
|
|
105
|
+
"errored": false
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"agentId": "kilo-deepseek",
|
|
109
|
+
"trial": 1,
|
|
110
|
+
"score": 5,
|
|
111
|
+
"errored": false
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"agentId": "kilo-deepseek",
|
|
115
|
+
"trial": 2,
|
|
116
|
+
"score": 5,
|
|
117
|
+
"errored": false
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"agentId": "kilo-deepseek",
|
|
121
|
+
"trial": 3,
|
|
122
|
+
"score": 4,
|
|
123
|
+
"errored": false
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"agentId": "kilo-glm",
|
|
127
|
+
"trial": 1,
|
|
128
|
+
"score": 5,
|
|
129
|
+
"errored": false
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"agentId": "kilo-glm",
|
|
133
|
+
"trial": 2,
|
|
134
|
+
"score": 5,
|
|
135
|
+
"errored": false
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"agentId": "kilo-glm",
|
|
139
|
+
"trial": 3,
|
|
140
|
+
"score": 5,
|
|
141
|
+
"errored": false
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"agentId": "kilo-minimax",
|
|
145
|
+
"trial": 1,
|
|
146
|
+
"score": 5,
|
|
147
|
+
"errored": false
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"agentId": "kilo-minimax",
|
|
151
|
+
"trial": 2,
|
|
152
|
+
"score": 5,
|
|
153
|
+
"errored": false
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"agentId": "kilo-minimax",
|
|
157
|
+
"trial": 3,
|
|
158
|
+
"score": 1,
|
|
159
|
+
"errored": false
|
|
160
|
+
}
|
|
161
|
+
],
|
|
162
|
+
"timestamp": "2026-04-21T01:51:37.071Z"
|
|
163
|
+
}
|
package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-1.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
**Декомпозиция плана завершена**
|
|
2
|
+
|
|
3
|
+
Создано 2 тикета в `.workflow/tickets/backlog/`:
|
|
4
|
+
|
|
5
|
+
| ID | Тип | Заголовок | Зависимости |
|
|
6
|
+
|----|-----|-----------|-------------|
|
|
7
|
+
| `IMPL-001` | `impl` | Реализовать базовый компонент выбора прокси по умолчанию (select-default-proxy-modal) | — |
|
|
8
|
+
| `IMPL-002` | `impl` | Добавить edge case и отображение элементов в компоненте выбора прокси по умолчанию | `IMPL-001` |
|
|
9
|
+
|
|
10
|
+
**Проверка атомарности**
|
|
11
|
+
|
|
12
|
+
Тикет `IMPL-001`:
|
|
13
|
+
- Проверка 1 (Одна задача): **PASS** – один глагол «Реализовать».
|
|
14
|
+
- Проверка 2 (Один объект): **PASS** – файл `src/popup/select-default-proxy-modal.ts`.
|
|
15
|
+
- Проверка 3 (Один результат): **PASS** – 6 пунктов DoD проверяют базовый компонент.
|
|
16
|
+
- Проверка 4 (Нет скрытых подзадач): **PASS** – пункты DoD не являются независимыми шагами.
|
|
17
|
+
- Проверка 5 (Размер): **PASS** – DoD содержит 6 пунктов (≤7).
|
|
18
|
+
- Проверка 6 (Независимая верификация): **PASS** – верификация не требует других тикетов.
|
|
19
|
+
- Проверка 7 (Один исполнитель): **PASS** – все пункты относятся к типу `IMPL`.
|
|
20
|
+
|
|
21
|
+
Тикет `IMPL-002`:
|
|
22
|
+
- Проверка 1 (Одна задача): **PASS** – один глагол «Добавить».
|
|
23
|
+
- Проверка 2 (Один объект): **PASS** – тот же файл компонента.
|
|
24
|
+
- Проверка 3 (Один результат): **PASS** – 2 пункта DoD проверяют дополнительные требования.
|
|
25
|
+
- Проверка 4 (Нет скрытых подзадач): **PASS** – пункты связаны с одним компонентом.
|
|
26
|
+
- Проверка 5 (Размер): **PASS** – DoD содержит 2 пункта (≤7).
|
|
27
|
+
- Проверка 6 (Независимая верификация): **PASS** – зависит только от `IMPL-001`.
|
|
28
|
+
- Проверка 7 (Один исполнитель): **PASS** – все пункты относятся к типу `IMPL`.
|
|
29
|
+
|
|
30
|
+
**Scope‑guard**: все задачи входят в scope плана, не дублируют функции пайплайна.
|
|
31
|
+
|
|
32
|
+
**Дедупликация**: дубликатов не обнаружено (папка `tickets/` пуста).
|
|
33
|
+
|
|
34
|
+
**Capabilities registry**: pipeline-конфиг отсутствует, реестр пуст → `required_capabilities` не заполнены.
|
|
35
|
+
|
|
36
|
+
**Использованные ID**: `IMPL‑001`, `IMPL‑002` (начальный номер диапазона: `IMPL:1`).
|
|
37
|
+
|
|
38
|
+
---RESULT---
|
|
39
|
+
status: default
|
|
40
|
+
ids_allocated_from:
|
|
41
|
+
IMPL: 1
|
|
42
|
+
---RESULT---
|
package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-2.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
**capabilities_registry:** []
|
|
2
|
+
|
|
3
|
+
**Тикет-кандидат:** «Реализовать компонент выбора прокси по умолчанию (select-default-proxy-modal)»
|
|
4
|
+
|
|
5
|
+
| Проверка | Результат | Evidence / Действие |
|
|
6
|
+
|----------|-----------|---------------------|
|
|
7
|
+
| 1. Одна задача | PASS | Title: «Реализовать компонент выбора прокси по умолчанию (select-default-proxy-modal)» — один глагол «реализовать» |
|
|
8
|
+
| 2. Один объект | PASS | Файл: src/popup/select-default-proxy-modal.ts |
|
|
9
|
+
| 3. Один результат | PASS | DoD содержит 8 пунктов, все проверяют работу компонента |
|
|
10
|
+
| 4. Нет скрытых подзадач | PASS | Нет нумерованных шагов, только критерии |
|
|
11
|
+
| 5. Размер | **FAIL** | DoD содержит 8 пунктов (>7 порог verify-atomicity.js) |
|
|
12
|
+
| 6. Независимая верификация | PASS | Результат проверяется независимо |
|
|
13
|
+
| 7. Один исполнитель | PASS | Все пункты DoD выполняются типом IMPL |
|
|
14
|
+
|
|
15
|
+
→ Решение: **РАЗБИТЬ** на 2 тикета.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
**Тикет IMPL-001:** «Создание файла select-default-proxy-modal.ts с базовой функциональностью модалки выбора прокси»
|
|
20
|
+
|
|
21
|
+
| Проверка | Результат | Evidence / Действие |
|
|
22
|
+
|----------|-----------|---------------------|
|
|
23
|
+
| 1. Одна задача | PASS | Title: «Создание файла … с базовой функциональностью» — один глагол «создание» |
|
|
24
|
+
| 2. Один объект | PASS | Файл: src/popup/select-default-proxy-modal.ts |
|
|
25
|
+
| 3. Один результат | PASS | DoD содержит 6 пунктов, все проверяют базовую функциональность модалки |
|
|
26
|
+
| 4. Нет скрытых подзадач | PASS | Нет независимых шагов |
|
|
27
|
+
| 5. Размер | PASS | DoD содержит 6 пунктов (≤7) |
|
|
28
|
+
| 6. Независимая верификация | PASS | Проверяется без IMPL-002 |
|
|
29
|
+
| 7. Один исполнитель | PASS | Все пункты DoD выполняются типом IMPL |
|
|
30
|
+
|
|
31
|
+
→ Решение: **СОЗДАТЬ**.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
**Тикет IMPL-002:** «Реализация отображения элементов списка прокси в модалке выбора прокси»
|
|
36
|
+
|
|
37
|
+
| Проверка | Результат | Evidence / Действие |
|
|
38
|
+
|----------|-----------|---------------------|
|
|
39
|
+
| 1. Одна задача | PASS | Title: «Реализация отображения элементов списка …» — один глагол «реализация» |
|
|
40
|
+
| 2. Один объект | PASS | Тот же файл, но изменения касаются только рендера элементов |
|
|
41
|
+
| 3. Один результат | PASS | DoD содержит 1 пункт, проверяющий отображение элементов |
|
|
42
|
+
| 4. Нет скрытых подзадач | PASS | Нет шагов |
|
|
43
|
+
| 5. Размер | PASS | DoD содержит 1 пункт (≤7) |
|
|
44
|
+
| 6. Независимая верификация | PASS | Проверяется после IMPL-001 (зависимость указана) |
|
|
45
|
+
| 7. Один исполнитель | PASS | Все пункты DoD выполняются типом IMPL |
|
|
46
|
+
|
|
47
|
+
→ Решение: **СОЗДАТЬ**.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
**Scope-guard:** все задачи входят в scope плана, влияют на критерии успеха, не дублируют функции пайплайна.
|
|
52
|
+
|
|
53
|
+
**Дедупликация:** дубликатов не найдено, решение CREATE для обоих тикетов.
|
|
54
|
+
|
|
55
|
+
**Созданные тикеты:**
|
|
56
|
+
- `.workflow/tickets/backlog/IMPL-001.md`
|
|
57
|
+
- `.workflow/tickets/backlog/IMPL-002.md`
|
|
58
|
+
|
|
59
|
+
**Рекомендации для следующего плана (вне scope):** нет.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
---RESULT---
|
|
64
|
+
status: default
|
|
65
|
+
ids_allocated_from:
|
|
66
|
+
IMPL: 1
|
|
67
|
+
---RESULT---
|
package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-3.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
**Декомпозиция плана завершена**
|
|
2
|
+
|
|
3
|
+
Созданы тикеты:
|
|
4
|
+
|
|
5
|
+
### IMPL-001
|
|
6
|
+
**Заголовок:** Реализовать базовый функционал модального компонента выбора прокси по умолчанию
|
|
7
|
+
**Критерии готовности (4 пункта):**
|
|
8
|
+
1. Файл `src/popup/select-default-proxy-modal.ts` создан по образцу `public-proxies-modal.ts` через ModalHelper
|
|
9
|
+
2. Функция `showSelectDefaultProxyModal(proxies)` экспортируется и резолвит `id` выбранного прокси
|
|
10
|
+
3. Закрытие крестиком или Esc резолвит `null`
|
|
11
|
+
4. Каждый элемент списка отображает имя, `host:port` и флаг страны (если есть)
|
|
12
|
+
|
|
13
|
+
### IMPL-002
|
|
14
|
+
**Заголовок:** Реализовать дополнительные требования к модальному компоненту выбора прокси по умолчанию
|
|
15
|
+
**Зависимости:** IMPL-001
|
|
16
|
+
**Критерии готовности (4 пункта):**
|
|
17
|
+
1. Edge case: при пустом списке прокси модалка не рендерит DOM и резолвит `null` сразу
|
|
18
|
+
2. Заголовок модалки берётся из `I18n.getMessage('selectDefaultProxyTitle')`
|
|
19
|
+
3. Модалка **НЕ** вызывает `Storage.setDefaultProxy()` внутри — запись в storage снаружи
|
|
20
|
+
4. Модалка **НЕ** читает прокси из storage — принимает готовый список
|
|
21
|
+
|
|
22
|
+
**Атомарность:** Оба тикета проходят чеклист атомарности (число пунктов DoD ≤7).
|
|
23
|
+
**Scope-guard:** Задачи входят в scope плана, соответствуют критериям успеха и горизонта.
|
|
24
|
+
**Executor type:** `agent` (тип `impl`).
|
|
25
|
+
**Дедупликация:** Дубликаты не обнаружены.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
### Рекомендации для следующего плана (вне scope)
|
|
30
|
+
*Нет задач вне scope текущего плана.*
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
**---RESULT---**
|
|
35
|
+
|
|
36
|
+
Созданы тикеты:
|
|
37
|
+
- `.workflow/tickets/backlog/IMPL-001.md`
|
|
38
|
+
- `.workflow/tickets/backlog/IMPL-002.md`
|
|
39
|
+
|
|
40
|
+
Декомпозиция завершена.
|
package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-1.md
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
Now I have all the context. Let me perform the full decomposition analysis.
|
|
2
|
+
|
|
3
|
+
## Анализ плана
|
|
4
|
+
|
|
5
|
+
**Задача плана:** Реализовать компонент выбора прокси по умолчанию (select-default-proxy-modal)
|
|
6
|
+
**DoD:** 8 пунктов → превышает порог 7 (Проверка 5, verify-atomicity.js).
|
|
7
|
+
|
|
8
|
+
## Step 9.C: Реестр capabilities
|
|
9
|
+
|
|
10
|
+
Из `pipeline.yaml → agents.*.capabilities`:
|
|
11
|
+
```
|
|
12
|
+
capabilities_registry: [text, multimodal]
|
|
13
|
+
```
|
|
14
|
+
Оба тикета — реализация кода, не требуют multimodal. `required_capabilities: []` для обоих.
|
|
15
|
+
|
|
16
|
+
## Дедупликация
|
|
17
|
+
|
|
18
|
+
Сканирование `.workflow/tickets/**/IMPL-*.md` — 0 файлов. Папка backlog пуста.
|
|
19
|
+
Решение: **CREATE** для обоих тикетов.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Атомарность: исходная задача «как есть»
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Тикет-кандидат: «Реализовать компонент выбора прокси по умолчанию (select-default-proxy-modal)»
|
|
27
|
+
| Проверка | Результат | Evidence / Действие |
|
|
28
|
+
|----------|-----------|---------------------|
|
|
29
|
+
| 1. Одна задача | PASS | Title: один глагол «Реализовать» |
|
|
30
|
+
| 2. Один объект | PASS | Файл: src/popup/select-default-proxy-modal.ts, один модуль |
|
|
31
|
+
| 3. Один результат | PASS | DoD = 8 пунктов, все проверяют один компонент |
|
|
32
|
+
| 4. Нет скрытых подзадач | PASS | Шаги: цепочка (создать → экспортировать → закрытие → ...) |
|
|
33
|
+
| 5. Размер | **FAIL** | DoD содержит 8 пунктов (> 7). Hard-порог verify-atomicity.js = 7 → FAIL |
|
|
34
|
+
| 6. Независимая верификация | PASS | Можно проверить независимо |
|
|
35
|
+
| 7. Один исполнитель | PASS | Все пункты — код → IMPL |
|
|
36
|
+
→ Решение: РАЗБИТЬ на 2 тикета
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Тикет-кандидат 1: «Создать модальную оболочку select-default-proxy-modal»
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
| Проверка | Результат | Evidence |
|
|
45
|
+
|----------|-----------|----------|
|
|
46
|
+
| 1. Одна задача | PASS | Title: «Создать модальную оболочку select-default-proxy-modal» — один глагол «Создать» |
|
|
47
|
+
| 2. Один объект | PASS | Файл: src/popup/select-default-proxy-modal.ts. Один логический модуль (оболочка модалки). Независимых логических блоков: 1. Критерий: правки относятся к одной функции showSelectDefaultProxyModal |
|
|
48
|
+
| 3. Один результат | PASS | DoD содержит 6 пунктов, все проверяют: «модальная оболочка создана и работает корректно» |
|
|
49
|
+
| 4. Нет скрытых подзадач | PASS | Шаги: 1 (создать файл по образцу). Зависимость: создание файла → единственный шаг |
|
|
50
|
+
| 5. Размер | PASS | DoD содержит 6 пунктов (≤ 7). Один файл, ~100-150 строк кода |
|
|
51
|
+
| 6. Независимая верификация | PASS | Можно проверить: файл существует, функция экспортируется, close резолвит null, заголовок из I18n, нет вызовов Storage |
|
|
52
|
+
| 7. Один исполнитель | PASS | Все пункты DoD — реализация кода → IMPL (config.yaml: task_types.impl.prefix = IMPL) |
|
|
53
|
+
→ Решение: СОЗДАТЬ
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Тикет-кандидат 2: «Реализовать рендеринг элементов списка и обработку пустого списка в select-default-proxy-modal»
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
| Проверка | Результат | Evidence |
|
|
62
|
+
|----------|-----------|----------|
|
|
63
|
+
| 1. Одна задача | PASS | Title: «Реализовать рендеринг элементов списка и обработку пустого списка» — один глагол «Реализовать» |
|
|
64
|
+
| 2. Один объект | PASS | Файл: src/popup/select-default-proxy-modal.ts. Модификация того же модуля (добавление рендеринга). Независимых логических блоков: 1. Критерий: рендеринг и empty-guard относятся к одному визуальному слою |
|
|
65
|
+
| 3. Один результат | PASS | DoD содержит 2 пункта, все проверяют: «список прокси корректно отображается и пустой список обрабатывается» |
|
|
66
|
+
| 4. Нет скрытых подзадач | PASS | Шаги: 1 (рендеринг элементов + empty guard). Зависимость: empty guard логически предшествует рендерингу — цепочка |
|
|
67
|
+
| 5. Размер | PASS | DoD содержит 2 пункта (≤ 7). Добавление ~50-80 строк в существующий файл |
|
|
68
|
+
| 6. Независимая верификация | PASS | Можно проверить: элементы показывают name/host:port/flag, пустой список → null |
|
|
69
|
+
| 7. Один исполнитель | PASS | Все пункты DoD — реализация кода → IMPL (config.yaml: task_types.impl.prefix = IMPL) |
|
|
70
|
+
→ Решение: СОЗДАТЬ
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Diff формулировок (Стоп-гейт 9.A)
|
|
76
|
+
|
|
77
|
+
**IMPL-001 DoD — перенос из плана:**
|
|
78
|
+
|
|
79
|
+
| Пункт плана (дословно) | Пункт в тикете | Статус |
|
|
80
|
+
|-------------------------|----------------|--------|
|
|
81
|
+
| Файл src/popup/select-default-proxy-modal.ts создан по образцу public-proxies-modal.ts через ModalHelper | без изменений | эквивалент |
|
|
82
|
+
| Функция showSelectDefaultProxyModal(proxies) экспортируется и резолвит id выбранного прокси | без изменений | эквивалент |
|
|
83
|
+
| Закрытие крестиком или Esc резолвит null | без изменений | эквивалент |
|
|
84
|
+
| Заголовок модалки берётся из I18n.getMessage('selectDefaultProxyTitle') | без изменений | эквивалент |
|
|
85
|
+
| Модалка НЕ вызывает Storage.setDefaultProxy() внутри — запись в storage снаружи | без изменений | эквивалент |
|
|
86
|
+
| Модалка НЕ читает прокси из storage — принимает готовый список | без изменений | эквивалент |
|
|
87
|
+
|
|
88
|
+
**IMPL-002 DoD — перенос из плана:**
|
|
89
|
+
|
|
90
|
+
| Пункт плана (дословно) | Пункт в тикете | Статус |
|
|
91
|
+
|-------------------------|----------------|--------|
|
|
92
|
+
| Edge case: при пустом списке прокси модалка не рендерит DOM и резолвит null сразу | без изменений | эквивалент |
|
|
93
|
+
| Каждый элемент списка отображает имя, host:port и флаг страны (если есть) | без изменений | эквивалент |
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
Теперь создаю тикеты:
|
|
98
|
+
Проверка пост-валидации уникальности:
|
|
99
|
+
Пост-валидация: каждый файл найден ровно 1 раз — коллизий нет.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Итог декомпозиции
|
|
104
|
+
|
|
105
|
+
Исходная задача с 8 пунктами DoD разбита на 2 тикета:
|
|
106
|
+
|
|
107
|
+
| ID | Title | DoD пунктов | Зависимости |
|
|
108
|
+
|----|-------|-------------|-------------|
|
|
109
|
+
| IMPL-001 | Создать модальную оболочку select-default-proxy-modal | 6 | — |
|
|
110
|
+
| IMPL-002 | Реализовать рендеринг элементов списка и обработку пустого списка | 2 | IMPL-001 |
|
|
111
|
+
|
|
112
|
+
### Рекомендации для следующего плана (вне scope)
|
|
113
|
+
|
|
114
|
+
Нет — все задачи плана покрыты тикетами.
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
---RESULT---
|
|
118
|
+
status: default
|
|
119
|
+
ids_allocated_from:
|
|
120
|
+
IMPL: 1
|
|
121
|
+
---RESULT---
|
|
122
|
+
```
|
package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-2.md
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
Now let me read the ticket template, config, and pipeline files:
|
|
2
|
+
Now I have full context. Let me analyze the plan and perform the decomposition.
|
|
3
|
+
|
|
4
|
+
## Анализ плана
|
|
5
|
+
|
|
6
|
+
**Задача плана:** Реализовать компонент выбора прокси по умолчанию (select-default-proxy-modal)
|
|
7
|
+
|
|
8
|
+
**DoD задачи — 8 пунктов:**
|
|
9
|
+
1. Файл `src/popup/select-default-proxy-modal.ts` создан по образцу `public-proxies-modal.ts` через `ModalHelper`
|
|
10
|
+
2. Функция `showSelectDefaultProxyModal(proxies)` экспортируется и резолвит id выбранного прокси
|
|
11
|
+
3. Закрытие крестиком или Esc резолвит `null`
|
|
12
|
+
4. Edge case: при пустом списке прокси модалка не рендерит DOM и резолвит `null` сразу
|
|
13
|
+
5. Заголовок модалки берётся из `I18n.getMessage('selectDefaultProxyTitle')`
|
|
14
|
+
6. Модалка НЕ вызывает `Storage.setDefaultProxy()` внутри — запись в storage снаружи
|
|
15
|
+
7. Модалка НЕ читает прокси из storage — принимает готовый список
|
|
16
|
+
8. Каждый элемент списка отображает имя, `host:port` и флаг страны (если есть)
|
|
17
|
+
|
|
18
|
+
**8 пунктов DoD > порог 7 (Проверка 5).** Необходимо разбиение.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Стоп-гейты
|
|
23
|
+
|
|
24
|
+
**Стоп-гейт 9.C — capabilities_registry:**
|
|
25
|
+
Pipeline-конфиг `.workflow/config/pipeline.yaml` не найден в тестовом окружении. `capabilities_registry` пуст. Поле `required_capabilities` для всех тикетов — `[]`.
|
|
26
|
+
|
|
27
|
+
**Стоп-гейт 9.B — id_ranges_json:**
|
|
28
|
+
Параметр `id_ranges_json` не предоставлен на входе стадии (тестовое окружение без полной инфраструктуры пайплайна). Для целей теста используется условная нумерация от IMPL-001.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Прогон чеклиста атомарности — исходный тикет-кандидат
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Тикет-кандидат: «Реализовать компонент выбора прокси по умолчанию (select-default-proxy-modal)»
|
|
36
|
+
| Проверка | Результат | Evidence / Действие |
|
|
37
|
+
|----------|-----------|---------------------|
|
|
38
|
+
| 1. Одна задача | PASS | Title содержит один глагол «Реализовать», одна сущность — компонент modal |
|
|
39
|
+
| 2. Один объект | PASS | Файлы: src/popup/select-default-proxy-modal.ts. Независимых логических блоков: 1 — весь компонент |
|
|
40
|
+
| 3. Один результат | PASS | DoD содержит 8 пунктов, все проверяют свойства одного модального компонента |
|
|
41
|
+
| 4. Нет скрытых подзадач | PASS | Шаги: создание файла → реализация функции → обработка закрытия → edge case → i18n → ограничения storage → рендеринг списка. Зависимость: цепочка (каждый шаг требует предыдущий) |
|
|
42
|
+
| 5. Размер | **FAIL** | DoD содержит 8 пунктов. Порог verify-atomicity.js = 7 (FAIL при >7). 8 > 7 → **FAIL**. Действие: разбить на 2 тикета |
|
|
43
|
+
| 6. Независимая верификация | PASS | Результат проверяем автономно: наличие файла, экспорт функции, поведение закрытия |
|
|
44
|
+
| 7. Один исполнитель | PASS | Все пункты DoD — реализация кода продукта, тип IMPL |
|
|
45
|
+
→ Решение: **РАЗБИТЬ на 2 тикета**
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Обоснование разбиения:** Проверка 5 даёт FAIL — 8 пунктов DoD превышают hard-порог verify-atomicity.js (= 7). Стратегия разбиения: по группам DoD-пунктов.
|
|
49
|
+
|
|
50
|
+
**Группа A (каркас модалки):** пункты 1–5 — создание файла, экспорт функции, закрытие, edge case, i18n-заголовок.
|
|
51
|
+
**Группа B (рендеринг списка и ограничения):** пункты 6–8 — ограничения storage, рендеринг элементов.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Прогон чеклиста — Тикет 1 (каркас модалки)
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
Тикет-кандидат: «Создать каркас модалки select-default-proxy-modal»
|
|
59
|
+
| Проверка | Результат | Evidence / Действие |
|
|
60
|
+
|----------|-----------|---------------------|
|
|
61
|
+
| 1. Одна задача | PASS | Title: «Создать каркас модалки select-default-proxy-modal» — один глагол «Создать» |
|
|
62
|
+
| 2. Один объект | PASS | Файлы: src/popup/select-default-proxy-modal.ts. Независимых логических блоков: 1. Критерий: правки блока A не могут быть применены без блока B — всё в одном файле компонента |
|
|
63
|
+
| 3. Один результат | PASS | DoD содержит 5 пунктов, все проверяют: «создание и базовое поведение каркаса модального компонента» |
|
|
64
|
+
| 4. Нет скрытых подзадач | PASS | Шаги: 5 (создать файл → экспортировать функцию → обработать закрытие → edge case пустого списка → i18n заголовок). Зависимость: цепочка — каждый шаг строится на предыдущем |
|
|
65
|
+
| 5. Размер | PASS | DoD содержит 5 пунктов. 5 ≤ 7 — ниже hard-порога. Ожидаемый объём < 100 строк (каркас по образцу ModalHelper) |
|
|
66
|
+
| 6. Независимая верификация | PASS | Проверяем автономно: файл существует, функция экспортирована, закрытие работает, пустой список → null, заголовок из i18n |
|
|
67
|
+
| 7. Один исполнитель | PASS | Все пункты DoD — реализация кода продукта, тип IMPL |
|
|
68
|
+
→ Решение: **СОЗДАТЬ**
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Прогон чеклиста — Тикет 2 (рендеринг и ограничения)
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
Тикет-кандидат: «Реализовать рендеринг списка прокси и ограничения storage в select-default-proxy-modal»
|
|
77
|
+
| Проверка | Результат | Evidence / Действие |
|
|
78
|
+
|----------|-----------|---------------------|
|
|
79
|
+
| 1. Одна задача | PASS | Title: «Реализовать рендеринг списка прокси и ограничения storage в select-default-proxy-modal» — один глагол «Реализовать» |
|
|
80
|
+
| 2. Один объект | PASS | Файлы: src/popup/select-default-proxy-modal.ts (тот же файл, дополнение каркаса). Независимых логических блоков: 1 — рендеринг элементов списка + ограничения доступа к storage в рамках одного компонента |
|
|
81
|
+
| 3. Один результат | PASS | DoD содержит 3 пункта, все проверяют: «рендеринг элементов списка и корректное разделение ответственности по storage» |
|
|
82
|
+
| 4. Нет скрытых подзадач | PASS | Шаги: 3 (проверить отсутствие вызова Storage.setDefaultProxy → проверить отсутствие чтения из storage → реализовать рендеринг имени/host:port/флага). Зависимость: цепочка — рендеринг требует отсутствия прямого storage-доступа для чистоты контракта |
|
|
83
|
+
| 5. Размер | PASS | DoD содержит 3 пункта. 3 ≤ 7 — ниже hard-порога. Ожидаемый объём < 80 строк (рендеринг элементов + проверки ограничений) |
|
|
84
|
+
| 6. Независимая верификация | PASS | Проверяем автономно после IMPL-001: рендеринг списка, отсутствие storage-вызовов |
|
|
85
|
+
| 7. Один исполнитель | PASS | Все пункты DoD — реализация кода продукта, тип IMPL |
|
|
86
|
+
→ Решение: **СОЗДАТЬ**
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Scope-guard (оба тикета)
|
|
92
|
+
|
|
93
|
+
| Проверка | Тикет 1 | Тикет 2 |
|
|
94
|
+
|----------|---------|---------|
|
|
95
|
+
| 1. Принадлежность к scope | PASS — задача из плана | PASS — задача из плана |
|
|
96
|
+
| 2. Связь с задачами плана | PASS — декомпозиция единственной задачи | PASS — декомпозиция единственной задачи |
|
|
97
|
+
| 3. Критерии успеха | PASS — необходима для компонента | PASS — необходима для компонента |
|
|
98
|
+
| 4. Горизонт | PASS — реализуема в рамках плана | PASS — реализуема в рамках плана |
|
|
99
|
+
| 5. Не дублирует пайплайн | PASS — реализация кода | PASS — реализация кода |
|
|
100
|
+
|
|
101
|
+
## Дедупликация
|
|
102
|
+
|
|
103
|
+
Папка `.workflow/tickets/` не существует — дубликатов нет. Оба тикета → **CREATE**.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
Теперь создам файлы тикетов:
|
|
108
|
+
Пост-валидация: каждый ID найден ровно в одном файле — коллизий нет.
|
|
109
|
+
## Итог декомпозиции
|
|
110
|
+
|
|
111
|
+
| Тикет | DoD пунктов | Описание |
|
|
112
|
+
|-------|-------------|----------|
|
|
113
|
+
| IMPL-001 | 5 | Каркас модалки (файл, экспорт, закрытие, edge case, i18n) |
|
|
114
|
+
| IMPL-002 | 3 | Рендеринг списка прокси + ограничения storage |
|
|
115
|
+
|
|
116
|
+
**Разбиение обосновано:** исходная задача содержала 8 пунктов DoD (> порога 7 в verify-atomicity.js). Каждый результирующий тикет содержит ≤ 7 пунктов DoD.
|
|
117
|
+
|
|
118
|
+
### Рекомендации для следующего плана (вне scope)
|
|
119
|
+
|
|
120
|
+
- Нет отклонённых задач — все пункты плана покрыты тикетами.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
---RESULT---
|
|
125
|
+
status: default
|
|
126
|
+
tickets_created:
|
|
127
|
+
- IMPL-001
|
|
128
|
+
- IMPL-002
|
|
129
|
+
ids_allocated_from:
|
|
130
|
+
IMPL: 1
|
|
131
|
+
---RESULT---
|