Prove It
Établir une affirmation précise : le même test capture le comportement défectueux spécifié avant une réparation et réussit après. Une suite de tests qui réussit seule n'établit pas cela.
Choisir le témoin
Inspectez le correctif et le test concerné. Identifiez l'entrée/sortie attendue ou la transition d'état, et sélectionnez exactement un nœud pytest. Utilisez deux références Git locales déjà validées ; la référence "après" doit contenir à la fois le correctif et le test. Les modifications non validées ne sont pas incluses. Ne validez pas le travail d'autrui uniquement pour exécuter cet outil.
L'assertion de défaut nécessite un message spécifique, par exemple :
assert expired(now=10, deadline=10), "PROVEIT:expiry-boundary"
Le message doit se trouver sur une assertion dans la fonction de test sélectionnée. Ne le placez pas sur des assertions non liées, dans une fixture, dans le code de l'application ou dans une instruction print. Vérifiez que cette assertion observe réellement le comportement décrit par le bogue. Si le test existant a besoin d'un message, ajoutez-le uniquement dans le périmètre d'édition autorisé et incluez ce test dans la révision "après". Sinon, expliquez l'entrée manquante.
Exécuter la comparaison
Exécutez le script fourni en utilisant son chemin absolu installé. L'interpréteur sélectionné a besoin de pytest et des dépendances du projet déjà installés. Aucune installation de dépendance, accès réseau, checkout Git, reset, stash ou commit n'est effectué.
python <skill-directory>/scripts/proveit.py --repo <repository> --before <old-ref> --after <fixed-ref> --test tests/test_expiry.py::test_at_deadline --expect PROVEIT:expiry-boundary --output <new-directory-outside-repository>
L'exécuteur superpose le fichier de test sélectionné de la révision "après" sur les deux instantanés, utilise une copie fraîche par tentative, et par défaut effectue trois exécutions par révision avec un délai d'attente de 10 secondes par exécution. Utilisez --python, --repeat 2..5 ou --timeout uniquement selon les besoins de la tâche. Sélectionnez un ID de paramètre complet si le test est paramétré.
Les instantanés isolent les fichiers, pas l'exécution. N'exécutez que du code dont l'exécution est déjà autorisée dans cet environnement. Les tests conservent l'accès aux fichiers, au réseau et aux identifiants de l'utilisateur. N'interprétez pas un répertoire temporaire comme un bac à sable de sécurité. Ne nettoyez jamais les arbres de travail ou répertoires non liés. L'exécuteur supprime uniquement ses propres instantanés temporaires et laisse le répertoire de preuves pour examen.
Examiner les preuves
Lisez report.md, report.json, selected-test.py, fix.diff et les journaux pertinents. Vérifiez l'assertion observée, le nœud sélectionné, les enregistrements de phase et les chemins modifiés.
| Résultat | Interprétation | Sortie |
|---|---|---|
supported | Chaque ancienne exécution atteint l'assertion déclarée ; chaque nouvelle exécution réussit. | 0 |
not_supported | L'ancien test réussit également, ou la révision réparée atteint encore cette assertion. | 1 |
inconclusive | Environnement, échec non lié, timeout, saut, exécution incomplète ou instable. | 2 |
Un échec d'appel non lié est considéré comme non concluant même si la nouvelle révision réussit. Les échecs de collecte, de dépendance, de syntaxe, de configuration et de démontage ne sont jamais un témoin. Ne les requalifiez pas comme un bogue détecté. Résolvez la cause observée dans le périmètre et relancez dans un nouveau répertoire de preuves ; ne répétez pas une configuration échouée inchangée.
Avant d'accepter supported, inspectez les fixtures/configuration spécifiques à la révision et confirmez qu'elles n'expliquent pas le changement. Seul le fichier de test choisi est superposé. Les dépendances installées sont partagées, le chargement automatique des plugins pytest tiers est désactivé, et les addopts du projet sont effacés. Les projets nécessitant des plugins externes ou des constructions peuvent nécessiter un environnement préparé séparément ; signalez une exécution non prise en charge clairement.
Signalez le test, les références, le résultat, l'emplacement des preuves et les limitations matérielles. Dites que ce témoin a capturé le comportement spécifié lors de ces exécutions. Ne revendiquez pas une preuve de correction globale, d'absence d'instabilité, de qualité générale du test ou d'amélioration mesurable de productivité. Ne publiez pas de rapports contenant des chemins locaux ou des journaux sans les avoir examinés et obtenu l'autorisation de publication applicable.