---
name: worker-exclusion-tipado-python
description: Agente trabajador que elimina módulos de la lista de exclusión mypy en lotes acotados, corrige los errores de tipado aflorados y valida con mypy, pytest y pre-commit. Ideal para paralelizar la reducción de deuda de tipado en proyectos Python grandes.
license: Apache-2.0
metadata:
  id: da826567
  slug: worker-exclusion-tipado-python
  titulo: "Worker de Exclusión de Tipado Python (mypy)"
  servicio: IA-Ingenieria-MLOps
  categoria_recurso: Automatizacion
  tipo: automatizacion
  nivel: avanzado
  idioma: es
  idioma_original: en
  acceso: gratis
  precio_eur: 0
  plataformas: [Python, mypy, pytest, pre-commit, pyproject.toml]
  dependencias: [mypy, pytest, pre-commit]
  licencia: { spdx: Apache-2.0, redistribuible: true, uso_comercial: true }
  fuente:
    repo: getsentry/skills
    url: https://github.com/getsentry/skills/tree/main/skills/typing-exclusion-worker
    commit: b39c7c4
    autor: getsentry
    nombre_original: typing-exclusion-worker
    duplicados_en: []
  seguridad: { veredicto: seguro, riesgo: bajo, escaneado: "2026-06-14", motor: "grep-estatico+auditor-llm" }
  ficha:
    que_hace: "Elimina módulos asignados de las exclusiones mypy, corrige errores de tipado en el alcance y genera un resumen estructurado por lote."
    como_lo_hace: "Sigue un flujo de 5 pasos (exclusion → mypy → pytest → pre-commit → verificacion final) con reglas de alcance estrictas y una plantilla de salida estandarizada para el orquestador."
  content_hash: "da826567e4d30b036f20ed6ee37080ab6f929c8dcaf1ff4b9c53eb68bacca061"
  version: 1.0.0
---

# Typing Exclusion Worker

## Purpose

Execute one assigned typing batch safely and predictably:

- remove only assigned modules from mypy exclusions,
- fix surfaced typing issues in scope,
- run required checks,
- return a consistent summary for the manager/orchestrator.

## Inputs Required

Before starting, confirm these inputs exist in the task prompt:

- worktree/branch name,
- exact module list to remove from exclusion,
- ownership/domain boundary,
- expected validation commands (if customized).

If any are missing, ask for them before editing.

## Scope Rules (Hard Constraints)

1. Only remove assigned module entries from the mypy exclusion list in `pyproject.toml`.
2. Keep code changes in assigned scope unless a direct dependency is required to pass typing/tests.
3. Do not expand to cross-team modules unless explicitly approved by the manager.
4. Avoid blanket `# type: ignore`; if unavoidable, use narrow `ignore[code]` with a short reason.

## Execution Workflow

1. **Apply exclusion change**

   - Remove assigned modules from the exclusion override in `pyproject.toml`.

2. **Run mypy on assigned scope**

   - Prefer targeted paths first for fast feedback.
   - Fix errors using explicit typing patterns (`isinstance` narrowing, accurate return types, typed class attrs, relation-safe model access).

3. **Run tests for touched area**

   - Execute targeted pytest for modified modules/tests.
   - Fix regressions before continuing.

4. **Run pre-commit on changed files**

   - Run `pre-commit run --files <changed files>`.
   - If hooks auto-fix files, rerun until clean.

5. **Final verification**
   - Re-run targeted mypy and tests after final edits.
   - Ensure no unrelated files were changed.

## Python Typing Best Practices

- Prefer precise types over `Any`.
- Use type narrowing on unions before attribute access.
- Keep method overrides signature-compatible with base classes.
- Annotate class attributes in tests/helpers when inference is weak.
- Use relation objects (`obj.related`) when stubs do not expose raw `*_id` attributes.

## Required Output Template

Return this exact structure at the end of each batch:

```markdown
## Batch Summary

- Branch/worktree: `<name>`
- Ownership/domain: `<team-or-domain>`

### Modules Removed From Exclusion

- `<module.path.one>`
- `<module.path.two>`

### Files Changed

- `<path>`
- `<path>`

### Key Typing Fixes

- `<short rationale + fix>`
- `<short rationale + fix>`

### Validation

- `mypy`: `<pass/fail + scope>`
- `pre-commit --files`: `<pass/fail>`
- `pytest`: `<pass/fail + scope>`

### Notes

- Remaining blockers: `<none or details>`
- Any new ignore entries: `<none or file + ignore code + reason>`
```

## Stop Conditions (Escalate to Manager)

Stop and report instead of widening scope when:

- fixes require touching another team/domain,
- exclusion conflicts in `pyproject.toml` cannot be resolved safely,
- error volume indicates batch is too large and should be split.
