systematic-debugging (obra/superpowers)
Investiga de forma sistemática errores, fallos de pruebas y comportamientos inesperados antes de proponer arreglos.
superpowers systematic-debugging: sin mejora medible en tres errores pequeños, alrededor de 1.3 veces los tokens
Codex CLI · gpt-6-astra
22.4 / 30
Mejora frente a sin skill: +0.00 · Según el caso · 18 ejecuciones
Según el caso: la mejora +0.00 está por debajo de +1.0. Para ser recomendada hace falta un total de 22/30, una calidad de salida de 3.5 y una mejora de +1.0.
SOTA
AprobadaProbada con Codex.
Cubre Codex, Claude Code
Codex CLI 0.166 (nivel SOTA): 18 ejecuciones puntuadas. Una pasada aquí también cubre Claude Code según nuestra regla de niveles; no dice nada sobre el segundo nivel.
Puntuaciones
Cada dimensión va de 0 a 5 y las seis suman el total sobre 30. 5 es mejor en todas las dimensiones. Coste 5 significa barato y rápido. Instalación 5 significa fácil.
- Fiabilidad de activación
- 5.0
- Mejora frente a sin skill
- 2.0
- Calidad de salida
- 4.5
- Coste en tokens y tiempo
- 3.0
- Instalación y portabilidad
- 4.0
- Seguridad
- 4.0
Revisión de seguridad
SeguraEscaneo estático: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Revisión manual: Segura de ejecutar en un sandbox sin red (sin hallazgos). Un escaneo limpio no demuestra que una skill sea segura.
Instalar
npx skills@latest add obra/superpowers --skill systematic-debugging
Commit fijado: 2ce8aa15d05bd57213e6f746f953aafb7ded7a8b
Probada: 2026-11-02
Qué probamos
- Desfase de uno en una función pequeña — moving_average en movavg.py devuelve números incorrectos: moving_average([2, 4, 6, 8, 10], 3) debería ser [2, 3, 4, 6, 8], pero los últimos valores salen mal. Encuentra la causa y corrígela. Pruebas: python3 -m unittest.
- Bug de fechas entre archivos — Las cabeceras de nuestro informe semanal muestran fechas incorrectas alrededor de Año Nuevo; por ejemplo, header('2026-W01') debería ser 'Week 2026-W01: Dec 29 - Jan 04, 2026'. Encuentra la causa y corrígela.
- Fallo de prueba dependiente del orden — Las pruebas de tests/test_settings.py pasan por separado, pero test_b falla cuando se ejecuta todo el archivo, y las configuraciones parecen arrastrar etiquetas de llamadas anteriores. Diagnostica y corrige.
Ventajas
- La skill se activó sin nombrarla: se leyó el archivo de la skill en 6/6 ejecuciones con skill.
Inconvenientes
- Sin mejora medible frente a sin skill (+0.00, dentro del ruido).
- Un prompt de una frase obtuvo 4.86, frente a 4.45 con la skill (-0.42).
- Salvedad de la prueba: la rama del prompt de una frase (6 ejecuciones) se añadió después en una máquina distinta de las ramas de control y con skill.
- n=2 por tarea y rama; las diferencias de menos de aproximadamente 1 punto son ruido.
Reseña
Codex CLI 0.166 (gpt-6-astra, razonamiento bajo) en una máquina de pruebas Mac, un proyecto temporal nuevo y HOME/TMPDIR/cachés temporales en cada ejecución, skill instalada (grupo con skill), ausente (control) o ausente con el requisito central de la skill comprimido en una frase añadida al prompt (grupo del prompt de una frase), 2 ejecuciones por grupo y tarea, red desactivada, escrituras en /tmp bloqueadas. Los prompts nunca mencionan la skill. La puntuación es programática (tests ocultos / recuerdo de problemas plantados / comprobaciones de restricciones / render+OCR cuando corresponde), 0–5 por ejecución. Ningún juez LLM decidió ninguna puntuación.
Comparación de tres ramas
| Rama | Puntuación media (0-5) | Tokens por ejecución |
|---|---|---|
| Sin la skill | 4.45 | 75k |
| Prompt de una frase | 4.86 | 98k |
| Con la skill | 4.45 | 99k |
Medido con Codex CLI en 18 ejecuciones, puntuado con comprobaciones basadas en reglas y sin juez LLM. Total 22.4 / 30, veredicto Según el caso.
Aviso: La rama de una frase (6 ejecuciones) se añadió más tarde en una máquina distinta de las ramas de control y con skill.
Veredicto: Según el caso (22.4 / 30). Fuente: obra/superpowers, skills/systematic-debugging, fijada en el commit 2ce8aa1. Instalación: npx skills@latest add obra/superpowers --skill systematic-debugging. Licencia: MIT (LICENSE del repositorio).
Qué es
La skill systematic-debugging de obra/superpowers: 'úsala al encontrarte con cualquier bug, fallo de test o comportamiento inesperado, antes de proponer arreglos'. Cuatro fases (investigar la causa raíz, buscar patrones, hipótesis, arreglo), una regla contra acumular arreglos y notas complementarias (rastreo de causa raíz, defensa en profundidad, espera basada en condiciones) más escenarios de presión de tests y un script de shell (find-polluter.sh, un bisect local sobre archivos de test).
Cómo lo probamos
Codex CLI 0.166 (gpt-6-astra, razonamiento bajo) en un Mac de pruebas, un proyecto temporal nuevo y HOME/TMPDIR/cachés temporales por ejecución, skill instalada (tratamiento) o ausente (control) o ausente con el requisito central de la skill comprimido en una frase añadida al final del prompt (grupo de una frase), 2 ejecuciones por grupo y tarea, red desactivada, escrituras en /tmp bloqueadas. Los prompts nunca mencionan la skill.
- Error off-by-one en una función pequeña —
moving_averageen movavg.py devuelve números incorrectos: moving_average([2, 4, 6, 8, 10], 3) debería ser [2, 3, 4, 6, 8] pero los últimos valores salen mal. Encuentra la causa y arréglala. Tests:python3 -m unittest. - Bug de fechas entre archivos — Los encabezados de nuestro informe semanal muestran fechas erróneas alrededor del año nuevo, p. ej. header('2026-W01') debería ser 'Semana 2026-W01: 29 dic - 04 ene, 2026'. Encuentra la causa y arréglalo.
- Fallo de test dependiente del orden — Los tests de tests/test_settings.py pasan por sí solos, pero
test_bfalla cuando se ejecuta el archivo entero, y las configuraciones parecen arrastrar tags de llamadas anteriores. Diagnostícalo y arréglalo.
La puntuación es programática (tests ocultos / detección de problemas sembrados / comprobaciones de restricciones / renderizado + OCR cuando corresponde), 0–5 por ejecución. Ningún juez LLM decidió ninguna puntuación.
Resultados
La frase única que recibió el tercer grupo: "Depura de forma sistemática: reproduce primero el fallo, investiga la causa raíz y formula una hipótesis cada vez con evidencia antes de cambiar código, haz el arreglo más pequeño para la causa raíz (sin conjeturas acumuladas) y verifica con los tests."
| Tarea | Puntuación control | Una frase | Con la skill | Tokens control | Tokens de una frase | Tokens con la skill | Skill leída |
|---|---|---|---|---|---|---|---|
| t1-moving-average | 4.17 | 4.58 | 4.58 | 60k | 62k | 69k | 2/2 |
| t2-weekly-dates | 4.17 | 5.0 | 4.17 | 78k | 104k | 109k | 2/2 |
| t3-shared-state | 5.0 | 5.0 | 4.58 | 85k | 127k | 118k | 2/2 |
Puntuación media: 4.45 sin vs 4.45 con la skill (delta +0.0). Tokens por ejecución: 75k vs 99k (1.33x); tiempo 34s vs 45s. Grupo de una frase: 4.86 (la ganancia de la skill sobre la frase única: -0.42; la ganancia de la frase única sobre sin skill: +0.42); tokens de la frase única 98k por ejecución, así que la skill cuesta 1.01x la frase única.
Qué ocurrió
- Resultado: los tests ocultos pasaron en todas las ejecuciones de ambos grupos, así que la corrección no varió.
- La comprobación de proceso 'ejecutó los tests antes de editar el código' (reproducir primero): el control la omitió en 4/6 ejecuciones, el tratamiento en 4/6. La primera fase de la skill es 'reproducir', pero los agentes con la skill a menudo parchearon antes de ejecutar nada.
- La skill se leyó en 6/6 ejecuciones de tratamiento, así que la activación no es el problema; simplemente no cambió el comportamiento en estos bugs pequeños (los bugs se podían encontrar leyendo el código).
- Coste: aproximadamente 1.3x tokens por ejecución (89k vs 67k).
- La versión de una frase (reproducir primero, una hipótesis cada vez, el arreglo más pequeño, verificar): media 4.86 frente a 4.45 del control y 4.45 de la skill, con 98k tokens por ejecución frente a 75k (1.3x) y 99k de la skill (1.0x).
- La diferencia está en ejecutar los tests antes de editar: 5 de 6 ejecuciones de una frase lo hicieron frente a 2 de 6 del control y 2 de 6 de la skill. La skill no cambió ese comportamiento; la frase que lo nombra sí. Todos los grupos explicaron la causa raíz en todas las ejecuciones y pasaron todos los tests ocultos, con diffs pequeños.
Puntuaciones por dimensión
| Dimensión | Puntuación | Motivo |
|---|---|---|
| 1_output_quality | 4.45 | Puntuación media 4.45/5 con la skill (comprobaciones programáticas, véase la tabla por tarea). |
| 2_lift_vs_no_skill | 2.0 | +0.00 puntos frente a 4.45 sin la skill (n=2 por tarea; menos de ~1 punto es ruido). |
| 3_trigger | 5.0 | Archivo de la skill leído en 6/6 ejecuciones de tratamiento. |
| 4_instructions_portability | 4 | |
| 5_efficiency | 3 | 1.33x tokens (99k vs 75k por ejecución) y 1.32x tiempo (45s vs 34s). |
| 6_safety_hygiene | 4 |
Límites de esta prueba
- Tres bugs pequeños sembrados (off-by-one, lógica de fechas entre archivos, contaminación de tests dependiente del orden); todos lo bastante fáciles como para que el baseline los arregle.
- La skill está pensada para bugs difíciles, de varios intentos; no probamos esos.
find-polluter.shno se ejercitó.- n = 2 por grupo y tarea: las diferencias de menos de ~1 punto son ruido.
- La puntuación basada en reglas mide lo que las comprobaciones pueden ver; no puede juzgar el gusto ni si el resultado es el mejor posible.
Seguridad
Consulta security.md. Escaneo: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Veredicto: segura de ejecutar (sandbox sin red). Un escaneo limpio no demuestra que una skill sea segura.
Conclusión
En tres bugs pequeños la skill añadió unas 1.3x tokens y ningún cambio medible: control y skill puntuaron 4.45 y ambos ejecutaron los tests antes de editar en solo 2 de 6 ejecuciones. La versión de una frase que dice 'reproduce primero' rindió mejor (4.86, 5 de 6). Podría compensar en bugs más difíciles, que no probamos.
Transcripción
Registro de ejecuciones: systematic-debugging (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) Columnas: tarea, grupo-ejecución, puntuación (0-5), tokens, segundos, comprobaciones superadas, archivos de la skill que abrió el agente. t1-moving-average control-1: puntuación 4.17, tokens 60337, s 30.6, comprobaciones 3/4, no abrió nada t1-moving-average control-2: puntuación 4.17, tokens 60293, s 24.1, comprobaciones 3/4, no abrió nada t1-moving-average oneliner-1: puntuación 4.17, tokens 62543, s 30.2, comprobaciones 3/4, no abrió nada t1-moving-average oneliner-2: puntuación 5.0, tokens 62033, s 32.0, comprobaciones 4/4, no abrió nada t1-moving-average treatment-1: puntuación 5.0, tokens 69716, s 31.0, comprobaciones 4/4, abrió systematic-debugging t1-moving-average treatment-2: puntuación 4.17, tokens 69385, s 26.6, comprobaciones 3/4, abrió systematic-debugging t2-weekly-dates control-1: puntuación 4.17, tokens 78575, s 38.8, comprobaciones 3/4, no abrió nada t2-weekly-dates control-2: puntuación 4.17, tokens 78005, s 39.5, comprobaciones 3/4, no abrió nada t2-weekly-dates oneliner-1: puntuación 5.0, tokens 96141, s 41.5, comprobaciones 4/4, no abrió nada
18 ejecuciones, 3 artefactos
Resultado de ejemplo
SOTA · With the skill: movavg.py (t1-moving-average, run 1, Codex)
def moving_average(values, window): """Trailing moving average. Output i is the mean of the last `window` values ending at index i. For i < window - 1 only the values available so far are used. Raises ValueError if window < 1. """ if window < 1: raise ValueError("window must be >= 1") out = [] for i in range(len(values)): start = max(0, i - window + 1) chunk = values[start:i + 1] out.append(sum(chunk) / len(chunk)) return out