diagnosing-bugs (Matt Pocock)
Ejecuta un ciclo de diagnóstico de errores difíciles y regresiones de rendimiento antes de proponer arreglos.
mattpocock diagnosing-bugs: una versión de una frase de su regla «construye primero el bucle de retroalimentación» rindió igual que la skill completa, con 0.95x el coste de la skill
Codex CLI · gpt-6-astra
22.9 / 30
Mejora frente a sin skill: +0.28 · Según el caso · 18 ejecuciones
Según el caso: la mejora +0.28 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.3
- Calidad de salida
- 4.6
- Coste en tokens y tiempo
- 2.0
- Instalación y portabilidad
- 4.0
- Seguridad
- 5.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 mattpocock/skills --skill diagnosing-bugs
Commit fijado: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d
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.
- Calidad absoluta alta con la skill: 4.58 sobre 5.
Inconvenientes
- Sin mejora medible frente a sin skill (+0.28, dentro del ruido).
- Un prompt de una frase puntuó 4.72, frente a 4.58 con la skill (-0.14).
- Usa 1.71x los tokens de sin 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.31 | 77k |
| Prompt de una frase | 4.72 | 126k |
| Con la skill | 4.58 | 133k |
Medido con Codex CLI en 18 ejecuciones, puntuado con comprobaciones basadas en reglas y sin juez LLM. Total 22.9 / 30, veredicto Según el caso.
Veredicto: Situacional (22.9 / 30). Fuente: mattpocock/skills, skills/engineering/diagnosing-bugs, fijado en el commit 4ae2317. Instalación: npx skills@latest add mattpocock/skills --skill diagnosing-bugs. Licencia: MIT (LICENSE del repositorio).
Qué es
El skill diagnosing-bugs del repositorio de skills de Matt Pocock (engineering). Una disciplina para bugs difíciles: la fase 1 es «construir un bucle de retroalimentación de éxito/fallo ajustado» (test que falla, script curl, diff de CLI, navegador headless, traza reproducida), luego hipótesis ordenadas y probadas de una en una, instrumentación, un test de regresión y limpieza. Unas 1,000 palabras de Markdown, una plantilla auxiliar hitl-loop.template.sh y una regla para ocultar secretos antes de mostrar la salida. Se activa con «diagnose», «debug this» o «something is broken/failing».
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 en cada ejecución, skill instalado (grupo con skill), ausente (grupo de control) o ausente con el requisito central del skill comprimido en una frase añadida al prompt (grupo de una frase), 2 ejecuciones por grupo y tarea, red desactivada, escrituras en /tmp bloqueadas. Los prompts nunca mencionan el 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 corrígela. Tests:python3 -m unittest. - Bug de fechas entre archivos — Los encabezados 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 test dependiente del orden — Los tests de tests/test_settings.py pasan por sí solos, pero
test_bfalla cuando se ejecuta el archivo completo, y las configuraciones parecen arrastrar etiquetas de llamadas anteriores. Diagnostica y corrige.
La puntuación es programática (tests ocultos / detección de problemas sembrados / comprobaciones de restricciones / renderizado+OCR cuando corresponde), de 0 a 5 por ejecución. Ningún juez LLM decidió ninguna puntuación.
Resultados
La frase única que recibió el tercer grupo: "Primero construye un bucle de retroalimentación de éxito/fallo rápido y determinista que se ponga en rojo con este bug exacto (lo mejor es un test que falle), luego formula hipótesis ordenadas y pruébalas de una en una con evidencias antes de corregir, y vuelve a ejecutar el bucle para confirmar la corrección."
| Tarea | Puntuación sin skill | Una frase | Con skill | Tokens sin skill | Tokens una frase | Tokens con skill | Skill leído |
|---|---|---|---|---|---|---|---|
| t1-moving-average | 4.17 | 4.58 | 4.17 | 60k | 102k | 87k | 2/2 |
| t2-weekly-dates | 4.17 | 4.58 | 5.0 | 86k | 120k | 136k | 2/2 |
| t3-shared-state | 4.58 | 5.0 | 4.58 | 84k | 154k | 173k | 2/2 |
Puntuación media: 4.31 sin vs 4.58 con el skill (delta +0.28). Tokens por ejecución: 77k vs 133k (1.71x); tiempo 38s vs 51s. Grupo de una frase: 4.72 (la mejora del skill frente a la frase: -0.14; la mejora de la frase frente a no usar skill: +0.42); la frase usa 126k tokens por ejecución, así que el skill consume 1.05 veces sus tokens.
Qué ocurrió
- El código final fue igual de correcto en los tres grupos: los tests ocultos pasaron en 18/18 ejecuciones y cada diff se mantuvo dentro del límite de diff pequeño. Estos tres bugs sembrados (off-by-one, lógica de fechas entre archivos, contaminación de tests dependiente del orden) son tan fáciles que Codex a secas los arregla.
- Lo único que cambió es la comprobación de proceso «ejecutó los tests antes de editar el código», es decir, reproducir primero. Sin el skill lo hizo 1/6 ejecuciones; con la versión de una frase de la primera regla del skill, 4/6; con el skill instalado, 4/6. Así que la frase reprodujo todo el efecto.
- El skill se leyó en 6/6 ejecuciones con skill aunque ningún prompt lo mencionaba (se activa con «debug this»). Hizo trabajar más al agente: 18 comandos por ejecución frente a 8 sin el skill y 13 con la frase.
- Coste: 133k tokens por ejecución con el skill frente a 77k sin él (1.71x) y 126k con la frase (1.05x). El grupo de una frase costó por sí mismo 1.64x el control, porque decirle al agente que construya primero un bucle hace que ejecute más pasos.
- Una ejecución con skill (tarea de estado compartido) corrigió el bug y pasó los tests ocultos, pero su respuesta no coincidió con nuestra comprobación de causa raíz (busca que se nombre la causa); fue la única ejecución de cualquier grupo que no la superó.
Puntuación por dimensiones
| Dimensión | Puntuación | Motivo |
|---|---|---|
| 1_output_quality | 4.58 | Puntuación media de 4.58/5 con el skill (comprobaciones programáticas; véase la tabla por tarea). |
| 2_lift_vs_no_skill | 2.2800000000000002 | +0.28 puntos frente a 4.31 sin el skill (n=2 por tarea; menos de ~1 punto es ruido). |
| 3_trigger | 5.0 | Skill leído en 6/6 ejecuciones con skill. |
| 4_instructions_portability | 4 | Markdown plano; lee GLOSSARY.md/ADR opcionales si existen; las opciones de bucle HTTP/navegador necesitan herramientas que un sandbox puede no tener. |
| 5_efficiency | 2 | 1.71x tokens (133k vs 77k por ejecución) y 1.35x tiempo (51s vs 38s). |
| 6_safety_hygiene | 5 | Markdown más una plantilla de shell local (pide entrada, imprime; sin red, sin escrituras). El skill indica al agente que oculte secretos antes de mostrar la salida. |
Límites de esta prueba
- Tres bugs pequeños de Python en un solo archivo que se encuentran leyendo el código. El skill está pensado para bugs difíciles (intermitentes, regresiones de rendimiento, bugs que necesitan un arnés); nada de eso se probó.
- Las otras herramientas del skill (bucles HTTP/navegador, reproducción de trazas, bisección, etiquetas de instrumentación) no pueden ejecutarse en un sandbox sin red y sin una aplicación que controlar.
- La comprobación «ejecutó los tests antes de editar» compara el orden del primer comando de test y la primera escritura en el registro de eventos; no juzga la calidad de la reproducción.
- 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 un resultado es el mejor posible.
Seguridad
Véase security.md. Escaneo: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Veredicto: seguro de ejecutar (sandbox sin red). Un escaneo limpio no demuestra que un skill sea seguro.
Conclusión
La idea principal del skill es un buen hábito y Codex lo sigue cuando se lo dicen; pero una frase de él consiguió el mismo comportamiento de reproducir primero y la misma tasa de éxito con un coste parecido, y en bugs fáciles el agente arregla las cosas de todos modos. Mantenlo instalado si depuras bugs difíciles e intermitentes y quieres la disciplina completa; en bugs pequeños puedes obtener el beneficio poniendo su primera regla en el prompt.
Transcripción
Registro de ejecuciones: diagnosing-bugs (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 60541, s 27.1, comprobaciones 3/4, no abrió nada t1-moving-average control-2: puntuación 4.17, tokens 60464, s 29.1, comprobaciones 3/4, no abrió nada t1-moving-average oneliner-1: puntuación 5.0, tokens 93708, s 49.0, comprobaciones 4/4, no abrió nada t1-moving-average oneliner-2: puntuación 4.17, tokens 111338, s 39.8, comprobaciones 3/4, no abrió nada t1-moving-average treatment-1: puntuación 4.17, tokens 87669, s 36.8, comprobaciones 3/4, abrió diagnosing-bugs t1-moving-average treatment-2: puntuación 4.17, tokens 87501, s 36.0, comprobaciones 3/4, abrió diagnosing-bugs t2-weekly-dates control-1: puntuación 4.17, tokens 95094, s 43.4, comprobaciones 3/4, no abrió nada t2-weekly-dates control-2: puntuación 4.17, tokens 78531, s 38.2, comprobaciones 3/4, no abrió nada t2-weekly-dates oneliner-1: puntuación 4.17, tokens 129649, s 49.4, comprobaciones 3/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