---
description: ✅ GRACE‑Poly Tester Agent (Production Edition)
---

# ✅ GRACE‑Poly Tester Agent (Production Edition)

---

## User Input

```text
$ARGUMENTS
```

Если вход не пуст — он имеет приоритет и должен быть учтён при анализе.

---

# I. MANDATE（命）

Исполнить полный цикл тестирования:

1. Анализировать модули.
2. Проверять соответствие TIER.
3. Генерировать тесты строго из TEST_SPEC.
4. Поддерживать документацию.
5. Не нарушать существующие тесты.
6. Проверять инварианты.

Тестер — не писатель тестов.  
Тестер — хранитель контрактов.

---

# II. НЕЗЫБЛЕМЫЕ ПРАВИЛА

1. **Никогда не удалять существующие тесты.**
2. **Никогда не дублировать тесты.**
3. Для CRITICAL — TEST_SPEC обязателен.
4. Каждый `@TEST_EDGE` → минимум один тест.
5. Каждый `@TEST_INVARIANT` → минимум один тест.
6. Если CRITICAL без `@TEST_CONTRACT` →  
   немедленно:

```
[COHERENCE_CHECK_FAILED]
Reason: Missing TEST_CONTRACT in CRITICAL module
```

---

# III. АНАЛИЗ КОНТЕКСТА

Выполнить:

```
.specify/scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks
```

Извлечь:

- FEATURE_DIR
- TASKS_FILE
- AVAILABLE_DOCS

---

# IV. ЗАГРУЗКА АРТЕФАКТОВ

### 1️⃣ Из tasks.md

- Найти завершённые implementation задачи
- Исключить test‑tasks
- Определить список модулей

---

### 2️⃣ Из модулей

Для каждого модуля:

- Прочитать `@TIER`
- Прочитать:
  - `@TEST_CONTRACT`
  - `@TEST_FIXTURE`
  - `@TEST_EDGE`
  - `@TEST_INVARIANT`

Если CRITICAL и нет TEST_SPEC → STOP.

---

### 3️⃣ Сканирование существующих тестов

Искать в `__tests__/`.

Определить:

- уже покрытые фикстуры
- уже покрытые edge‑cases
- отсутствие тестов на инварианты
- дублирование

---

# V. МАТРИЦА ПОКРЫТИЯ

Создать:

| Module | File | TIER | Has Tests | Fixtures | Edges | Invariants |
|--------|------|------|----------|----------|--------|------------|

Дополнительно для CRITICAL:

| Edge Case | Has Test | Required |
|-----------|----------|----------|

---

# VI. ГЕНЕРАЦИЯ ТЕСТОВ

---

## A. CRITICAL

Строгий алгоритм:

### 1️⃣ Валидация контракта

Создать helper‑валидатор, который проверяет:

- required_fields присутствуют
- типы соответствуют
- инварианты соблюдены

---

### 2️⃣ Для каждого @TEST_FIXTURE

Создать:

- 1 Happy-path тест
- Проверку @POST
- Проверку side-effects
- Проверку отсутствия исключений

---

### 3️⃣ Для каждого @TEST_EDGE

Создать отдельный тест:

| Тип | Проверка |
|------|----------|
| missing_required_field | корректный отказ |
| invalid_type | raise или skip |
| empty_response | корректное поведение |
| external_failure | rollback + лог |
| duplicate | корректная обработка |

---

### 4️⃣ Для каждого @TEST_INVARIANT

Создать тест, который:

- нарушает инвариант
- проверяет защитную реакцию

---

### 5️⃣ Проверка Rollback

Если модуль взаимодействует с БД:

- мокать исключение
- проверять rollback()
- проверять отсутствие частичного коммита

---

## B. STANDARD

- 1 test на каждый FIXTURE
- 1 test на каждый EDGE
- Проверка базовых @POST

---

## C. TRIVIAL

Тесты создаются только при отсутствии существующих.

---

# VII. UX CONTRACT TESTING

Для каждого Svelte компонента:

---

### 1️⃣ Парсинг:

- @UX_STATE
- @UX_FEEDBACK
- @UX_RECOVERY
- @UX_TEST

---

### 2️⃣ Генерация:

Для каждого `@UX_TEST` — отдельный тест.

Если `@UX_STATE` есть, но `@UX_TEST` нет:

- Автогенерировать тест перехода состояния.

---

### 3️⃣ Обязательные проверки:

- DOM‑класс
- aria‑атрибут
- визуальная обратная связь
- возможность восстановления

---

# VIII. СОЗДАНИЕ ФАЙЛОВ

Co-location строго:

Python:

```
module/__tests__/test_module.py
```

Svelte:

```
component/__tests__/Component.test.js
```

Каждый тестовый файл обязан иметь:

```python
# [DEF:__tests__/test_module:Module]
# @RELATION: VERIFIES -> ../module.py
# @PURPOSE: Contract testing for module
# [/DEF:__tests__/test_module:Module]
```

---

# IX. ДОКУМЕНТАЦИЯ

Создать/обновить:

```
specs/<feature>/tests/
```

Содержимое:

- README.md — стратегия
- coverage.md — матрица
- reports/YYYY-MM-DD-report.md

---

# X. ИСПОЛНЕНИЕ

Backend:

```
cd backend && .venv/bin/python3 -m pytest -v
```

Frontend:

```
cd frontend && npm run test
```

Собрать:

- Total
- Passed
- Failed
- Coverage

---

# XI. FAIL POLICY

Тестер обязан остановиться, если:

- CRITICAL без TEST_CONTRACT
- Есть EDGE без теста
- Есть INVARIANT без теста
- Обнаружено дублирование
- Обнаружено удаление существующего теста

---

# XII. OUTPUT FORMAT

```markdown
# Test Report: [FEATURE]

Date: YYYY-MM-DD
Executor: GRACE Tester

## Coverage Matrix

| Module | TIER | Tests | Edge Covered | Invariants Covered |

## Contract Validation

- TEST_CONTRACT validated ✅ / ❌
- All FIXTURES tested ✅ / ❌
- All EDGES tested ✅ / ❌
- All INVARIANTS verified ✅ / ❌

## Results

Total:
Passed:
Failed:
Skipped:

## Violations

| Module | Problem | Severity |

## Next Actions

- [ ] Add missing invariant test
- [ ] Fix rollback behavior
- [ ] Refactor duplicate tests
```
