Skip to content

[chore][tooling] mypy: exclude docs/ (fix duplicate-module que mata o checker) + gatear no CI/check-all #1149

Description

@FabioLeitao

Problema (reproduzido no clone T14, 03/jul)

O mypy morre na largada — checa ZERO código real:

scripts/__init__.py: error: Duplicate module named "scripts"
  (also at "./docs/private/raw_pastes/cursor-incident/scripts/__init__.py")
Found 1 error in 1 file (errors prevented further checking)

Causa: docs/private/raw_pastes/cursor-incident/scripts/__init__.py (raw-paste local do incidente Cursor, UNTRACKED) colide com o scripts/ real do topo. Rodando em ., o mypy vê dois módulos "scripts" e trava antes de checar qualquer coisa.

Estado atual: mypy é config órfã[tool.mypy] existe (soft) + mypy>=2.1.0 na dev-deps, mas não roda em nenhum gate (nem CI nem check-all). Só o Cursor/language-server roda ad-hoc → e é aí que o untracked morde. O [tool.mypy] não tem exclude.

AC (nesta ordem — não gatear vermelho no CI)

  1. Fix — exclude no [tool.mypy] (pyproject.toml):
    [tool.mypy]
    python_version = "3.12"
    exclude = ['^docs/', '^build/']   # docs nunca é type-checked; mata a colisão do raw-paste
    explicit_package_bases = true
    # ...resto igual
  2. Rodar uv run mypy . e TRATAR o que surgir. ⚠️ A morte-precoce escondia o resto — depois do exclude o mypy checa a árvore inteira pela 1ª vez; pode revelar erros de tipo reais (com a config soft, provavelmente poucos). Deixar verde antes do passo 3.
  3. Gatear no CI — step uv run mypy . no .github/workflows/ci.yml (o CI é limpo: só faz checkout de tracked, então o untracked scripts/__init__.py nem existe lá). Manter soft (disallow_untyped_defs=false como está).
  4. Gatear no check-all localuv run mypy . no scripts/check-all.sh (paridade dev↔CI; foi o gap que deixou o Cursor bater no erro sem gate formal).

Fora de escopo (issue separada depois)

  • Apertar o mypy (disallow_untyped_defs=true, warn_return_any, reduzir ignore_missing_imports) — só quando o baseline estiver verde e gateado.
  • NÃO deletar/mexer no raw-paste docs/private/raw_pastes/cursor-incident/ — é evidência do incidente SEV-1; o exclude resolve sem tocar nele.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions