Code-Review-Report-Template¶
Dieses Template ist verpflichtend für alle Block-Abschlüsse ab Block 3.
Das installierte code-review-Plugin ist PR-orientiert und liefert seine
Findings in einem Format, das für den Kontext dieses Projekts (lokale
Branch-Entwicklung, keine PRs) angepasst werden muss. Das Template hält
das Ergebnis so fest, dass die Deferred-Items für offene-todos.md
ohne Retro-Arbeit übernommen werden können.
Prompt-Erweiterung für zukünftige Block-Prompts¶
Im Block-Commit-Abschnitt jedes Block-Prompts folgende Passage einbauen:
Mandatory Code Review (erweitertes Reporting): Nach Implementierung und vor dem Commit:
code-review-Plugin (oder Agent mit klarem Diff-Scope) auf den geänderten Code anwenden.- Für jedes Finding folgende Felder im Report liefern:
- ID (H1, H2, M1, M2, L1, …) mit Severity-Score (0–100)
- Datei:Zeile
- 2–3 Sätze Problem-Beschreibung
- 1–2 Sätze Lösungsvorschlag
- Entscheidung: Fix-Now / Deferred / False-Positive
- Bei
Deferred: Rationale in einem Satz (mit konkretem Trigger, wann das fixiert wird)- Bei
False-Positive: kurze Begründung, warum das Finding nicht zutrifft (z. B. "Konzept §X schließt das explizit aus")- High-Severity-Findings (Score ≥ 80) IMMER fixen vor Commit.
- Medium-Severity (Score 50–79): Fix-Now, außer mit expliziter Deferral-Begründung.
- Low-Severity (Score < 50): Deferral ist Default, Fix optional.
- Alle Deferred-Items in
docs-kora/offene-todos.mdunterAus Block <N> — <Titel> (Commit <hash>)eintragen BEVOR committed wird. Schema:TODO-B<N>-<NN>. False-Positives werden NICHT inoffene-todos.mdgeführt, nur im Report referenziert.- Integration-Learnings (Überraschungen, Workarounds, nicht-offensichtliche Fixes aus dem Block) als
L-B<N>-<NN>inoffene-todos.mdunter "Integration-Learnings" eintragen.Report-Output:
### Code-Review — Block <N> **<M> Findings, <X> Fix-Now, <Y> Deferred, <Z> False-Positive** | ID | Sev | Datei:Zeile | Titel | Entscheidung | |---|---|---|---|---| | H1 | 92 | file.py:42 | Resource-Leak | Fix-Now | | M1 | 65 | other.py:10 | Input-Validation | Deferred (Block X) | | M2 | 55 | ... | TOTP-Enforcement | False-Positive (Konzept §2.6) | **Details:** <pro Finding: 4–5 Zeilen mit Problem, Lösung, Entscheidung, bei Deferred + Rationale, bei False-Positive + Begründung> **Deferred-Items nach `offene-todos.md` übertragen:** TODO-B<N>-01 … TODO-B<N>-<YY> **Integration-Learnings nach `offene-todos.md` übertragen:** L-B<N>-01 … L-B<N>-<ZZ>
Severity-Scoring-Guide¶
| Score | Kategorie | Beispiele |
|---|---|---|
| 90–100 | Critical | SQL-Injection, Auth-Bypass, Secret im Code, Data-Loss-Risk ohne Recovery |
| 80–89 | High | Resource-Leak, fehlendes Error-Handling bei kritischen Pfaden, Race-Condition, ungeprüfter externer Input bei Admin-Operationen |
| 60–79 | Medium | Ineffiziente Queries in Hot-Paths, fehlende Input-Validation bei Admin-Endpoints, unklare API-Design-Entscheidung mit Follow-up-Wirkung |
| 40–59 | Low | Naming-Inkonsistenz, fehlende Docstrings bei Public-API, Minor-Performance, Log-Leak von Debug-Infos |
| < 40 | Nitpick | Formatierung, optionale Refactorings, Style-Präferenzen |
Ein Finding wird nur dann auf ≥ 80 gehoben, wenn der Reviewer einen konkreten Weg beschreiben kann, wie der Issue in realistischer Nutzung eintritt. "Könnte theoretisch" reicht nicht — Score 50 ist die Default- Position für "plausibel, aber nicht bewiesen".
Deferral-Rationale-Beispiele¶
Gute Deferral-Begründungen:
- "Betrifft Pfad, der in Block X ohnehin umgebaut wird (Refactoring wäre doppelt)."
- "Low-Severity, einziger Caller ist interner Admin-Flow; Block 16 Testing & Docs deckt das Thema ganzheitlich."
- "Wartet auf Infrastruktur aus Block Y (z. B. Rate-Limiting-Framework, Correlation-ID-Middleware)."
- "Kosmetik, wird mit anderen Naming-Bereinigungen im Phase-A-Abschluss-Refactor gebündelt."
Schlechte Deferral-Begründungen (nicht akzeptiert):
- "Später, wenn Zeit ist" — kein konkreter Trigger.
- "Probably fine in practice" — Severity überdenken oder Risiko konkret argumentieren.
- "Würde größeren Refactor erfordern" — wenn Severity es rechtfertigt: machen oder Severity anzweifeln.
False-Positive-Beispiele¶
Ein Finding wird als False-Positive markiert, wenn:
- Das Konzept (
docs-kora/konzepte/multitenancy-fundament.md) das Verhalten explizit als gewollt beschreibt. Beispiel: Reviewer fordert TOTP-Enforcement für Vendor-User, aber Konzept §2.6 nennt nur "Login wird auditiert". - Die Spec des Block-Prompts das Verhalten explizit anders fordert. Beispiel: Reviewer fordert Backfill-Fenster beim Audit-Poller-Start, aber der Block-Prompt fordert "Cursor auf 'jetzt' beim ersten Start, keine historischen Events nachsenden".
- Der Reviewer eine nicht existierende Funktion/Abhängigkeit annimmt (meistens Tooling-bedingt).
In allen drei Fällen: kurze Begründung in den Details, False-Positive-
Zähler hochzählen, nicht nach offene-todos.md übernehmen.
Retro-Beispiel: Block 2¶
Block 2 hat den Review-Flow zum ersten Mal durchlaufen. Die Ergebnisse
liegen in offene-todos.md als TODO-B2-01 bis TODO-B2-08 und
L-B2-01 bis L-B2-04. Der Review-Lauf fand nach dem ursprünglichen
Commit statt (2 False-Positives wurden nicht explizit als solche
markiert, sondern implizit nicht gefixt); genau diese Retro-Arbeit soll
das Template künftig verhindern.