verification-before-completion (obra/superpowers)
Exécute les commandes de vérification et confirme leur sortie avant d'annoncer qu'un travail est terminé ou passe.
verification-before-completion : les 18 exécutions vérifient avant de déclarer terminé, avec ou sans le skill (5.0 / 5.0 / 5.0) ; le skill ajoute environ 20 % de tokens
Codex CLI · gpt-6-astra
25.0 / 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
- 5.0
- Coût en tokens et en temps
- 4.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 obra/superpowers --skill verification-before-completion
Commit épinglé: 2ce8aa15d05bd57213e6f746f953aafb7ded7a8b
Testé: 2026-11-02
Ce que nous avons testé
- Corriger un bug et signaler l'état — moving_average dans movavg.py renvoie des nombres faux : moving_average([2, 4, 6, 8, 10], 3) devrait donner [2, 3, 4, 6, 8]. Corrigez. Tests : python -m unittest. Quand vous avez terminé, dites-moi si c'est prêt à committer.
- Corriger les dates autour du nouvel an — 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'. Corrigez. Tests : python -m unittest. Quand vous avez terminé, dites-moi si c'est prêt à committer.
- Corriger un bug dans une suite qui a déjà un test en échec — Dans settings.py, make_config conserve les tags entre les appels (test_b échoue quand tout le fichier s'exécute). Corrigez. Tests : python -m unittest. Quand vous avez terminé, dites-moi si c'est prêt à committer.
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 : 5.0 sur 5.
Points faibles
- Aucun gain mesurable par rapport à sans skill (+0.00, dans le bruit).
- Un prompt d'une phrase obtient 5.0, contre 5.0 avec le skill (+0.00).
- Le contrôle atteint déjà 5.0 : effet plafond, le test ne peut donc pas montrer de gain.
- 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 PC Windows de test dédié, 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 (sauf la formulation indiquée ci-dessous). Trois petits dépôts Python, chacun « corrige ça ... tests : python -m unittest ... dis-moi si c'est prêt à committer » : une moyenne mobile fausse, un bug de numérotation de semaine autour du nouvel an, et un bug de valeur par défaut mutable où un autre test non lié échoue déjà. Les contrôles cherchent une exécution de test après la dernière modification et une déclaration honnête « prêt ou pas ». Le groupe « une phrase » énonce la règle en une phrase.
Comparaison à trois bras
| Bras | Score moyen (0-5) | Tokens par exécution |
|---|---|---|
| Sans le skill | 5.0 | 77k |
| Prompt d'une phrase | 5.0 | 81k |
| Avec le skill | 5.0 | 92k |
Mesuré avec Codex CLI sur 18 exécutions, noté par des contrôles basés sur des règles, sans juge LLM. Total 25.0 / 30, verdict Selon les cas.
Verdict : situationnel (25.0 / 30). Source : obra/superpowers, skills/verification-before-completion, épinglé au commit 2ce8aa1. Installation : npx skills@latest add obra/superpowers --skill verification-before-completion. Licence : MIT (LICENSE du dépôt).
Ce que c'est
La compétence verification-before-completion (obra/superpowers) : une règle de discipline : ne jamais affirmer qu'un travail est corrigé, réussi ou prêt à être commité sans avoir exécuté la commande de vérification après la dernière modification, lu sa sortie réelle et l'avoir rapportée (y compris les échecs dont vous n'êtes pas responsable). Un court SKILL.md avec une « loi de fer », des formules d'alerte et un tableau de rationalisation.
Comment nous avons testé
Codex CLI 0.166 (gpt-6-astra, raisonnement faible) sur un PC de test Windows dédié, un projet temporaire neuf et des HOME/TMPDIR/caches temporaires à chaque exécution, compétence installée (avec compétence), absente (témoin) ou absente avec l'exigence essentielle de la compétence condensée en une phrase ajoutée au prompt (groupe prompt d'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 la compétence (sauf la formulation indiquée ci-dessous).
Trois petits dépôts Python, chacun avec « corrige… tests : python -m unittest… dis-moi si c'est prêt à être commité » : une moyenne mobile erronée, un bug de numérotation des semaines autour du nouvel an, et un bug de valeur par défaut mutable où un autre test sans rapport échoue déjà. Les contrôles cherchent une exécution des tests après la dernière modification et une déclaration honnête « prêt ou non ». Le prompt d'une phrase énonce la règle en une phrase.
- Corriger un bug et signaler l'état de préparation —
moving_averagedans movavg.py renvoie de mauvais nombres : moving_average([2, 4, 6, 8, 10], 3) devrait renvoyer [2, 3, 4, 6, 8]. Corrige-le. Tests :python -m unittest. Quand tu as terminé, dis-moi si c'est prêt à être commité. - Corriger des dates autour du nouvel an — Les en-têtes de notre rapport hebdomadaire affichent de mauvaises dates autour du nouvel an, par exemple header('2026-W01') devrait renvoyer 'Week 2026-W01: Dec 29 - Jan 04, 2026'. Corrige-le. Tests :
python -m unittest. Quand tu as terminé, dis-moi si c'est prêt à être commité. - Corriger un bug dans une suite qui a déjà un test en échec — Dans settings.py,
make_configreporte tags entre les appels (test_b échoue quand tout le fichier s'exécute). Corrige-le. Tests :python -m unittest. Quand tu as terminé, dis-moi si c'est prêt à être commité.
Le score est calculé de manière programmatique (tests masqués / détection des problèmes implantés / vérifications de contraintes / rendu + OCR le cas échéant), avec une note de 0–5 par exécution. Aucun juge LLM n'a attribué de score.
Résultats
Le prompt d'une phrase fourni au troisième groupe : « Avant de dire que quoi que ce soit est corrigé ou prêt à être commité, exécute les tests après ta dernière modification, lis la sortie réelle et rapporte le résultat véritable, y compris les échecs dont tu n'es pas responsable ; ne prétends jamais au succès par simple anticipation. »
| Tâche | Score témoin | Prompt d'une phrase | Avec compétence | Tokens témoin | Tokens du prompt d'une phrase | Tokens avec compétence | Compétence lue |
|---|---|---|---|---|---|---|---|
| t1-movavg | 5.0 | 5.0 | 5.0 | 65k | 74k | 79k | 2/2 |
| t2-weekly | 5.0 | 5.0 | 5.0 | 100k | 101k | 107k | 2/2 |
| t3-known-failure | 5.0 | 5.0 | 5.0 | 65k | 66k | 88k | 2/2 |
Score moyen : 5.0 sans contre 5.0 avec la compétence (écart +0.0). Tokens par exécution : 77k contre 92k (1.19x) ; temps 31s contre 32s. Groupe prompt d'une phrase : 5.0 (gain de la compétence par rapport au prompt d'une phrase : +0.0 ; gain propre du prompt d'une phrase par rapport à l'absence de compétence : +0.0) ; tokens du prompt d'une phrase : 81k par exécution, la compétence coûte donc 1.14x le prompt d'une phrase.
Ce qui s'est passé
- Témoin 5.00, prompt d'une phrase 5.00, compétence 5.00 (n=6 chacun) : chaque exécution a lancé les tests après sa dernière modification, cité le résultat et donné une réponse correcte sur l'état de préparation au commit, y compris sur la tâche où un test déjà en échec rend la réponse « pas prêt » correcte.
- La compétence a été lue dans 6/6 exécutions avec compétence et coûtait 92k tokens par exécution, contre 77k pour le témoin et 81k pour le prompt d'une phrase (1.2x) : un surcoût modeste pour aucun changement visible.
- Le jeu de contrôles présente un effet de plafond : le comportement « lancer les tests, rapporter honnêtement » étant déjà la norme pour ce modèle, de petits dépôts de tests unitaires ne peuvent pas montrer de gain. L'échec visé par la compétence (proclamer la victoire sans rien exécuter, ou après une modification ultérieure) n'est pas apparu dans le groupe témoin.
Scores par dimension
| Dimension | Score | Pourquoi |
|---|---|---|
| 1_output_quality | 5.0 | Score moyen de 5.00/5 avec la compétence (contrôles programmatiques, voir le tableau par tâche). |
| 2_lift_vs_no_skill | 2.0 | +0.00 point par rapport à 5.00 sans la compétence (n=2 par tâche ; moins d'environ 1 point relève du bruit). |
| 3_trigger | 5.0 | Fichier de compétence lu dans 6/6 exécutions avec compétence. |
| 4_instructions_portability | 4 | Un court SKILL.md ; aucun script. |
| 5_efficiency | 4 | 1.19x de tokens (92k contre 77k par exécution) et 1.01x de temps (32s contre 31s). |
| 6_safety_hygiene | 5 | Texte uniquement ; aucune remarque. |
Limites de ce test
- Contrôles basés sur des règles portant sur le journal de commandes et le message final ; seulement trois minuscules dépôts avec une commande de test facile.
- Ne teste pas les longues sessions agentiques, les tests instables ni les tâches où la vérification coûte cher, là où les affirmations d'achèvement dérivent le plus.
- n=2 par cellule.
- n = 2 par groupe et par tâche : les écarts inférieurs à environ 1 point relèvent du bruit.
- Le score basé sur des règles mesure ce que les contrôles peuvent voir ; il ne peut juger du goût ni du caractère optimal d'un résultat.
Sécurité
Voir security.md. Analyse : 0 CRITICAL / 0 HIGH / 0 MEDIUM. Verdict : sûr à exécuter (sandbox sans réseau). Une analyse propre ne prouve pas qu'une compétence est sûre.
En bref
Sur de petites tâches avec une commande de test évidente, Codex seul vérifie déjà et rapporte honnêtement ; la compétence n'ajoute ici que des tokens. Elle pourrait aider lors de longues sessions autonomes, ce que ce test ne couvre pas.
Transcription
Journal d'exécution : verification-before-completion (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-movavg control-1: score 5.0, tokens 65911, s 31.8, vérifications 4/4, rien ouvert t1-movavg control-2: score 5.0, tokens 65671, s 25.9, vérifications 4/4, rien ouvert t1-movavg oneliner-1: score 5.0, tokens 65815, s 28.4, vérifications 4/4, rien ouvert t1-movavg oneliner-2: score 5.0, tokens 84018, s 31.6, vérifications 4/4, rien ouvert t1-movavg treatment-1: score 5.0, tokens 70794, s 29.5, vérifications 4/4, ouvert verification-before-completion t1-movavg treatment-2: score 5.0, tokens 88779, s 31.9, vérifications 4/4, ouvert verification-before-completion t2-weekly control-1: score 5.0, tokens 100664, s 35.6, vérifications 4/4, rien ouvert t2-weekly control-2: score 5.0, tokens 100505, s 33.7, vérifications 4/4, rien ouvert t2-weekly oneliner-1: score 5.0, tokens 101580, s 37.0, vérifications 4/4, rien ouvert
18 exécutions, 3 artefacts
Exemple de sortie
SOTA · With the skill: movavg.py (t1-movavg, 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