# Технический аудит портала Лидерра — Этап 2: backend-вердикт

## Цель

Добрать единственную недовыполненную командную фазу аудита — backend-тесты (Pest) — и записать
их вердикт в аддендум к документу находок Этапа 2.

**Окружение и безопасность.** Локальная dev-копия (native Windows). Тесты идут на выделенной
**тестовой** БД testing-окружения Laravel из каталога приложения; боевая БД `liderra.ru`
недоступна. Деструктивных команд нет: параллельный раннер переиспользует существующие тестовые
БД процессов и не пересоздаёт/не дропает боевые данные. Единственная запись на диск — новый
markdown-аддендум с вердиктом.

## Backend-тесты {#G1}

**Контракт:** прогнать backend-сюиту параллельно из каталога приложения (`cd app` → cwd=app, где
лежит `vendor/`), напрямую через PHP (`php artisan test --parallel`), в обход обёртки composer
(её внутренний process-timeout 300с обрывал прогон). cwd=app нужен, потому что параллельный
раннер (paratest) спавнит воркеры с относительным путём к `vendor/.../pest` и из корня
репозитория не находит его.

**Критерий находки:** любой упавший тест = **P1** (нарушение функциональности — главный искомый
скрытый хвост). Зелёный свод = backend-регрессий нет. Если время превышает разумный предел —
зафиксировать как частичный результат.

**Конвенция:** запуск через `cd app && php artisan test --parallel`; раннер пишет только в
изолированные тестовые БД testing-окружения; боевые данные не затрагиваются, пересоздания нет.

## Аддендум к находкам {#G2}

**Контракт:** записать новый markdown-файл с вердиктом backend-свода: число passed/failed/
skipped, перечень упавших тестов (если есть) с файлом и причиной, и сверку с известным долгом
(audit-chain mismatch в тест-БД; «3 чужих console-теста взаимозагрязняются»).

**Критерий:** аддендум содержит итоговый вердикт и каждый упавший тест с местом; открытые
вопросы реестра не закрываются.

**Конвенция:** новый файл в `docs/superpowers/audits/`; запись справочная, код и данные не
меняются.

## Серьёзность {#G3}

**P0** — блокирует production / порча данных. **P1** — упавший тест / нарушение
функциональности. **P2** — предупреждение / тех-долг. **P3** — косметика. Закрытие открытых
вопросов реестра — вне этого этапа.

```verified-context-json
[
  {"id":"C1","kind":"EXTRACTED","ref":"app/composer.json","anchor":"\"test:parallel\": \"@php vendor/bin/pest"},
  {"id":"C2","kind":"EXTRACTED","ref":"tools/cost-pricing.mjs","anchor":"export const PRICING = Object.freeze("}
]
```
