## 1. Bootstrap do projeto - [x] 1.1 Criar app Laravel 13 via `composer create-project` em diretório temporário e mover para raiz preservando `SPEC.md`, `openspec/` e `.codex/` - [x] 1.2 Configurar `.env` e `.env.example` com `APP_LOCALE=pt_BR`, `APP_TIMEZONE=America/Fortaleza`, `DB_CONNECTION=pgsql` - [x] 1.3 Adicionar `declare(strict_types=1);` como convenção documentada e habilitar strict types nos arquivos PHP criados nesta fase - [x] 1.4 Criar índice de ADRs aceitas em `docs/adr/` referenciando ADR-001..ADR-010 do SPEC §21 ## 2. Banco de dados e Docker Compose local - [x] 2.1 Adicionar `docker-compose.yml` com serviço PostgreSQL 17, volume nomeado e healthcheck - [x] 2.2 Configurar conexão PostgreSQL no Laravel e validar `php artisan migrate` em banco limpo - [x] 2.3 Configurar `SESSION_DRIVER=database`, `CACHE_STORE=database`, `QUEUE_CONNECTION=database` - [x] 2.4 Documentar comandos locais (`docker compose up`, `artisan migrate`) no README ## 3. Filament, autenticação e papéis - [x] 3.1 Instalar Filament 5 com painel em `/admin` e autenticação habilitada - [x] 3.2 Criar migration adicionando `role` (varchar indexed) e `is_active` (boolean default true) em `users` - [x] 3.3 Implementar enum `UserRole` (`admin`, `assistant`) e integrar ao model `User` - [x] 3.4 Implementar `canAccessPanel()` negando usuários inativos - [x] 3.5 Criar `UserResource` restrito a admin via Policy - [x] 3.6 Criar `DatabaseSeeder` com usuário admin local (credenciais documentadas apenas para dev) - [x] 3.7 Escrever feature tests: login admin, login assistant, bloqueio de inativo, assistant sem acesso a usuários ## 4. Livewire, Tailwind, Vite e design tokens - [x] 4.1 Instalar Livewire 4 e configurar Vite + Tailwind para site público - [x] 4.2 Criar `resources/css/tokens.css` com custom properties (tipografia, escala, espaçamento, raio, container, cores, sombras, transições) - [x] 4.3 Estender `tailwind.config.js` para consumir tokens centralizados - [x] 4.4 Criar layout público mínimo (`resources/views/layouts/public.blade.php`) com `prefers-reduced-motion` e contraste AA - [x] 4.5 Criar rota `/` com página placeholder usando layout público e tokens - [x] 4.6 Escrever teste feature validando renderização da home sem erro ## 5. Healthcheck - [x] 5.1 Garantir rota `GET /up` respondendo HTTP 200 sem autenticação - [x] 5.2 Validar que resposta não expõe segredos ou stack traces - [x] 5.3 Escrever feature test para endpoint `/up` ## 6. Qualidade: Pint, Larastan, Pest, arch tests e scripts Composer - [x] 6.1 Instalar e configurar Laravel Pint com script `composer pint` / check no CI - [x] 6.2 Instalar Larastan/PHPStan com nível definido e script no CI job `static` - [x] 6.3 Instalar Pest 4 e Pest Browser; configurar `phpunit.xml` / `Pest.php` - [x] 6.4 Criar testes de arquitetura: `App\Domain` strict types, sem dependência de Filament/Livewire - [x] 6.5 Adicionar scripts Composer: `test:unit`, `test:feature`, `test:browser`, `test`, `quality` conforme SPEC §13.9 - [x] 6.6 Configurar `composer audit` no job `static` ## 7. Docker multi-stage FrankenPHP - [x] 7.1 Criar Dockerfile multi-stage (composer → frontend → runtime FrankenPHP regular mode) - [x] 7.2 Fixar versão PHP compatível com Laravel 13; usuário non-root quando suportado - [x] 7.3 Definir comandos para processos web, queue (`queue:work`) e scheduler (`schedule:work`) - [x] 7.4 Adicionar healthcheck do contêiner apontando para `/up` - [x] 7.5 Garantir que nenhum secret ou `.env` de produção entra em layer da imagem - [x] 7.6 Validar build local e no CI ## 8. CI GitHub Actions - [x] 8.1 Criar workflow `.github/workflows/ci.yml` com jobs `static`, `unit`, `feature`, `browser`, `container` - [x] 8.2 Job `feature`: PostgreSQL service container (nunca SQLite) - [x] 8.3 Job `browser`: build de imagem, servir via FrankenPHP, rodar Pest Browser com locale `pt_BR` e TZ `America/Fortaleza` - [x] 8.4 Job `container`: build da imagem final + healthcheck - [x] 8.5 Configurar cache seguro de Composer e npm nos jobs ## 9. Verificação final e critério de saída - [x] 9.1 Executar `composer quality` localmente e corrigir falhas - [x] 9.2 Executar `composer test:browser` (smoke mínimo: home + login) - [x] 9.3 Confirmar critério de saída da Fase 0: pipeline CI verde + build de imagem + healthcheck validado no contêiner - [x] 9.4 Reportar conclusão no formato SPEC §24 (requisito, alterações, testes, comandos, aceite, pendências)