Workflow de Desenvolvimento (@workflow) — v1.0
Status: Obrigatório Data: 2026-04-08 Última atualização: 2026-04-08
Invocar com a palavra-chave @workflow — execução obrigatória em toda feature nova (Cenário A) ou atualização de feature existente (Cenário B).
Este documento governa quando e como o processo de desenvolvimento é executado. Recursos técnicos consultados durante o processo:
- TESTING_MASTER.md — referência técnica de testes (Fase 2)
- AUDIT_CHECKLIST.md — checklist @audit (fases finais)
- MIGRATION_SAFETY_PROTOCOL.md — protocolo de banco (quando aplicável)
1. Princípio Central
Testes são entrega, não apêndice.
- Feature sem cobertura de testes adequada não está pronta — está incompleta.
- Testes são entregues no mesmo commit que o código. Nunca "depois", nunca "em sprint separada".
- O critério de conclusão de uma implementação é testes passando no pipeline CI, não "parece que funciona".
- Uma entrega sem testes é tratada com a mesma gravidade que uma entrega sem documentação: não é aceita.
2. Cenário A — Feature Nova (TDD Obrigatório)
Toda feature nova segue um processo de 4 fases sequenciais, cada uma com ponto de aprovação explícito.
Fase 1: Planejamento
Objetivo: Definir o escopo da feature antes de qualquer código.
Entregáveis:
- O que a feature faz (comportamento esperado)
- Quais camadas são afetadas (Edge Function, hook, componente, migration, RLS)
- Quais features adjacentes podem ser impactadas
- Quais documentos da
docs/foram consultados (obrigatório listar) - Se envolve banco: declarar que MIGRATION_SAFETY_PROTOCOL.md será seguido
Gate: ⏸️ Aguardar aprovação do planejamento antes de avançar.
Fase 2: Escrita dos Testes (Antes da Implementação)
Objetivo: Definir o contrato de comportamento da feature via testes que falham.
Processo:
- Consultar a árvore de decisão de camada do TESTING_MASTER.md §3 para determinar quais tipos de teste são necessários (unitário, contrato Deno, integração de hook, componente, segurança, E2E)
- Escrever testes cobrindo:
- Happy path — comportamento esperado com inputs válidos
- Bordas documentadas — limites, valores nulos, permissões insuficientes
- Impacto adjacente — features identificadas no planejamento que podem ser afetadas
- Rodar os testes — todos devem falhar neste ponto. Isso é esperado e correto. Se algum teste passa antes da implementação, o teste está testando a coisa errada.
Anti-padrões:
- ❌ Escrever testes que testam implementação interna (mock de tudo)
- ❌ Escrever testes que passam sem a feature existir
- ❌ Pular testes de borda "porque é edge case"
Gate: ⏸️ Aguardar aprovação dos testes antes de implementar.
Fase 3: Implementação
Objetivo: Escrever o código que faz os testes passarem.
Processo:
- Implementar a feature guiada pelos testes escritos na Fase 2
- Rodar os testes localmente após cada mudança significativa
- O critério de conclusão é: todos os testes passam
- Se durante a implementação surgir um comportamento não coberto pelos testes, adicionar o teste primeiro, depois o código
Anti-padrões:
- ❌ Alterar testes para fazê-los passar (exceto se o teste tinha um bug genuíno)
- ❌ Declarar "pronto" com testes falhando
- ❌ Implementar funcionalidade além do escopo dos testes sem adicionar cobertura
Fase 4: Auditoria e Pipeline
Objetivo: Validar a entrega completa.
Processo:
- Executar
@auditconforme AUDIT_CHECKLIST.md - Verificar que todos os testes passam no pipeline CI (não apenas localmente)
- Atualizar documentação conforme DOCUMENTATION_MAINTENANCE.md
- Se houve mudança de banco: confirmar que MIGRATION_SAFETY_PROTOCOL.md foi seguido integralmente
Gate: ✅ Entrega concluída apenas quando @audit não tem itens 🔴 abertos.
3. Cenário B — Atualização de Feature Existente
Atualizar uma feature existente é mais complexo que criar uma nova, porque exige entender o estado atual antes de mudar qualquer coisa. O processo tem 5 fases.
Fase 1: Raio-X Arquitetural
Objetivo: Produzir um documento SSOT (Single Source of Truth) da feature no estado atual.
Entregáveis (documento em docs/ referenciando a feature pelo nome):
- Inventário de arquivos: quais Edge Functions, hooks, componentes, migrations compõem a feature
- Fluxo de dados ponta a ponta: do clique do usuário até o banco e volta
- RLS policies: quais policies protegem os dados desta feature
- Cobertura de testes atual: quais testes existem, o que cobrem, o que falta
- Desvios de padrão: anti-padrões identificados em relação à documentação (
docs/)- Ex: usa
fetchdireto em vez deinvokeAction, não temregistrarLog(), faltaWITH CHECK
- Ex: usa
Este raio-x se torna o SSOT da feature — o documento de referência para qualquer trabalho futuro nela.
Gate: ⏸️ Aguardar aprovação do raio-x antes de avançar.
Fase 2: Testes do Estado Atual
Objetivo: Cobrir o comportamento atual antes de mudar qualquer coisa.
Processo:
- Escrever testes que documentam o comportamento atual da feature (como ela funciona hoje)
- Se o raio-x identificou desvios de padrão, corrigi-los aqui junto com os testes
- Ex: se falta
registrarLog(), adicionar o log + teste que valida o log - Ex: se usa
useState + useEffectpara fetch, migrar para React Query + teste
- Ex: se falta
- Rodar todos os testes — devem passar (estamos testando o que já existe)
Por que corrigir desvios antes da atualização?
- Misturar correção de anti-padrões com feature nova torna impossível isolar regressões
- Se a atualização quebrar algo, sabemos que é a atualização — não uma correção de padrão
Gate: ⏸️ Aguardar aprovação dos testes baseline antes de avançar.
Fase 3: Planejamento da Atualização
Objetivo: Definir o escopo da mudança com conhecimento completo do estado atual.
Entregáveis:
- O que será mudado (delta explícito sobre o raio-x)
- Quais testes existentes serão afetados pela mudança
- Quais testes novos são necessários
- Se envolve banco: declarar que MIGRATION_SAFETY_PROTOCOL.md será seguido
Gate: ⏸️ Aguardar aprovação do planejamento antes de implementar.
Fase 4: Implementação + Testes Novos
Objetivo: Implementar a atualização com cobertura de testes.
Processo:
- Escrever testes novos para os comportamentos que a atualização adiciona/modifica (TDD — testes primeiro)
- Implementar a atualização
- Rodar todos os testes (baseline + novos) — todos devem passar
- Se um teste baseline quebrar, analisar se é regressão (bug) ou mudança intencional de comportamento (atualizar o teste com justificativa)
Fase 5: Auditoria Completa
Objetivo: Validar a feature inteira (não apenas a atualização).
Processo:
- Executar
@auditcobrindo a feature completa (não apenas o delta) - Atualizar o documento SSOT criado na Fase 1 para refletir o novo estado
- Atualizar documentação conforme DOCUMENTATION_MAINTENANCE.md
Gate: ✅ Entrega concluída apenas quando @audit não tem itens 🔴 abertos.
4. Definição de "Entrega Completa"
Uma entrega só é declarada concluída quando todos os itens abaixo estão presentes:
| # | Item | Referência |
|---|---|---|
| 1 | Código implementado e funcional | — |
| 2 | Testes passando no pipeline CI | TESTING_MASTER.md |
| 3 | Documentação atualizada na mesma entrega | DOCUMENTATION_MAINTENANCE.md |
| 4 | @audit executado sem itens 🔴 abertos | AUDIT_CHECKLIST.md |
| 5 | Para mudanças de banco: protocolo de 3 fases seguido | MIGRATION_SAFETY_PROTOCOL.md |
Se qualquer item estiver ausente, a entrega está incompleta.
O que NÃO constitui entrega completa
- ❌ "Código funciona mas testes ficam pra depois"
- ❌ "Testes passam localmente mas não rodei no CI"
- ❌ "Documentação será atualizada no próximo commit"
- ❌ "@audit identificou problemas mas são menores"
- ❌ "Migration foi aplicada mas não segui o protocolo de 3 fases porque era simples"
5. Migração Incremental de Cobertura
A cobertura de testes da plataforma cresce junto com o desenvolvimento, não em sprints separadas.
Regra
Cada feature tocada (nova ou atualizada) sai com cobertura adequada.
- Não existe sprint de "adicionar testes em tudo"
- Não existe backlog de "dívida de testes" que cresce indefinidamente
- A cada feature entregue, o percentual de cobertura do sistema aumenta ou se mantém — nunca diminui
Como funciona na prática
- Feature nova (Cenário A): nasce com 100% de cobertura dos comportamentos definidos
- Feature atualizada (Cenário B): o raio-x identifica gaps de cobertura; a Fase 2 os preenche antes da atualização
- Feature adjacente impactada: se a análise de impacto identificar features adjacentes, seus testes são verificados e complementados se necessário
Resultado esperado
Com o tempo, todas as features do sistema terão cobertura adequada — não porque houve um esforço dedicado de testes, mas porque cada interação com o código deixa a cobertura melhor do que encontrou.
→ Ref: TEST_MIGRATION_REPORT.md como exemplo do que essa migração gradual produz.
6. Nota sobre Validação com Zod
A adoção de Zod como validação de runtime segue o mesmo princípio de migração incremental descrito na seção 5.
Regra atual
| Contexto | Obrigatoriedade |
|---|---|
| Feature nova (Cenário A) | Zod obrigatório nas fronteiras de entrada de dados |
| Feature existente atualizada (Cenário B) | Zod adotado durante a atualização |
| Feature não tocada | Sem obrigação imediata |
Fronteiras de entrada que exigem Zod
- Payloads de entrada em Edge Functions (
req.json()) - Respostas de APIs de terceiros (Wasender, Mercado Pago)
- Dados de importação de planilhas (Excel/CSV)
- Parâmetros de URL e query strings em rotas públicas
Estratégia futura
A estratégia detalhada de adoção de Zod (inventário de fronteiras, priorização, schemas compartilhados) será documentada separadamente após auditoria white-box da codebase. Este documento formaliza apenas o princípio: toda fronteira nova já nasce com Zod.
Referências Cruzadas
| Documento | Relação com este workflow |
|---|---|
| TESTING_MASTER.md | Guia técnico — pirâmide, camadas, templates, pipeline |
| AUDIT_CHECKLIST.md | Checklist @audit executado nas fases finais |
| MIGRATION_SAFETY_PROTOCOL.md | Protocolo de 3 fases para mudanças de banco |
| DOCUMENTATION_MAINTENANCE.md | Regra de documentação na mesma entrega |
| TEST_MIGRATION_REPORT.md | Exemplo de migração incremental de cobertura |
| TEST_ERROR_PLAYBOOK.md | Catálogo SSOT de erros E2E |