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)
- 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
- 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.
- 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á).
- Gatear no check-all local —
uv 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.
Problema (reproduzido no clone T14, 03/jul)
O mypy morre na largada — checa ZERO código real:
Causa:
docs/private/raw_pastes/cursor-incident/scripts/__init__.py(raw-paste local do incidente Cursor, UNTRACKED) colide com oscripts/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.0na dev-deps, mas não roda em nenhum gate (nem CI nemcheck-all). Só o Cursor/language-server roda ad-hoc → e é aí que o untracked morde. O[tool.mypy]não temexclude.AC (nesta ordem — não gatear vermelho no CI)
excludeno[tool.mypy](pyproject.toml):uv run mypy .e TRATAR o que surgir.uv run mypy .no.github/workflows/ci.yml(o CI é limpo: só faz checkout de tracked, então o untrackedscripts/__init__.pynem existe lá). Manter soft (disallow_untyped_defs=falsecomo está).uv run mypy .noscripts/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)
disallow_untyped_defs=true,warn_return_any, reduzirignore_missing_imports) — só quando o baseline estiver verde e gateado.docs/private/raw_pastes/cursor-incident/— é evidência do incidente SEV-1; oexcluderesolve sem tocar nele.