Alle Skills

diagnosing-bugs (Matt Pocock)

Führt eine Diagnoseschleife für schwierige Bugs und Performance-Regressionen durch, bevor Fixes vorgeschlagen werden.

mattpocock diagnosing-bugs: Eine Ein-Satz-Version seiner Regel „zuerst die Rückkopplungsschleife bauen“ war genauso gut wie der vollständige Skill, bei 0.95x den Kosten des Skills

SituativSicher

Codex CLI · gpt-6-astra

22.9 / 30

Lift gegenüber ohne Skill: +0.28 · Situativ · 18 Läufe

Situativ: der Lift +0.28 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

Bestanden

Getestet 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.3
Ausgabequalität
4.6
Token- und Zeitkosten
2.0
Installation und Portabilität
4.0
Sicherheit
5.0

Sicherheitsprüfung

Sicher

Statischer 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 mattpocock/skills --skill diagnosing-bugs

Quelle

Fixierter Commit: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d

Getestet: 2026-11-02

Was wir getestet haben

  • Off-by-one in einer kleinen Funktion — moving_average in movavg.py liefert falsche Zahlen: moving_average([2, 4, 6, 8, 10], 3) sollte [2, 3, 4, 6, 8] sein, aber die späteren Werte kommen falsch heraus. Ursache finden und beheben. Tests: python3 -m unittest.
  • Dateiübergreifender Datumsfehler — Unsere Wochenbericht-Kopfzeilen zeigen um den Jahreswechsel falsche Daten, z. B. sollte header('2026-W01') 'Week 2026-W01: Dec 29 - Jan 04, 2026' sein. Ursache finden und beheben.
  • Reihenfolgeabhängiger Testfehler — Tests in tests/test_settings.py bestehen einzeln, aber test_b schlägt fehl, wenn die ganze Datei läuft, und Konfigurationen scheinen Tags aus früheren Aufrufen zu tragen. Diagnostizieren und beheben.

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: 4.58 von 5.

Nachteile

  • Kein messbarer Lift gegenüber ohne Skill (+0.28, im Rauschen).
  • Ein Ein-Satz-Prompt erzielte 4.72 gegenüber 4.58 mit dem Skill (-0.14).
  • Verbraucht 1.71x die Tokens von ohne Skill.
  • 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 Mac-Testrechner, 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). Die Prompts nennen den Skill nie. Die Bewertung ist programmatisch (versteckte Tests / Trefferquote eingebauter Probleme / Constraint-Prüfungen / Rendern+OCR wo relevant), 0–5 pro Lauf. Keine Punktzahl wurde von einem LLM-Richter vergeben.

Drei-Arm-Vergleich

VarianteDurchschnittsnote (0-5)Tokens pro Lauf
Ohne Skill4.3177k
Ein-Satz-Prompt4.72126k
Mit Skill4.58133k

Gemessen mit Codex CLI über 18 Läufe, bewertet durch regelbasierte Prüfungen ohne LLM-Richter. Gesamt 22.9 / 30, Urteil Situativ.

Urteil: Situativ (22.9 / 30). Quelle: mattpocock/skills, skills/engineering/diagnosing-bugs, gepinnt auf Commit 4ae2317. Installation: npx skills@latest add mattpocock/skills --skill diagnosing-bugs. Lizenz: MIT (Repo-LICENSE).

Worum es geht

Der Skill diagnosing-bugs aus Matt Pococks Skills-Repo (Engineering). Eine Disziplin für schwierige Bugs: Phase 1 ist der Aufbau einer engen Bestanden/Nicht-bestanden-Rückmeldungsschleife (fehlschlagender Test, curl-Skript, CLI-Diff, Headless-Browser, wieder abgespielter Trace), danach rangierte Hypothesen, die einzeln getestet werden, Instrumentierung, ein Regressionstest und Aufräumen. Rund 1,000 Wörter Markdown, eine Hilfsvorlage hitl-loop.template.sh und die Regel, Geheimnisse zu schwärzen, bevor Ausgaben gezeigt werden. Er löst bei „diagnose“, „debug this“ oder „something is broken/failing“ aus.

So haben wir getestet

Codex CLI 0.166 (gpt-6-astra, niedriges Reasoning) auf einem Mac-Testgerät, pro Lauf ein frisches temporäres Projekt und temporäre HOME/TMPDIR/Caches, Skill installiert (Skill-Gruppe), 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.

  1. Off-by-one in einer kleinen Funktion — moving_average in movavg.py liefert falsche Zahlen: moving_average([2, 4, 6, 8, 10], 3) sollte [2, 3, 4, 6, 8] ergeben, aber die späteren Werte stimmen nicht. Finde die Ursache und behebe sie. Tests: python3 -m unittest.
  2. Datumsfehler über mehrere Dateien — Unsere Wochenbericht-Überschriften zeigen um den Jahreswechsel falsche Daten, z. B. sollte header('2026-W01') 'Week 2026-W01: Dec 29 - Jan 04, 2026' ergeben. Finde die Ursache und behebe sie.
  3. Reihenfolgeabhängiger Testfehler — Die Tests in tests/test_settings.py bestehen einzeln, aber test_b schlägt fehl, wenn die ganze Datei läuft, und Konfigurationen scheinen Tags aus früheren Aufrufen mitzutragen. Diagnostiziere und behebe das.

Die Bewertung ist programmatisch (versteckte Tests / Erkennung eingebauter Probleme / Constraint-Checks / Rendern+OCR, wo relevant), 0–5 pro Lauf. Kein LLM-Richter hat einen Score vergeben.

Ergebnisse

Der Ein-Satz-Prompt für die dritte Gruppe: „Baue zuerst eine schnelle, deterministische Bestanden/Nicht-bestanden-Rückmeldungsschleife, die bei genau diesem Bug rot wird (ein fehlschlagender Test ist am besten), bilde dann rangierte Hypothesen und teste sie einzeln mit Belegen, bevor du etwas behebst, und führe die Schleife erneut aus, um die Behebung zu bestätigen.“

AufgabeScore KontrolleEin-SatzMit SkillTokens KontrolleTokens Ein-SatzTokens mit SkillSkill gelesen
t1-moving-average4.174.584.1760k102k87k2/2
t2-weekly-dates4.174.585.086k120k136k2/2
t3-shared-state4.585.04.5884k154k173k2/2

Durchschnittsscore: 4.31 ohne vs. 4.58 mit dem Skill (Delta +0.28). Tokens pro Lauf: 77k vs. 133k (1.71x); Zeit 38s vs. 51s. Ein-Satz-Gruppe: 4.72 (Gewinn des Skills gegenüber der Ein-Satz-Version: -0.14; Gewinn der Ein-Satz-Version gegenüber ohne Skill: +0.42); Ein-Satz-Version 126k Tokens pro Lauf, der Skill kostet also 1.05x so viel wie die Ein-Satz-Version.

Was passiert ist

  • Die endgültige Korrektheit war in allen drei Gruppen gleich: Die versteckten Tests bestanden in 18/18 Läufen, und jeder Diff blieb innerhalb des Limits für kleine Diffs. Diese drei eingebauten Bugs (Off-by-one, Datumslogik über Dateigrenzen, reihenfolgeabhängige Testverschmutzung) sind einfach genug, dass reines Codex sie behebt.
  • Das Einzige, was sich bewegte, ist die Prozessprüfung „Tests vor dem Bearbeiten des Codes ausgeführt“, also zuerst reproduzieren. Ohne den Skill taten es 1/6 Läufe; mit der Ein-Satz-Fassung der ersten Skill-Regel 4/6; mit installiertem Skill 4/6. Der eine Satz reproduzierte also den gesamten Effekt.
  • Der Skill wurde in 6/6 Skill-Läufen gelesen, obwohl kein Prompt ihn nannte (er löst bei „debug this“ aus). Er ließ den Agenten mehr arbeiten: 18 Befehle pro Lauf gegenüber 8 ohne den Skill und 13 mit der Ein-Satz-Version.
  • Kosten: 133k Tokens pro Lauf mit dem Skill gegenüber 77k ohne (1.71x) und 126k mit der Ein-Satz-Version (1.05x). Die Ein-Satz-Gruppe selbst kostete 1.64x der Kontrolle, weil die Anweisung, zuerst eine Schleife zu bauen, den Agenten mehr Schritte ausführen lässt.
  • Ein Skill-Lauf (Aufgabe mit gemeinsamem Zustand) behob den Bug und bestand die versteckten Tests, aber seine Antwort passte nicht zu unserer Grundursachen-Prüfung (sie sucht die Nennung der Ursache); der einzige Lauf in allen Gruppen, der sie verfehlte.

Dimensionsbewertungen

DimensionScoreBegründung
1_output_quality4.58

Durchschnittsscore 4.58/5 mit dem Skill (programmatische Prüfungen, siehe Tabelle pro Aufgabe).

2_lift_vs_no_skill2.2800000000000002

+0.28 Punkte gegenüber 4.31 ohne den Skill (n=2 pro Aufgabe; unter etwa 1 Punkt ist Rauschen).

3_trigger5.0Skill-Datei in 6/6 Skill-Läufen gelesen.
4_instructions_portability4

Reines Markdown; liest optional GLOSSARY.md/ADRs, falls vorhanden; die HTTP-/Browser-Schleifenoptionen benötigen Tools, die eine Sandbox möglicherweise nicht hat.

5_efficiency21.71x Tokens (133k vs. 77k pro Lauf) und 1.35x Zeit (51s vs. 38s).
6_safety_hygiene5

Markdown plus eine lokale Shell-Vorlage (fragt nach Eingaben, gibt aus; kein Netzwerk, keine Schreibzugriffe). Der Skill weist den Agenten an, Geheimnisse zu schwärzen, bevor Ausgaben gezeigt werden.

Grenzen dieses Tests

  • Drei kleine Python-Bugs in einer Datei, die durch Lesen des Codes auffindbar sind. Der Skill ist für schwierige Bugs gebaut (flaky, Performance-Regressionen, Bugs, die ein Harness brauchen); nichts davon wurde getestet.
  • Die übrigen Werkzeuge des Skills (HTTP-/Browser-Schleifen, Trace-Replay, Bisection, Instrumentierungs-Tags) können in einer Sandbox ohne Netzwerk und ohne App, die man steuern kann, nicht laufen.
  • Die Prüfung „Tests vor der Bearbeitung ausgeführt“ vergleicht die Reihenfolge des ersten Testbefehls und des ersten Schreibvorgangs im Event-Log; sie beurteilt nicht die Qualität der Reproduktion.
  • n = 2 pro Gruppe und Aufgabe: Unterschiede unter etwa 1 Punkt sind Rauschen.
  • Regelbasierte Bewertung misst, was die Prüfungen sehen können; sie kann keinen Geschmack beurteilen oder ob ein Ergebnis das bestmögliche ist.

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

Die Grundidee des Skills ist eine gute Gewohnheit, und Codex befolgt sie, wenn man es ihm sagt; ein Satz davon erzielte jedoch dasselbe Reproduzieren-zuerst-Verhalten und dieselbe Bestehensquote zu etwa denselben Kosten, und bei einfachen Bugs behebt der Agent die Dinge ohnehin. Behalten Sie ihn installiert, wenn Sie schwierige, flaky Bugs debuggen und die vollständige Disziplin möchten; bei kleinen Bugs reicht es, seine erste Regel in den Prompt zu schreiben.

Transkript

Laufprotokoll: diagnosing-bugs (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-moving-average control-1: Punkte 4.17, Tokens 60541, Sek. 27.1, Prüfungen 3/4, nichts geöffnet
t1-moving-average control-2: Punkte 4.17, Tokens 60464, Sek. 29.1, Prüfungen 3/4, nichts geöffnet
t1-moving-average oneliner-1: Punkte 5.0, Tokens 93708, Sek. 49.0, Prüfungen 4/4, nichts geöffnet
t1-moving-average oneliner-2: Punkte 4.17, Tokens 111338, Sek. 39.8, Prüfungen 3/4, nichts geöffnet
t1-moving-average treatment-1: Punkte 4.17, Tokens 87669, Sek. 36.8, Prüfungen 3/4, geöffnet diagnosing-bugs
t1-moving-average treatment-2: Punkte 4.17, Tokens 87501, Sek. 36.0, Prüfungen 3/4, geöffnet diagnosing-bugs
t2-weekly-dates control-1: Punkte 4.17, Tokens 95094, Sek. 43.4, Prüfungen 3/4, nichts geöffnet
t2-weekly-dates control-2: Punkte 4.17, Tokens 78531, Sek. 38.2, Prüfungen 3/4, nichts geöffnet
t2-weekly-dates oneliner-1: Punkte 4.17, Tokens 129649, Sek. 49.4, Prüfungen 3/4, nichts geöffnet

18 Läufe, 3 Artefakte

Beispielausgabe

SOTA · With the skill: movavg.py (t1-moving-average, 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

Pro ansehen