28 lines
1.0 KiB
Python
28 lines
1.0 KiB
Python
"""QA→Repair-Loop-Primitiv, DB-frei. Drei Abbruchbedingungen (Lektion 77):
|
|
Ziel erreicht / echter Stillstand (nichts bewegt UND keine Verbesserung) / hartes
|
|
Limit. Transiente Verschlechterung ist erlaubt — eine bewegte Runde darf die Note
|
|
kurzfristig senken."""
|
|
|
|
import logging
|
|
|
|
from config import LOOP_MAX_ITER
|
|
|
|
log = logging.getLogger("creator2.auto_loop")
|
|
|
|
VOLL = 10.0
|
|
|
|
|
|
async def auto_repair_loop(ebene: str, erst_note: float, reparieren,
|
|
max_iter: int = LOOP_MAX_ITER) -> tuple[float, str]:
|
|
"""reparieren() → (neue_note, bewegt). → (note, grund fertig|stillstand|limit)."""
|
|
note = erst_note
|
|
for i in range(max_iter):
|
|
if note >= VOLL:
|
|
return note, "fertig"
|
|
neue_note, bewegt = await reparieren()
|
|
log.info("%s: Iteration %d — Note %.1f → %.1f, bewegt=%s", ebene, i + 1, note, neue_note, bewegt)
|
|
if not bewegt and neue_note <= note:
|
|
return neue_note, "stillstand"
|
|
note = neue_note
|
|
return note, "fertig" if note >= VOLL else "limit"
|