feat: KI-Foto-Auto-Ablehnung + Strafpunkte als Punktedeckel (UC31/UC57) #29
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "bugfix/penalty-points-autoapprove"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
KI-Foto-Bewertung (Policy auto_approve_on_max) darf jetzt auch ablehnen:
sichtbar), AUSSER beim letzten verfügbaren Versuch (ohne Versuchslimit
= Limit 1) -> bleibt pending, Spielleiter prüft manuell
Strafpunkte reduzieren jetzt die für eine Aufgabe erreichbaren Punkte
direkt (points_ceiling = max(0, points − Fehlversuche×penalty_points))
statt separater negativer Score-Events. Greift einheitlich für
auto-evaluierte Handler, KI-Foto-Bewertung und manuelle Admin-Freigabe.
Neuer Helper app/game/attempts.py bündelt die Logik.
Frontend:
(points_remaining), gelöst: tatsächlich vergeben (awarded_points)
Punkte; async KI-Ergebnis wird nach Task-Refetch in lastResult gespiegelt
(alle Versuche mit Status, Punkten, Begründung) auf der Detailseite
Tests: 18 neue Backend-Tests (attempts/points_ceiling, AI-Decision),
10 neue Frontend-Tests (SubmissionHistory, SubmissionResult,
ParticipantTaskCard, TaskDetailPage). 260 Backend-/67 Frontend-Tests grün.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
Vereinheitlicht Versuchslimit-, Strafpunkt- und Eskalationslogik in app/game/attempts.py — gemeinsam genutzt von Auto-Handlern (create_submission), KI-Foto (ai_review) und manueller Freigabe. Neuer rallye-/laufweiter Modus `review_final_rejections` (Migration 0037, Default true), per PATCH /admin/rallyes/{id} jederzeit umschaltbar, aus der Vorlage geerbt: - Modus a (true): die letzte automatische Ablehnung unter aktivem Versuchslimit wird nicht hart abgelehnt, sondern als 'pending' zur Spielleiter-Prüfung zurückgehalten (Marker _final_review_hold), blockiert weitere Abgaben (409 awaiting_final_review), zählt als verbrauchter Versuch. - Modus b (false): vollautomatisch, auch die letzte Ablehnung ist final. Greift einheitlich für alle Aufgabentypen. Ohne Versuchslimit kann ein Team immer erneut abgeben -> keine endgültige Ablehnung, keine Eskalation. Das frühere foto-spezifische effective_max_attempts (no-limit=1) entfällt. Frontend: Admin-Toggle in den Rallye-Einstellungen; Teilnehmer sehen bei zurückgehaltener letzter Ablehnung einen Spielleiter-Hinweis statt "abgelehnt". Typen RallyeInfo/RallyeData/SubmissionOut erweitert. Tests: neue test_uc57_final_review_escalation.py (generische Eskalation über solution_word), angepasste AI-Decision-Tests für den Toggle, neue SubmissionResult-Tests. 267 Backend-/69 Frontend-Tests grün. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>