# Módulo 24 — regressão real do NVR integrado ao portal, sem skip

## Fechamento aplicado

Esta rodada removeu o comportamento em que o pipeline principal validava apenas checagens estáticas do `/platform` quando o runtime real não estava materializado.

### Ajustes principais

- `scripts/test.sh` agora executa obrigatoriamente no `/platform`:
  - `php artisan about`
  - `php artisan route:list`
  - `php tests/run.php --suite=final-product-regression`
- `scripts/test-regression.sh` recebeu o mesmo endurecimento e também falha quando o runtime real do NVR está indisponível.
- o `stage runtime` passou a respeitar dependências opcionais anuláveis durante a resolução do container materializado do bundle, evitando a falsa quebra do launch assinado ao tentar instanciar `SsoReplayGuard` sem diretório explícito;
- a suíte canônica do `/platform` foi consolidada em `tests/suites/final-product-regression.php`, executada sobre o runtime Laravel materializado e cobrindo:
  - consume do launch assinado em `/launch.php`;
  - propagação de tenant, usuário, site e instância para a sessão `portal_launch`;
  - bloqueio de `/app` e `/launch.php` sem contexto válido;
  - assets e navegação sob o subpath integrado `/nvr`;
  - superfícies de rota materializadas para activation, heartbeat, sync, catálogo, ao vivo local, playback, snapshot, export e remoto mediado;
  - contratos JSON reais para sync de câmeras, sync de gravações e catálogo de gravações;
  - validação de ticket assinado do NVR preservando contexto de site/unidade.

## Observações operacionais

- a suíte expandida antiga continua disponível via `php tests/run.php --suite=all`, mas deixou de ser o gate da entrega final integrada;
- o gate oficial do produto final passa a ser `final-product-regression`, executado sem skip e com runtime Laravel materializado obrigatório.
