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