Skip to content

🧹 P3: Reexecutar lint cleanup seguindo plano holístico (4 níveis) #81

Description

@adm01-debug

🧹 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-importsimport 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.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions