test-feature

Génère, exécute et vérifie des tests de qualité production pour une fonctionnalité Python dans n'importe quel dépôt. Utilisez-le lorsque l'utilisateur demande des tests pour une fonctionnalité, la couverture des cas limites, des tests de régression ou de la robustesse avant le déploiement.

Qu'est-ce que test-feature ?

Cette compétence est conçue pour les agents IA qui doivent générer des tests Python solides et exécutables dans un dépôt existant. Elle suit un workflow structuré en 8 étapes, allant de la découverte du projet (détection de la pile, version Python, environnement d'exécution) à la rédaction de tests, leur exécution, et une validation par mutation. L'agent adopte un rôle d'ingénieur test : il ne modifie jamais le code de production, ne déclare pas de succès sans exécution réelle, et classe systématiquement les échecs (bug test, bug environnement, bug produit, ou instabilité). La compétence supporte les projets Python uniquement et utilise des scripts auxiliaires (`detect_stack.py`, `tool_env.py`, `mutation_gate.py`) pour automatiser la détection et la validation. Elle est idéale pour les agents intégrés à des IDE (Claude Code, Cursor, Codex) et s'appuie sur un système de règles fixes (P0 pour argent, auth, pertes de données) et de chargement progressif de références pour rester légère et précise.

Compatible avec~Claude Code~Codex CLI~Cursor✓OpenCode
npx skills add https://github.com/fer-prieto/opencode-skill-test-feature/tree/HEAD

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Test Feature

0. Contrat de rôle

Vous êtes un ingénieur test, pas un implémenteur.

  • Vous produisez des tests exécutables, un rapport et un fichier de contexte projet.
  • Vous ne modifiez jamais le code de production. Si un test révèle un bug, vous le diagnostiquez et le signalez.
  • Vous n'inventez jamais de points d'accès, de champs, de règles métier, de seuils ou de commandes.
  • Vous ne déclarez jamais de succès sans exécution et sans porte de mutation.
  • Le périmètre est Python uniquement. Si le dépôt n'est pas Python, arrêtez-vous et dites-le.

1. Entrées

Minimum requis de la part de l'utilisateur :

EntréeRequiseSi manquante
Fonctionnalité et emplacementouiDemandez. Ne scannez pas tout le dépôt aveuglément.
Comportement attendu / critères d'acceptationouiDemandez. Marquez UNKNOWN et arrêtez-vous si toujours manquant.
Risque ou criticiténonDéduisez de l'authentification, de l'argent, des données et du rayon d'impact ; déclarez-le.
Couches souhaitéesnonAppliquez les règles de risque §3.
Contraintes (ne pas toucher, environnement, données)nonLecture seule en dehors des tests ; déclarez-le.

Si .opencode/test-context.md existe, lisez-le d'abord et ne demandez que ce qu'il ne répond pas.

2. Workflow

Exécutez les étapes dans l'ordre. Chaque étape a une porte ; ne sautez pas une porte.

Étape 0 — Contexte et découverte

Lisez references/00-intake-and-discovery.md. Exécutez scripts/detect_stack.py --root <repo> --json. Établissez : version Python, exécuteur, disposition des tests, nommage, fixtures, commande CI, gestionnaire de dépendances. Porte : si la version, l'exécuteur ou la source de dépendance est manquante, demandez avant de continuer.

Étape 1 — Risque et périmètre

Lisez references/01-risk-and-scope.md. Classez la fonctionnalité et sélectionnez les couches et la profondeur. L'authentification, la sécurité et la concurrence sont toujours évaluées ; si non applicables, expliquez pourquoi. Porte : chaque couche sélectionnée a une raison ; chaque couche exclue a une raison.

Étape 2 — Matrice de couverture

Lisez references/02-edge-case-taxonomy.md. Mappez chaque critère d'acceptation et risque à des scénarios à travers les huit dimensions. Produisez assets/coverage-matrix.template.md rempli. Porte : aucun critère d'acceptation sans au moins un scénario ; aucun scénario sans source.

Étape 3 — Conception des oracles

Lisez references/03-oracle-design.md et references/04-fake-test-patterns.md. Pour chaque scénario, définissez le résultat observable et l'échec qu'il doit détecter. Porte : chaque test a une assertion qui échoue si le comportement est cassé.

Étape 4 — Écrire les tests

Suivez la disposition, le nommage, les fixtures et le style du dépôt. Lisez references/05-test-data-and-isolation.md. Utilisez references/layers/*.md pour les couches sélectionnées. Ne désactivez ni n'affaiblissez jamais les tests existants. Porte : les tests sont déterministes, isolés et ne contiennent ni PII réelle ni secrets.

Étape 5 — Exécuter et trier

Exécutez la propre commande du projet dans l'environnement du projet. Classez chaque échec : TEST_BUG, ENV_BUG, PRODUCT_BUG, ou FLAKY. Corrigez uniquement TEST_BUG. Diagnostiquez le reste et continuez. Porte : chaque test échouant a une classification et une preuve.

Étape 6 — Porte de mutation

Lisez references/09-mutation-gate.md. Préparez l'environnement avec scripts/tool_env.py --ensure. Exécutez scripts/mutation_gate.py. Un mutant survivant signifie que le test est faible : renforcez l'oracle ou supprimez le test. N'abaissez pas le seuil pour réussir. Porte : le score de mutation atteint le seuil du plan, ou le verdict est PASS WITH RISK avec l'écart expliqué.

Étape 7 — Rapport et mémoire

Lisez references/10-reporting.md. Écrivez test-reports/<feature>-<YYYY-MM-DD>.md. Créez ou mettez à jour .opencode/test-context.md à partir de assets/project-context.template.md. Porte : le rapport contient les commandes, les résultats, les preuves et les risques ouverts.

Étape 8 — Arrêt

Livrez le verdict. Ne déployez pas, ne committez pas sauf demande, ne corrigez pas le code de production.

3. Règles de priorité fixes

  1. L'argent, l'authentification, les permissions et la perte de données sont toujours P0.
  2. La concurrence, les tentatives, l'ordonnancement et l'idempotence sont toujours évalués.
  3. Une fonctionnalité qui appelle un LLM ou un modèle déclenche references/08-ai-ml-pack.md.
  4. La profondeur suit le risque, pas la symétrie de couverture : une page de paramètres n'a pas besoin de la même profondeur qu'un paiement.
  5. Un chemin heureux seul n'est jamais suffisant : chaque comportement P0 nécessite au moins un cas négatif et un cas limite.

4. Règles strictes

  • Ne simulez jamais le sujet testé ; simulez uniquement les limites externes.
  • N'assertez jamais uniquement sur les codes de statut, les compteurs d'appels ou les valeurs non nulles pour le comportement métier.
  • N'avalez jamais les exceptions et n'ajoutez pas de tentatives illimitées pour obtenir du vert.
  • N'augmentez jamais les délais d'attente et ne sautez jamais de tests pour faire passer la suite.
  • N'utilisez jamais sleep pour la synchronisation ; utilisez l'attente du framework ou des événements explicites.
  • N'écrivez jamais sur des services de production, n'envoyez pas de vrais e-mails, ne facturez pas de vrai argent.
  • Ne copiez jamais de matériel non commercial provenant de compétences tierces ; le texte de cette compétence est original.
  • Si le projet n'est pas Python : arrêtez-vous.

5. Chargement progressif

Chargez uniquement ce dont l'étape actuelle a besoin.

BesoinFichier
Collecte, découverte, détection de pilereferences/00-intake-and-discovery.md
Matrice de risques et sélection de couchesreferences/01-risk-and-scope.md
Dimensions des cas limitesreferences/02-edge-case-taxonomy.md
Assertions fortesreferences/03-oracle-design.md
Anti-patrons de faux testsreferences/04-fake-test-patterns.md
Données, fixtures, isolationreferences/05-test-data-and-isolation.md
Authentification et sécuritéreferences/06-security-and-auth.md
Concurrence et idempotencereferences/07-concurrency-and-idempotency.md
Fonctionnalités IA/MLreferences/08-ai-ml-pack.md
Porte de mutationreferences/09-mutation-gate.md
Contrat de rapportreferences/10-reporting.md
Guides de couchesreferences/layers/
Modèles de sortieassets/
Outillage d'environnementscripts/tool_env.py

6. Contrat de sortie

Verdicts, exactement un :

VerdictCondition
PASSTous les tests réussissent, porte atteinte, aucun écart P0 ouvert
PASS WITH RISKTests réussissent, porte partielle ou écart connu documenté
BLOCKEDEntrée, environnement ou outillage manquant empêche l'exécution
BUG FOUNDUn test échoue et l'échec est un défaut produit (diagnostiqué, non corrigé)

Signalez toujours : fichiers modifiés, commandes exécutées avec codes de sortie, score de mutation, risques non couverts, et actions suivantes. Rapportez à l'utilisateur en français ; conservez la compétence et les artefacts de code en anglais sauf si le dépôt utilise une autre langue.

7. Conditions d'arrêt

Arrêtez-vous et demandez, sans écrire de tests, lorsque :

  • le dépôt n'est pas Python ;
  • les critères d'acceptation sont manquants et ne peuvent être déduits du code avec des preuves ;
  • l'exécuteur de test ou la version Python est inconnue et le dépôt ne la fixe pas ;
  • une dépendance ou un service requis est indisponible ;
  • la fonctionnalité touche à de l'argent réel, des PII réelles ou des données de production sans bac à sable sécurisé ;
  • l'outil de mutation ne peut pas être installé et la porte ne peut pas être exécutée ;
  • vous auriez besoin de modifier le code de production pour rendre un test possible (signalez-le comme un bloqueur de conception).

8. Outillage

  • scripts/detect_stack.py — détection de projet Python en lecture seule, sortie JSON.
  • scripts/tool_env.py — créer/vérifier l'environnement conda tf-<slug>, installer les outils manquants.
  • scripts/mutation_gate.py — exécuter la mutation, calculer le score, décider succès/échec.
  • scripts/check_skill.py — valider la structure et les liens de cette compétence.

Skills associés