Aller au contenu

Skills

assert-what-the-generator-found

Un générateur qui plante vous dit qu'il a échoué ; un qui produit une sortie plausible ne vous dit rien. Testez ce qu'il a trouvé, jamais qu'il s'est exécuté.

PatronProvenance: cleanStatut: activev0.1.0 · Apache-2.0

Conférée par la personne qui a relu la fiche, et non revendiquée par le fichier lui-même. Une fiche que l'agent distille au cours d'une exécution ayant consommé du contenu non fiable naît contaminée et reste en attente de relecture avant d'être un jour récupérée.

Quand elle vient à l'esprit

  • écriture d'un générateur de code
  • test d'un dump de schéma
  • la sortie a l'air correcte
  • extraction de la structure d'une bibliothèque

C'est dans À éviter et Vérifier que se trouve d'ordinaire la valeur. À faire est la section que tout le monde écrit.

Le corps de la fiche ci-dessus est une traduction. L'original anglais est ce que la CLI importe, ce que l'agent lit à l'exécution et ce que l'empreinte ci-dessous atteste.

Déclencheur

Vous avez écrit quelque chose qui lit une représentation et en produit une autre : un dump de schéma, un extracteur de références, une migration, un scraper, un générateur d'index. Tout ce dont personne ne lit la sortie en entier parce qu'il y en a trop.

Cela ne s'applique pas à une fonction qui renvoie une seule valeur que vous pouvez vérifier d'un coup d'œil. Le risque ici est spécifique à une sortie assez volumineuse pour que « ça a l'air bon » soit la seule revue qu'elle recevra jamais.

À faire

  1. Avant d'écrire le test, nommez le compte. Combien de commandes, de lignes, de fichiers ou de champs devraient en sortir ? Obtenez ce nombre ailleurs que du générateur — la source, la documentation, un comptage manuel.
  2. Vérifiez le compte, ou un plancher pour celui-ci. assert len(groups) >= 10, pas assert result.
  3. Vérifiez la présence d'éléments précis et nommés dont vous savez qu'ils doivent exister. Trois ou quatre suffisent, en choisissant des exemples issus de formes d'entrée différentes.
  4. Si le générateur classe des éléments, vérifiez que chaque classe est non vide. Un classificateur qui met tout dans un seul panier est l'échec que cela permet de détecter.

À éviter

assert build() — cela passe même si le générateur renvoie une liste vide, une liste partielle, ou une liste dont chaque élément est subtilement du mauvais type.

Méfiez-vous aussi de isinstance lorsque vous parcourez une structure tierce. Les bibliothèques embarquent leurs propres dépendances : un TyperGroup n'est pas une instance du click.Group que votre fichier a importé, parce que Typer embarque sa propre copie de Click. Demandez-vous si l'objet possède ce dont vous avez besoin — un mapping commands, une méthode items — plutôt que de quelle classe il prétend relever. Le duck-typing survit à une dépendance embarquée et à un changement de version majeure ; une vérification de classe ne survit à aucun des deux, et échoue en misclassifiant plutôt qu'en levant une exception.

Vérifier

Cassez le générateur exprès et observez l'échec du test. Commentez la récursion dans les sous-commandes, ou faites en sorte que la vérification de type rejette tout, puis lancez la suite.

Si la suite passe quand même, le test se contente de vérifier que le générateur s'est exécuté, et vous avez écrit le test que cette skill existe précisément pour empêcher.

Risque

Figer un compte exact dans le code transforme le test en corvée de maintenance : chaque commande ajoutée légitimement le fait passer au rouge. Préférez un plancher (>= 10) associé à des éléments nommés, et réservez les comptes exacts aux cas qui ne doivent vraiment pas changer sans décision explicite.

Il y a aussi une limite. Ces assertions détectent un générateur qui a perdu toute une catégorie. Elles ne détectent pas un générateur qui se trompe sur un seul champ d'un seul élément, et prétendre le contraire est en soi une forme de faux sentiment de sécurité.

L'utiliser

La fiche est une donnée. Clonez le dépôt et importez-la par son chemin — ce qui arrive par le réseau est traité comme contaminé et retenu pour approbation, ce qui est le comportement souhaitable et la raison pour laquelle il n'y a pas d'installateur en une ligne ici.

git clone https://github.com/brcampidelli/chimera-agent.git
chimera skills-import chimera-agent/skills/assert-what-the-generator-found/SKILL.md

Intégrité

SHA-256 du fichier tel qu'il est publié. Qui l'importe peut vérifier que ce qu'il a reçu correspond à ce que cette page affichait.

0ffc1fdde72d3f2c416461f0f312ca5ca2a43d3b1ff33aaf7b20be155de711c9

Lire la fiche dans le dépôt