Zum Inhalt springen

← Skills

assert-what-the-generator-found

Ein Generator, der abstürzt, sagt dir, dass er gescheitert ist; einer, der plausible Ausgabe liefert, sagt dir nichts. Prüfe, was er gefunden hat, nie dass er gelaufen ist.

MusterHerkunft: cleanStatus: activev0.1.0 · Apache-2.0

Verliehen von der Person, die die Karte gelesen hat — nicht von der Datei über sich selbst behauptet. Eine Karte, die der Agent während eines Laufs mit nicht vertrauenswürdigen Inhalten destilliert, kommt kontaminiert zur Welt und wird bis zur Prüfung zurückgehalten, bevor sie jemals abgerufen wird.

Wann sie in den Sinn kommt

  • Codegenerator geschrieben
  • einen Schema-Dump testen
  • die Ausgabe sieht gut aus
  • Struktur aus einer Bibliothek extrahieren

In Vermeiden und Prüfen steckt meist der Wert. Tun ist der Abschnitt, den alle schreiben.

Der Kartentext oben ist eine Übersetzung. Das englische Original ist das, was die CLI importiert, was der Agent zur Laufzeit liest und was der Hash unten bezeugt.

Auslöser

Sie haben etwas geschrieben, das eine Repräsentation liest und eine andere ausgibt: einen Schema-Dump, einen Referenz-Extraktor, eine Migration, einen Scraper, einen Index-Builder. Alles, dessen Ausgabe niemand vollständig liest, weil es zu viel ist.

Das gilt nicht für eine Funktion, die einen einzelnen Wert zurückgibt, den man auf einen Blick prüfen kann. Das Risiko hier betrifft speziell Ausgaben, die so umfangreich sind, dass „es sieht richtig aus" die einzige Prüfung ist, die sie je bekommen werden.

Tun

  1. Benennen Sie die Anzahl, bevor Sie den Test schreiben. Wie viele Befehle, Zeilen, Dateien oder Felder sollten herauskommen? Holen Sie sich diese Zahl von woanders als vom Generator — der Quelle, der Dokumentation, einer manuellen Zählung.
  2. Prüfen Sie die Anzahl, oder eine Untergrenze dafür. assert len(groups) >= 10, nicht assert result.
  3. Prüfen Sie das Vorhandensein konkreter, benannter Elemente, von denen Sie wissen, dass sie existieren müssen. Drei oder vier genügen, und wählen Sie welche aus unterschiedlichen Arten von Eingaben.
  4. Wenn der Generator Dinge klassifiziert, prüfen Sie, dass jede Klasse nicht leer ist. Ein Klassifizierer, der alles in einen Topf wirft, ist genau der Fehler, den dies abfängt.

Vermeiden

assert build() — das besteht auch dann, wenn der Generator eine leere Liste zurückgibt, eine unvollständige Liste, oder eine Liste, in der jedes Element auf subtile Weise die falsche Art ist.

Vermeiden Sie außerdem, isinstance zu vertrauen, wenn Sie eine Struktur eines Drittanbieters durchlaufen. Bibliotheken vendorn ihre Abhängigkeiten: eine TyperGroup ist keine Instanz der click.Group, die Ihre Datei importiert hat, weil Typer seine eigene Kopie von Click mitliefert. Fragen Sie, ob das Objekt das hat, was Sie brauchen — ein commands-Mapping, eine items-Methode —, statt danach, als welche Klasse es sich ausgibt. Duck-Typing übersteht eine vendorte Abhängigkeit und einen Major-Versionssprung; eine Klassenprüfung übersteht keines von beidem und scheitert durch Fehlklassifizierung statt durch eine Exception.

Prüfen

Brechen Sie den Generator absichtlich und beobachten Sie, wie der Test fehlschlägt. Kommentieren Sie die Rekursion in Subcommands aus, oder lassen Sie die Typprüfung alles ablehnen, und führen Sie die Suite aus.

Wenn die Suite trotzdem besteht, prüft der Test nur, dass der Generator gelaufen ist — und Sie haben genau den Test geschrieben, den zu verhindern dieser Skill existiert.

Risiko

Eine exakte Anzahl fest zu kodieren macht den Test zu einer Wartungslast: Jeder legitim hinzugefügte Befehl macht ihn rot. Bevorzugen Sie eine Untergrenze (>= 10) plus benannte Elemente, und reservieren Sie exakte Zahlen für Dinge, die sich wirklich nicht ohne eine bewusste Entscheidung ändern sollten.

Es gibt auch eine Grenze. Diese Prüfungen fangen einen Generator ab, der eine ganze Kategorie fallen gelassen hat. Sie fangen keinen ab, der bei einem einzelnen Element ein einziges Feld falsch setzt, und so zu tun, als wäre das anders, ist selbst eine Form von falscher Sicherheit.

Verwenden

Die Karte ist Daten. Klonen Sie das Repository und importieren Sie sie über den Pfad — was über das Netz kommt, gilt als kontaminiert und wird bis zur Freigabe zurückgehalten. Das ist das gewünschte Verhalten und der Grund, warum es hier keinen Einzeiler-Installer gibt.

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

Integrität

SHA-256 der Datei in der veröffentlichten Fassung. Wer sie importiert, kann prüfen, dass das Empfangene dem entspricht, was diese Seite gezeigt hat.

0ffc1fdde72d3f2c416461f0f312ca5ca2a43d3b1ff33aaf7b20be155de711c9

Die Karte im Repository lesen →