# Validação — MICRO MÓDULO CORRETIVO 15

## Escopo fechado
- Portal permanece como entrada oficial do produto.
- NVR continua publicado sob `/public/nvr` e consumido pelo fluxo controlado do portal.
- SSO genérico direto para o workspace do NVR foi endurecido para **fail-closed** quando o launch oficial do portal é obrigatório.
- Login técnico local ficou restrito ao fluxo explícito (`/login-tecnico` e `/entrar-tecnico`) e tratado como contingência administrativa, sem competir com o fluxo principal do usuário final.
- O workspace `/app` e `/cliente` passou a exigir sessão originada do **launch oficial do portal**.

## Arquivos principais alterados
- `platform/config/app.php`
- `platform/.env.example`
- `platform/src/helpers.php`
- `platform/src/Domain/Auth/AuthService.php`
- `platform/src/Http/Controllers/Auth/LoginController.php`
- `platform/src/Http/Controllers/Auth/PortalLaunchController.php`
- `platform/src/Http/Controllers/Auth/SsoController.php`
- `platform/src/Http/Middleware/EnsurePortalLaunchWorkspace.php`
- `platform/routes/legacy.php`
- `platform/routes/web.generated.php`
- `platform/resources/views/auth/login.php`
- `platform/app/Controllers/HomeController.php`
- `platform/app/Middleware/Authenticate.php`
- `platform/src/Http/Middleware/Authenticate.php`
- `platform/scripts/check-portal-first-sso-hardening.php`

## Validações executadas
1. `php -l` nos arquivos PHP alterados: **ok**.
2. `php scripts/generate-web-routes.php`: **ok** (`272` rotas geradas em `routes/web.generated.php`).
3. `php scripts/check-portal-first-sso-hardening.php`: **ok**.
4. `php scripts/check-laravel-native-runtime.php`: **ok**.
5. `php scripts/check-console-migrations-seeders.php`: **ok**.
6. `php scripts/check-scope-cleanup.php`: **ok**.

## Endurecimentos confirmados
- `/login-central` e `/sso/entrar` deixam de ser caminho válido para o usuário final quando `AUTH_PORTAL_LAUNCH_REQUIRED=true`.
- `PortalLaunchController` bloqueia o fallback legado por `token` direto por padrão; o produto exige `ticket` temporário e assinado emitido pelo portal.
- A sessão técnica local não entra mais no workspace do cliente (`/app` e `/cliente`); ela é desviada para a área administrativa.
- O login técnico não pode mais ser habilitado por flags em `/login`; ele exige rota explícita.
- O helper de entrada principal passou a devolver o usuário ao portal oficial com `redirect_to` saneado e `product=nvr`.
- Cadastro e recuperação de acesso foram alinhados para o portal oficial.

## Limitações objetivas deste ambiente
- Não foi possível homologar o fluxo HTTP completo com `php artisan serve`/`php artisan about` ou testes end-to-end do runtime Laravel real neste contêiner, porque o ambiente continua sem `vendor` materializado para o framework (`Illuminate\Foundation\Application` indisponível).
- A validação desta rodada foi feita por inspeção estrutural, geração de rotas, lint PHP e checagens determinísticas de hardening.
