systematic-debugging (obra/superpowers)
Enquête méthodiquement sur les bugs, échecs de tests et comportements inattendus avant de proposer des correctifs.
superpowers systematic-debugging : aucun gain mesurable sur trois petits bugs, environ 1.3 fois les tokens
Codex CLI · gpt-6-astra
22.4 / 30
Gain par rapport à sans skill : +0.00 · Selon les cas · 18 exécutions
Selon les cas : le gain +0.00 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.0
- Qualité de sortie
- 4.5
- Coût en tokens et en temps
- 3.0
- Installation et portabilité
- 4.0
- Sécurité
- 4.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 obra/superpowers --skill systematic-debugging
Commit épinglé: 2ce8aa15d05bd57213e6f746f953aafb7ded7a8b
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.
Points faibles
- Aucun gain mesurable par rapport à sans skill (+0.00, dans le bruit).
- Un prompt d'une phrase obtient 4.86, contre 4.45 avec le skill (-0.42).
- Réserve de test : le bras « prompt d'une phrase » (6 exécutions) a été ajouté plus tard, sur une machine différente de celles des bras de contrôle et avec 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.45 | 75k |
| Prompt d'une phrase | 4.86 | 98k |
| Avec le skill | 4.45 | 99k |
Mesuré avec Codex CLI sur 18 exécutions, noté par des contrôles basés sur des règles, sans juge LLM. Total 22.4 / 30, verdict Selon les cas.
Divulgation : le bras « prompt d'une phrase » (6 exécutions) a été ajouté plus tard, sur une machine différente de celles des bras de contrôle et avec skill.
Verdict : selon les cas (22.4 / 30). Source : obra/superpowers, skills/systematic-debugging, épinglé au commit 2ce8aa1. Installation : npx skills@latest add obra/superpowers --skill systematic-debugging. Licence : MIT (LICENSE du dépôt).
Présentation
Le skill systematic-debugging de obra/superpowers : « à utiliser face à tout bug, échec de test ou comportement inattendu, avant de proposer des correctifs ». Quatre phases (étudier la cause racine, repérer des motifs, formuler une hypothèse, corriger), une règle contre l'empilement de correctifs, et des notes complémentaires (traçage de la cause racine, défense en profondeur, attente conditionnelle) plus des scénarios de pression par les tests et un script shell (find-polluter.sh, un bisect local sur les fichiers de test).
Notre 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 traité) ou absent (groupe témoin), ou absent avec l'exigence centrale du skill compressée en une phrase ajoutée au prompt (groupe « 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.
- Décalage d'un 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 date 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 seuls mais
test_béchoue quand tout le fichier s'exécute, et les configs semblent transporter des tags d'appels précédents. Diagnostique et corrige.
Le scoring est programmatique (tests cachés / rappel des anomalies introduites / vérifications de contraintes / rendu + OCR le cas échéant), 0–5 par exécution. Aucun juge LLM n'a décidé d'un seul score.
Résultats
Le prompt d'une phrase donné au troisième groupe : « Débogue méthodiquement : reproduis d'abord l'échec, étudie la cause racine et formule une seule hypothèse à la fois avec des preuves avant de changer le code, applique le plus petit correctif pour la cause racine (aucune supposition empilée), et vérifie avec les tests. »
| Tâche | Score témoin | Une phrase | Avec le skill | Tokens témoins | Tokens (une phrase) | Tokens avec le skill | Skill lu |
|---|---|---|---|---|---|---|---|
| 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 |
Score moyen : 4.45 sans contre 4.45 avec le skill (delta +0.0). Tokens par exécution : 75k contre 99k (1.33x) ; temps 34s contre 45s. Groupe « une phrase » : 4.86 (gain du skill sur le prompt d'une phrase : -0.42 ; gain du prompt d'une phrase sur l'absence de skill : +0.42) ; 98k tokens par exécution pour le prompt d'une phrase, donc le skill coûte 1.01x ce prompt.
Ce qui s'est passé
- Résultat : les tests cachés passaient dans toutes les exécutions des deux groupes, la justesse ne différait donc pas.
- La vérification de processus « a lancé les tests avant de modifier le code » (reproduire d'abord) : le témoin l'a manquée dans 4/6 exécutions, le groupe avec le skill aussi dans 4/6. La première phase du skill est « reproduire », mais les agents avec le skill corrigeaient encore souvent avant d'exécuter quoi que ce soit.
- Le skill a été lu dans 6/6 exécutions avec le skill, le déclenchement n'est donc pas le problème ; il n'a simplement pas changé le comportement sur ces petits bugs (les bugs étaient trouvables en lisant le code).
- Coût : environ 1.3x les tokens par exécution (89k contre 67k).
- Version en une phrase (reproduire d'abord, une hypothèse à la fois, le plus petit correctif, vérifier) : moyenne 4.86 contre 4.45 pour le témoin et 4.45 pour le skill, à 98k tokens par exécution contre 75k (1.3x) et 99k pour le skill (1.0x).
- La différence tient à l'exécution des tests avant modification : 5 des 6 exécutions avec le prompt d'une phrase l'ont fait, contre 2 des 6 exécutions témoins et 2 des 6 exécutions avec le skill. Le skill n'a pas changé ce comportement ; la phrase qui le nomme, si. Chaque groupe a expliqué la cause racine dans toutes les exécutions et passé tous les tests cachés, avec de petits diffs.
Scores par dimension
| Dimension | Score | Pourquoi |
|---|---|---|
| 1_output_quality | 4.45 | Score moyen de 4.45/5 avec le skill (vérifications programmatiques, voir le tableau par tâche). |
| 2_lift_vs_no_skill | 2.0 | +0.00 point contre 4.45 sans le skill (n=2 par tâche ; en dessous d'environ 1 point, c'est du bruit). |
| 3_trigger | 5.0 | Fichier du skill lu dans 6/6 exécutions avec le skill. |
| 4_instructions_portability | 4 | |
| 5_efficiency | 3 | 1.33x de tokens (99k contre 75k par exécution) et 1.32x de temps (45s contre 34s). |
| 6_safety_hygiene | 4 |
Limites de ce test
- Trois petits bugs implantés (décalage d'un, logique de dates entre fichiers, pollution de tests dépendante de l'ordre) — tous assez simples pour que la base les corrige.
- Le skill est conçu pour des bugs difficiles, résolus en plusieurs tentatives ; nous ne les avons pas testés.
find-polluter.shn'a pas été exercé.- n = 2 par groupe et par tâche : les différences inférieures à environ 1 point relèvent du bruit.
- Le scoring basé sur des 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 : sûr à exécuter (sandbox sans réseau). Un scan propre ne prouve pas qu'un skill est sûr.
En résumé
Sur trois petits bugs, le skill a ajouté environ 1.3x les tokens sans changement mesurable : le témoin et le skill ont tous deux obtenu 4.45 et n'ont lancé les tests avant modification que dans 2 exécutions sur 6. La version en une phrase qui dit « reproduire d'abord » a fait mieux (4.86, 5 sur 6). Il pourrait être rentable sur des bugs plus difficiles, que nous n'avons pas testés.
Transcription
Journal d'exécution : systematic-debugging (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 60337, s 30.6, vérifications 3/4, rien ouvert t1-moving-average control-2: score 4.17, tokens 60293, s 24.1, vérifications 3/4, rien ouvert t1-moving-average oneliner-1: score 4.17, tokens 62543, s 30.2, vérifications 3/4, rien ouvert t1-moving-average oneliner-2: score 5.0, tokens 62033, s 32.0, vérifications 4/4, rien ouvert t1-moving-average treatment-1: score 5.0, tokens 69716, s 31.0, vérifications 4/4, ouvert systematic-debugging t1-moving-average treatment-2: score 4.17, tokens 69385, s 26.6, vérifications 3/4, ouvert systematic-debugging t2-weekly-dates control-1: score 4.17, tokens 78575, s 38.8, vérifications 3/4, rien ouvert t2-weekly-dates control-2: score 4.17, tokens 78005, s 39.5, vérifications 3/4, rien ouvert t2-weekly-dates oneliner-1: score 5.0, tokens 96141, s 41.5, vérifications 4/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