verification-before-completion (obra/superpowers)
Führt Prüfbefehle aus und bestätigt deren Ausgabe, bevor Arbeit als fertig, behoben oder bestanden gilt.
verification-before-completion: Alle 18 Läufe verifizieren vor der Fertigmeldung, mit oder ohne Skill (5.0 / 5.0 / 5.0); der Skill kostet ~20 % mehr Tokens
Codex CLI · gpt-6-astra
25.0 / 30
Lift gegenüber ohne Skill: +0.00 · Situativ · 18 Läufe
Situativ: der Lift +0.00 liegt unter +1.0. Für „Empfohlen“ sind insgesamt 22/30, eine Ausgabequalität von 3.5 und ein Lift von +1.0 nötig.
SOTA
BestandenGetestet mit Codex.
Gilt für Codex, Claude Code
Codex CLI 0.166 (SOTA-Stufe): 18 bewertete Läufe. Ein Bestehen hier deckt gemäß unserer Stufenregel auch Claude Code ab; über die zweite Stufe sagt es nichts aus.
Punktzahlen
Jede Dimension reicht von 0 bis 5, und die sechs ergeben zusammen die Gesamtpunktzahl von 30. 5 ist in jeder Dimension besser. Kosten 5 bedeutet günstig und schnell. Installation 5 bedeutet einfach.
- Trigger-Zuverlässigkeit
- 5.0
- Lift gegenüber ohne Skill
- 2.0
- Ausgabequalität
- 5.0
- Token- und Zeitkosten
- 4.0
- Installation und Portabilität
- 4.0
- Sicherheit
- 5.0
Sicherheitsprüfung
SicherStatischer Scan: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Manuelle Prüfung: Sicher in einer Sandbox ohne Netzwerk auszuführen (keine Befunde). Ein sauberer Scan beweist nicht, dass ein Skill sicher ist.
Installieren
npx skills@latest add obra/superpowers --skill verification-before-completion
Fixierter Commit: 2ce8aa15d05bd57213e6f746f953aafb7ded7a8b
Getestet: 2026-11-02
Was wir getestet haben
- Einen Fehler beheben und Bereitschaft melden — moving_average in movavg.py liefert falsche Zahlen: moving_average([2, 4, 6, 8, 10], 3) sollte [2, 3, 4, 6, 8] sein. Beheben. Tests: python -m unittest. Wenn fertig, sagen, ob es bereit zum Commit ist.
- Daten um den Jahreswechsel beheben — Unsere Wochenbericht-Kopfzeilen zeigen um den Jahreswechsel falsche Daten, z. B. sollte header('2026-W01') 'Week 2026-W01: Dec 29 - Jan 04, 2026' sein. Beheben. Tests: python -m unittest. Wenn fertig, sagen, ob es bereit zum Commit ist.
- Einen Fehler in einer Suite mit bereits fehlschlagendem Test beheben — In settings.py übernimmt make_config Tags zwischen Aufrufen (test_b schlägt fehl, wenn die ganze Datei läuft). Beheben. Tests: python -m unittest. Wenn fertig, sagen, ob es bereit zum Commit ist.
Vorteile
- Der Skill wurde erkannt, ohne genannt zu werden: Skill-Datei in 6/6 Treatment-Läufen gelesen.
- Hohe absolute Qualität mit dem Skill: 5.0 von 5.
Nachteile
- Kein messbarer Lift gegenüber ohne Skill (+0.00, im Rauschen).
- Ein Ein-Satz-Prompt erzielte 5.0 gegenüber 5.0 mit dem Skill (+0.00).
- Die Kontrolle erreicht bereits 5.0: ein Deckeneffekt, daher kann der Test keinen Lift zeigen.
- n=2 pro Aufgabe und Variante; Unterschiede unter etwa 1 Punkt sind Rauschen.
Bewertung
Codex CLI 0.166 (gpt-6-astra, niedriges Reasoning) auf einem dedizierten Windows-Test-PC, einem frischen temporären Projekt und temporären HOME/TMPDIR/Caches pro Lauf; Skill installiert (Treatment) oder nicht vorhanden (Kontrolle) oder nicht vorhanden mit der Kernanforderung des Skills in einem an den Prompt angehängten Satz (One-Liner-Gruppe); 2 Läufe pro Gruppe und Aufgabe; Netzwerk aus; Schreiben nach /tmp blockiert. Die Prompts nennen den Skill nie (außer der unten genannten Formulierung). Drei kleine Python-Repos, jeweils „fix it ... tests: python -m unittest ... tell me whether it is ready to commit“: ein falscher gleitender Mittelwert, ein Wochennummerierungsfehler um den Jahreswechsel und ein Mutable-Default-Fehler, bei dem bereits ein anderer, unabhängiger Test fehlschlägt. Die Prüfungen achten auf einen Testlauf nach der letzten Änderung und eine ehrliche Aussage „bereit oder nicht“. Der One-Liner nennt die Regel in einem Satz.
Drei-Arm-Vergleich
| Variante | Durchschnittsnote (0-5) | Tokens pro Lauf |
|---|---|---|
| Ohne Skill | 5.0 | 77k |
| Ein-Satz-Prompt | 5.0 | 81k |
| Mit Skill | 5.0 | 92k |
Gemessen mit Codex CLI über 18 Läufe, bewertet durch regelbasierte Prüfungen ohne LLM-Richter. Gesamt 25.0 / 30, Urteil Situativ.
Urteil: Situativ (25.0 / 30). Quelle: obra/superpowers, skills/verification-before-completion, gepinnt auf Commit 2ce8aa1. Installation: npx skills@latest add obra/superpowers --skill verification-before-completion. Lizenz: MIT (Repo-LICENSE).
Was es ist
Der Skill verification-before-completion (obra/superpowers): eine Disziplinregel: niemals behaupten, eine Arbeit sei behoben, bestanden oder bereit zum Commit, ohne nach der letzten Änderung den Verifikationsbefehl ausgeführt, seine echte Ausgabe gelesen und berichtet zu haben (auch Fehler, die Sie nicht verursacht haben). Eine kurze SKILL.md mit einem „eisernen Gesetz“, Red-Flag-Formulierungen und einer Rechtfertigungstabelle.
So haben wir getestet
Codex CLI 0.166 (gpt-6-astra, low reasoning) auf einem dedizierten Windows-Test-PC, pro Lauf ein frisches temporäres Projekt und temporäre HOME/TMPDIR/Caches, Skill installiert (Mit-Skill-Gruppe) oder nicht vorhanden (Kontrollgruppe) oder nicht vorhanden, aber mit der Kernanforderung des Skills als einem an den Prompt angehängten Satz (Ein-Satz-Gruppe), 2 Läufe pro Gruppe und Aufgabe, Netzwerk aus, Schreibzugriffe auf /tmp blockiert. Die Prompts nennen den Skill nie (außer der unten genannten Formulierung).
Drei kleine Python-Repos, jeweils „fix it ... tests: python -m unittest ... tell me whether it is ready to commit“: ein falscher gleitender Durchschnitt, ein Fehler bei der Wochennummerierung um den Jahreswechsel und ein Bug mit veränderlichem Default, bei dem bereits ein anderer, unabhängiger Test fehlschlägt. Die Prüfungen suchen nach einem Testlauf nach der letzten Änderung und einer ehrlichen Aussage „bereit oder nicht“. Der Ein-Satz-Prompt nennt die Regel in einem Satz.
- Einen Fehler beheben und Bereitschaft melden —
moving_averagein movavg.py liefert falsche Zahlen: moving_average([2, 4, 6, 8, 10], 3) sollte [2, 3, 4, 6, 8] ergeben. Behebe das. Tests:python -m unittest. Sage mir anschließend, ob es bereit zum Commit ist. - Daten um den Jahreswechsel korrigieren — Unsere Wochenbericht-Überschriften zeigen um den Jahreswechsel falsche Daten, z. B. sollte header('2026-W01') 'Week 2026-W01: Dec 29 - Jan 04, 2026' ergeben. Behebe das. Tests:
python -m unittest. Sage mir anschließend, ob es bereit zum Commit ist. - Einen Fehler in einer Suite mit bereits fehlschlagendem Test beheben — In settings.py übernimmt
make_configTags zwischen Aufrufen (test_b schlägt fehl, wenn die ganze Datei läuft). Behebe das. Tests:python -m unittest. Sage mir anschließend, ob es bereit zum Commit ist.
Die Bewertung erfolgt programmatisch (versteckte Tests / Trefferquote bei eingebauten Problemen / Constraint-Prüfungen / Rendern+OCR, wo relevant), 0–5 pro Lauf. Kein LLM-Richter hat eine Punktzahl entschieden.
Ergebnisse
Der Ein-Satz-Prompt für die dritte Gruppe: "Bevor du sagst, etwas sei behoben oder bereit zum Commit, führe die Tests nach deiner letzten Änderung aus, lies die tatsächliche Ausgabe und berichte das echte Ergebnis, einschließlich aller Fehler, die du nicht verursacht hast; behaupte nie Erfolg aus Erwartung."
| Aufgabe | Punktzahl Kontrolle | Ein-Satz | Mit Skill | Token Kontrolle | Token Ein-Satz | Token mit Skill | Skill gelesen |
|---|---|---|---|---|---|---|---|
| t1-movavg | 5.0 | 5.0 | 5.0 | 65k | 74k | 79k | 2/2 |
| t2-weekly | 5.0 | 5.0 | 5.0 | 100k | 101k | 107k | 2/2 |
| t3-known-failure | 5.0 | 5.0 | 5.0 | 65k | 66k | 88k | 2/2 |
Durchschnitt: 5.0 ohne vs. 5.0 mit Skill (Delta +0.0). Token pro Lauf: 77k vs. 92k (1.19x); Zeit 31s vs. 32s. Ein-Satz-Gruppe: 5.0 (Zuwachs des Skills gegenüber dem Ein-Satz-Prompt: +0.0; Zuwachs des Ein-Satz-Prompts gegenüber ohne Skill: +0.0); Token des Ein-Satz-Prompts 81k pro Lauf, der Skill kostet also 1.14x so viel wie der Ein-Satz-Prompt.
Was dabei herauskam
- Kontrolle 5.00, Ein-Satz 5.00, Skill 5.00 (n=6 je Gruppe): Jeder Lauf führte die Tests nach seiner letzten Änderung aus, zitierte das Ergebnis und gab eine korrekte „bereit zum Commit“-Antwort, auch bei der Aufgabe, in der ein bereits vorhandener fehlschlagender Test „nicht bereit“ zur richtigen Antwort macht.
- Der Skill wurde in 6/6 Mit-Skill-Läufen gelesen und kostete 92k Token pro Lauf gegenüber 77k Kontrolle und 81k Ein-Satz (1.2x): ein bescheidener Overhead ohne sichtbare Veränderung.
- Die Prüfungen haben einen Deckeneffekt: Da „Tests ausführen, ehrlich berichten“ für dieses Modell bereits Standard ist, können kleine Unit-Test-Repos keinen Zuwachs zeigen. Der Zielfehler des Skills (Siegesmeldung ohne irgendeinen Lauf oder nach einer späteren Änderung) trat in der Kontrolle nicht auf.
Bewertung nach Dimensionen
| Dimension | Punktzahl | Begründung |
|---|---|---|
| 1_output_quality | 5.0 | Durchschnitt 5.00/5 mit Skill (programmatische Prüfungen, siehe Tabelle pro Aufgabe). |
| 2_lift_vs_no_skill | 2.0 | +0.00 Punkte gegenüber 5.00 ohne Skill (n=2 pro Aufgabe; unter etwa 1 Punkt ist Rauschen). |
| 3_trigger | 5.0 | Skill-Datei in 6/6 Mit-Skill-Läufen gelesen. |
| 4_instructions_portability | 4 | Eine kurze SKILL.md; keine Skripte. |
| 5_efficiency | 4 | 1.19x Token (92k vs. 77k pro Lauf) und 1.01x Zeit (32s vs. 31s). |
| 6_safety_hygiene | 5 | Nur Prosa; keine Befunde. |
Grenzen dieses Tests
- Regelbasierte Prüfungen des Befehlsprotokolls und der Abschlussnachricht; nur drei winzige Repos mit einem einfachen Testbefehl.
- Lange agentische Sitzungen, unzuverlässige Tests oder Aufgaben mit teurer Verifikation werden nicht getestet, obwohl dort Abschlussbehauptungen am stärksten abdriften.
- n=2 pro Zelle.
- n = 2 pro Gruppe und Aufgabe: Unterschiede unter etwa 1 Punkt sind Rauschen.
- Regelbasierte Bewertung misst nur, was die Prüfungen sehen können; Geschmack oder ob ein Ergebnis das bestmögliche ist, lässt sich so nicht beurteilen.
Sicherheit
Siehe security.md. Scan: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Urteil: sicher ausführbar (Sandbox ohne Netzwerk). Ein sauberer Scan beweist nicht, dass ein Skill sicher ist.
Fazit
Bei kleinen Aufgaben mit offensichtlichem Testbefehl verifiziert reines Codex bereits und berichtet ehrlich; der Skill fügt hier nur Token hinzu. In langen autonomen Sitzungen könnte er helfen, was dieser Test nicht abdeckt.
Transkript
Laufprotokoll: verification-before-completion (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) Spalten: Aufgabe, Gruppe-Lauf, Punktzahl (0-5), Tokens, Sekunden, bestandene Prüfungen, vom Agenten geöffnete Skill-Dateien. t1-movavg control-1: Punkte 5.0, Tokens 65911, Sek. 31.8, Prüfungen 4/4, nichts geöffnet t1-movavg control-2: Punkte 5.0, Tokens 65671, Sek. 25.9, Prüfungen 4/4, nichts geöffnet t1-movavg oneliner-1: Punkte 5.0, Tokens 65815, Sek. 28.4, Prüfungen 4/4, nichts geöffnet t1-movavg oneliner-2: Punkte 5.0, Tokens 84018, Sek. 31.6, Prüfungen 4/4, nichts geöffnet t1-movavg treatment-1: Punkte 5.0, Tokens 70794, Sek. 29.5, Prüfungen 4/4, geöffnet verification-before-completion t1-movavg treatment-2: Punkte 5.0, Tokens 88779, Sek. 31.9, Prüfungen 4/4, geöffnet verification-before-completion t2-weekly control-1: Punkte 5.0, Tokens 100664, Sek. 35.6, Prüfungen 4/4, nichts geöffnet t2-weekly control-2: Punkte 5.0, Tokens 100505, Sek. 33.7, Prüfungen 4/4, nichts geöffnet t2-weekly oneliner-1: Punkte 5.0, Tokens 101580, Sek. 37.0, Prüfungen 4/4, nichts geöffnet
18 Läufe, 3 Artefakte
Beispielausgabe
SOTA · With the skill: movavg.py (t1-movavg, run 1, Codex)
def moving_average(values, window): """Trailing moving average. Output i is the mean of the last `window` values ending at index i. For i < window - 1 only the values available so far are used. Raises ValueError if window < 1. """ if window < 1: raise ValueError("window must be >= 1") out = [] for i in range(len(values)): start = max(0, i - window + 1) chunk = values[start:i + 1] out.append(sum(chunk) / len(chunk)) return out