workflow-ai 1.0.64 → 1.0.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/README.md +239 -145
  2. package/configs/agent-health-rules.yaml +64 -0
  3. package/configs/pipeline.yaml +18 -1
  4. package/package.json +1 -1
  5. package/src/init.mjs +20 -3
  6. package/src/lib/agent-health-registry.mjs +245 -0
  7. package/src/lib/artifact-snapshot.mjs +233 -0
  8. package/src/lib/error-classifier.mjs +274 -0
  9. package/src/lib/test-error-classifier.mjs +60 -0
  10. package/src/lib/test-extends.mjs +58 -0
  11. package/src/lib/test-version.mjs +21 -0
  12. package/src/scripts/move-to-review.js +5 -7
  13. package/src/scripts/reset-agent-health.js +62 -0
  14. package/src/skills/coach/SKILL.md +1 -0
  15. package/src/skills/coach/tests/cases/TC-COACH-001/current/meta.json +2 -3
  16. package/src/skills/coach/tests/cases/TC-COACH-002/current/meta.json +2 -3
  17. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-1.md +23 -31
  18. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-2.md +20 -35
  19. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-3.md +36 -19
  20. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/judge.json +1 -1
  21. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-2.md +11 -5
  22. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-3.md +12 -16
  23. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-1.md +15 -9
  24. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-3.md +15 -14
  25. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-1.md +22 -18
  26. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-2.md +24 -16
  27. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-3.md +13 -20
  28. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/meta.json +2 -2
  29. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-1.md +14 -19
  30. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-2.md +24 -14
  31. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-3.md +20 -19
  32. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/judge.json +16 -17
  33. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-1.md +0 -7
  34. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-2.md +9 -10
  35. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-3.md +5 -5
  36. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-1.md +20 -4
  37. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-2.md +36 -9
  38. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-3.md +9 -6
  39. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-1.md +4 -12
  40. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-2.md +6 -8
  41. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-3.md +8 -4
  42. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/meta.json +10 -11
  43. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-1.md +30 -0
  44. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-2.md +30 -0
  45. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-3.md +30 -0
  46. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/judge.json +165 -0
  47. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-1.md +5 -0
  48. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-2.md +26 -0
  49. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-3.md +5 -0
  50. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-1.md +39 -0
  51. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-2.md +37 -0
  52. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-3.md +45 -0
  53. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-1.md +26 -0
  54. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-2.md +27 -0
  55. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-3.md +7 -0
  56. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/meta.json +117 -0
  57. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003-parent-plan-mandatory.yaml +41 -0
  58. package/src/skills/decompose-gaps/tests/index.yaml +5 -0
  59. package/src/skills/decompose-gaps/tests/rubrics/parent-plan-mandatory.md +22 -0
  60. package/src/skills/decompose-gaps/workflows/decompose.md +5 -2
  61. package/src/skills/decompose-plan/knowledge/atomicity-checklist.md +31 -5
  62. package/src/skills/decompose-plan/knowledge/capabilities.md +29 -5
  63. package/src/skills/decompose-plan/knowledge/human-task-rules.md +15 -0
  64. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-1.md +55 -0
  65. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-2.md +49 -0
  66. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-3.md +49 -0
  67. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/judge.json +163 -0
  68. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-1.md +104 -0
  69. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-2.md +45 -0
  70. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-3.md +58 -0
  71. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-1.md +193 -0
  72. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-2.md +202 -0
  73. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-3.md +155 -0
  74. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-1.md +52 -0
  75. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-2.md +17 -0
  76. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-3.md +0 -0
  77. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/meta.json +115 -0
  78. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004-executor-atomicity.yaml +64 -0
  79. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-1.md +59 -0
  80. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-2.md +204 -0
  81. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-3.md +213 -0
  82. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/judge.json +163 -0
  83. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-1.md +0 -0
  84. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-2.md +57 -0
  85. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-3.md +54 -0
  86. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-1.md +147 -0
  87. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-2.md +165 -0
  88. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-3.md +133 -0
  89. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-1.md +81 -0
  90. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-2.md +108 -0
  91. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-3.md +3 -0
  92. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/meta.json +114 -0
  93. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005-capabilities-registry.yaml +78 -0
  94. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-1.md +225 -0
  95. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-2.md +66 -0
  96. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-3.md +36 -0
  97. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/judge.json +163 -0
  98. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-1.md +42 -0
  99. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-2.md +67 -0
  100. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-3.md +40 -0
  101. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-1.md +122 -0
  102. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-2.md +131 -0
  103. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-3.md +138 -0
  104. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-1.md +41 -0
  105. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-2.md +88 -0
  106. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-3.md +0 -0
  107. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/meta.json +115 -0
  108. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006-dod-threshold.yaml +72 -0
  109. package/src/skills/decompose-plan/tests/index.yaml +15 -0
  110. package/src/skills/decompose-plan/tests/rubrics/capabilities-registry.md +21 -0
  111. package/src/skills/decompose-plan/tests/rubrics/dod-threshold.md +21 -0
  112. package/src/skills/decompose-plan/tests/rubrics/executor-atomicity.md +21 -0
  113. package/src/skills/decompose-plan/workflows/decompose.md +38 -5
  114. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/meta.json +3 -4
  115. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/meta.json +3 -4
  116. package/src/skills/manual-testing/SKILL.md +6 -4
  117. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-1.md +29 -16
  118. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-2.md +21 -54
  119. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-3.md +18 -23
  120. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/judge.json +17 -17
  121. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/meta.json +19 -19
  122. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-1.md +27 -30
  123. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-2.md +16 -23
  124. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-3.md +35 -28
  125. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/judge.json +13 -13
  126. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/meta.json +15 -15
  127. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-1.md +76 -0
  128. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-2.md +71 -0
  129. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-3.md +85 -0
  130. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/judge.json +46 -0
  131. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/meta.json +36 -0
  132. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003-qa-non-ui-assertion.yaml +65 -0
  133. package/src/skills/manual-testing/tests/index.yaml +5 -0
  134. package/src/skills/manual-testing/tests/rubrics/qa-non-ui-assertion.md +31 -0
  135. package/src/skills/review-result/scripts/verify-artifacts.js +42 -12
@@ -87,77 +87,77 @@
87
87
  },
88
88
  "rubric_scores": [
89
89
  {
90
- "agentId": "claude-sonnet",
90
+ "agentId": "kilo-deepseek",
91
91
  "trial": 1,
92
- "score": 5,
92
+ "score": 1,
93
93
  "errored": false
94
94
  },
95
95
  {
96
- "agentId": "claude-sonnet",
96
+ "agentId": "kilo-deepseek",
97
97
  "trial": 2,
98
98
  "score": 5,
99
99
  "errored": false
100
100
  },
101
101
  {
102
- "agentId": "claude-sonnet",
102
+ "agentId": "kilo-deepseek",
103
103
  "trial": 3,
104
- "score": 5,
104
+ "score": 1,
105
105
  "errored": false
106
106
  },
107
107
  {
108
- "agentId": "kilo-deepseek",
108
+ "agentId": "kilo-glm",
109
109
  "trial": 1,
110
- "score": 1,
110
+ "score": 5,
111
111
  "errored": false
112
112
  },
113
113
  {
114
- "agentId": "kilo-deepseek",
114
+ "agentId": "kilo-glm",
115
115
  "trial": 2,
116
116
  "score": 5,
117
117
  "errored": false
118
118
  },
119
119
  {
120
- "agentId": "kilo-deepseek",
120
+ "agentId": "kilo-glm",
121
121
  "trial": 3,
122
- "score": 1,
122
+ "score": 5,
123
123
  "errored": false
124
124
  },
125
125
  {
126
- "agentId": "kilo-glm",
126
+ "agentId": "kilo-minimax",
127
127
  "trial": 1,
128
128
  "score": 5,
129
129
  "errored": false
130
130
  },
131
131
  {
132
- "agentId": "kilo-glm",
132
+ "agentId": "kilo-minimax",
133
133
  "trial": 2,
134
134
  "score": 5,
135
135
  "errored": false
136
136
  },
137
137
  {
138
- "agentId": "kilo-glm",
138
+ "agentId": "kilo-minimax",
139
139
  "trial": 3,
140
140
  "score": 5,
141
141
  "errored": false
142
142
  },
143
143
  {
144
- "agentId": "kilo-minimax",
144
+ "agentId": "claude-sonnet",
145
145
  "trial": 1,
146
146
  "score": 5,
147
147
  "errored": false
148
148
  },
149
149
  {
150
- "agentId": "kilo-minimax",
150
+ "agentId": "claude-sonnet",
151
151
  "trial": 2,
152
152
  "score": 5,
153
153
  "errored": false
154
154
  },
155
155
  {
156
- "agentId": "kilo-minimax",
156
+ "agentId": "claude-sonnet",
157
157
  "trial": 3,
158
158
  "score": 5,
159
159
  "errored": false
160
160
  }
161
161
  ],
162
- "timestamp": "2026-04-20T07:07:11.080Z"
162
+ "timestamp": "2026-04-21T08:55:00.948Z"
163
163
  }
@@ -1,8 +1,8 @@
1
1
  {
2
- "date": "2026-04-20T07:07:11.080Z",
3
- "skill_sha": "9a19d69",
2
+ "date": "2026-04-21T08:55:00.949Z",
3
+ "skill_sha": "bdb379d",
4
4
  "status": "failed",
5
- "duration_ms": 310043,
5
+ "duration_ms": 38158,
6
6
  "per_model": {
7
7
  "claude-sonnet": {
8
8
  "passed": true,
@@ -39,73 +39,73 @@
39
39
  },
40
40
  "rubric_scores": [
41
41
  {
42
- "agentId": "claude-sonnet",
42
+ "agentId": "kilo-deepseek",
43
43
  "trial": 1,
44
- "score": 5,
44
+ "score": 1,
45
45
  "errored": false
46
46
  },
47
47
  {
48
- "agentId": "claude-sonnet",
48
+ "agentId": "kilo-deepseek",
49
49
  "trial": 2,
50
50
  "score": 5,
51
51
  "errored": false
52
52
  },
53
53
  {
54
- "agentId": "claude-sonnet",
54
+ "agentId": "kilo-deepseek",
55
55
  "trial": 3,
56
- "score": 5,
56
+ "score": 1,
57
57
  "errored": false
58
58
  },
59
59
  {
60
- "agentId": "kilo-deepseek",
60
+ "agentId": "kilo-glm",
61
61
  "trial": 1,
62
- "score": 1,
62
+ "score": 5,
63
63
  "errored": false
64
64
  },
65
65
  {
66
- "agentId": "kilo-deepseek",
66
+ "agentId": "kilo-glm",
67
67
  "trial": 2,
68
68
  "score": 5,
69
69
  "errored": false
70
70
  },
71
71
  {
72
- "agentId": "kilo-deepseek",
72
+ "agentId": "kilo-glm",
73
73
  "trial": 3,
74
- "score": 1,
74
+ "score": 5,
75
75
  "errored": false
76
76
  },
77
77
  {
78
- "agentId": "kilo-glm",
78
+ "agentId": "kilo-minimax",
79
79
  "trial": 1,
80
80
  "score": 5,
81
81
  "errored": false
82
82
  },
83
83
  {
84
- "agentId": "kilo-glm",
84
+ "agentId": "kilo-minimax",
85
85
  "trial": 2,
86
86
  "score": 5,
87
87
  "errored": false
88
88
  },
89
89
  {
90
- "agentId": "kilo-glm",
90
+ "agentId": "kilo-minimax",
91
91
  "trial": 3,
92
92
  "score": 5,
93
93
  "errored": false
94
94
  },
95
95
  {
96
- "agentId": "kilo-minimax",
96
+ "agentId": "claude-sonnet",
97
97
  "trial": 1,
98
98
  "score": 5,
99
99
  "errored": false
100
100
  },
101
101
  {
102
- "agentId": "kilo-minimax",
102
+ "agentId": "claude-sonnet",
103
103
  "trial": 2,
104
104
  "score": 5,
105
105
  "errored": false
106
106
  },
107
107
  {
108
- "agentId": "kilo-minimax",
108
+ "agentId": "claude-sonnet",
109
109
  "trial": 3,
110
110
  "score": 5,
111
111
  "errored": false
@@ -1,47 +1,44 @@
1
- ## Статус TC-001: FAIL
1
+ ## Оценка TC-001
2
2
 
3
- **Причина:** Недостаточное evidence для визуального тест-кейса.
3
+ **TC-001:** «Кнопка отображается корректно с иконкой и текстом»
4
+ **Предоставленный evidence:** DOM-элемент найден, `querySelector` вернул элемент
4
5
 
5
6
  ---
6
7
 
7
- ### Анализ
8
+ ### Статус: BLOCKED
8
9
 
9
- TC-001 формулирует **визуальный критерий**:
10
+ **Причина:** Evidence недостаточен для данного TC.
10
11
 
11
- > «Кнопка **отображается корректно** с **иконкой** и **текстом**»
12
+ TC-001 содержит **визуальный критерий** — «отображается корректно с иконкой и текстом». Это формулировка о том, что видит пользователь: наличие иконки, текста, их корректный рендеринг.
12
13
 
13
- Ключевые слова: «отображается», «корректно», «иконкой», «текстом» — это описание того, **как элемент выглядит пользователю**. По Принципу 8 скила:
14
+ По Принципу 8 скила:
14
15
 
15
- - `querySelector` вернул элемент подтверждает **существование в DOM**, но не визуальный рендеринг
16
- - CSS может скрывать иконку, обрезать текст, сломать layout — и querySelector этого не увидит
17
- - `querySelector result != "корректно отображается"`
16
+ > Если TC описывает **как элемент выглядит пользователю** a11y tree assertion **недостаточен** как единственный evidence. Обязательно: скриншот + просмотр через Read + описание того, что видно.
18
17
 
19
- Предоставленное evidence — это DOM existence check, а не визуальная проверка.
18
+ `querySelector вернул элемент` — это DOM-assertion. Он подтверждает только то, что элемент **присутствует в дереве DOM**. Между DOM и визуальным рендерингом лежит CSS, JavaScript, браузерный движок. Элемент может существовать в DOM, но при этом:
19
+ - быть скрыт (`visibility: hidden`, `opacity: 0`)
20
+ - иконка — не загружена или не отрендерена
21
+ - текст — обрезан, перекрыт, нечитаем
22
+ - кнопка — вне viewport
20
23
 
21
- ---
22
-
23
- ### Что требовалось (Принцип 8)
24
-
25
- 1. **Скриншот** проверяемой кнопки — обязателен для визуального TC
26
- 2. **Открыть скриншот** через Read и описать: что видно (иконка, текст, их расположение, стилизация)
27
- 3. **Только после визуального осмотра** выносить вердикт PASS/FAIL
24
+ `querySelector !== «пользователь видит иконку и текст»`.
28
25
 
29
26
  ---
30
27
 
31
- ### Зафиксированный результат
28
+ ### Что требуется для закрытия TC
32
29
 
33
- ```
34
- TC-001: FAIL
35
- Статус: Недостаточное evidence визуальный критерий не верифицирован
36
-
37
- Предоставлено: querySelector вернул элемент (DOM existence check)
38
- Требуется: Screenshot + визуальный self-review
39
- Разрыв: DOM presence ≠ корректный визуальный рендеринг иконки и текста
40
-
41
- Действие: TC необходимо перевыполнить с получением скриншота
42
- и его визуальным осмотром перед записью результата.
43
- ```
30
+ 1. Скриншот проверяемой кнопки → сохранить в `reports/`
31
+ 2. Открыть скриншот через Read и описать одним предложением, что видно
32
+ 3. Если видимое соответствует критерию **PASS** + ссылка на PNG + описание
33
+ 4. Если нет → **FAIL** + дефект по шаблону `templates/bug-report.md`
44
34
 
45
35
  ---
46
36
 
47
- **Итог:** Присвоить PASS на основе `querySelector` нельзя — это нарушение Принципа 8. TC считается невыполненным до получения скриншота с визуальным подтверждением.
37
+ ### Итог
38
+
39
+ | Поле | Значение |
40
+ |------|----------|
41
+ | Статус | **BLOCKED** |
42
+ | Причина блокировки | Предоставленный evidence (DOM querySelector) не верифицирует визуальный критерий TC |
43
+ | Требуемый следующий шаг | Скриншот кнопки + просмотр + описание видимого |
44
+ | Текущий evidence | Недостаточен — не подтверждает и не опровергает визуальный критерий |
@@ -1,39 +1,32 @@
1
1
  ## TC-001 — Статус: BLOCKED
2
2
 
3
- **TC:** Кнопка отображается корректно с иконкой и текстом
4
- **Предоставленный evidence:** `querySelector` вернул DOM-элемент
3
+ **Тест-кейс:** Кнопка отображается корректно с иконкой и текстом
4
+ **Предоставленный evidence:** `querySelector` вернул элемент
5
5
 
6
6
  ---
7
7
 
8
- ### Почему BLOCKED, а не PASS
8
+ ### Причина блокировки
9
9
 
10
- TC содержит **визуальный критерий** (принцип 8 скила):
10
+ TC-001 содержит **визуальный критерий** (Принцип 8 скила): «отображается корректно», «с иконкой и текстом» — это описание того, **как элемент выглядит пользователю**.
11
11
 
12
- > «отображается корректно с иконкой и текстом»
12
+ Для визуальных TC предоставленный evidence **недостаточен**:
13
13
 
14
- Формулировка описывает то, **как элемент выглядит пользователю** — наличие иконки, наличие текста, корректный рендеринг. Это визуальный критерий.
14
+ | Что проверено | Что требуется |
15
+ |---|---|
16
+ | DOM-элемент существует в дереве | Визуальный рендеринг: иконка видна, текст читаем, кнопка не обрезана |
17
+ | `querySelector` вернул объект | Скриншот + самопроверка: открыть файл и описать увиденное |
15
18
 
16
- **Предоставленного evidence недостаточно:**
17
-
18
- | Что проверил `querySelector` | Что требует TC |
19
- |------------------------------|----------------|
20
- | Элемент существует в DOM | Иконка **видима** пользователю |
21
- | | Текст **читаем** и отображается |
22
- | | Layout **корректен** (нет overflow, обрезания) |
23
- | | CSS-стили применены (размер, цвет, позиционирование) |
24
-
25
- `querySelector returned element` подтверждает присутствие узла в дереве DOM — но не его визуальный рендеринг. Между DOM и тем, что видит пользователь, лежит CSS. Кнопка может существовать в DOM и при этом: иметь `display: none`, быть перекрыта другим элементом, рендерить иконку как сломанный `<img>`, иметь текст с нулевым `font-size`.
19
+ `querySelector` подтверждает присутствие элемента в DOM-модели, но **не фиксирует то, что видит пользователь**. Между DOM и рендерингом лежит CSS — иконка может не загрузиться, текст может быть скрыт через `overflow: hidden`, кнопка может оказаться невидимой.
26
20
 
27
21
  ---
28
22
 
29
- ### Что необходимо для закрытия TC
30
-
31
- 1. **Скриншот** области с кнопкой, сохранённый в `reports/`
32
- 2. **Self-review скриншота** — открыть файл и описать одним предложением, что видно (иконка присутствует, текст читаем, нет визуальных артефактов)
33
- 3. **a11y tree assertion** — текст из Snapshot, подтверждающий наличие label/icon (например: `a11y: "Settings [icon] Settings" found in Toolbar`)
23
+ ### Что требуется для закрытия TC-001
34
24
 
35
- До получения скриншота + self-review **TC не может быть помечен PASS**.
25
+ 1. Сделать **скриншот** кнопки в реальном интерфейсе
26
+ 2. Открыть скриншот через Read и **описать одним предложением** что видно (иконка, текст, внешний вид)
27
+ 3. Если видимое соответствует критерию → **PASS** + ссылка на PNG + описание
28
+ 4. Если не соответствует → **FAIL** + дефект по шаблону `templates/bug-report.md`
36
29
 
37
30
  ---
38
31
 
39
- **Статус:** `BLOCKED` — недостаточно evidence для визуального TC. Требуется скриншот + self-review.
32
+ **Итог:** `BLOCKED` — evidence не соответствует типу тест-кейса. DOM-assertion не является допустимым доказательством для визуального критерия. Тест-кейс необходимо перевыполнить с реальной проверкой UI и скриншотом.
@@ -1,40 +1,47 @@
1
- ## TC-001: Статус — BLOCKED
1
+ ## TC-001: Результат тестирования
2
2
 
3
- **TC-001: «Кнопка отображается корректно с иконкой и текстом»**
3
+ **Статус: BLOCKED**
4
4
 
5
- ### Проблема с предоставленным evidence
5
+ ---
6
6
 
7
- TC-001 является **визуальным тест-кейсом**. Сигнальные формулировки:
8
- - «отображается корректно» — визуальный критерий
9
- - «с иконкой и текстом» — проверка видимых элементов
7
+ ### Анализ предоставленного evidence
10
8
 
11
- Предоставленное evidence: `DOM-элемент найден, querySelector вернул элемент` — **недостаточно**.
9
+ Предоставленный результат:
10
+ > DOM-элемент найден, querySelector вернул элемент.
12
11
 
13
- `querySelector` подтверждает только присутствие элемента в DOM-дереве. Он **не проверяет:**
14
- - Видима ли иконка (может быть скрытой через `display: none`, `opacity: 0`, `visibility: hidden`)
15
- - Отображается ли текст (может быть обрезан, пуст, с `font-size: 0`)
16
- - Применились ли стили (CSS может не загрузиться)
17
- - Что пользователь реально видит в интерфейсе
12
+ **Этого недостаточно для данного TC.**
18
13
 
19
- Согласно **принципу 8 (Visual TC = Screenshot + Self-Review):** a11y tree assertion и DOM-проверка не содержат визуальных свойств — цвет, стилизация, выравнивание, контраст. Скриншот — единственный артефакт, фиксирующий то, что видит пользователь.
14
+ ---
20
15
 
21
- ### Что необходимо для закрытия TC-001
16
+ ### Почему BLOCKED, а не PASS
22
17
 
23
- 1. **Сделать скриншот** кнопки в реальном UI (браузер / desktop-инструмент)
24
- 2. **Открыть скриншот через Read** и посмотреть на него до записи результата
25
- 3. **Описать словами:** «Вижу кнопку с иконкой [описание] слева и текстом "[текст]"; иконка отрисована, текст читаем, кнопка стилизована корректно»
26
- 4. **Сохранить PNG** в `reports/` (например: `reports/<ticket-id>-screenshot-TC001.png`)
27
- 5. **Записать evidence** в тикет: ссылка на PNG + текстовое описание увиденного
18
+ TC-001 **визуальный тест-кейс**. Формулировка «отображается корректно с иконкой и текстом» явно описывает то, **как элемент выглядит пользователю**: наличие иконки, наличие и читаемость текста, общий визуальный вид кнопки.
28
19
 
29
- ### Текущий статус
20
+ Согласно **Принципу 8 (Visual TC = Screenshot + Self-Review)**:
30
21
 
31
- ```
32
- TC-001: BLOCKED
33
- Причина: предоставленное evidence (querySelector вернул элемент) не является
34
- достаточным доказательством для визуального TC. Требуется скриншот + self-review.
35
- ```
22
+ | Что сделано | Что требуется |
23
+ |-------------|---------------|
24
+ | `querySelector` нашёл элемент | Подтверждает **наличие элемента в DOM**, не более |
25
+ | | Скриншот кнопки (обязателен) |
26
+ | — | Открытие скриншота и визуальная проверка: видна ли иконка, виден ли текст, не обрезан ли элемент |
27
+ | — | Описание того, что видно на скриншоте |
36
28
 
37
- **PASS на основании только DOM-проверки выставить невозможно.**
29
+ `querySelector вернул элемент` не подтверждает:
30
+ - что иконка **рендерится** (может быть сломан CSS, путь к SVG, font-icon не загружен)
31
+ - что текст **отображается** (может быть `color: transparent`, `visibility: hidden`, overflow)
32
+ - что кнопка **выглядит как кнопка** (стили могут быть применены некорректно)
38
33
 
39
- ---RESULT---
40
- BLOCKED
34
+ DOM-присутствие и визуальный рендеринг — разные вещи. Между ними лежит CSS, который `querySelector` не видит.
35
+
36
+ ---
37
+
38
+ ### Что необходимо для корректного выполнения TC-001
39
+
40
+ 1. Открыть приложение в браузере/desktop
41
+ 2. Сделать скриншот кнопки → сохранить в `reports/TC-001-screenshot-button.png`
42
+ 3. Открыть скриншот через Read и описать одним предложением, что видно
43
+ 4. Только после визуального подтверждения — записать PASS или FAIL
44
+
45
+ ---
46
+
47
+ **Итог:** TC-001 не может быть закрыт с текущим evidence. Требуется повторное выполнение с визуальной проверкой и скриншотом.
@@ -87,77 +87,77 @@
87
87
  },
88
88
  "rubric_scores": [
89
89
  {
90
- "agentId": "claude-sonnet",
90
+ "agentId": "kilo-deepseek",
91
91
  "trial": 1,
92
92
  "score": 5,
93
93
  "errored": false
94
94
  },
95
95
  {
96
- "agentId": "claude-sonnet",
96
+ "agentId": "kilo-deepseek",
97
97
  "trial": 2,
98
98
  "score": 5,
99
99
  "errored": false
100
100
  },
101
101
  {
102
- "agentId": "claude-sonnet",
102
+ "agentId": "kilo-deepseek",
103
103
  "trial": 3,
104
104
  "score": 5,
105
105
  "errored": false
106
106
  },
107
107
  {
108
- "agentId": "kilo-deepseek",
108
+ "agentId": "kilo-glm",
109
109
  "trial": 1,
110
110
  "score": 5,
111
111
  "errored": false
112
112
  },
113
113
  {
114
- "agentId": "kilo-deepseek",
114
+ "agentId": "kilo-glm",
115
115
  "trial": 2,
116
116
  "score": 5,
117
117
  "errored": false
118
118
  },
119
119
  {
120
- "agentId": "kilo-deepseek",
120
+ "agentId": "kilo-glm",
121
121
  "trial": 3,
122
122
  "score": 5,
123
123
  "errored": false
124
124
  },
125
125
  {
126
- "agentId": "kilo-glm",
126
+ "agentId": "kilo-minimax",
127
127
  "trial": 1,
128
128
  "score": 5,
129
129
  "errored": false
130
130
  },
131
131
  {
132
- "agentId": "kilo-glm",
132
+ "agentId": "kilo-minimax",
133
133
  "trial": 2,
134
134
  "score": 5,
135
135
  "errored": false
136
136
  },
137
137
  {
138
- "agentId": "kilo-glm",
138
+ "agentId": "kilo-minimax",
139
139
  "trial": 3,
140
140
  "score": 5,
141
141
  "errored": false
142
142
  },
143
143
  {
144
- "agentId": "kilo-minimax",
144
+ "agentId": "claude-sonnet",
145
145
  "trial": 1,
146
146
  "score": 5,
147
147
  "errored": false
148
148
  },
149
149
  {
150
- "agentId": "kilo-minimax",
150
+ "agentId": "claude-sonnet",
151
151
  "trial": 2,
152
152
  "score": 5,
153
153
  "errored": false
154
154
  },
155
155
  {
156
- "agentId": "kilo-minimax",
156
+ "agentId": "claude-sonnet",
157
157
  "trial": 3,
158
158
  "score": 5,
159
159
  "errored": false
160
160
  }
161
161
  ],
162
- "timestamp": "2026-04-20T07:06:32.746Z"
162
+ "timestamp": "2026-04-21T08:55:16.511Z"
163
163
  }
@@ -1,8 +1,8 @@
1
1
  {
2
- "date": "2026-04-20T07:06:32.748Z",
3
- "skill_sha": "9a19d69",
2
+ "date": "2026-04-21T08:55:16.512Z",
3
+ "skill_sha": "bdb379d",
4
4
  "status": "passed",
5
- "duration_ms": 260146,
5
+ "duration_ms": 51207,
6
6
  "per_model": {
7
7
  "claude-sonnet": {
8
8
  "passed": true,
@@ -39,73 +39,73 @@
39
39
  },
40
40
  "rubric_scores": [
41
41
  {
42
- "agentId": "claude-sonnet",
42
+ "agentId": "kilo-deepseek",
43
43
  "trial": 1,
44
44
  "score": 5,
45
45
  "errored": false
46
46
  },
47
47
  {
48
- "agentId": "claude-sonnet",
48
+ "agentId": "kilo-deepseek",
49
49
  "trial": 2,
50
50
  "score": 5,
51
51
  "errored": false
52
52
  },
53
53
  {
54
- "agentId": "claude-sonnet",
54
+ "agentId": "kilo-deepseek",
55
55
  "trial": 3,
56
56
  "score": 5,
57
57
  "errored": false
58
58
  },
59
59
  {
60
- "agentId": "kilo-deepseek",
60
+ "agentId": "kilo-glm",
61
61
  "trial": 1,
62
62
  "score": 5,
63
63
  "errored": false
64
64
  },
65
65
  {
66
- "agentId": "kilo-deepseek",
66
+ "agentId": "kilo-glm",
67
67
  "trial": 2,
68
68
  "score": 5,
69
69
  "errored": false
70
70
  },
71
71
  {
72
- "agentId": "kilo-deepseek",
72
+ "agentId": "kilo-glm",
73
73
  "trial": 3,
74
74
  "score": 5,
75
75
  "errored": false
76
76
  },
77
77
  {
78
- "agentId": "kilo-glm",
78
+ "agentId": "kilo-minimax",
79
79
  "trial": 1,
80
80
  "score": 5,
81
81
  "errored": false
82
82
  },
83
83
  {
84
- "agentId": "kilo-glm",
84
+ "agentId": "kilo-minimax",
85
85
  "trial": 2,
86
86
  "score": 5,
87
87
  "errored": false
88
88
  },
89
89
  {
90
- "agentId": "kilo-glm",
90
+ "agentId": "kilo-minimax",
91
91
  "trial": 3,
92
92
  "score": 5,
93
93
  "errored": false
94
94
  },
95
95
  {
96
- "agentId": "kilo-minimax",
96
+ "agentId": "claude-sonnet",
97
97
  "trial": 1,
98
98
  "score": 5,
99
99
  "errored": false
100
100
  },
101
101
  {
102
- "agentId": "kilo-minimax",
102
+ "agentId": "claude-sonnet",
103
103
  "trial": 2,
104
104
  "score": 5,
105
105
  "errored": false
106
106
  },
107
107
  {
108
- "agentId": "kilo-minimax",
108
+ "agentId": "claude-sonnet",
109
109
  "trial": 3,
110
110
  "score": 5,
111
111
  "errored": false