Du kennst den Spruch: den Bock zum Gärtner machen. Genau so fühlt es sich an.
Der Auftrag war klar:
„Prüfe alles gegen SPEC.md, liste Abweichungen auf, korrigiere sie.“
Tabellen, Constraints, Entities, Repositories — alles einmal durch den Filter.
Exkurs: Warum LLMs schlechte Tester sind
Bevor wir weitermachen, ein kurzer, aber notwendiger Exkurs. Denn wenn man ein LLM seinen eigenen Code prüfen lässt, muss man verstehen, warum das grundsätzlich problematisch ist.
- Bestätigungsfehler (Confirmation Bias) Das LLM wurde mit denselben Annahmen gefüttert, die auch zur Codegenerierung geführt haben. Es hält den Code daher eher für korrekt, weil es seine eigenen Muster wiedererkennt.
- Mangel an echten Testfällen LLMs erzeugen Happy‑Path‑Tests, keine Grenzfälle, keine bösartigen Eingaben.
- Übersehen subtiler Logikfehler Race Conditions, Nebenwirkungen, Speicherlecks — alles Dinge, die ein LLM nicht „fühlen“ kann.
- Halluzination von Test‑Erwartungen Wenn die Spezifikation unklar ist, erfindet das LLM Annahmen.
- Unfähigkeit, Sicherheitslücken zu erkennen Sicherheitsdenken ist bösartig. LLMs sind höflich. Das passt nicht zusammen.
- Fehlende Domänenexpertise Fachlogik kennt ein LLM nur als Muster, nicht als echte Regel.
- Keine echte Abdeckungsmessung LLMs wissen nicht, welche Codepfade ungetestet bleiben.
- Verstärkung eigener Fehler Wenn das LLM auf Basis seiner eigenen Tests Code verbessert, verstärkt es oft Missverständnisse.
Fazit: LLMs sind nützlich — aber nur als Werkzeug, nicht als Prüfinstanz. Sie liefern eine Basis, aber die Verantwortung bleibt beim Menschen.
Zurück zum Prompt
Codex startet den Review: Tabellen prüfen, Constraints vergleichen, Entities abgleichen, Repositories durchgehen. Und diesmal findet die Maschine tatsächlich echte Abweichungen.
Die wichtigste: organization_role fehlte komplett, obwohl sie im SPEC als MVP‑Tabelle definiert ist. Codex ergänzt die Migration und zieht die Domain‑Struktur nach.
In employee gab es zusätzliche Annahmen — ein extra Unique auf internal_number, Default‑Werte, die nicht im SPEC stehen. Alles wurde zurückgebaut auf den normativen Stand.
Auch audit_log war zu „fleißig“: zusätzliche Indexe, Defaults, die nicht vorgesehen waren. Jetzt ist es wieder SPEC‑rein.
Die XOR‑Constraint in employee_skill bleibt korrekt: entweder skill_id oder custom_label.
Domain‑Layer
EmployeeSkillnutzt jetzt ein eigenes Value ObjectEmployeeSkillId.- Für
organization_rolewurden Entity, Id‑VO und Repository‑Interface ergänzt. RepositoryDb‑Implementierungen wurden erweitert, konsistent zur bestehenden Struktur.
Alles wurde committed (Commit: 56422db) und der PR aktualisiert.
Testing
- PHP‑Syntax: alle Migrations‑ und Domain‑Dateien fehlerfrei
- Docker: weiterhin nicht testbar in dieser Umgebung
Damit ist Prompt 4 abgeschlossen. Ein weiterer Schritt, der zeigt: LLMs können Code schreiben — aber sie brauchen jemanden, der ihnen sagt, wann sie danebenliegen.