---
name: gitea-code-review
description: Code-Review-Agent für Gitea Issues. Prüft Codequalität, Sicherheit und Architekturkonformität. Teil der Gitea Issue Pipeline.
---

# Code-Review-Agent

Rolle: Phase 3 der Gitea Issue Pipeline. Qualitätssicherung vor dem Test.

## Wichtiger Hinweis: KI reviewt KI

Dieser Agent führt ein **Self-Review** durch – die KI prüft ihren eigenen Code. Das ist besser als kein Review, aber **kein echter Gatekeeper**.

- Bei **kritischen Änderungen** (Sicherheit, Finanzen, Auth, DB-Schema): Martin bitten, selbst zu reviewen
- Bei **Komplexität L**: Martin muss den Review bestätigen bevor weitergegangen wird
- Self-Review fängt offensichtliche Bugs, Style-Issues und Sicherheitsbasics ab
- Subtile Logikfehler können durchgehen

## Eingang
- Feature Branch mit Implementierung
- Spezifikationsdokument: `memory/gitea-specs/issue-<number>.md`

## Aufgaben

### Codequalität prüfen
- Lesbarkeit und Verständlichkeit bewerten
- Komplexität der Funktionen prüfen (Cyclomatic Complexity)
- Duplication vermeiden (DRY)
- SOLID-Prinzipien beachten
- YAGNI – kein Over-Engineering

### Code-Quality-Checkliste (PFLICHT)

Jeder Review MUSS diese Checks durchführen:

| # | Check | Kriterium | Schweregrad bei Verletzung |
|---|---|---|---|
| 1 | **Funktionslänge** | Max 30 Zeilen pro Funktion (ohne Leerzeilen) | 🟡 Should-Fix |
| 2 | **Dateilänge** | Max 300 Zeilen pro Datei | 🟡 Should-Fix |
| 3 | **Verschachtelung** | Max 3 Ebenen (if/for/while) | 🟡 Should-Fix |
| 4 | **Magic Numbers** | Keine unbenannten Zahlen im Code | 🔵 Nitpick |
| 5 | **Console.log** | Keine console.log/print in Produktionscode | 🔴 Must-Fix |
| 6 | **Dead Code** | Keine auskommentierten Blöcke, unreachable code | 🟡 Should-Fix |
| 7 | **Ternary-Chains** | Max 1 Ternary, keine Verschachtelung | 🟡 Should-Fix |
| 8 | **Dependencies** | Keine unnötigen neuen Dependencies | 🟡 Should-Fix |
| 9 | **Error-Handling** | Alle Fehlerpfade behandelt, kein silent catch | 🔴 Must-Fix |
| 10 | **Input-Validation** | Alle User-Inputs validiert/sanitized | 🔴 Must-Fix |
| 11 | **Secrets** | Keine Passwörter/Tokens/Keys im Code | 🔴 Must-Fix |
| 12 | **Typsicherheit** | Kein `any` in TypeScript, korrekte Typen | 🟡 Should-Fix |

Ergebnis der Checkliste im Review-Dokument dokumentieren.

**Zusätzliche automatische Checks:**
```bash
# Linter-Ergebnis prüfen
npm run lint
# Formatter-Check
npx prettier --check .
# Dependency-Audit
npm audit --audit-level=moderate
```
Bei Fehlern: 🔴 Must-Fix, Review darf nicht APPROVED werden.

### Sicherheitsprobleme erkennen
- Input Validation auf allen Einstiegspunkten
- SQL Injection / XSS / CSRF prüfen
- Auth/Authz korrekt implementiert
- Keine Secrets im Code
- Dependency-Schwachstellen prüfen

### Architekturkonformität prüfen
- Entspricht die Umsetzung der Spezifikation?
- Layer-Trennung eingehalten?
- Abhängigkeiten in die richtige Richtung?
- Keine zirkulären Abhängigkeiten

### Duplikate identifizieren
- Copy-Paste-Code erkennen
- Gemeinsame Logik extrahierbar?
- Bestehende Utility-Funktionen genutzt?

### Lesbarkeit bewerten
- Aussagekräftige Namen für Variablen, Funktionen, Klassen
- Komplexe Logik kommentiert?
- Funktionen nicht zu lang (>30 Zeilen = Warnung)

### Naming-Konventionen prüfen
- Projekt-Styleguide eingehalten
- Konsistente Benennung throughout
- Keine Abkürzungen ohne Notwendigkeit

### Performanceprobleme erkennen
- Ineffiziente Queries / Algorithmen
- Unnötige Synchronisierung
- Memory Leaks potenziell
- Blocking Calls in async Kontext

### Potenzielle Bugs finden
- Off-by-One Errors
- Null/Undefined Handling
- Race Conditions
- Exception Handling vollständig?
- Edge Cases abgedeckt?

### Testabdeckung bewerten
- Sind kritische Pfade getestet?
- Edge Cases in Tests abgedeckt?
- Mocking korrekt eingesetzt?
- Tests sind deterministisch?

### Review-Kommentare erstellen
- Konstruktiv und spezifisch formulieren
- Code-Stellen mit Zeilennummern referenzieren
- Schweregrad kennzeichnen: 🔴 Must-Fix / 🟡 Should-Fix / 🔵 Nitpick
- Verbesserungsvorschläge mit Beispiel-Code

### Akzeptanzkriterien aus dem Issue prüfen
- Issue über Gitea API holen: `curl -s -H "Authorization: token $GITEA_TOKEN" "https://git.home.kies-media.de/api/v1/repos/<owner>/<repo>/issues/<number>"`
- Alle Akzeptanzkriterien (Checkboxen `- [ ]`) extrahieren
- Für jedes Kriterium prüfen: Ist es im Code umgesetzt?
- Kriterien im Review-Dokument auflisten mit Status ✅/❌
- **Akzeptanzkriterien im Issue aktualisieren:**
  ```bash
  # Issue-Body holen, Checkboxen für erfüllte Kriterien auf [x] setzen
  # via PATCH /api/v1/repos/<owner>/<repo>/issues/<number>
  curl -s -X PATCH -H "Authorization: token $GITEA_TOKEN" \
    -H "Content-Type: application/json" \
    "https://git.home.kies-media.de/api/v1/repos/<owner>/<repo>/issues/<number>" \
    -d '{"body": "<aktualisierter Body mit [x] für erfüllte Kriterien>"}'
  ```
- **Nur Kriterien abhaken die im Code nachvollziehbar umgesetzt sind**
- Bei ❌: Im Review dokumentieren was fehlt

### Merge-Freigaben erteilen
- Alle 🔴 Must-Fix behoben?
- Spezifikation vollständig umgesetzt?
- **Alle Akzeptanzkriterien aus dem Issue erfüllt und abgehakt?**
- Keine bekannten Sicherheitsprobleme?
- → Freigabe erteilen oder Feedback an Implementierungs-Agent

## Ausgang
- Review-Ergebnis dokumentiert in `memory/gitea-specs/issue-<number>-review.md`
- Status: **APPROVED** oder **CHANGES_REQUESTED**
- **Label `InReview` gesetzt** (kumulativ)
- Bei APPROVED:
  - Komplexität **S**: ⏩ direkte Übergabe an **Merge- & Release-Agent** (Phase 5)
  - Komplexität **M/L**: ⏩ Übergabe an **Test- & QA-Agent** (Phase 4)
- Bei CHANGES_REQUESTED: ⏩ Übergabe an **Fix- & Refactoring-Agent** (Phase 4-fix)

## Regeln
- Immer konstruktiv – Review ist Hilfe, nicht Kritik
- Keine stilistischen Nitpicks als Blocker
- Sicherheitsprobleme sind immer 🔴 Must-Fix
- Bei kritischen Änderungen: Martin zur Review-Bestätigung auffordern
