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.
Files changed (160) hide show
  1. package/README.md +377 -277
  2. package/configs/agent-health-rules.yaml +75 -0
  3. package/configs/pipeline.yaml +24 -7
  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/agent-spawner.mjs +47 -6
  8. package/src/lib/artifact-snapshot.mjs +233 -0
  9. package/src/lib/error-classifier.mjs +311 -0
  10. package/src/lib/test-error-classifier.mjs +60 -0
  11. package/src/lib/test-extends.mjs +58 -0
  12. package/src/lib/test-version.mjs +21 -0
  13. package/src/runner.mjs +215 -58
  14. package/src/scripts/move-to-review.js +5 -7
  15. package/src/scripts/reset-agent-health.js +62 -0
  16. package/src/skills/coach/SKILL.md +1 -0
  17. package/src/skills/coach/tests/cases/TC-COACH-001/current/meta.json +93 -94
  18. package/src/skills/coach/tests/cases/TC-COACH-002/current/meta.json +93 -94
  19. package/src/skills/create-plan/SKILL.md +1 -0
  20. package/src/skills/create-plan/knowledge/test-hygiene.md +47 -0
  21. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-1.md +23 -31
  22. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-2.md +20 -35
  23. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-3.md +36 -19
  24. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/judge.json +1 -1
  25. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-2.md +11 -5
  26. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-3.md +12 -16
  27. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-1.md +15 -9
  28. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-3.md +15 -14
  29. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-1.md +22 -18
  30. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-2.md +24 -16
  31. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-3.md +13 -20
  32. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/meta.json +2 -2
  33. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-1.md +14 -19
  34. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-2.md +24 -14
  35. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-3.md +20 -19
  36. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/judge.json +16 -17
  37. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-1.md +0 -7
  38. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-2.md +9 -10
  39. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-3.md +5 -5
  40. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-1.md +20 -4
  41. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-2.md +36 -9
  42. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-3.md +9 -6
  43. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-1.md +4 -12
  44. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-2.md +6 -8
  45. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-3.md +8 -4
  46. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/meta.json +10 -11
  47. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-1.md +30 -0
  48. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-2.md +30 -0
  49. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-3.md +30 -0
  50. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/judge.json +165 -0
  51. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-1.md +5 -0
  52. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-2.md +26 -0
  53. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-3.md +5 -0
  54. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-1.md +39 -0
  55. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-2.md +37 -0
  56. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-3.md +45 -0
  57. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-1.md +26 -0
  58. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-2.md +27 -0
  59. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-3.md +7 -0
  60. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/meta.json +117 -0
  61. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003-parent-plan-mandatory.yaml +41 -0
  62. package/src/skills/decompose-gaps/tests/index.yaml +5 -0
  63. package/src/skills/decompose-gaps/tests/rubrics/parent-plan-mandatory.md +22 -0
  64. package/src/skills/decompose-gaps/workflows/decompose.md +5 -2
  65. package/src/skills/decompose-plan/knowledge/atomicity-checklist.md +31 -5
  66. package/src/skills/decompose-plan/knowledge/capabilities.md +29 -5
  67. package/src/skills/decompose-plan/knowledge/human-task-rules.md +15 -0
  68. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-1.md +55 -0
  69. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-2.md +49 -0
  70. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-3.md +49 -0
  71. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/judge.json +163 -0
  72. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-1.md +104 -0
  73. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-2.md +45 -0
  74. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-3.md +58 -0
  75. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-1.md +193 -0
  76. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-2.md +202 -0
  77. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-3.md +155 -0
  78. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-1.md +52 -0
  79. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-2.md +17 -0
  80. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-3.md +0 -0
  81. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/meta.json +115 -0
  82. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004-executor-atomicity.yaml +64 -0
  83. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-1.md +59 -0
  84. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-2.md +204 -0
  85. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-3.md +213 -0
  86. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/judge.json +163 -0
  87. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-1.md +0 -0
  88. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-2.md +57 -0
  89. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-3.md +54 -0
  90. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-1.md +147 -0
  91. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-2.md +165 -0
  92. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-3.md +133 -0
  93. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-1.md +81 -0
  94. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-2.md +108 -0
  95. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-3.md +3 -0
  96. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/meta.json +114 -0
  97. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005-capabilities-registry.yaml +78 -0
  98. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-1.md +225 -0
  99. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-2.md +66 -0
  100. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-3.md +36 -0
  101. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/judge.json +163 -0
  102. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-1.md +42 -0
  103. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-2.md +67 -0
  104. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-3.md +40 -0
  105. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-1.md +122 -0
  106. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-2.md +131 -0
  107. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-3.md +138 -0
  108. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-1.md +41 -0
  109. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-2.md +88 -0
  110. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-3.md +0 -0
  111. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/meta.json +115 -0
  112. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006-dod-threshold.yaml +72 -0
  113. package/src/skills/decompose-plan/tests/index.yaml +15 -0
  114. package/src/skills/decompose-plan/tests/rubrics/capabilities-registry.md +21 -0
  115. package/src/skills/decompose-plan/tests/rubrics/dod-threshold.md +21 -0
  116. package/src/skills/decompose-plan/tests/rubrics/executor-atomicity.md +21 -0
  117. package/src/skills/decompose-plan/workflows/decompose.md +38 -5
  118. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/meta.json +87 -88
  119. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/meta.json +87 -88
  120. package/src/skills/manual-testing/SKILL.md +6 -4
  121. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-1.md +29 -16
  122. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-2.md +21 -54
  123. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-3.md +18 -23
  124. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/judge.json +17 -17
  125. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/meta.json +19 -19
  126. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-1.md +27 -30
  127. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-2.md +16 -23
  128. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-3.md +35 -28
  129. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/judge.json +13 -13
  130. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/meta.json +15 -15
  131. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-1.md +76 -0
  132. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-2.md +71 -0
  133. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-3.md +85 -0
  134. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/judge.json +46 -0
  135. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/meta.json +36 -0
  136. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003-qa-non-ui-assertion.yaml +65 -0
  137. package/src/skills/manual-testing/tests/index.yaml +5 -0
  138. package/src/skills/manual-testing/tests/rubrics/qa-non-ui-assertion.md +31 -0
  139. package/src/skills/review-result/SKILL.md +1 -0
  140. package/src/skills/review-result/knowledge/test-hygiene.md +44 -0
  141. package/src/skills/review-result/scripts/verify-artifacts.js +157 -14
  142. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-1.md +7 -0
  143. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-2.md +7 -0
  144. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-3.md +7 -0
  145. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/judge.json +163 -0
  146. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-1.md +5 -0
  147. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-2.md +5 -0
  148. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-3.md +11 -0
  149. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-1.md +16 -0
  150. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-2.md +18 -0
  151. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-3.md +17 -0
  152. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-1.md +17 -0
  153. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-2.md +31 -0
  154. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-3.md +5 -0
  155. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/meta.json +115 -0
  156. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003-test-isolation.yaml +50 -0
  157. package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/QA-904.md +51 -0
  158. package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/example-test.mjs +36 -0
  159. package/src/skills/review-result/tests/index.yaml +5 -0
  160. package/src/skills/review-result/tests/rubrics/test-isolation.md +20 -0
@@ -1,65 +1,32 @@
1
- Нет директории `shared/` в этой тестовой среде — это ожидаемо для данного тест-кейса. Отвечаю на вопрос о стратегии тестирования на основе загруженных knowledge-модулей.
2
-
3
- ---
4
-
5
1
  ## Стратегия тестирования VSCode-расширения
6
2
 
7
- ### Выбор среды и инструмента
8
-
9
- **VSCode-расширение — desktop-приложение.**
10
-
11
- Согласно таблице выбора инструмента из SKILL.md:
12
-
13
- | Тип приложения | Инструмент | Knowledge |
14
- |----------------|-----------|-----------|
15
- | Desktop-приложение (VSCode-расширение) | Windows-MCP **через Sandbox** | `desktop-tools-core.md` + `sandbox-core.md` |
16
-
17
- **⛔ Тестирование напрямую на хост-машине — ЗАПРЕЩЕНО.**
18
-
19
- Причины:
20
- - Загрязняет рабочую среду разработчика (конфиги, состояние расширений, workspace)
21
- - Не воспроизводит чистое состояние (первый запуск, свежая установка)
22
- - Не изолировано — побочные эффекты от других расширений и настроек хоста
23
-
24
- ### Выбранная стратегия
25
-
26
- **Среда:** Windows Sandbox — изолированное, эфемерное окружение. При каждом запуске чистое состояние.
27
-
28
- **Инструмент:** `mcp__sandbox-desktop__*` (сервер `sandbox-desktop`)
29
-
30
- **Команды:**
31
- - `mcp__sandbox-desktop__screenshot` — быстрая проверка состояния UI
32
- - `mcp__sandbox-desktop__snapshot` — a11y tree для верификации элементов (с бюджетом: 1-2 Snapshot/TC, макс. 6/сессию)
33
- - `mcp__sandbox-desktop__click`, `type`, `shortcut` — взаимодействие с UI
34
- - `mcp__sandbox-desktop__PowerShell` — подготовка окружения, сохранение evidence
3
+ ### Инструмент: Windows-MCP через Sandbox
35
4
 
36
- ### Quick-start checklist перед тест-кейсами
5
+ VSCode-расширение это **desktop-приложение**, поэтому по правилам скила:
37
6
 
38
- ```
39
- 1. Screenshot → MCP работает, Sandbox активен
40
- 2. PowerShell Test-Path "<path-to-portable-vscode>"
41
- 3. PowerShell Test-Path "<path-to-test-workspace>"
42
- 4. Запускай VSCode и тест-кейсы
43
- ```
7
+ | Параметр | Выбор | Обоснование |
8
+ |----------|-------|-------------|
9
+ | **Инструмент** | Windows-MCP | Desktop UI не доступен через Playwright/browser |
10
+ | **Среда** | Windows Sandbox | Обязательная изоляция для desktop-приложений |
11
+ | **Метод проверки** | a11y tree (Snapshot) | Основной способ верификации состояния UI в desktop |
44
12
 
45
- **Hard gate:** если к 5-му MCP-вызову не начат первый TC — СТОП, пересмотреть план.
13
+ ### Почему именно Sandbox, а не хост?
46
14
 
47
- ### Персистенция evidence
15
+ 1. **Изоляция** — расширение не загрязняет рабочую среду разработчика (настройки VS Code, установленные расширения, workspace state)
16
+ 2. **Воспроизводимость** — каждый запуск начинается с чистого состояния, без накопленных артефактов
17
+ 3. **Безопасность** — расширение может иметь side effects на файловую систему и реестр
48
18
 
49
- Sandbox эфемерен. Скриншоты сохраняются на хост через mapped folder:
19
+ ### Следующие шаги перед запуском
50
20
 
51
- ```powershell
52
- # В PowerShell внутри Sandbox:
53
- $bmp.Save('<sandbox-project-path>\reports\QA-NNN-screenshot-TC-NNN.png')
54
- ```
21
+ 1. Загрузить `knowledge/sandbox-core.md` — quick-start и персистенция evidence
22
+ 2. Загрузить `knowledge/desktop-tools-core.md` команды Windows-MCP, паттерны навигации
23
+ 3. Проверить наличие `../shared/README.md` — проектно-специфичные пути и конфигурация
24
+ 4. Определить тип тестирования (smoke / regression / acceptance / exploratory) → загрузить соответствующий workflow
55
25
 
56
- После сохранения проверка на хосте: `ls reports/*.png`.
26
+ ### Что потребуется для старта
57
27
 
58
- ### Итог
28
+ - Артефакт расширения (`.vsix` файл или путь к нему)
29
+ - Описание тест-кейсов или acceptance criteria
30
+ - Тикет `QA-*` с типом тестирования
59
31
 
60
- | Параметр | Значение |
61
- |----------|---------|
62
- | **Среда** | Windows Sandbox (изолированная, НЕ хост) |
63
- | **MCP-сервер** | `sandbox-desktop` |
64
- | **Тип проверок** | a11y tree assertions (Snapshot) + скриншоты для визуальных TC |
65
- | **Тестирование на хосте** | ⛔ ЗАПРЕЩЕНО |
32
+ Есть конкретный тикет для выполнения или нужно составить тест-план?
@@ -1,35 +1,30 @@
1
- Согласно правилам скила:
1
+ Согласно таблице выбора инструмента в скиле:
2
2
 
3
- ## Стратегия тестирования VSCode-расширения
3
+ | Критерий | Решение |
4
+ |----------|---------|
5
+ | **Тип приложения** | Desktop (VSCode-расширение) |
6
+ | **Основной инструмент** | Windows-MCP |
7
+ | **Среда запуска** | **Windows Sandbox** (обязательно) |
8
+ | **Knowledge-модули** | `knowledge/desktop-tools-core.md` + `knowledge/sandbox-core.md` |
4
9
 
5
- ### Инструмент
6
- **Windows-MCP** — основной инструмент для desktop-приложений (VSCode, Electron, нативные).
10
+ **Почему Sandbox, а не хост:**
7
11
 
8
- Playwright MCP здесь **не подходит**он работает только с веб-приложениями в браузере.
12
+ Скил явно запрещает прямое тестирование на хосте это загрязняет рабочую среду разработчика и не воспроизводит чистое состояние (расширение может вести себя иначе из-за существующих настроек, других расширений, кэша).
9
13
 
10
- ### Среда запуска
11
- **Windows Sandbox (обязательно)** — тестирование desktop-приложений ведётся **исключительно через Sandbox**:
12
- - изолированная среда воспроизводит чистое состояние
13
- - не загрязняет рабочую среду разработчика
14
- - прямое тестирование на хосте **запрещено**
14
+ **Первые шаги перед тестированием:**
15
15
 
16
- ### Первые шаги перед тестированием
17
-
18
- 1. Прочитать `../shared/README.md` — без этого неизвестны пути, конфигурация и ограничения проекта
16
+ 1. Проверить наличие `../shared/README.md` — прочитать и загрузить проектные модули
19
17
  2. Загрузить `knowledge/sandbox-core.md` — настройка Sandbox, quick-start, персистенция evidence
20
18
  3. Загрузить `knowledge/desktop-tools-core.md` — команды Windows-MCP, паттерны навигации, бюджет Snapshot
21
- 4. Загрузить `knowledge/desktop-tools-advanced.md` работа с Snapshot (a11y tree), управление окнами
19
+ 4. Определить тип тикета (SMOKE / ACCEPTANCE / REGRESSION / EXPLORATORY) загрузить соответствующий workflow
22
20
 
23
- ### Схема кратко
21
+ **Общая схема:**
24
22
 
25
23
  ```
26
- VSCode extension
27
-
28
- Windows Sandbox (изолированная среда)
29
-
30
- Windows-MCP (управление UI)
31
-
32
- a11y tree / Snapshot (assertions)
24
+ Windows Sandbox
25
+ └── VSCode (установить расширение)
26
+ └── Windows-MCP (управление UI)
27
+ └── Snapshot (a11y tree assertions как evidence)
33
28
  ```
34
29
 
35
- Если нужно перейти к конкретному тест-плану или тикету покажи задачу, я загружу `../shared/README.md` и соответствующие модули.
30
+ Скриншоты только если тикет требует их в DoD или TC содержит визуальный критерий (принцип 8).
@@ -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. Требуется повторное выполнение с визуальной проверкой и скриншотом.