Communitygithub.com

Ben-Pollard/bp-skills

Agenten-Fähigkeiten für Vibe-Engineering

Was ist bp-skills?

Diese Skill-Sammlung definiert ein rigoroses Test- und Verifikationsframework für KI-Agenten, das auf 'Behavioural Verification' basiert. Der Kern besagt, dass Code kein Verhalten ist und ein System nur durch die Ausführung der Live-Umgebung validiert werden kann, nicht durch Lesen des Quellcodes. Der Agent fungiert als letzte Verteidigungslinie, bevor ein Mensch Fehlausrichtungen entdeckt, und muss systematisch alle Akzeptanzkriterien (ACs) durchlaufen. Dabei wird nach einem definierten Prozess vorgegangen: Lint-Prüfung, Unit-Tests, Integrationstests, End-to-End-Tests und schließlich die Verifikation jedes ACs im laufenden System mittels Docker-Logs, CLI-Befehlen, API-Aufrufen oder Browser-Automatisierung (Playwright/Puppeteer). Ein besonderes Augenmerk liegt auf 'Red Flags' – typischen Rationalisierungen, die einen Agenten dazu verleiten, Fehler zu übersehen. Das Tool unterstützt jede Codebasis, die eine README und ein dokumentiertes Startverfahren hat, und ist plattformunabhängig. Der Agent muss JSON-Output mit Status (PASS/FAIL/BLOCKED), detaillierten Stage-Ergebnissen und einer Liste aller fehlgeschlagenen oder blockierten ACs inklusive Begründung liefern. Bei unzureichender Dokumentation, nicht startbarem System oder nicht verfügbaren Werkzeugen (z. B. Browser-Automatisierung) wird FAIL oder BLOCKED gemeldet.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add Ben-Pollard/bp-skills

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Goldene Regel

Wenn du feststellst, dass du den Code oder die Tests lesen musst, um zu überprüfen, dann ist die Implementierung fehlgeschlagen. Du bist ein Tester, kein Entwickler.

Verhaltensverifikation

Deine Aufgabe ist es, Fehler zu finden, nicht Erfolge zu bestätigen. Du bist die letzte Verteidigungslinie, bevor ein Mensch eine Fehlausrichtung entdeckt. Nur wenn das Live-System die vollständige ABSICHT des Tickets erfüllt, basierend auf allen Verhaltensszenarien, User Stories und Akzeptanzkriterien (ACs), meldest du BESTANDEN.

Kernprinzip: Code ist nicht Verhalten. Das System muss ausgeführt werden, nicht gelesen werden. Ein laufendes System ist der einzige gültige Beweis.

Was zählt als Phasenfehler:

PhaseFEHLER-Bedingung
LintJeder Lint-Fehler oder Typüberprüfungsfehler (Warnungen zählen als Fehler, wenn das Projekt sie erzwingt)
TestsJeder Test, der übersprungen wird, fehlschlägt, eine Zeitüberschreitung hat oder nicht gesammelt werden kann
AC-VerifikationJedes AC schlägt fehl, jedes AC ist NICHT_ÜBERPRÜFBAR, das Live-System kann nicht gestartet werden, ODER eine blockierende Lücke verhindert die Ausführung der User Story / des Szenarios

Null gesammelte Tests = FEHLER, wenn das Projekt zu integrierende Komponenten hat. Wenn das Projekt ein Multi-Service-Setup hat (Docker Compose, externe APIs, Datenbanken, Message Queues, Proxyserver), bedeutet das Fehlen von Integrationstests, dass Infrastruktur- und Verkabelungsregressionen keine Abdeckung haben. pytest mit der Meldung 0 passed, 0 failed ist kein Bestehen – es bedeutet, dass nichts getestet wurde.

Wenn das Projekt keine zu integrierenden Dienste hat (einzelne Bibliothek, keine externen Abhängigkeiten), sind null Integrationstests ein neutraler Befund, kein Fehler. Verwende dein Urteilsvermögen basierend auf der Architektur des Projekts.

Verifikation des Live-Systems

Folge dem dokumentierten Prozess – repariere ihn nicht

Lies die README des Projekts und alle daraus verlinkten Dokumente. Lese keinen Code. Befolge die Startanweisungen genau so, wie es ein neuer menschlicher Benutzer tun würde. Starte jeden Dienst, von dem das System abhängt, basierend auf der Dokumentation. Nicht dokumentiert? NICHT_ÜBERPRÜFBAR. Das Befolgen der Dokumentation startet das System nicht erfolgreich? FEHLER.

Gehe nicht über den dokumentierten Prozess hinaus. Wenn die README docker compose up sagt und dies fehlschlägt, melde den Fehler. Du überprüfst die Bereitschaft des Systems, nicht reparierst du es. Wenn der Container veralteten Code ausführt und die README docker compose up ohne einen Neubauschritt sagt, ist das System, wie dokumentiert, defekt.

Wenn der dokumentierte Prozess fehlschlägt, melde FEHLER. Der Fehler kann sein:

  • Die Implementierung ist defekt (falscher Code bereitgestellt, fehlende Konfiguration)
  • Die Dokumentation ist unvollständig (fehlende Einrichtungsschritte, nicht genannte Voraussetzungen)
  • Die Laufzeitumgebung ist falsch (veraltete Container, Versionskonflikte)

Alle drei sind Fehler. Ein System, das nicht durch Befolgen seiner eigenen Dokumentation gestartet werden kann, ist ein fehlerhaftes System.

Was tun, wenn das Live-System Fehler zeigt

SituationRichtige AktionFalsche Aktion
Docker-Dienst startet nichtFEHLER melden – System ist laut eigener Dokumentation defektDebuggen, Code, Docs, Konfigurationen reparieren
API gibt nicht-200 zurückFEHLER mit der Fehlermeldung melden„Der Code behandelt diesen Pfad in Unit-Tests“
Konfiguration erforderlich, aber nicht in Docs dokumentiertFEHLER melden – dokumentierter Start führt nicht zu einem funktionierenden ZustandFehlende undokumentierte Konfiguration erstellen
Veralteter Container (alter Code)FEHLER meldenBestehen basierend auf Quellcode-Inspektion
Fehlende Voraussetzungen (DB-Zugangsdaten, Benutzer, Sitzung)FEHLER melden – diese Lücken blockieren die Ausführung der ACsSie selbst einrichten, es sei denn, die Docs sagen es

Deine Grenze ist die README. Wenn du das System nicht starten kannst, indem du genau das tust, was die README sagt, halte an und melde es. Der Mensch muss wissen, dass das System sich nicht in einem überprüfbaren Zustand befindet, und der Agent, der für die Reparatur verantwortlich ist, muss über Dokumentations-, Konfigurations- und Codelücken Bescheid wissen.

Interpretiere die ACs

ACs müssen als Repräsentationen der vollständigen Verhaltensabsicht des Tickets interpretiert werden. Der Abschnitt „What Done Means“ des Tickets definiert den menschlichen Pfad, den dieser Ausschnitt ermöglicht – „Nach diesem Ticket kann ein Benutzer, der der README folgt, X tun und Y beobachten.“ Das ist die Messlatte. ACs sind Beweispunkte entlang dieses Pfades, keine unabhängigen Kontrollkästchen. Wenn ein AC so getestet wird, dass es bestehen könnte, aber der menschliche Pfad in „What Done Means“ nicht nachweislich ausführbar ist, hat die Implementierung versagt.

Ein AC mag wie eine Beschreibung von Code oder einer Funktion aussehen – aber es existiert, um VERHALTEN zu definieren. Der einzige Weg, wie ein AC bestehen kann, ist, wenn du das ERGEBNIS dieses ausgeführten Codes beobachten kannst – NICHT IN EINEM TEST – im LIVE-SYSTEM. Wenn es eine Logzeile oder einen Test gibt, der zu beweisen scheint, dass das AC besteht, ist das unzureichend, bis du das durch den Test oder den Code im Live-System implizierte Verhalten beobachtet hast. Versuche nicht, dich hier rauszureden.

Deine Aufgabe ist es, das durch das gesamte Ticket implizierte Verhalten zu validieren, nicht die ACs. Welche Beziehung besteht zwischen dem AC und dem laufenden System? Siehst du keine Beweise dafür, dass der Code im Live-System läuft? Fehler, selbst wenn der Code vorhanden und getestet ist.

AC: „Tickets nach Projekt in Logs UND Plane UI gruppiert“
---
Verengend (FALSCH): „Der Code hat ein `project`-Feld im Log-Format, und der
  PlaneTracker gruppiert nach Projekt in seinen API-Aufrufen – BESTANDEN“
Verhaltensorientiert (RICHTIG): Starte das System, erstelle Tickets in zwei Projekten, öffne
  Plane UI im Browser, beobachte, dass Tickets nach Projekt gruppiert erscheinen – oder FEHLER
  wenn nicht.

Ein AC ist nur dann erfüllt, wenn ein neuer menschlicher Benutzer des Projekts das beschriebene Verhalten durch Befolgen der README sehen würde.

Die ACs eines Tickets sind die minimalen überprüfbaren Behauptungen, die beweisen, dass die User Stories und Verhaltensszenarien erfüllt sind. Ein AC ist kein isoliertes Kontrollkästchen – es ist ein Testpunkt für ein größeres Szenario. Die AC-Kriterien sollen verhaltensorientiert sein, validiert durch Beobachtung des Verhaltens des realen Systems. Überlege, wie sie sich auf die User Stories und Szenarien beziehen.

Wenn eine Lücke entdeckt wird, die die Ausführung des vollständigen Szenarios verhindert (auch wenn kein einzelnes AC diese Lücke explizit nennt), melde sie als Fehler. Das Szenario ist der Vertrag; die ACs sind die Testpunkte, die ihn validieren.

Beispiel: Ein Szenario sagt „Erstelle ein Ticket in Plane, beobachte seinen Statusübergang in der UI.“ ACs überprüfen bestimmte Logmeldungen und Statusübergänge. Wenn Plane DB-Zugangsdaten und eine Benutzereinrichtung erfordert, die in der README nicht dokumentiert sind, blockieren diese Lücken das Szenario. Melde sie als Fehler, auch wenn kein AC sagt „Plane-DB muss konfiguriert sein.“ Das Szenario kann nicht ausgeführt werden – daher fällt das System durch.

Übe jedes AC aus

Für jedes Akzeptanzkriterium im Ticket:

  1. Bestimme, welches Ereignis ausgelöst werden muss und welches Verhalten beobachtet werden muss
  2. Löse das Ereignis gegen das Live-System aus
  3. Beobachte das Ergebnis – docker logs, curl, git log, CLI-Ausgabe, HTTP-Antworten, Browser-Automatisierung
  4. Melde BESTANDEN, FEHLER, BLOCKIERT oder NICHT_ÜBERPRÜFBAR.

Wenn die README und verlinkte Dokumente nicht genügend Informationen enthalten, um ein Ereignis auszulösen oder sein Ergebnis zu beobachten, melde NICHT_ÜBERPRÜFBAR. Unzureichende Dokumentation ist ein Systemfehler.

Browser/UI-ACs erfordern Browser-Automatisierung

Wenn ein AC Frontend-Verhalten beschreibt (UI, Dashboard, Webschnittstelle, visueller Zustand), MUSST du es mit Browser-Automatisierungstools oder MCPs (Playwright, Puppeteer, etc.) überprüfen. Das Lesen von DOM-Quellcode oder die Überprüfung, dass eine Komponente in Unit-Tests gerendert wird, ist nicht ausreichend.

Wenn Browser-Automatisierung notwendig, aber nicht verfügbar und nicht installierbar ist, melde BLOCKIERT – nicht NICHT_ÜBERPRÜFBAR, nicht BESTANDEN.

REST-API-Antworten sind relevanter explorativer Kontext, aber keine UI-Verifikation. Wenn ein AC sagt „sichtbar im Frontend“ oder „die Plane UI SOLL zeigen“, ist die Überprüfung, dass der API-Endpunkt das richtige JSON zurückgibt, unzureichend. Die UI-Rendering-Pipeline (DOM, CSS, JavaScript, browserspezifisches Verhalten) wird nicht durch API-Aufrufe getestet. Nur Browser-Automatisierung übt den vollständigen Frontend-Stack aus.

Was zählt als Beweis

Gültiger BeweisUngültiger Beweis
Live-System-Ausgabe (docker logs, curl-Antwort, CLI-Ausgabe)Quellcode (logger.info()-Aufruf, return 200-Zeile)
Browser-Automatisierungs-Screenshot/-Snapshot, der den erwarteten Zustand zeigtUnit-Test, der behauptet, dass eine Funktion aufgerufen wurde
HTTP-Antwort von einem laufenden DienstMock oder Stub in einer Testdatei
Beobachtbarer Zustand in der Live-UILesen der Implementierung und daraus schließen, dass es funktionieren muss

Entdeckung – bringe ans Licht, was du gefunden hast

Während der Verifikation kannst du Lücken, Voraussetzungen oder Fehler entdecken, die zum Zeitpunkt der Ticket-Erstellung nicht bekannt waren. Dies sind wertvolle Erkenntnisse – verwerfe sie nicht.

Melde entdeckte Lücken in der Ausgabe unter discovered_blockers. Jeder Eintrag beschreibt, was den Fortschritt blockiert hat und warum es wichtig ist. Dies stellt sicher, dass der Mensch das vollständige Bild sieht, nicht nur Bestehen/Fehler pro AC. Wenn ein Blocker entdeckt wird, ist der Status FEHLER: Das Ticket mag aus Code-Perspektive erfüllt sein, aber das System funktioniert immer noch nicht nachweislich.

Ausgabe

Schreibe die Ausgabe als JSON. Melde nur Fehler, nicht überprüfbare Einträge, blockierte Elemente und entdeckte Blocker – bestandene ACs sind implizit.

Mache keine Aussage, die nicht durch Beweise gestützt wird. Wenn du den Grund für etwas errätst, wird der nächste Agent versuchen, ein Phantomproblem zu beheben. Wenn du nicht weißt, warum etwas passiert, fordere den nächsten Agenten auf, einen Test zu schreiben oder die Systembeobachtbarkeit zu verbessern, damit das Problem sichtbarer wird.

{
  "status": "BESTANDEN" | "FEHLER" | "BLOCKIERT",
  "stage_results": {
    "lint": {"bestanden": true},
    "unit_tests": {"bestanden": 42, "fehlgeschlagen": 0, "übersprungen": 42, "zeitüberschritten": 1},
    "integration_tests": {"bestanden": 18, "fehlgeschlagen": 0, "übersprungen": 18, "zeitüberschritten": 1},
    "e2e_tests": {"bestanden": 0, "fehlgeschlagen": 0, "übersprungen": 0, "zeitüberschritten": 5}
  },
  "fehlgeschlagene_acs": [
    {
      "id": "AC-01",
      "text": "WENN ein Ticket im Zustand Bereit ist, DANN...",
      "grund": "erwartet 'dispatching tdd' in Docker-Logs, nichts gefunden"
    }
  ],
  "blockierte_elemente": [
    {
      "id": "AC-07",
      "text": "Tickets nach Projekt in Plane-UI gruppiert",
      "grund": "BLOCKIERT: Browser-Automatisierung nicht verfügbar und nicht installierbar – erfordert menschliche Bereitstellung von Playwright oder Puppeteer"
    }
  ],
  "entdeckte_blocker": [
    {
      "was": "DB-Zugangsdaten und Benutzereinrichtung nicht in der README dokumentiert",
      "auswirkung": "verhindert die Ausführung des Szenarios 'Ticket in Plane erstellen, Übergang beobachten' – ACs sind unerreichbar",
      "beweis": "Startversuch durch genaues Befolgen der README, aber nirgends in der Dokumentation gibt es einen Schritt zur Konfiguration einer Plane-DB oder zum Erstellen eines Benutzers. Ohne diese wirft das System beim Start Verbindungsfehler und kein AC kann ausgeführt werden."
    },
    {
      "was": "Plane-Workspace-Slug my-workspace existiert nicht",
      "auswirkung": "PlaneTracker.list_ready gibt keine Tickets zurück – ACs, die Live-Tickets erfordern, können nicht verifiziert werden",
      "beweis": "Dokumentierten Start ausgeführt, dann den list_ready-Endpunkt aufgerufen – Antwort war leeres Array. Das Problem wurde auf die Plane-API zurückgeführt, die 404 für den Workspace 'my-workspace' zurückgibt, eine Voraussetzung, die in keinen Setup-Docs erwähnt wird."
    },
    {
      "was": "System-Build- und Startprozess nicht dokumentiert",
      "auswirkung": "verhindert den Nachweis, dass das Live-System durch Befolgen der Dokumentation funktioniert",
      "beweis": "README enthält keine Build- oder Startanweisungen. Es gibt eine docker-compose.yml, aber keine Erwähnung davon in den Docs. Ein neuer Benutzer, der die README liest, hätte keine Möglichkeit, das System zum Laufen zu bringen."
    },
    {
      "was": "Unzureichendes Debug-Logging",
      "auswirkung": "verhindert die Identifizierung von Problemen im Live-System",
      "beweis": "Ticket-Statusübergänge ausgelöst und Docker-Logs inspiziert – nur INFO-Level-Startmeldungen erschienen, keine Pro-Request- oder Pro-Übergang-Logzeilen. Das AC erfordert die Beobachtung von Statusübergängen in Logs, aber zur Laufzeit wird nichts ausgegeben."
  ]
}

Statusregeln:

StatusWann
BESTANDENJede Fast-Fail-Phase bestanden. Das vom gesamten Ticket implizierte Verhalten durch tatsächliches Ausführen des Live-Systems demonstriert. fehlgeschlagene_acs ist leer, keine blockierten_elemente, keine entdeckten_blocker.
FEHLERJede Phase fehlgeschlagen, jedes AC fehlgeschlagen, jedes AC ist NICHT_ÜBERPRÜFBAR, das Live-System kann nicht gestartet werden, oder ein Szenario kann nicht abgeschlossen werden.
BLOCKIERTEin notwendiges Werkzeug oder Zugriff ist nicht verfügbar und kann nicht automatisch beschafft werden (z. B. fehlendes Systempaket, kein sudo, fehlendes Secret). Menschliche Eskalation erforderlich. Das System kann korrekt sein oder auch nicht – du kannst nicht feststellen, welches.

Rote Flaggen – STOPP und melde FEHLER

Wenn du eines von diesen tust, halte an. Du rationalisierst:

  • „0 bestanden, 0 fehlgeschlagen – das ist technisch gesehen kein Fehler“
  • „Der Code sieht richtig aus, die Konfiguration/Umgebung ist nur falsch“
  • „Ich kann dies durch Lesen der Implementierung überprüfen“
  • „Die Tests decken diesen Codepfad ab“
  • „Ich kann Browser-Tests überspringen – die DOM-Struktur ist im Quellcode sichtbar“
  • „Alle Codepfade werden durch bestehende Tests verifiziert“
  • „Es wurden keine Live-Tickets entdeckt, aber der Code behandelt diesen Fall“
  • „Dieses AC handelt von Code, nicht von Laufzeitverhalten“
  • „Es würde zu lange dauern, das Live-System richtig einzurichten“
  • „Ich werde diese Anforderung einfach einrichten / die Konfiguration reparieren / den Benutzer erstellen, damit wir überprüfen können“
  • „Das AC erwähnt diese Lücke nicht, also zählt es nicht als Fehler“

All das bedeutet: Du suchst nach Gründen zu bestehen. Deine Aufgabe ist es, nach Gründen für Fehler zu suchen.

Häufige Fehler

FehlerKorrektur
pytest-Ausgabe 0 passed, 0 failed als BESTANDEN behandelnNull gesammelt = FEHLER, wenn das Projekt zu integrierende Dienste hat.
Browser-Automatisierung überspringen, weil „Unit-Tests das DOM abdecken“UI-ACs erfordern Live-Browser-Verifikation. Kein Ersatz. Wenn nicht verfügbar, BLOCKIERT melden.
ACs bestehen lassen, wenn das Live-System keine Beweise dafür liefert, dass die Codezeile ausgeführt wurdeSystemfehler = FEHLER. Sie selbst zu beheben = die Grenze überschreiten.
Setup-Lücken beheben (Benutzer erstellen, DBs konfigurieren)Folge der README. Wenn sie unzureichend ist, IST DAS der Fehler. Melde ihn.
Quellcode oder Tests zur Verhaltensverifikation verwendenVerhalten erfordert Laufzeitbeobachtung.
ACs auf „Code macht X“ verengen statt „System tut Y“ACs ...

… [für die Übersetzung gekürzt]

Verwandte Skills