Communitygithub.com

KI-Regressionstests

Regressions-Teststrategien für KI-gestützte Entwicklung. Sandbox-Modus-API-Tests ohne Datenbankabhängigkeiten, automatisierte Bug-Check-Workflows und Muster, um KI-blinde Flecken zu erkennen, wenn dasselbe Modell Code schreibt und überprüft.

Was ist KI-Regressionstests?

Dieses Skill bietet eine umfassende Methodik für Regressionstests, die speziell auf die Schwächen KI-gestützter Entwicklung zugeschnitten ist. Der Kern liegt darin, systematische blinde Flecken zu adressieren, die entstehen, wenn ein KI-Modell (wie Claude Code, Cursor oder Codex) sowohl Code schreibt als auch überprüft. Es beschreibt, wie man mit Sandbox-Modus-API-Tests ohne Datenbankabhängigkeiten schnelle und zuverlässige Tests durchführt. Es zeigt gängige KI-Regressionsmuster auf – wie Inkonsistenzen zwischen Sandbox- und Produktionspfaden, fehlende SELECT-Klauseln in Datenbankabfragen oder fehlerhafte Optimistic Updates – und liefert konkrete Testvorlagen in TypeScript/Vitest. Das Skill beinhaltet auch einen automatisierbaren Bug-Check-Workflow, der Tests vor jede Code-Überprüfung stellt, und eine Strategie, die besagt: Teste genau dort, wo ein Fehler gefunden wurde, anstatt auf hohe Codeabdeckung zu setzen.

Funktioniert mit✓Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/affaan-m/ECC/tree/main/skills/ai-regression-testing

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht KI-Regressionstests?

Testmuster, die speziell für die KI-gestützte Entwicklung entwickelt wurden, wenn dasselbe Modell Code schreibt und überprüft – und dabei systematische blinde Flecken erzeugt, die nur automatisierte Tests aufdecken können.

Wann aktivieren

  • Ein KI-Agent (Claude Code, Cursor, Codex) hat API-Routen oder Backend-Logik geändert
  • Ein Fehler wurde gefunden und behoben – es muss verhindert werden, dass er erneut auftritt
  • Das Projekt hat einen Sandbox-/Mock-Modus, der für datenbankfreie Tests genutzt werden kann
  • Ausführen von /bug-check oder ähnlichen Überprüfungsbefehlen nach Codeänderungen
  • Mehrere Codepfade existieren (Sandbox vs. Produktion, Feature-Flags usw.)

Das Kernproblem

Wenn eine KI Code schreibt und dann ihre eigene Arbeit überprüft, trägt sie dieselben Annahmen in beide Schritte. Dies erzeugt ein vorhersagbares Fehlermuster:

KI schreibt Fix → KI überprüft Fix → KI sagt „sieht korrekt aus“ → Fehler besteht weiterhin

Beispiel aus der Praxis (beobachtet in der Produktion):

Fix 1: notification_settings zur API-Antwort hinzugefügt
  → Vergessen, es zur SELECT-Abfrage hinzuzufügen
  → KI hat es überprüft und übersehen (gleicher blinder Fleck)

Fix 2: Es zur SELECT-Abfrage hinzugefügt
  → TypeScript-Build-Fehler (Spalte nicht in generierten Typen)
  → KI hat Fix 1 überprüft, aber das SELECT-Problem nicht erkannt

Fix 3: Auf SELECT * geändert
  → Produktionspfad behoben, Sandbox-Pfad vergessen
  → KI hat es erneut überprüft und übersehen (4. Vorkommen)

Fix 4: Test hat es beim ersten Durchlauf sofort erkannt PASS:

Das Muster: Inkonsistenz Sandbox-/Produktionspfad ist die häufigste KI-bedingte Regression.

Sandbox-Modus-API-Tests

Die meisten Projekte mit KI-freundlicher Architektur haben einen Sandbox-/Mock-Modus. Dies ist der Schlüssel zu schnellen, datenbankfreien API-Tests.

Einrichtung (Vitest + Next.js App Router)

// vitest.config.ts
import { defineConfig } from "vitest/config";
import path from "path";

export default defineConfig({
  test: {
    environment: "node",
    globals: true,
    include: ["__tests__/**/*.test.ts"],
    setupFiles: ["__tests__/setup.ts"],
  },
  resolve: {
    alias: {
      "@": path.resolve(__dirname, "."),
    },
  },
});
// __tests__/setup.ts
// Sandbox-Modus erzwingen – keine Datenbank nötig
process.env.SANDBOX_MODE = "true";
process.env.NEXT_PUBLIC_SUPABASE_URL = "";
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY = "";

Test-Helfer für Next.js-API-Routen

// __tests__/helpers.ts
import { NextRequest } from "next/server";

export function createTestRequest(
  url: string,
  options?: {
    method?: string;
    body?: Record<string, unknown>;
    headers?: Record<string, string>;
    sandboxUserId?: string;
  },
): NextRequest {
  const { method = "GET", body, headers = {}, sandboxUserId } = options || {};
  const fullUrl = url.startsWith("http") ? url : `http://localhost:3000${url}`;
  const reqHeaders: Record<string, string> = { ...headers };

  if (sandboxUserId) {
    reqHeaders["x-sandbox-user-id"] = sandboxUserId;
  }

  const init: { method: string; headers: Record<string, string>; body?: string } = {
    method,
    headers: reqHeaders,
  };

  if (body) {
    init.body = JSON.stringify(body);
    reqHeaders["content-type"] = "application/json";
  }

  return new NextRequest(fullUrl, init);
}

export async function parseResponse(response: Response) {
  const json = await response.json();
  return { status: response.status, json };
}

Regressionstests schreiben

Das Hauptprinzip: Schreibe Tests für Fehler, die gefunden wurden, nicht für Code, der funktioniert.

// __tests__/api/user/profile.test.ts
import { describe, it, expect } from "vitest";
import { createTestRequest, parseResponse } from "../../helpers";
import { GET, PATCH } from "@/app/api/user/profile/route";

// Definiere den Vertrag – welche Felder MÜSSEN in der Antwort sein
const REQUIRED_FIELDS = [
  "id",
  "email",
  "full_name",
  "phone",
  "role",
  "created_at",
  "avatar_url",
  "notification_settings",  // ← Hinzugefügt, nachdem ein Fehler gefunden wurde, der es vermisst hat
];

describe("GET /api/user/profile", () => {
  it("gibt alle erforderlichen Felder zurück", async () => {
    const req = createTestRequest("/api/user/profile");
    const res = await GET(req);
    const { status, json } = await parseResponse(res);

    expect(status).toBe(200);
    for (const field of REQUIRED_FIELDS) {
      expect(json.data).toHaveProperty(field);
    }
  });

  // Regressionstest – dieser genaue Fehler wurde 4 Mal von der KI eingeführt
  it("notification_settings ist nicht undefined (BUG-R1-Regression)", async () => {
    const req = createTestRequest("/api/user/profile");
    const res = await GET(req);
    const { json } = await parseResponse(res);

    expect("notification_settings" in json.data).toBe(true);
    const ns = json.data.notification_settings;
    expect(ns === null || typeof ns === "object").toBe(true);
  });
});

Sandbox-/Produktions-Parität testen

Die häufigste KI-Regression: Behebung des Produktionspfads, aber Vergessen des Sandbox-Pfads (oder umgekehrt).

// Test, dass Sandbox-Antworten dem erwarteten Vertrag entsprechen
describe("GET /api/user/messages (Konversationsliste)", () => {
  it("enthält partner_name im Sandbox-Modus", async () => {
    const req = createTestRequest("/api/user/messages", {
      sandboxUserId: "user-001",
    });
    const res = await GET(req);
    const { json } = await parseResponse(res);

    // Dies hat einen Fehler abgefangen, bei dem partner_name
    // zum Produktionspfad hinzugefügt wurde, aber nicht zum Sandbox-Pfad
    if (json.data.length > 0) {
      for (const conv of json.data) {
        expect("partner_name" in conv).toBe(true);
      }
    }
  });
});

Integration von Tests in den Bug-Check-Workflow

Definition eines benutzerdefinierten Befehls

<!-- .claude/commands/bug-check.md -->
# Fehlerüberprüfung

## Schritt 1: Automatisierte Tests (obligatorisch, kann nicht übersprungen werden)

Führe diese Befehle ZUERST vor jeder Code-Überprüfung aus:

    npm run test       # Vitest-Testsuite
    npm run build      # TypeScript-Typüberprüfung + Build

- Wenn Tests fehlschlagen → melde als Fehler mit höchster Priorität
- Wenn Build fehlschlägt → melde Typfehler mit höchster Priorität
- Fahre nur mit Schritt 2 fort, wenn beide bestanden wurden

## Schritt 2: Code-Überprüfung (KI-Überprüfung)

1. Konsistenz Sandbox-/Produktionspfad
2. API-Antwortstruktur entspricht den Erwartungen des Frontends
3. Vollständigkeit der SELECT-Klausel
4. Fehlerbehandlung mit Rollback
5. Race-Conditions bei optimistischen Aktualisierungen

## Schritt 3: Für jeden behobenen Fehler einen Regressionstest vorschlagen

Der Workflow

Benutzer: „バグチェックして" (oder "/bug-check")
  │
  ├─ Schritt 1: npm run test
  │   ├─ FEHLGESCHLAGEN → Fehler mechanisch gefunden (kein KI-Urteil nötig)
  │   └─ BESTANDEN → Weiter
  │
  ├─ Schritt 2: npm run build
  │   ├─ FEHLGESCHLAGEN → Typfehler mechanisch gefunden
  │   └─ BESTANDEN → Weiter
  │
  ├─ Schritt 3: KI-Code-Überprüfung (mit bekannten blinden Flecken im Hinterkopf)
  │   └─ Ergebnisse gemeldet
  │
  └─ Schritt 4: Für jede Behebung einen Regressionstest schreiben
      └─ Nächste Fehlerüberprüfung erkennt, ob die Behebung bricht

Häufige KI-Regressionsmuster

Muster 1: Sandbox-/Produktionspfad-Inkonsistenz

Häufigkeit: Am häufigsten (bei 3 von 4 Regressionen beobachtet)

// FEHLGESCHLAGEN: KI fügt Feld nur zum Produktionspfad hinzu
if (isSandboxMode()) {
  return { data: { id, email, name } };  // Neues Feld fehlt
}
// Produktionspfad
return { data: { id, email, name, notification_settings } };

// BESTANDEN: Beide Pfade müssen dieselbe Struktur zurückgeben
if (isSandboxMode()) {
  return { data: { id, email, name, notification_settings: null } };
}
return { data: { id, email, name, notification_settings } };

Test, um es zu erkennen:

it("Sandbox und Produktion geben dieselben Felder zurück", async () => {
  // In der Testumgebung ist der Sandbox-Modus erzwungen
  const res = await GET(createTestRequest("/api/user/profile"));
  const { json } = await parseResponse(res);

  for (const field of REQUIRED_FIELDS) {
    expect(json.data).toHaveProperty(field);
  }
});

Muster 2: Fehlende SELECT-Klausel

Häufigkeit: Häufig bei Supabase/Prisma, wenn neue Spalten hinzugefügt werden

// FEHLGESCHLAGEN: Neue Spalte zur Antwort hinzugefügt, aber nicht zu SELECT
const { data } = await supabase
  .from("users")
  .select("id, email, name")  // notification_settings nicht hier
  .single();

return { data: { ...data, notification_settings: data.notification_settings } };
// → notification_settings ist immer undefined

// BESTANDEN: SELECT * oder neue Spalten explizit einschließen
const { data } = await supabase
  .from("users")
  .select("*")
  .single();

Muster 3: Fehlerzustandsleckage

Häufigkeit: Mittel – beim Hinzufügen von Fehlerbehandlung zu bestehenden Komponenten

// FEHLGESCHLAGEN: Fehlerzustand gesetzt, alte Daten aber nicht gelöscht
catch (err) {
  setError("Laden fehlgeschlagen");
  // Reservierungen zeigen immer noch Daten vom vorherigen Tab!
}

// BESTANDEN: Zugehörigen Zustand bei Fehler löschen
catch (err) {
  setReservations([]);  // Veraltete Daten löschen
  setError("Laden fehlgeschlagen");
}

Muster 4: Optimistische Aktualisierung ohne ordnungsgemäßes Rollback

// FEHLGESCHLAGEN: Kein Rollback bei Fehler
const handleRemove = async (id: string) => {
  setItems(prev => prev.filter(i => i.id !== id));
  await fetch(`/api/items/${id}`, { method: "DELETE" });
  // Wenn die API fehlschlägt, ist das Element aus der UI verschwunden, aber noch in der DB
};

// BESTANDEN: Vorherigen Zustand erfassen und bei Fehler zurücksetzen
const handleRemove = async (id: string) => {
  const prevItems = [...items];
  setItems(prev => prev.filter(i => i.id !== id));
  try {
    const res = await fetch(`/api/items/${id}`, { method: "DELETE" });
    if (!res.ok) throw new Error("API-Fehler");
  } catch {
    setItems(prevItems);  // Rollback
    alert("Löschen fehlgeschlagen");
  }
};

Strategie: Teste dort, wo Fehler gefunden wurden

Strebe nicht nach 100% Abdeckung. Stattdessen:

Fehler gefunden in /api/user/profile     → Schreibe Test für Profil-API
Fehler gefunden in /api/user/messages    → Schreibe Test für Nachrichten-API
Fehler gefunden in /api/user/favorites   → Schreibe Test für Favoriten-API
Kein Fehler in /api/user/notifications   → Schreibe (noch) keinen Test

Warum dies bei KI-Entwicklung funktioniert:

  1. Die KI neigt dazu, dieselbe Art von Fehler wiederholt zu machen
  2. Fehler häufen sich in komplexen Bereichen (Authentifizierung, Multi-Pfad-Logik, Zustandsverwaltung)
  3. Einmal getestet, kann diese exakte Regression nicht mehr auftreten
  4. Die Testanzahl wächst organisch mit Fehlerbehebungen – keine verschwendete Mühe

Kurzreferenz

KI-RegressionsmusterTeststrategiePriorität
Sandbox-/Produktions-InkonsistenzGleiche Antwortstruktur im Sandbox-Modus bestätigenHoch
Fehlende SELECT-KlauselAlle erforderlichen Felder in der Antwort bestätigenHoch
FehlerzustandsleckageZustandsbereinigung bei Fehler bestätigenMittel
Fehlendes RollbackZustandswiederherstellung bei API-Fehler bestätigenMittel
Typ-Cast maskiert nullBestätigen, dass Feld nicht undefined istMittel

TUN / NICHT TUN

TUN:

  • Schreibe Tests sofort nach dem Finden eines Fehlers (wenn möglich vor der Behebung)
  • Teste die API-Antwortstruktur, nicht die Implementierung
  • Führe Tests als ersten Schritt jeder Fehlerüberprüfung aus
  • Halte Tests schnell (< 1 Sekunde gesamt im Sandbox-Modus)
  • Benenne Tests nach dem Fehler, den sie verhindern (z. B. „BUG-R1-Regression")

NICHT TUN:

  • Schreibe Tests für Code, der noch nie einen Fehler hatte
  • Vertraue auf KI-Selbstüberprüfung als Ersatz für automatisierte Tests
  • Überspringe Sandbox-Pfad-Tests mit der Begründung „es sind nur Mock-Daten"
  • Schreibe Integrationstests, wenn Komponententests ausreichen
  • Strebe nach Abdeckungsprozent – strebe nach Verhinderung von Regressionen an

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

affaan-m/ECC

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

affaan-m/fal-ai-media

Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.

affaan-m/manim-video

日本語翻訳:このファイルは manim-video 用の日本語翻訳が必要です

affaan-m/remotion-video-creation

Remotion のベストプラクティス - React で動画を作成する。3D、アニメーション、音声、字幕、チャート、トランジションなどをカバーするドメイン固有の29のルール。

affaan-m/video-editing

AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

agent-self-evaluation

Use after completing any non-trivial task. The agent self-rates its output on 5 axes — accuracy, completeness, clarity, actionability, conciseness — with concrete evidence per criterion. Produces a structured 1-5 scorecard with specific improvement suggestions.

agent-sort

Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.

ai-first-engineering

Engineering operating model for teams where AI agents generate a large share of implementation output. Use when setting team process, review gates, or ownership rules for a codebase largely written by agents.

android-clean-architecture

Clean Architecture patterns for Android and Kotlin Multiplatform projects — module structure, dependency rules, UseCases, Repositories, and data layer patterns. Use when structuring modules, layers, or data flow in an Android or KMP project.

angular-developer

Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling.

api-connector-builder

Build a new API connector or provider by matching the target repo

Verwandte Skills