Dia a dia de desenvolvimento¶
Rodar¶
Cada app roda no host com hot reload, em terminais separados:
make local-up # PostgreSQL + Redis + Mailpit + Caddy em container (uma vez por sessão)
make api-dev # uvicorn :8000
make worker-dev # worker da fila (arq) — consulta ao bureau e jobs agendados
make web-dev # vite :5173
make api-wiki # sphinx :8001 (opcional — documentação técnica gerada de docstrings)
make test-web # suíte unitária do web (ARQ=<caminho> roda um arquivo só)
make test # vitest do web, depois pytest da API (spec 0047)
make lint # ruff na API + tsc no web + invariantes de estado
make preflight # verificações determinísticas antes de chamar um revisor
make local-down # encerra a stack (dados preservados)
make help lista todos os alvos. make preflight verifica, só nas linhas que a branch acrescentou, o que não exige julgamento (Swagger completo, downgrade real, CommitRoute, data-testid, meta-testes do repositório e a suíte do web quando a branch tocou o apps/web) — segundos nas branches que não mexem no web, ~1m30 nas que mexem. Rode-o antes de pedir qualquer revisão.
Como o trabalho entra no repositório¶
Desde 2026-10-15 o trabalho é conduzido pelo plugin Superpowers — os skills próprios /spec, /fix e /tweak foram removidos. O repositório acrescenta ao plugin duas coisas: onde o trabalho fica registrado e a régua da revisão (as rubricas de .claude/rubrics/). Não se mexe direto na main.
| O pedido é… | Caminho | Branch | Registro |
|---|---|---|---|
| Funcionalidade nova, ou mudança em existente | brainstorming → writing-plans → execução com TDD → revisão com a rubrica | spec/NNNN-slug | ../specifications/ |
| Defeito — algo que deveria funcionar e não funciona | systematic-debugging → teste vermelho antes da correção → revisão com a rubrica | fix/NNNN-slug | ../fixes/ |
| Ajuste direto — ícone, palavra, espaçamento | mudança direta, com verificação | tweak/slug | a mensagem de commit (sem arquivo) |
Subir para produção o que já está na main | /ship | — | nota em apps/web/src/versoes/ e tag vX.Y.Z |
O ajuste direto não gera documento: ../tweaks/ é histórico do tempo do /tweak. Mexeu em permissão, isolamento, migration ou contrato de API, não é ajuste direto, qualquer que seja o tamanho do diff.
A fonte de tudo isso — como escolher na fronteira, onde o Superpowers grava (e onde não grava), a numeração, as rubricas e quando a revisão aprova — é a seção Fluxo de desenvolvimento do CLAUDE.md da raiz; o deploy está em ../operations/deployment.md.
A ordem dentro de qualquer trabalho que atravesse os apps é sempre a mesma — o contrato desce da API: apps/api → apps/web → apps/e2e. Nada é commitado, mesclado ou empurrado sem pedido explícito; a única exceção é a tag de versão que o /ship empurra depois de um deploy verificado.
Testes¶
- A suíte a rodar segue o que a branch tocou: só
apps/api→ opytest; sóapps/web→make test-web; os dois →make test(o web primeiro; falhando, o pytest não roda). make test-web ARQ=<caminho>— um arquivo da suíte do web, ~10s. É o que se roda no meio de uma correção, inclusive para o red-green: reverta, veja vermelho, restaure.- Teste a escrever acompanha o código —
apps/api/tests/na API,*.test.tsxao lado do arquivo no web, e e2e quando o comportamento pede prova de fluxo. - e2e — só os specs das telas que a branch alterou, e sempre contra o dev-remote:
/devremote-rebuildprimeiro (as imagens embutem o código), depoiscd apps/e2e && npx playwright test tests/e2e/<spec>.spec.ts --project=chromium.make e2einteiro nunca roda por iniciativa própria — quando o diff parece atravessar telas além das tocadas, a suíte completa é recomendação ao usuário. Nunca contra um ambiente isolado montado à mão. Ver../operations/troubleshooting.mdpara as armadilhas conhecidas.
Nesta máquina, especificamente¶
Não há uv nem apps/api/.venv no host desta máquina — a parte do pytest de make test (cd apps/api && uv run pytest) falha aqui. O pytest da API roda pelo container do dev-remote: docker exec garantora-devremote-api-1 uv run pytest, e como a imagem embute o código, copie antes o arquivo alterado com docker cp (procedimento no apps/api/CLAUDE.md). make test-count já escolhe sozinho entre host e container — use-o como referência de como decidir. A suíte do web (make test-web) roda aqui normalmente.