workflow-ai 1.0.68 → 1.1.0
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/package.json +10 -7
- package/src/lib/operations/plans.mjs +85 -0
- package/src/lib/operations/skills.mjs +124 -0
- package/src/lib/operations/tickets.mjs +332 -0
- package/src/scripts/get-next-id.js +39 -165
- package/src/scripts/move-ticket.js +68 -225
- package/src/scripts/pick-next-task.js +93 -759
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-1.md +4 -68
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-2.md +53 -58
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/claude-sonnet/trial-3.md +48 -48
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/judge.json +15 -15
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-001/current/meta.json +16 -16
- package/src/skills/analyze-report/tests/cases/TC-ANALYZE-REPORT-002/current/claude-sonnet/trial-3.md +4 -76
- package/src/skills/coach/tests/cases/TC-COACH-001/current/meta.json +93 -93
- package/src/skills/coach/tests/cases/TC-COACH-002/current/meta.json +93 -93
- package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/meta.json +113 -113
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/meta.json +87 -87
- package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/meta.json +87 -87
- package/src/skills/review-result/SKILL.md +1 -0
- package/src/skills/review-result/knowledge/baseline-snapshot-validation.md +67 -0
- package/src/skills/review-result/knowledge/dod-patterns.md +1 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-1.md +2 -2
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-2.md +2 -2
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-3.md +2 -14
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/judge.json +18 -18
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/meta.json +20 -20
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-2.md +2 -34
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/judge.json +19 -19
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/meta.json +21 -21
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-1.md +36 -3
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-2.md +11 -3
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-3.md +3 -3
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/judge.json +18 -18
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/meta.json +20 -20
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/claude-sonnet/trial-1.md +5 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/claude-sonnet/trial-2.md +5 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/claude-sonnet/trial-3.md +6 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/judge.json +46 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004/current/meta.json +37 -0
- package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-004-baseline-snapshot.yaml +50 -0
- package/src/skills/review-result/tests/fixtures/QA-905-baseline-regex-instead-of-snapshot/QA-905.md +62 -0
- package/src/skills/review-result/tests/fixtures/QA-905-baseline-regex-instead-of-snapshot/baseline.test.mjs +124 -0
- package/src/skills/review-result/tests/index.yaml +5 -0
- package/src/skills/review-result/tests/rubrics/baseline-snapshot.md +20 -0
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
| Код проходит линтер | `compilation` | Запустить lint |
|
|
14
14
|
| Реализована функция X | `text` | Проверить наличие функции, её сигнатуру и логику |
|
|
15
15
|
| Тесты на маппинг/парсинг данных | `tests` + `text` | Проверить, что тестовые fixtures содержат **реальные** значения из runtime-источника (лог, конфиг, API), а не синтетические. Прочитать источник данных и сверить с fixtures. Если fixtures не соответствуют реальным данным — тесты тавтологичны |
|
|
16
|
+
| Baseline / snapshot / эталон / regression-фиксация | `tests` + `structure` | Проверка способа реализации теста (точное сравнение нормализованного output с литералом-эталоном vs регекс/includes по подстроке). См. `knowledge/baseline-snapshot-validation.md` — обязательная загрузка при триггерных формулировках DoD. |
|
|
16
17
|
| Документация обновлена | `text` | Проверить JSDoc / README / комментарии |
|
|
17
18
|
|
|
18
19
|
### fix (исправление бага)
|
package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-1.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---RESULT---
|
|
2
2
|
status: failed
|
|
3
3
|
issues:
|
|
4
|
-
- "DoD
|
|
5
|
-
- "
|
|
4
|
+
- "DoD пункт 1 «Кнопка визуально соответствует макету» не верифицирован: визуальный критерий требует скриншот как evidence (шаг 4.7, триггер B), однако скриншоты не приложены. Исполнитель явно подтвердил: «Скриншоты не прикладывал — проверял локально в браузере». Визуальное соответствие макету не может быть подтверждено без визуального артефакта. [HIGH]"
|
|
5
|
+
- "QA-тикет не содержит требуемого evidence: отсутствуют a11y assertion и детальное описание шагов воспроизведения. Фраза «проверял локально в браузере» не является достаточным evidence по правилам шага 5.1."
|
|
6
6
|
---RESULT---
|
package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-2.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---RESULT---
|
|
2
2
|
status: failed
|
|
3
3
|
issues:
|
|
4
|
-
- "DoD п.1 «Кнопка визуально соответствует
|
|
5
|
-
- "
|
|
4
|
+
- "DoD п.1 «Кнопка визуально соответствует макету» не подтверждён: ожидалось визуальное evidence (скриншот или a11y assertion), получено только текстовое утверждение «проверял локально в браузере» — без артефактов. Файл скриншота не приложен и физически не существует."
|
|
5
|
+
- "Файл-артефакт src/components/SubmitButton.tsx физически отсутствует в репозитории."
|
|
6
6
|
---RESULT---
|
package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-001/current/claude-sonnet/trial-3.md
CHANGED
|
@@ -1,18 +1,6 @@
|
|
|
1
|
-
**Анализ:**
|
|
2
|
-
|
|
3
|
-
Тикет QA-901 содержит три визуальных DoD-критерия. Триггер B по шагу 4.7 сработал: «Кнопка визуально соответствует макету» — явная визуальная формулировка.
|
|
4
|
-
|
|
5
|
-
**Шаг 4.7.0:** Поиск скриншотов дал пустой результат. Исполнитель явно написал: *«Скриншоты не прикладывал — проверял локально в браузере»*. Визуальные evidence полностью отсутствуют.
|
|
6
|
-
|
|
7
|
-
**По правилу 5.1 (QA-тикеты):** Тестировщик не приложил ни a11y assertion, ни описания шагов, ни скриншотов → FAIL.
|
|
8
|
-
|
|
9
|
-
**Дополнительно:** файл `src/components/SubmitButton.tsx` физически не найден в рабочей директории.
|
|
10
|
-
|
|
11
1
|
---RESULT---
|
|
12
2
|
status: failed
|
|
13
3
|
issues:
|
|
14
|
-
- "DoD
|
|
15
|
-
- "DoD
|
|
16
|
-
- "DoD п.3 «Скругление углов 8px»: отсутствует evidence (нет скриншота, нет CSS-проверки)."
|
|
17
|
-
- "Файл src/components/SubmitButton.tsx физически не найден в рабочей директории."
|
|
4
|
+
- "Пункт DoD 1 не выполнен: визуальный критерий «Кнопка визуально соответствует макету» не подтверждён — скриншоты отсутствуют физически, executor явно указал «скриншоты не прикладывал». Визуальное свойство не может быть верифицировано без визуального артефакта. [HIGH, шаг 4.7.0]"
|
|
5
|
+
- "Отсутствует evidence для всех трёх пунктов DoD: в секции Result нет a11y tree assertion, DOM-проверок, пошагового описания тест-шагов с ожидаемым/фактическим результатом. Указано только «проверял локально в браузере» — недостаточно для QA-тикета (шаг 5.1: «не приложил evidence»)."
|
|
18
6
|
---RESULT---
|
|
@@ -87,78 +87,78 @@
|
|
|
87
87
|
},
|
|
88
88
|
"rubric_scores": [
|
|
89
89
|
{
|
|
90
|
-
"agentId": "
|
|
90
|
+
"agentId": "kilo-deepseek",
|
|
91
91
|
"trial": 1,
|
|
92
|
-
"score":
|
|
93
|
-
"errored":
|
|
92
|
+
"score": null,
|
|
93
|
+
"errored": true,
|
|
94
|
+
"error": "Stage \"TC-REVIEW-RESULT-001-kilo-deepseek-trial-1\" timed out after 1200s"
|
|
94
95
|
},
|
|
95
96
|
{
|
|
96
|
-
"agentId": "
|
|
97
|
+
"agentId": "kilo-deepseek",
|
|
97
98
|
"trial": 2,
|
|
98
99
|
"score": 5,
|
|
99
100
|
"errored": false
|
|
100
101
|
},
|
|
101
102
|
{
|
|
102
|
-
"agentId": "
|
|
103
|
+
"agentId": "kilo-deepseek",
|
|
103
104
|
"trial": 3,
|
|
104
105
|
"score": 5,
|
|
105
106
|
"errored": false
|
|
106
107
|
},
|
|
107
108
|
{
|
|
108
|
-
"agentId": "kilo-
|
|
109
|
+
"agentId": "kilo-glm",
|
|
109
110
|
"trial": 1,
|
|
110
|
-
"score":
|
|
111
|
-
"errored":
|
|
112
|
-
"error": "Stage \"TC-REVIEW-RESULT-001-kilo-deepseek-trial-1\" timed out after 1200s"
|
|
111
|
+
"score": 5,
|
|
112
|
+
"errored": false
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
|
-
"agentId": "kilo-
|
|
115
|
+
"agentId": "kilo-glm",
|
|
116
116
|
"trial": 2,
|
|
117
117
|
"score": 5,
|
|
118
118
|
"errored": false
|
|
119
119
|
},
|
|
120
120
|
{
|
|
121
|
-
"agentId": "kilo-
|
|
121
|
+
"agentId": "kilo-glm",
|
|
122
122
|
"trial": 3,
|
|
123
123
|
"score": 5,
|
|
124
124
|
"errored": false
|
|
125
125
|
},
|
|
126
126
|
{
|
|
127
|
-
"agentId": "kilo-
|
|
127
|
+
"agentId": "kilo-minimax",
|
|
128
128
|
"trial": 1,
|
|
129
129
|
"score": 5,
|
|
130
130
|
"errored": false
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
|
-
"agentId": "kilo-
|
|
133
|
+
"agentId": "kilo-minimax",
|
|
134
134
|
"trial": 2,
|
|
135
135
|
"score": 5,
|
|
136
136
|
"errored": false
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
|
-
"agentId": "kilo-
|
|
139
|
+
"agentId": "kilo-minimax",
|
|
140
140
|
"trial": 3,
|
|
141
141
|
"score": 5,
|
|
142
142
|
"errored": false
|
|
143
143
|
},
|
|
144
144
|
{
|
|
145
|
-
"agentId": "
|
|
145
|
+
"agentId": "claude-sonnet",
|
|
146
146
|
"trial": 1,
|
|
147
147
|
"score": 5,
|
|
148
148
|
"errored": false
|
|
149
149
|
},
|
|
150
150
|
{
|
|
151
|
-
"agentId": "
|
|
151
|
+
"agentId": "claude-sonnet",
|
|
152
152
|
"trial": 2,
|
|
153
153
|
"score": 5,
|
|
154
154
|
"errored": false
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
|
-
"agentId": "
|
|
157
|
+
"agentId": "claude-sonnet",
|
|
158
158
|
"trial": 3,
|
|
159
159
|
"score": 5,
|
|
160
160
|
"errored": false
|
|
161
161
|
}
|
|
162
162
|
],
|
|
163
|
-
"timestamp": "2026-04-
|
|
163
|
+
"timestamp": "2026-04-25T07:11:20.099Z"
|
|
164
164
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"date": "2026-04-
|
|
3
|
-
"skill_sha": "
|
|
2
|
+
"date": "2026-04-25T07:11:20.108Z",
|
|
3
|
+
"skill_sha": "b6cda8a",
|
|
4
4
|
"status": "passed",
|
|
5
|
-
"duration_ms":
|
|
5
|
+
"duration_ms": 138941,
|
|
6
6
|
"l1_skipped": true,
|
|
7
7
|
"per_model": {
|
|
8
8
|
"claude-sonnet": {
|
|
@@ -40,74 +40,74 @@
|
|
|
40
40
|
},
|
|
41
41
|
"rubric_scores": [
|
|
42
42
|
{
|
|
43
|
-
"agentId": "
|
|
43
|
+
"agentId": "kilo-deepseek",
|
|
44
44
|
"trial": 1,
|
|
45
|
-
"score":
|
|
46
|
-
"errored":
|
|
45
|
+
"score": null,
|
|
46
|
+
"errored": true,
|
|
47
|
+
"error": "Stage \"TC-REVIEW-RESULT-001-kilo-deepseek-trial-1\" timed out after 1200s"
|
|
47
48
|
},
|
|
48
49
|
{
|
|
49
|
-
"agentId": "
|
|
50
|
+
"agentId": "kilo-deepseek",
|
|
50
51
|
"trial": 2,
|
|
51
52
|
"score": 5,
|
|
52
53
|
"errored": false
|
|
53
54
|
},
|
|
54
55
|
{
|
|
55
|
-
"agentId": "
|
|
56
|
+
"agentId": "kilo-deepseek",
|
|
56
57
|
"trial": 3,
|
|
57
58
|
"score": 5,
|
|
58
59
|
"errored": false
|
|
59
60
|
},
|
|
60
61
|
{
|
|
61
|
-
"agentId": "kilo-
|
|
62
|
+
"agentId": "kilo-glm",
|
|
62
63
|
"trial": 1,
|
|
63
|
-
"score":
|
|
64
|
-
"errored":
|
|
65
|
-
"error": "Stage \"TC-REVIEW-RESULT-001-kilo-deepseek-trial-1\" timed out after 1200s"
|
|
64
|
+
"score": 5,
|
|
65
|
+
"errored": false
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
|
-
"agentId": "kilo-
|
|
68
|
+
"agentId": "kilo-glm",
|
|
69
69
|
"trial": 2,
|
|
70
70
|
"score": 5,
|
|
71
71
|
"errored": false
|
|
72
72
|
},
|
|
73
73
|
{
|
|
74
|
-
"agentId": "kilo-
|
|
74
|
+
"agentId": "kilo-glm",
|
|
75
75
|
"trial": 3,
|
|
76
76
|
"score": 5,
|
|
77
77
|
"errored": false
|
|
78
78
|
},
|
|
79
79
|
{
|
|
80
|
-
"agentId": "kilo-
|
|
80
|
+
"agentId": "kilo-minimax",
|
|
81
81
|
"trial": 1,
|
|
82
82
|
"score": 5,
|
|
83
83
|
"errored": false
|
|
84
84
|
},
|
|
85
85
|
{
|
|
86
|
-
"agentId": "kilo-
|
|
86
|
+
"agentId": "kilo-minimax",
|
|
87
87
|
"trial": 2,
|
|
88
88
|
"score": 5,
|
|
89
89
|
"errored": false
|
|
90
90
|
},
|
|
91
91
|
{
|
|
92
|
-
"agentId": "kilo-
|
|
92
|
+
"agentId": "kilo-minimax",
|
|
93
93
|
"trial": 3,
|
|
94
94
|
"score": 5,
|
|
95
95
|
"errored": false
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
|
-
"agentId": "
|
|
98
|
+
"agentId": "claude-sonnet",
|
|
99
99
|
"trial": 1,
|
|
100
100
|
"score": 5,
|
|
101
101
|
"errored": false
|
|
102
102
|
},
|
|
103
103
|
{
|
|
104
|
-
"agentId": "
|
|
104
|
+
"agentId": "claude-sonnet",
|
|
105
105
|
"trial": 2,
|
|
106
106
|
"score": 5,
|
|
107
107
|
"errored": false
|
|
108
108
|
},
|
|
109
109
|
{
|
|
110
|
-
"agentId": "
|
|
110
|
+
"agentId": "claude-sonnet",
|
|
111
111
|
"trial": 3,
|
|
112
112
|
"score": 5,
|
|
113
113
|
"errored": false
|
package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-002/current/claude-sonnet/trial-2.md
CHANGED
|
@@ -1,36 +1,4 @@
|
|
|
1
|
-
Теперь у меня достаточно данных для вердикта.
|
|
2
|
-
|
|
3
|
-
**Разбор тикета IMPL-902:**
|
|
4
|
-
|
|
5
|
-
**Шаг 0**: Секции `## Ревью` нет → полная проверка.
|
|
6
|
-
|
|
7
|
-
**Путь с line-range нотацией**: `src/background/index.ts:204-211` → файл `src/background/index.ts`, строки 204–211. Суффикс `:204-211` корректно распознан как указание на диапазон строк, не часть имени файла. Файл найден: `/d/Dev/PulseProxy/src/background/index.ts` существует.
|
|
8
|
-
|
|
9
|
-
**Содержимое строк 204–211:**
|
|
10
|
-
```typescript
|
|
11
|
-
// Bypass HTTP cache — the test must hit the network via PAC, not return a cached response.
|
|
12
|
-
response = await fetch(url, {
|
|
13
|
-
signal: AbortSignal.timeout(CHECK_PROXY_TIMEOUT_MS),
|
|
14
|
-
cache: 'no-store',
|
|
15
|
-
headers: {
|
|
16
|
-
'Cache-Control': 'no-cache',
|
|
17
|
-
'Pragma': 'no-cache',
|
|
18
|
-
},
|
|
19
|
-
});
|
|
20
|
-
```
|
|
21
|
-
Это HTTP cache bypass для PAC-проверки, **не логика парсинга URL с query string**.
|
|
22
|
-
|
|
23
|
-
**Проверка DoD:**
|
|
24
|
-
|
|
25
|
-
- **[x] Парсер обрабатывает URL с query string без потери параметров** — строки 204–211 содержат `fetch()` с cache-bypass заголовками. Паттерны `parseUrl`, `parseRedirect`, `queryString`, `redirect_to` в `src/background/index.ts` не найдены. Критерий **не подтверждён**.
|
|
26
|
-
|
|
27
|
-
- **[x] Добавлен unit-тест на edge-case с пустым `redirect_to`** — поиск `redirect_to` по всем `.ts` файлам PulseProxy дал 0 результатов. Unit-тест не найден. Критерий **не подтверждён**.
|
|
28
|
-
|
|
29
|
-
**Result**: заполнен содержательно ("Логика парсинга вынесена в отдельную функцию, добавлен тест. Все пункты DoD выполнены."), но заявленные артефакты отсутствуют.
|
|
30
|
-
|
|
31
1
|
---RESULT---
|
|
32
|
-
status:
|
|
33
|
-
issues:
|
|
34
|
-
- "DoD п.1 не подтверждён: строки 204-211 файла src/background/index.ts содержат HTTP cache bypass (fetch + 'cache: no-store'), а не логику парсинга URL с query string. Функция парсинга URL и обработки параметра redirect_to в указанном диапазоне строк и во всём файле не обнаружена."
|
|
35
|
-
- "DoD п.2 не подтверждён: поиск `redirect_to` по всем .ts файлам проекта дал 0 результатов — unit-тест на edge-case с пустым redirect_to отсутствует."
|
|
2
|
+
status: passed
|
|
3
|
+
issues: []
|
|
36
4
|
---RESULT---
|
|
@@ -86,24 +86,6 @@
|
|
|
86
86
|
}
|
|
87
87
|
},
|
|
88
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
89
|
{
|
|
108
90
|
"agentId": "kilo-deepseek",
|
|
109
91
|
"trial": 1,
|
|
@@ -157,7 +139,25 @@
|
|
|
157
139
|
"trial": 3,
|
|
158
140
|
"score": 5,
|
|
159
141
|
"errored": false
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"agentId": "claude-sonnet",
|
|
145
|
+
"trial": 1,
|
|
146
|
+
"score": 5,
|
|
147
|
+
"errored": false
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"agentId": "claude-sonnet",
|
|
151
|
+
"trial": 2,
|
|
152
|
+
"score": 5,
|
|
153
|
+
"errored": false
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"agentId": "claude-sonnet",
|
|
157
|
+
"trial": 3,
|
|
158
|
+
"score": 5,
|
|
159
|
+
"errored": false
|
|
160
160
|
}
|
|
161
161
|
],
|
|
162
|
-
"timestamp": "2026-04-
|
|
162
|
+
"timestamp": "2026-04-25T07:11:16.170Z"
|
|
163
163
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"date": "2026-04-
|
|
3
|
-
"skill_sha": "
|
|
2
|
+
"date": "2026-04-25T07:11:16.181Z",
|
|
3
|
+
"skill_sha": "b6cda8a",
|
|
4
4
|
"status": "passed",
|
|
5
|
-
"duration_ms":
|
|
5
|
+
"duration_ms": 132102,
|
|
6
6
|
"l1_skipped": true,
|
|
7
7
|
"per_model": {
|
|
8
8
|
"claude-sonnet": {
|
|
@@ -39,24 +39,6 @@
|
|
|
39
39
|
}
|
|
40
40
|
},
|
|
41
41
|
"rubric_scores": [
|
|
42
|
-
{
|
|
43
|
-
"agentId": "claude-sonnet",
|
|
44
|
-
"trial": 1,
|
|
45
|
-
"score": 5,
|
|
46
|
-
"errored": false
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
"agentId": "claude-sonnet",
|
|
50
|
-
"trial": 2,
|
|
51
|
-
"score": 5,
|
|
52
|
-
"errored": false
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"agentId": "claude-sonnet",
|
|
56
|
-
"trial": 3,
|
|
57
|
-
"score": 5,
|
|
58
|
-
"errored": false
|
|
59
|
-
},
|
|
60
42
|
{
|
|
61
43
|
"agentId": "kilo-deepseek",
|
|
62
44
|
"trial": 1,
|
|
@@ -110,6 +92,24 @@
|
|
|
110
92
|
"trial": 3,
|
|
111
93
|
"score": 5,
|
|
112
94
|
"errored": false
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"agentId": "claude-sonnet",
|
|
98
|
+
"trial": 1,
|
|
99
|
+
"score": 5,
|
|
100
|
+
"errored": false
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"agentId": "claude-sonnet",
|
|
104
|
+
"trial": 2,
|
|
105
|
+
"score": 5,
|
|
106
|
+
"errored": false
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"agentId": "claude-sonnet",
|
|
110
|
+
"trial": 3,
|
|
111
|
+
"score": 5,
|
|
112
|
+
"errored": false
|
|
113
113
|
}
|
|
114
114
|
]
|
|
115
115
|
}
|
package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-1.md
CHANGED
|
@@ -1,7 +1,40 @@
|
|
|
1
|
+
**Проверка DoD тикета QA-904:**
|
|
2
|
+
|
|
3
|
+
**Пункт 1** `[x]` Файл создан — подтверждён наличием содержимого. ✓
|
|
4
|
+
|
|
5
|
+
**Пункт 2** `[x]` Тест проходит — указано в условии задачи. ✓
|
|
6
|
+
|
|
7
|
+
**Пункт 3** `[x]` Изоляция — НАРУШЕНА. Три красных флага:
|
|
8
|
+
|
|
9
|
+
1. **Корень артефактов в рабочем репозитории:**
|
|
10
|
+
```js
|
|
11
|
+
const testProjectRoot = join(__dirname, '..', '..'); // строки 16-17
|
|
12
|
+
const testConfigPath = join(testProjectRoot, '.workflow', 'config', 'sample.yaml');
|
|
13
|
+
```
|
|
14
|
+
Путь строится через `__dirname` с подъёмом к корню репозитория — не через стандартный системный tmp (`os.tmpdir()` / `mkdtemp`).
|
|
15
|
+
|
|
16
|
+
2. **Cleanup удаляет конкретный файл, а не весь tmp-корень:**
|
|
17
|
+
```js
|
|
18
|
+
try { rmSync(testConfigPath); } catch (e) {} // строка 31
|
|
19
|
+
```
|
|
20
|
+
При прерывании до этой строки файл `.workflow/config/sample.yaml` останется в рабочем репозитории.
|
|
21
|
+
|
|
22
|
+
3. **Cleanup в теле test-функции, а не в teardown/after-hook:**
|
|
23
|
+
```js
|
|
24
|
+
test('...', () => {
|
|
25
|
+
createTestConfig('key: value\n');
|
|
26
|
+
assert.ok(true);
|
|
27
|
+
cleanupTestConfig(); // строка 37 — не защищён от падения assertion
|
|
28
|
+
});
|
|
29
|
+
```
|
|
30
|
+
Если `assert.ok(true)` было бы `assert.ok(false)`, cleanup не выполнится.
|
|
31
|
+
|
|
32
|
+
Пункт DoD «не пишет в рабочий репозиторий (изоляция в teardown/after-hook)» не выполнен, несмотря на отметку `[x]`.
|
|
33
|
+
|
|
1
34
|
---RESULT---
|
|
2
35
|
status: failed
|
|
3
36
|
issues:
|
|
4
|
-
- "Пункт DoD
|
|
5
|
-
- "Пункт DoD
|
|
6
|
-
- "Пункт DoD
|
|
37
|
+
- "Пункт DoD 3 нарушен — тест пишет в рабочий репозиторий: `const testProjectRoot = join(__dirname, '..', '..')` (example-test.mjs:16-17) указывает на корень репозитория, а не на системный tmp. Ожидалось: корень артефактов через os.tmpdir()/mkdtemp, получено: путь внутри .workflow/config/ рабочего репозитория."
|
|
38
|
+
- "Пункт DoD 3 нарушен — cleanup удаляет конкретный файл, а не tmp-корень: `rmSync(testConfigPath)` (example-test.mjs:31). При прерывании до cleanup файл .workflow/config/sample.yaml останется в репозитории."
|
|
39
|
+
- "Пункт DoD 3 нарушен — cleanup вызывается в теле test-функции (example-test.mjs:37), а не в teardown/after-hook. Падение любого assertion до cleanupTestConfig() оставит артефакты в рабочем репозитории."
|
|
7
40
|
---RESULT---
|
package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-2.md
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
|
+
Я прочитал тикет и тест-файл. Провожу проверку по DoD.
|
|
2
|
+
|
|
3
|
+
**DoD пункт 3** — "Тест создаёт и уничтожает tmp-корень, не пишет в рабочий репозиторий (изоляция в teardown/after-hook)" — нарушен по трём основаниям:
|
|
4
|
+
|
|
5
|
+
1. `const testProjectRoot = join(__dirname, '..', '..')` — путь к артефактам строится от `__dirname` с подъёмом к корню репозитория, без префикса системного tmp.
|
|
6
|
+
2. `writeFileSync(testConfigPath, content)` — файл создаётся в `.workflow/config/sample.yaml` внутри рабочего репозитория.
|
|
7
|
+
3. `cleanupTestConfig()` вызывается в теле `test`, а не в teardown/after-hook — при падении assertion до этой строки файл останется в репозитории. Плюс удаляется конкретный файл, а не весь tmp-корень.
|
|
8
|
+
|
|
1
9
|
---RESULT---
|
|
2
10
|
status: failed
|
|
3
11
|
issues:
|
|
4
|
-
- "DoD
|
|
5
|
-
- "DoD
|
|
6
|
-
- "DoD
|
|
12
|
+
- "Пункт DoD 3 не выполнен (изоляция): корень артефактов привязан к рабочему репозиторию через `const testProjectRoot = join(__dirname, '..', '..')` (example-test.mjs:16), запись идёт в `.workflow/config/sample.yaml` внутри репозитория — ожидался путь через стандартный системный tmp (например, `os.tmpdir()`)"
|
|
13
|
+
- "Пункт DoD 3 не выполнен (cleanup в teardown): `cleanupTestConfig()` вызывается в теле test-функции (example-test.mjs:33), а не в after-hook/teardown — при падении assertion до этой строки артефакт остаётся в рабочем репозитории"
|
|
14
|
+
- "Пункт DoD 3 не выполнен (cleanup неполный): `rmSync(testConfigPath)` удаляет только конкретный файл (example-test.mjs:26), а не весь tmp-корень — ожидалось рекурсивное удаление корневой tmp-директории"
|
|
7
15
|
---RESULT---
|
package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-3.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---RESULT---
|
|
2
2
|
status: failed
|
|
3
3
|
issues:
|
|
4
|
-
- "Пункт DoD
|
|
5
|
-
- "Пункт DoD
|
|
6
|
-
- "Пункт DoD
|
|
4
|
+
- "Пункт DoD «Тест не пишет в рабочий репозиторий» нарушен: корень артефактов строится от `join(__dirname, '..', '..')` — реальный корень репозитория, а не `os.tmpdir()`. Файл `example-test.mjs:14-15`."
|
|
5
|
+
- "Пункт DoD «уничтожает tmp-корень» нарушен: `cleanupTestConfig()` удаляет конкретный файл (`rmSync(testConfigPath)`), а не весь tmp-корень рекурсивно. При прерывании до вызова cleanup файл `.workflow/config/sample.yaml` остаётся в рабочем репозитории. Файл `example-test.mjs:30-32`."
|
|
6
|
+
- "Пункт DoD «изоляция в teardown/after-hook» нарушен: `cleanupTestConfig()` вызывается в теле `test(...)`, после `assert.ok(true)`. Если assertion упадёт — cleanup не выполнится. Файл `example-test.mjs:36`."
|
|
7
7
|
---RESULT---
|
|
@@ -87,77 +87,77 @@
|
|
|
87
87
|
},
|
|
88
88
|
"rubric_scores": [
|
|
89
89
|
{
|
|
90
|
-
"agentId": "
|
|
90
|
+
"agentId": "kilo-deepseek",
|
|
91
91
|
"trial": 1,
|
|
92
|
-
"score":
|
|
92
|
+
"score": 3,
|
|
93
93
|
"errored": false
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
|
-
"agentId": "
|
|
96
|
+
"agentId": "kilo-deepseek",
|
|
97
97
|
"trial": 2,
|
|
98
|
-
"score":
|
|
98
|
+
"score": 4,
|
|
99
99
|
"errored": false
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
|
-
"agentId": "
|
|
102
|
+
"agentId": "kilo-deepseek",
|
|
103
103
|
"trial": 3,
|
|
104
104
|
"score": 4,
|
|
105
105
|
"errored": false
|
|
106
106
|
},
|
|
107
107
|
{
|
|
108
|
-
"agentId": "kilo-
|
|
108
|
+
"agentId": "kilo-glm",
|
|
109
109
|
"trial": 1,
|
|
110
|
-
"score":
|
|
110
|
+
"score": 4,
|
|
111
111
|
"errored": false
|
|
112
112
|
},
|
|
113
113
|
{
|
|
114
|
-
"agentId": "kilo-
|
|
114
|
+
"agentId": "kilo-glm",
|
|
115
115
|
"trial": 2,
|
|
116
116
|
"score": 4,
|
|
117
117
|
"errored": false
|
|
118
118
|
},
|
|
119
119
|
{
|
|
120
|
-
"agentId": "kilo-
|
|
120
|
+
"agentId": "kilo-glm",
|
|
121
121
|
"trial": 3,
|
|
122
122
|
"score": 4,
|
|
123
123
|
"errored": false
|
|
124
124
|
},
|
|
125
125
|
{
|
|
126
|
-
"agentId": "kilo-
|
|
126
|
+
"agentId": "kilo-minimax",
|
|
127
127
|
"trial": 1,
|
|
128
128
|
"score": 4,
|
|
129
129
|
"errored": false
|
|
130
130
|
},
|
|
131
131
|
{
|
|
132
|
-
"agentId": "kilo-
|
|
132
|
+
"agentId": "kilo-minimax",
|
|
133
133
|
"trial": 2,
|
|
134
134
|
"score": 4,
|
|
135
135
|
"errored": false
|
|
136
136
|
},
|
|
137
137
|
{
|
|
138
|
-
"agentId": "kilo-
|
|
138
|
+
"agentId": "kilo-minimax",
|
|
139
139
|
"trial": 3,
|
|
140
140
|
"score": 4,
|
|
141
141
|
"errored": false
|
|
142
142
|
},
|
|
143
143
|
{
|
|
144
|
-
"agentId": "
|
|
144
|
+
"agentId": "claude-sonnet",
|
|
145
145
|
"trial": 1,
|
|
146
|
-
"score":
|
|
146
|
+
"score": 5,
|
|
147
147
|
"errored": false
|
|
148
148
|
},
|
|
149
149
|
{
|
|
150
|
-
"agentId": "
|
|
150
|
+
"agentId": "claude-sonnet",
|
|
151
151
|
"trial": 2,
|
|
152
|
-
"score":
|
|
152
|
+
"score": 5,
|
|
153
153
|
"errored": false
|
|
154
154
|
},
|
|
155
155
|
{
|
|
156
|
-
"agentId": "
|
|
156
|
+
"agentId": "claude-sonnet",
|
|
157
157
|
"trial": 3,
|
|
158
158
|
"score": 4,
|
|
159
159
|
"errored": false
|
|
160
160
|
}
|
|
161
161
|
],
|
|
162
|
-
"timestamp": "2026-04-
|
|
162
|
+
"timestamp": "2026-04-25T07:10:27.566Z"
|
|
163
163
|
}
|