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

## Цель

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

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

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

**Контракт:** прогнать backend-сюиту параллельно из каталога приложения, напрямую через PHP с
поднятым лимитом памяти. Три механических блокера предыдущих попыток и их устранение:

1. composer-обёртка имеет внутренний process-timeout 300с, обрывавший прогон → запуск напрямую
   `php`, без composer.
2. параллельный раннер (paratest) спавнит воркеры с относительным путём к `vendor/.../pest` →
   нужен cwd=app (`cd app`).
3. дефолтный php memory_limit (512M) исчерпывался в агрегаторе результатов paratest → поднять
   лимит до 2G (`-d memory_limit=2G`; composer-прогон с 1536M по памяти не падал).

Итоговая команда: `cd app && php -d memory_limit=2G artisan test --parallel`.

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

**Конвенция:** раннер пишет только в изолированные тестовые БД 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("}
]
```
