# Execução local no Windows Ambiente de demonstração novo autorizado em 19/10/2026. PostgreSQL/PostGIS isolado em `127.0.0.1:55441`, base `investmoz_local_test`, volume Docker `investmoz-local-qa_postgres-qa`. Não contém os dados do portal activo. O MySQL existente não serve este esquema PostgreSQL e é preservado. ## Arrancar Inicie Docker Desktop. Na raiz do projecto: ```powershell ./deploy/local/start.ps1 ``` Com a base já iniciada e preparada, basta: ```powershell composer run dev ``` Abra http://127.0.0.1:8000. O comando inicia Laravel, o worker da fila e Vite. Use Ctrl+C para terminar. A base conserva os dados entre arranques. `composer run dev` aguarda até 900 segundos se o PostgreSQL estiver indisponível ou em recuperação. Mostra o motivo e o progresso, sem revelar credenciais. Erros de autenticação ou de base inexistente interrompem o arranque imediatamente. O diagnóstico directo `php artisan portal:dev-check` continua sem espera; use `--wait=900` para aguardar. O comando não inicia Docker nem executa migrations. O script de arranque executa estes passos, parando no primeiro erro: ```powershell docker compose --env-file .env -f deploy/local/compose.yaml up -d --wait --wait-timeout 900 php tools/local-qa-bootstrap.php composer run dev ``` O `start.ps1` usa `--wait-timeout 900`. O healthcheck admite 600 segundos de arranque antes de contar falhas e reconhece imediatamente um servidor pronto. O Compose concede 60 segundos para um encerramento normal do PostgreSQL. ### PostgreSQL em recuperação Em 20/10/2026, os registos mostraram um encerramento incorrecto seguido de recuperação entre 09:59 e 10:07 (Africa/Johannesburg). Durante esse período, o servidor recusava ligações com `the database system is in recovery mode`. O teste anterior ocultava a causa e terminava na primeira falha. Se voltar a acontecer, deixe a recuperação concluir e consulte: ```powershell docker compose --env-file .env -f deploy/local/compose.yaml ps -a docker compose --env-file .env -f deploy/local/compose.yaml logs --tail 40 postgres php artisan portal:dev-check --wait=900 ``` Se o contentor estiver parado, execute `./deploy/local/start.ps1` com Docker Desktop iniciado. Não remova o volume nem reinicie repetidamente durante a recuperação. Para parar a base normalmente, use `docker compose --env-file .env -f deploy/local/compose.yaml stop postgres` antes de encerrar Docker Desktop ou o computador. A espera, os diagnósticos e estes prazos são escolhas técnicas para a correcção solicitada em 20/10/2026, sob as decisões Tempo de AGENTS.md; não criam regras de negócio nem alteram dados activos. O preparador verifica configuração e identidade real da base antes de migrar. Só admite `investmoz_local_test`, TCP local e porta real 55441, sem DB_URL nem configuração em cache. Executa migrations em `testing`, como exigem as guardas existentes. Só cria os dados iniciais quando sectores e utilizadores estão vazios; um novo arranque não redefine contas. Nunca usa `migrate:fresh`. As quatro migrations mais recentes também admitem QA com identidade verificada por `IsolatedQaDatabase`. A alternativa de instalação autenticada no activo é preservada. A excepção QA é uma escolha técnica consistente com as migrations anteriores, sem activar funcionalidades ou publicar dados. Conta do seeder existente, exclusivamente para esta demonstração: `test@example.com` / `password`. Não é um administrador do portal. As regras existentes de autenticação, MFA e instalação autenticada mantêm-se. ## Dependências e configuração - PHP >= 8.4.1, com `pdo_pgsql` e `pgsql` activos no PHP do terminal. - Node 24, Composer, dependências de `composer.lock` e `package-lock.json`. - Docker Desktop com contentores Linux. - `.env` local com PostgreSQL, porta 55441, base e utilizador do Compose e `DB_PASSWORD` privado. A chave da aplicação existente deve ser preservada. - O primeiro build obtém as fontes configuradas de fonts.bunny.net; precisa de rede. O bootstrap cria as pastas de cache, vistas, sessões e logs antes da configuração Laravel. `php artisan portal:dev-check` verifica os requisitos essenciais sem alterar registos nem mostrar credenciais. Falhas interrompem `composer run dev` antes de iniciar os três processos. ```powershell php artisan portal:dev-check php artisan wayfinder:generate --with-form npm run types:check npm run build ``` Os testes que usam RefreshDatabase devem usar outra base `investmoz_test` no mesmo servidor QA; nunca a base de demonstração nem o activo. `tests/TestCase.php` mantém as guardas e o bloqueio contra testes concorrentes. ## Origem e limites Origem: pedido expresso de correcção e configuração local e escolha do responsável por uma base nova de demonstração em 19/10/2026. Portas, Compose, pastas automáticas e verificação de arranque são escolhas técnicas, sem novas regras organizacionais. Aplicam-se as decisões Tempo de 12/10/2026 e a separação QA/activo de AGENTS.md. Não constitui implantação em produção nem aceitação funcional global da matriz existente em `docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv`. Não remover o volume Docker para actualizar. O `.env` anterior e o `php.ini` anterior à activação PostgreSQL foram conservados em `storage/app/private/`. O correio local usa o canal log. Integrações externas e serviços opcionais precisam das configurações próprias já previstas no projecto; este arranque não lhes atribui autorização, publicação ou credenciais.