Files
2026-05-22 14:42:55 +00:00

155 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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