# Этап 2 — аддендум: backend-вердикт (Pest)

**Дата:** 15.06.2026. Дополнение к [2026-06-15-portal-tech-audit-findings.md](2026-06-15-portal-tech-audit-findings.md).

## Вердикт: НЕ ПОЛУЧЕН (env-блокер запуска, не дефект кода)

Backend-сюита Pest не дала полного вердикта — **4 попытки**, каждая вскрыла отдельный
механический блокер запуска на dev-машине (native Windows, кириллический путь). Ни одна не
связана со стеной «роутер-наставник» — это окружение/конфиг.

| # | Команда | Блокер |
|---|---|---|
| 1 | `composer --working-dir=app test` | composer process-timeout 300с (последовательный прогон большой сюиты не уложился) |
| 2 | `php app/artisan test --parallel` (из корня) | paratest ждёт cwd=app: `Could not open input file: vendor/pestphp/pest/bin/pest` |
| 3 | `cd app && php artisan test --parallel` | PHP Fatal: memory_limit 512M exhausted в paratest WrapperRunner (главный процесс) |
| 4 | `cd app && php -d memory_limit=2G artisan test --parallel` | PHP Fatal: memory_limit 512M exhausted в `laravel/pao/src/Autoload.php` — **воркер** paratest спавнится со свежим php из php.ini (512M), флаг `-d` ему не наследуется |

## Что нужно для вердикта (вне ceremony-однострочника)

- **Поднять память воркеров:** `memory_limit=2048M` в php.ini (`C:\tools\php83\php.ini`) — тогда
  воркеры paratest получат лимит. Затем `cd app && php artisan test --parallel`.
- **Либо последовательно с памятью и временем:** `cd app && php -d memory_limit=2G artisan test`
  (один процесс — флаг применяется; нет worker-spawn). Риск — общее время прогона может
  превысить лимит инструмента (~10 мин); запускать в терминале без таймаута.
- **Рекомендация:** прогнать в терминале владельца (php.ini-память + без таймаута) — самый
  надёжный путь к вердикту.

## Частичный сигнал (из попытки 1, до обрыва по таймауту)

`VerifyAuditChainsTest` вывел audit-chain mismatch в dev **тестовой** БД:
`tenant_operations_log_y2026_m06` — 7 mismatch, `pd_processing_log_y2026_m06` — 1 mismatch.
Перекликается с известным хвостом audit-chain-algorithm-divergence (но это dev тест-БД, не
прод; подтвердить статус теста — pass/fail — нельзя без полного прогона).

## Известный долг (из CLAUDE.md, не подтверждён в этом прогоне)

«3 чужих console-теста (BillingMigrateLeadsToRub / IncidentsWatchFailures /
SnapshotBackfillCommand) взаимозагрязняются в одном процессе; в CI `pest --parallel`
(файл=процесс) проходят». Без полного прогона не подтверждён и не опровергнут.
