Communitygithub.com

prove-it

Verifica si una prueba pytest de regresión detecta un error específico antes de una corrección confirmada y pasa después, ejecutándola varias veces y generando evidencia revisable. Útil para validar una afirmación de corrección de errores o comprobar si una prueba también pasa sin la corrección.

¿Qué es prove-it?

Prove It es una habilidad para agentes de IA diseñada para establecer una afirmación concreta: una misma prueba unitaria (pytest) detecta un comportamiento defectuoso específico antes de aplicar una corrección y pasa exitosamente después de ella. No basta con que la suite completa pase; esta herramienta exige que la prueba seleccionada falle en la versión anterior y pase en la corregida. Funciona en entornos de desarrollo local con Git (refs confirmadas) y Python, sin acceso a red ni instalación de dependencias. El agente identifica un único nodo pytest, añade un mensaje `PROVEIT:` a una aserción relevante en la prueba, y ejecuta `proveit.py` (incluido en la habilidad) que realiza tres ejecuciones por revisión, aislando archivos temporales. Los resultados se clasifican en `supported` (éxito), `not_supported` (fallo) o `inconclusive` (error externo), y se documentan en un informe (`report.md`, `report.json`) para su revisión. La habilidad está optimizada para asistentes como Claude Code, Cursor o Codex, y requiere que el agente inspeccione configuraciones específicas de cada revisión, evitando afirmaciones sobre calidad general del código o ausencia de inestabilidad.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/K-kiron/ProveIt/tree/main/skills/prove-it

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Prove It

Establezca una afirmación concreta: la misma prueba detecta el comportamiento defectuoso especificado antes de una reparación y pasa después de ella. Una suite que pase por sí sola no establece esto.

Elija el testigo

Inspeccione la corrección y la prueba relevante. Identifique la entrada/salida esperada o la transición de estado, y seleccione exactamente un nodo pytest. Utilice dos referencias Git locales confirmadas; la referencia posterior debe contener tanto la corrección como la prueba. No se incluyen ediciones no confirmadas. No confirme el trabajo de otra persona solo para ejecutar esta herramienta.

La aserción del defecto necesita un mensaje específico, como:

assert expired(now=10, deadline=10), "PROVEIT:expiry-boundary"

El mensaje debe estar en una aserción dentro de la función de prueba seleccionada. No lo coloque en aserciones no relacionadas, en un fixture, en código de aplicación o en una instrucción print. Inspeccione que esta aserción realmente observe el comportamiento descrito por el error. Si la prueba existente necesita un mensaje, agréguelo solo dentro del alcance de edición autorizado e incluya esa prueba en la revisión posterior. De lo contrario, explique la entrada faltante.

Ejecute la comparación

Ejecute el script incluido usando su ruta absoluta instalada. El intérprete seleccionado necesita pytest y las dependencias del proyecto ya instaladas. No se realiza instalación de dependencias, acceso a red, checkout de Git, reset, stash o commit.

python <directorio-skill>/scripts/proveit.py --repo <repositorio> --before <ref-antigua> --after <ref-corregida> --test tests/test_expiry.py::test_at_deadline --expect PROVEIT:expiry-boundary --output <nuevo-directorio-fuera-del-repositorio>

El ejecutor superpone el archivo de prueba seleccionado de la revisión posterior en ambas instantáneas, utiliza una copia nueva por intento y, por defecto, realiza tres ejecuciones por revisión con un tiempo de espera de 10 segundos por ejecución. Use --python, --repeat 2..5 o --timeout solo según lo necesite la tarea. Seleccione un ID de parámetro completo si la prueba está parametrizada.

Las instantáneas aíslan archivos, no la ejecución. Ejecute solo código cuya ejecución ya esté autorizada en este entorno. Las pruebas conservan el acceso del usuario al sistema de archivos, la red y las credenciales. No interprete un directorio temporal como una caja de seguridad. Nunca limpie worktrees o directorios no relacionados. El ejecutor elimina solo sus propias instantáneas temporales y deja el directorio de evidencia para su revisión.

Revise la evidencia

Lea report.md, report.json, selected-test.py, fix.diff y los registros relevantes. Verifique la aserción observada, el nodo seleccionado, los registros de fase y las rutas cambiadas.

ResultadoInterpretaciónSalida
supportedCada ejecución antigua alcanza la aserción declarada; cada ejecución nueva pasa.0
not_supportedLa prueba antigua también pasa, o la revisión reparada aún alcanza esa aserción.1
inconclusiveEntorno, fallo no relacionado, tiempo de espera, salto, ejecución incompleta o inestable.2

Un fallo de llamada no relacionado es inconcluso incluso cuando la nueva revisión pasa. Los fallos de recolección, dependencia, sintaxis, configuración y desmontaje nunca son un testigo. No los reetiquete como un error detectado. Resuelva la causa observada dentro del alcance y vuelva a ejecutar en un nuevo directorio de evidencia; no repita una configuración fallida sin cambios.

Antes de aceptar supported, inspeccione los fixtures/configuration específicos de la revisión y confirme que no explican el cambio. Solo el archivo de prueba elegido se superpone. Las dependencias instaladas se comparten, la carga automática de plugins pytest de terceros está deshabilitada y los addopts del proyecto se limpian. Los proyectos que requieren plugins externos o compilaciones pueden necesitar un entorno preparado por separado; informe la ejecución no soportada de manera clara.

Reporte la prueba, las referencias, el resultado, la ubicación de la evidencia y las limitaciones materiales. Diga que este testigo detectó el comportamiento especificado en estas ejecuciones. No afirme una prueba de corrección general, ausencia de inestabilidad, calidad general de la prueba o mejora de productividad medida. No publique informes que contengan rutas locales o registros sin revisarlos y obtener la autorización de publicación aplicable.

Skills relacionados