🧹 P3 — Reexecução do Lint Cleanup (Plano Holístico)
Severidade: P3 — Baixa (não bloqueia operação, melhora manutenibilidade)
Origem: plano definido em #73 após fechamento dos 22 drafts paralelos.
Contexto
Em sessão de auditoria, 22 PRs draft de lint cleanup foram abertos em paralelo no mesmo dia, gerando merge hell virtual. Todos foram fechados em batch e o trabalho de fato precisa ser refeito com estratégia BPM "1 PR por intento".
Status do lint à última medição (PR #29 fechado): 1645 problemas (1146 errors + 499 warnings), redução de 15% sobre 1939 baseline original.
🎯 Plano holístico (4 níveis sequenciais — 1 PR por nível)
Nível P0 — Bugs reais (não estilo)
Apenas violações que podem causar bug em produção.
Regras-alvo:
react-hooks/exhaustive-deps (146 violações) — pode causar stale closures e bugs sutis
eqeqeq (222 violações) — == vs === pode causar bugs em comparações com null/undefined
no-unused-expressions (se houver) — código morto que pode esconder bugs
Estratégia:
- Auditar cada violação manualmente (sem
--fix automático para regras destas)
- Aceitar overrides locais (
// eslint-disable-next-line ...) com justificativa quando o linter está errado
- Esperado: 1 PR único com correções, ~1-2 dias de trabalho
Nível P1 — Type safety
Fortalecer tipos sem alterar runtime.
Regras-alvo:
@typescript-eslint/no-explicit-any (257 violações) — substituir any por tipos concretos
@typescript-eslint/no-non-null-assertion (se houver) — substituir ! por checks explícitos
Estratégia:
- Fixar de baixo para cima (utils → hooks → componentes)
- Pode quebrar TS em cascata; manter PR pequeno (max 30 arq)
- Esperado: 2-3 PRs sequenciais
Nível P2 — Style
Estilo automatizado, sem mudança de comportamento.
Regras-alvo:
@typescript-eslint/no-unused-vars (513 violações) — remover variáveis não usadas
no-duplicate-imports (93 violações) — consolidar imports
consistent-type-imports — import type { ... } onde aplicável
Estratégia:
- Roda
eslint --fix em modo guiado
- 1 PR por subdiretório grande (ex.:
src/components, src/hooks, etc.)
- Esperado: 1-2 PRs
Nível P3 — Cleanup
Comentários console.log esquecidos, TODOs antigos, código morto não detectado por linter.
Estratégia:
- Pesquisa manual + pull requests pontuais
- Esperado: 1 PR
✅ Definition of Done por nível
| Nível |
DoD |
| P0 |
Contagem de react-hooks/exhaustive-deps + eqeqeq zerada OU justificada via override |
| P1 |
Contagem de no-explicit-any < 50 (de 257) |
| P2 |
Contagem de no-unused-vars < 50 (de 513) |
| P3 |
Zero console.log em código de produção (manter em testes) |
🚦 Ordem de execução
Sequencial, não paralela. A maior lição do incidente original foi: linters mexem em arquivos compartilhados; paralelismo = conflitos garantidos.
P0 → merge → P1 → merge → P2 → merge → P3 → merge
📊 Métricas a acompanhar
A cada PR, atualizar comentário com:
- Total de problemas antes/depois
- Por regra: contagem antes/depois
- Tempo decorrido
🎯 Critério para fechar esta issue
P0 + P1 fechados (qualidade real) — P2 + P3 são deferíveis. Se P0 e P1 reduzirem total para <500 problemas, repo está em estado saudável o suficiente para considerar concluído.
📌 Pré-requisito antes de começar
Sequência BPM: esta issue é o trilho final do hardening. Após concluída, repo entra em modo "manutenção contínua" sem débito acumulado.
🧹 P3 — Reexecução do Lint Cleanup (Plano Holístico)
Severidade: P3 — Baixa (não bloqueia operação, melhora manutenibilidade)
Origem: plano definido em #73 após fechamento dos 22 drafts paralelos.
Contexto
Em sessão de auditoria, 22 PRs draft de lint cleanup foram abertos em paralelo no mesmo dia, gerando merge hell virtual. Todos foram fechados em batch e o trabalho de fato precisa ser refeito com estratégia BPM "1 PR por intento".
Status do lint à última medição (PR #29 fechado): 1645 problemas (1146 errors + 499 warnings), redução de 15% sobre 1939 baseline original.
🎯 Plano holístico (4 níveis sequenciais — 1 PR por nível)
Nível P0 — Bugs reais (não estilo)
Apenas violações que podem causar bug em produção.
Regras-alvo:
react-hooks/exhaustive-deps(146 violações) — pode causar stale closures e bugs sutiseqeqeq(222 violações) —==vs===pode causar bugs em comparações com null/undefinedno-unused-expressions(se houver) — código morto que pode esconder bugsEstratégia:
--fixautomático para regras destas)// eslint-disable-next-line ...) com justificativa quando o linter está erradoNível P1 — Type safety
Fortalecer tipos sem alterar runtime.
Regras-alvo:
@typescript-eslint/no-explicit-any(257 violações) — substituiranypor tipos concretos@typescript-eslint/no-non-null-assertion(se houver) — substituir!por checks explícitosEstratégia:
Nível P2 — Style
Estilo automatizado, sem mudança de comportamento.
Regras-alvo:
@typescript-eslint/no-unused-vars(513 violações) — remover variáveis não usadasno-duplicate-imports(93 violações) — consolidar importsconsistent-type-imports—import type { ... }onde aplicávelEstratégia:
eslint --fixem modo guiadosrc/components,src/hooks, etc.)Nível P3 — Cleanup
Comentários
console.logesquecidos, TODOs antigos, código morto não detectado por linter.Estratégia:
✅ Definition of Done por nível
react-hooks/exhaustive-deps+eqeqeqzerada OU justificada via overrideno-explicit-any< 50 (de 257)no-unused-vars< 50 (de 513)console.logem código de produção (manter em testes)🚦 Ordem de execução
Sequencial, não paralela. A maior lição do incidente original foi: linters mexem em arquivos compartilhados; paralelismo = conflitos garantidos.
📊 Métricas a acompanhar
A cada PR, atualizar comentário com:
🎯 Critério para fechar esta issue
P0 + P1 fechados (qualidade real) — P2 + P3 são deferíveis. Se P0 e P1 reduzirem total para <500 problemas, repo está em estado saudável o suficiente para considerar concluído.
📌 Pré-requisito antes de começar
main(🔒 P1: Ativar Branch Protection em main (UI Settings → Branches) #78 desta lista de pendências)Sequência BPM: esta issue é o trilho final do hardening. Após concluída, repo entra em modo "manutenção contínua" sem débito acumulado.