# Módulo 14 — bridge /public/nvr à prova de ambiente e topologia

## O que foi corrigido

- o bridge público do NVR foi extraído para `portal/bootstrap/public_nvr_bridge.php`;
- `portal/public/index.php`, `portal/public/nvr/index.php`, `portal/public/nvr/launch.php` e `portal/public/nvr/_bridge.php` passaram a usar o mesmo resolvedor robusto;
- a resolução do `platform/public` agora aceita `NVR_PUBLIC_PATH`, `NVR_PROJECT_PATH/public` e fallback canônico do bundle, sem assumir layout local frágil;
- o bridge valida a existência de `index.php`, `launch.php` e `bootstrap/app.php` antes de servir o produto;
- assets estáticos, `launch.php` e `index.php` do produto são encaminhados sob o mesmo prefixo montado;
- o runtime do NVR recebe `HTTP_X_FORWARDED_PREFIX`, `APP_BASE_PATH`, `APP_BASE_PATH_RESOLVED`, `SESSION_COOKIE_PATH`, `NVR_LOCATION_PREFIX` e `APP_URL` alinhados ao subpath real;
- traversal fora do public path do produto é bloqueado por resolução via `realpath` e validação de raiz.

## Topologias cobertas

- `/nvr`
- `/sistema/nvr`
- `/public/sistema/nvr`
- bundle consolidado com fallback canônico em `PACOTE FINAL/platform/public`

## Contratos preservados

- portal como entrypoint oficial;
- NVR como produto integrado sob `/nvr`;
- launch controlado e assinado pelo portal;
- MariaDB/MySQL como contrato central já consolidado.
