diagnosing-bugs (Matt Pocock)
Mène une boucle de diagnostic pour les bugs difficiles et les régressions de performance avant de proposer des correctifs.
mattpocock diagnosing-bugs : une version en une phrase de sa règle « construire d'abord la boucle de feedback » fait aussi bien que le skill complet, pour 0.95 fois son coût
Codex CLI · gpt-6-astra
22.9 / 30
Gain par rapport à sans skill : +0.28 · Selon les cas · 18 exécutions
Selon les cas : le gain +0.28 est inférieur à +1.0. Pour être recommandé, il faut un total de 22/30, une qualité de sortie de 3.5 et un gain de +1.0.
SOTA
RéussiTesté avec Codex.
Couvre Codex, Claude Code
Codex CLI 0.166 (palier SOTA) : 18 exécutions notées. Une réussite ici couvre aussi Claude Code selon notre règle de palier ; elle ne dit rien du second palier.
Scores
Chaque dimension va de 0 à 5 et les six forment le total sur 30. 5 est la meilleure note dans chaque dimension. Coût 5 signifie bon marché et rapide. Installation 5 signifie facile.
- Fiabilité du déclenchement
- 5.0
- Gain par rapport à sans skill
- 2.3
- Qualité de sortie
- 4.6
- Coût en tokens et en temps
- 2.0
- Installation et portabilité
- 4.0
- Sécurité
- 5.0
Revue de sécurité
SûrScan statique : 0 CRITIQUE / 0 ÉLEVÉ / 0 MOYEN. Revue manuelle : sûr à exécuter dans un bac à sable sans réseau (aucun problème détecté). Un scan propre ne prouve pas qu'un skill est sûr.
Installer
npx skills@latest add mattpocock/skills --skill diagnosing-bugs
Commit épinglé: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d
Testé: 2026-11-02
Ce que nous avons testé
- Décalage d'un rang dans une petite fonction — moving_average dans movavg.py renvoie des nombres faux : moving_average([2, 4, 6, 8, 10], 3) devrait donner [2, 3, 4, 6, 8] mais les dernières valeurs sortent fausses. Trouvez la cause et corrigez-la. Tests : python3 -m unittest.
- Bug de dates entre fichiers — Les en-têtes de notre rapport hebdomadaire affichent des dates fausses autour du nouvel an, par exemple header('2026-W01') devrait donner 'Week 2026-W01: Dec 29 - Jan 04, 2026'. Trouvez la cause et corrigez-la.
- Échec de test dépendant de l'ordre — Les tests de tests/test_settings.py passent seuls mais test_b échoue quand tout le fichier s'exécute, et les configs semblent conserver des tags d'appels précédents. Diagnostiquez et corrigez.
Points forts
- Le skill a été détecté sans être nommé : son fichier a été lu dans 6/6 exécutions avec skill.
- Qualité absolue élevée avec le skill : 4.58 sur 5.
Points faibles
- Aucun gain mesurable par rapport à sans skill (+0.28, dans le bruit).
- Un prompt d'une phrase obtient 4.72, contre 4.58 avec le skill (-0.14).
- Consomme 1.71 fois plus de tokens que sans skill.
- n=2 par tâche et par bras ; les écarts inférieurs à environ 1 point sont du bruit.
Avis
Codex CLI 0.166 (gpt-6-astra, low reasoning) sur un Mac de test, un projet temporaire neuf et des HOME/TMPDIR/caches temporaires à chaque exécution, skill installé (traitement) ou absent (contrôle) ou absent avec l'exigence centrale du skill compressée en une phrase ajoutée au prompt (groupe « prompt d'une phrase »), 2 exécutions par groupe et par tâche, réseau coupé, écritures dans /tmp bloquées. Les prompts ne mentionnent jamais le skill. La notation est programmatique (tests cachés / rappel d'éléments plantés / vérifications de contraintes / rendu+OCR le cas échéant), de 0 à 5 par exécution. Aucun juge LLM n'a décidé d'un score.
Comparaison à trois bras
| Bras | Score moyen (0-5) | Tokens par exécution |
|---|---|---|
| Sans le skill | 4.31 | 77k |
| Prompt d'une phrase | 4.72 | 126k |
| Avec le skill | 4.58 | 133k |
Mesuré avec Codex CLI sur 18 exécutions, noté par des contrôles basés sur des règles, sans juge LLM. Total 22.9 / 30, verdict Selon les cas.
Verdict : Selon le cas (22.9 / 30). Source : mattpocock/skills, skills/engineering/diagnosing-bugs, épinglé au commit 4ae2317. Installation : npx skills@latest add mattpocock/skills --skill diagnosing-bugs. Licence : MIT (LICENSE du dépôt).
Présentation
Le skill diagnosing-bugs du dépôt de skills de Matt Pocock (engineering). Une discipline pour les bugs difficiles : la phase 1 consiste à « construire une boucle de retour pass/fail serrée » (test qui échoue, script curl, diff en CLI, navigateur headless, trace rejouée), puis des hypothèses classées testées une par une, de l’instrumentation, un test de régression et un nettoyage. Environ 1 000 mots de Markdown, un modèle d’aide hitl-loop.template.sh, et une règle pour masquer les secrets avant d’afficher une sortie. Il se déclenche sur « diagnose », « debug this » ou « something is broken/failing ».
Méthode de test
Codex CLI 0.166 (gpt-6-astra, raisonnement faible) sur une machine de test Mac, un projet temporaire neuf et des HOME/TMPDIR/caches temporaires à chaque exécution, skill installé (groupe avec skill), absent (groupe témoin), ou absent avec l’exigence centrale du skill compressée en une phrase ajoutée au prompt (groupe « prompt en une phrase »), 2 exécutions par groupe et par tâche, réseau désactivé, écritures dans /tmp bloquées. Les prompts ne mentionnent jamais le skill.
- Décalage d’un indice dans une petite fonction —
moving_averagedans movavg.py renvoie des nombres faux : moving_average([2, 4, 6, 8, 10], 3) devrait donner [2, 3, 4, 6, 8] mais les valeurs suivantes sont fausses. Trouve la cause et corrige-la. Tests :python3 -m unittest. - Bug de dates entre fichiers — Les en-têtes de notre rapport hebdomadaire affichent des dates fausses autour du Nouvel An, par exemple header('2026-W01') devrait donner 'Week 2026-W01: Dec 29 - Jan 04, 2026'. Trouve la cause et corrige-la.
- Échec de test dépendant de l’ordre — Les tests de tests/test_settings.py passent isolément mais
test_béchoue quand tout le fichier s’exécute, et les configurations semblent conserver des tags d’appels précédents. Diagnostique et corrige.
Le scoring est programmatique (tests cachés / détection des problèmes implantés / vérifications de contraintes / rendu + OCR le cas échéant), de 0 à 5 par exécution. Aucun juge LLM n’a attribué de score.
Résultats
Le prompt en une phrase donné au troisième groupe : « Construis d’abord une boucle de retour pass/fail rapide et déterministe qui passe au rouge sur ce bug précis (un test qui échoue est l’idéal), puis formule des hypothèses classées et teste-les une par une avec des preuves avant de corriger, et relance la boucle pour confirmer la correction. »
| Tâche | Score témoin | Prompt en une phrase | Avec skill | Tokens témoin | Tokens du prompt en une phrase | Tokens avec skill | Skill lu |
|---|---|---|---|---|---|---|---|
| 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 |
Score moyen : 4.31 sans le skill contre 4.58 avec (écart +0.28). Tokens par exécution : 77k contre 133k (1.71x) ; temps 38s contre 51s. Groupe « prompt en une phrase » : 4.72 (gain du skill sur ce prompt : -0.14 ; gain du prompt par rapport à l’absence de skill : +0.42) ; tokens du prompt : 126k par exécution, donc le skill coûte 1.05x le prompt en une phrase.
Ce qui s’est passé
- L’exactitude finale était identique dans les trois groupes : les tests cachés ont réussi dans 18/18 exécutions et chaque diff est resté dans la limite de petit diff. Ces trois bugs implantés (décalage d’indice, logique de dates entre fichiers, pollution de tests dépendante de l’ordre) sont assez simples pour que Codex seul les corrige.
- La seule chose qui a bougé est la vérification de processus « a lancé les tests avant de modifier le code », autrement dit reproduire d’abord. Sans le skill, 1/6 exécutions l’ont fait ; avec la version en une phrase de la première règle du skill, 4/6 ; avec le skill installé, 4/6. La phrase a donc reproduit tout l’effet.
- Le skill a été lu dans 6/6 exécutions avec skill alors qu’aucun prompt ne le mentionnait (il se déclenche sur « debug this »). Il a fait travailler l’agent davantage : 18 commandes par exécution contre 8 sans le skill et 13 avec le prompt.
- Coût : 133k tokens par exécution avec le skill contre 77k sans (1.71x) et 126k avec le prompt (1.05x). Le groupe « prompt en une phrase » a lui-même coûté 1.64x le témoin, car demander à l’agent de construire d’abord une boucle le fait exécuter plus d’étapes.
- Une exécution avec skill (tâche de l’état partagé) a corrigé le bug et réussi les tests cachés, mais sa réponse ne correspondait pas à notre vérification de cause racine (qui cherche la cause nommée) ; c’est la seule exécution de tous les groupes à l’avoir manquée.
Scores par dimension
| Dimension | Score | Pourquoi |
|---|---|---|
| 1_output_quality | 4.58 | Score moyen de 4.58/5 avec le skill (vérifications programmatiques, voir le tableau par tâche). |
| 2_lift_vs_no_skill | 2.2800000000000002 | +0.28 point par rapport à 4.31 sans le skill (n=2 par tâche ; un écart inférieur à ~1 point relève du bruit). |
| 3_trigger | 5.0 | Fichier du skill lu dans 6/6 exécutions avec skill. |
| 4_instructions_portability | 4 | Markdown simple ; lit GLOSSARY.md/ADR facultatifs s’ils existent ; les options de boucle HTTP/navigateur nécessitent des outils qu’un sandbox peut ne pas avoir. |
| 5_efficiency | 2 | 1.71x tokens (133k contre 77k par exécution) et 1.35x temps (51s contre 38s). |
| 6_safety_hygiene | 5 | Markdown plus un modèle shell local (demande une saisie, affiche ; pas de réseau, pas d’écriture). Le skill demande à l’agent de masquer les secrets avant d’afficher une sortie. |
Limites de ce test
- Trois petits bugs Python dans un seul fichier, trouvables en lisant le code. Le skill est conçu pour les bugs difficiles (instables, régressions de performance, bugs nécessitant un banc de test) ; rien de tout cela n’a été testé.
- Les autres outils du skill (boucles HTTP/navigateur, rejeu de trace, bissection, balises d’instrumentation) ne peuvent pas tourner dans un sandbox sans réseau et sans application à piloter.
- La vérification « a lancé les tests avant de modifier » compare l’ordre de la première commande de test et de la première écriture dans le journal d’événements ; elle ne juge pas la qualité de la reproduction.
- n = 2 par groupe et par tâche : un écart inférieur à ~1 point relève du bruit.
- Le scoring par règles mesure ce que les vérifications peuvent voir ; il ne peut juger du goût ni du caractère optimal d’un résultat.
Sécurité
Voir security.md. Scan : 0 CRITICAL / 0 HIGH / 0 MEDIUM. Verdict : exécution sans danger (sandbox sans réseau). Un scan propre ne prouve pas qu’un skill est sûr.
En résumé
L’idée principale du skill est une bonne habitude et Codex la suit quand on le lui dit ; mais une phrase de ce skill a obtenu le même comportement « reproduire d’abord » et le même taux de réussite pour un coût à peu près identique, et sur des bugs faciles l’agent corrige de toute façon. Gardez-le installé si vous déboguez des bugs difficiles et instables et voulez la discipline complète ; sur de petits bugs, mettre sa première règle dans votre prompt suffit à en retirer le bénéfice.
Transcription
Journal d'exécution : diagnosing-bugs (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) Colonnes : tâche, groupe-exécution, score (0-5), tokens, secondes, vérifications réussies, fichiers de la skill ouverts par l'agent. t1-moving-average control-1: score 4.17, tokens 60541, s 27.1, vérifications 3/4, rien ouvert t1-moving-average control-2: score 4.17, tokens 60464, s 29.1, vérifications 3/4, rien ouvert t1-moving-average oneliner-1: score 5.0, tokens 93708, s 49.0, vérifications 4/4, rien ouvert t1-moving-average oneliner-2: score 4.17, tokens 111338, s 39.8, vérifications 3/4, rien ouvert t1-moving-average treatment-1: score 4.17, tokens 87669, s 36.8, vérifications 3/4, ouvert diagnosing-bugs t1-moving-average treatment-2: score 4.17, tokens 87501, s 36.0, vérifications 3/4, ouvert diagnosing-bugs t2-weekly-dates control-1: score 4.17, tokens 95094, s 43.4, vérifications 3/4, rien ouvert t2-weekly-dates control-2: score 4.17, tokens 78531, s 38.2, vérifications 3/4, rien ouvert t2-weekly-dates oneliner-1: score 4.17, tokens 129649, s 49.4, vérifications 3/4, rien ouvert
18 exécutions, 3 artefacts
Exemple de sortie
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