Tous les skills

tdd (Matt Pocock)

Développe des fonctionnalités et corrige des bugs en test-first, via rouge-vert-refactor et tests d'intégration.

mattpocock tdd : aucun gain une fois que le prompt demande déjà du test-first, et environ 1.7 fois les tokens

Selon les casSûr

Codex CLI · gpt-6-astra

22.7 / 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éussi

Testé 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.7
Coût en tokens et en temps
2.0
Installation et portabilité
4.0
Sécurité
5.0

Revue de sécurité

Sûr

Scan 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 tdd

Source

Commit épinglé: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d

Testé: 2026-11-02

Ce que nous avons testé

  • Implémenter une fonction à partir d'une spec précise — Implémentez slugify(text, max_length=None) dans slug.py (Python 3, bibliothèque standard uniquement) en TDD. Spec : mettre le texte en minuscules ; remplacer chaque suite de caractères qui ne sont pas des lettres ASCII ou des chiffres par un seul '-'; supprimer les '-' en début et en fin ; un résultat vide…
  • Implémenter une petite classe à état — Écrivez ratelimiter.py (Python 3, bibliothèque standard uniquement) en test-first (red-green-refactor) avec la classe RateLimiter(limit, window_seconds, clock=time.monotonic) : un limiteur à fenêtre glissante par clé. allow(key) renvoie True et enregistre l'appel s'il y a moins de limit…
  • Corriger un bug d'arrondi — Les clients disent que cart_total dans cart.py est parfois à un centime près par rapport à notre système comptable, qui arrondit au centime supérieur à chaque étape (total de chaque ligne, sous-total remisé et taxe). Par exemple cart_total([(1.005, 1)]) devrait renvoyer 1.09 et…

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.67 sur 5.

Points faibles

  • Aucun gain mesurable par rapport à sans skill (+0.00, dans le bruit).
  • Un prompt d'une phrase obtient 4.67, contre 4.67 avec le skill (+0.00).
  • Consomme 1.7 fois plus de tokens que sans skill.
  • 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 (sauf la formulation indiquée ci-dessous). Comme la description de ce skill ne se déclenche que lorsque l'utilisateur demande du TDD / test-first, les prompts le disent (« using TDD », « test-first (red-green-refactor) », « Do it test-first »). Les mêmes mots sont donnés au groupe de contrôle ; le test consiste donc à savoir si le skill améliore une simple demande de TDD.

Comparaison à trois bras

BrasScore moyen (0-5)Tokens par exécution
Sans le skill4.6786k
Prompt d'une phrase4.67178k
Avec le skill4.67146k

Mesuré avec Codex CLI sur 18 exécutions, noté par des contrôles basés sur des règles, sans juge LLM. Total 22.7 / 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 : situationnel (22.7 / 30). Source : mattpocock/skills, skills/engineering/tdd, épinglé au commit 4ae2317. Installation : npx skills@latest add mattpocock/skills --skill tdd. Licence : MIT (LICENSE du dépôt).

Ce que c'est

La compétence tdd du dépôt de compétences de Matt Pocock (engineering/tdd) : la boucle rouge-vert, plus deux fichiers de référence sur ce qu'est un bon test et quand utiliser des mocks. Environ 570 mots dans SKILL.md ; Markdown pur, aucun script. Elle se déclenche lorsque l'utilisateur veut travailler en test-first.

Comment nous avons 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, 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).

La description de cette compétence ne se déclenche que lorsque l'utilisateur demande du TDD ou du test-first ; les prompts le précisent donc (« en TDD », « test-first (rouge-vert-refactor) », « Fais-le en test-first »). Les mêmes mots sont donnés au groupe témoin : le test consiste donc à savoir si la compétence fait mieux qu'une simple demande de TDD.

  1. Implémenter une fonction à partir d'une spec précise — Implémente slugify(text, max_length=None) dans slug.py (Python 3, bibliothèque standard uniquement) en TDD. Spec : mets le texte en minuscules ; remplace chaque suite de caractères qui ne sont ni des lettres ASCII ni des chiffres par un seul '-' ; supprime les '-' en début et en fin ; un résultat vide…
  2. Implémenter une petite classe à état — Écris ratelimiter.py (Python 3, bibliothèque standard uniquement) en test-first (rouge-vert-refactor) avec la classe RateLimiter(limit, window_seconds, clock=time.monotonic) : un limiteur à fenêtre glissante par clé. allow(key) renvoie True et enregistre l'appel si moins de limit…
  3. Corriger un bug d'arrondi — Des clients disent que cart_total dans cart.py est parfois décalé d'un centime par rapport à notre système comptable, qui arrondit au centime avec les demi-centimes à la hausse à chaque étape (total de chaque ligne, sous-total remisé et taxe). Par exemple cart_total([(1.005, 1)]) devrait renvoyer 1.09 et…

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 : « Travaille en test-first par tranches verticales : écris un test qui échoue à travers l'interface publique, confirme qu'il échoue, écris le minimum de code pour le faire passer, répète, et ne refactorise qu'au vert ; n'écris pas tous les tests à l'avance. »

TâcheScore témoinPrompt d'une phraseAvec compétenceTokens témoinTokens du prompt d'une phraseTokens avec compétenceCompétence lue
t1-slugify5.05.05.079k184k135k2/2
t2-ratelimiter5.05.05.099k183k169k2/2
t3-cart-bugfix4.04.04.079k164k133k2/2

Score moyen : 4.67 sans contre 4.67 avec la compétence (écart +0.0). Tokens par exécution : 86k contre 146k (1.70x) ; temps 50s contre 67s. Groupe prompt d'une phrase : 4.67 (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 : 178k par exécution, la compétence coûte donc 0.82x le prompt d'une phrase.

Ce qui s'est passé

  • Le prompt demandant déjà du test-first, le groupe témoin l'a pratiqué aussi : sur les deux tâches de construction, chaque exécution des deux groupes a passé tous les contrôles, y compris « test écrit avant l'implémentation ». La compétence n'a rien apporté de mesurable ici.
  • Sur la tâche de correction (arrondi du panier), les quatre exécutions, avec et sans la compétence, ont corrigé le bug et passé les tests masqués, et toutes les quatre ont échoué au même contrôle de processus : la correction ou le test est arrivé à la même étape que l'autre, au lieu d'un test en échec d'abord. La compétence n'y a rien changé.
  • La compétence a été lue dans 6/6 exécutions avec compétence. Elle a fait fournir beaucoup plus de travail à l'agent (24-26 commandes contre 8-10 sur les tâches de construction) pour le même résultat : environ 1.7x les tokens.
  • La réussite aux tests masqués était de 100 % dans les deux groupes.
  • Version en une phrase (travailler en test-first par tranches verticales, un test en échec à la fois) : score moyen 4.67, identique au témoin et à la compétence, pour 178k tokens par exécution contre 86k pour le témoin (2.1x) et 146k pour la compétence. Les agents du groupe prompt d'une phrase exécutaient en moyenne 27 commandes par exécution, contre 9 pour le témoin et 23 pour la compétence, car ils répétaient la boucle de test.
  • Chaque groupe a écrit ses propres tests à toutes les exécutions et passé tous les tests masqués ; la règle « tests avant implémentation » était respectée dans 4 exécutions sur 6 dans les trois groupes : la demande « test first » au niveau du prompt faisait donc déjà ce à quoi sert la compétence.

Scores par dimension

DimensionScorePourquoi
1_output_quality4.67

Score moyen de 4.67/5 avec la compétence (contrôles programmatiques, voir le tableau par tâche).

2_lift_vs_no_skill2.0

+0.00 point par rapport à 4.67 sans la compétence (n=2 par tâche ; moins d'environ 1 point relève du bruit).

3_trigger5.0Fichier de compétence lu dans 6/6 exécutions avec compétence.
4_instructions_portability4
5_efficiency21.70x de tokens (146k contre 86k par exécution) et 1.34x de temps (67s contre 50s).
6_safety_hygiene5

Limites de ce test

  • Chaque prompt de test demandait lui-même du TDD, ce qui donne au groupe témoin l'essentiel du bénéfice ; un utilisateur qui ne le demande pas verrait la description de la compétence ne pas se déclencher du tout.
  • Uniquement de petites tâches Python ; la qualité des tests n'a pas été notée.
  • 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

Ajoutée à une demande de test-first, cette compétence n'apporte aucun gain supplémentaire sur de petites tâches : le témoin, la version en une phrase et la compétence ont tous obtenu 4.67, tandis que la compétence consommait 1.7x et la phrase 2.1x les tokens du témoin. Elle peut aider à garder des tests centrés sur le comportement sur une session plus longue, ce que nous n'avons pas mesuré.

Transcription

Journal d'exécution : tdd (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-slugify control-1: score 5.0, tokens 78904, s 50.3, vérifications 3/3, rien ouvert
t1-slugify control-2: score 5.0, tokens 79205, s 47.1, vérifications 3/3, rien ouvert
t1-slugify oneliner-1: score 5.0, tokens 199600, s 74.7, vérifications 3/3, rien ouvert
t1-slugify oneliner-2: score 5.0, tokens 168650, s 68.2, vérifications 3/3, rien ouvert
t1-slugify treatment-1: score 5.0, tokens 144538, s 57.6, vérifications 3/3, ouvert tdd
t1-slugify treatment-2: score 5.0, tokens 126047, s 50.7, vérifications 3/3, ouvert tdd
t2-ratelimiter control-1: score 5.0, tokens 99439, s 60.2, vérifications 3/3, rien ouvert
t2-ratelimiter control-2: score 5.0, tokens 99611, s 54.3, vérifications 3/3, rien ouvert
t2-ratelimiter oneliner-1: score 5.0, tokens 159969, s 70.9, vérifications 3/3, rien ouvert

18 exécutions, 3 artefacts

Exemple de sortie

SOTA · With the skill: test_slug.py (t1-slugify, run 1, Codex)

import unittest from slug import slugify class SlugifyTests(unittest.TestCase): def test_hard_cuts_first_word_when_it_exceeds_limit(self): self.assertEqual(slugify('Supercalifragilistic', 5), 'super') def test_truncates_at_word_boundary(self): self.assertEqual(slugify('Hello, World!', 8), 'hello') def test_normalizes_text(self): self.assertEqual(slugify('Hello, World!'), 'hello-world') def test_preserves_only_ascii_letters_and_digits(self): self.assertEqual(slugify(' -- CAFÉ_42\t中文 / Test!! '), 'caf-42-test') def test_lowercases_before_filtering(self): self.assertEqual(slugify('\u212aELVIN'), 'kelvin') def test_keeps_slug_that_fits_limit(self): for limit in (11, 20, None): with self.subTest(limit=limit): self.assertEqual(slugify('Hello, World!', limit), 'hello-world') def test_keeps_complete_words_without_trailing_separator(self): for limit, expected in ((3, 'one'), (4, 'one'), (6, 'one'), (7, 'one-two'), (8, 'one-two')): with self.subTest(limit=limit): self.assertEqual(slugify('one two three', limit), expected) def test_hard_cuts_long_first_word_even_with_later_words(self): self.assertEqual(slugify('Supercalifragilistic hello', 5), 'super') def test_applies_limit_to_fallback(self): self.assertEqual(slugify('', 2), 'n') def test_empty_normalized_text_has_fallback(self): for text in ('', ' !!! ', '中文'): with self.subTest(text=text): self.assertEqual(slugify(text), 'n-a') if __name__ == '__main__': unittest.main()

Voir Pro