This commit is contained in:
Team3
2026-07-05 00:54:21 +02:00
parent 219993ffd5
commit db58d52567
5 changed files with 114 additions and 4 deletions

View File

@@ -703,6 +703,39 @@ async def board_snapshot(topic: str, format_name: str, limit: int = 20) -> dict:
return {"columns": columns, "qa_guide": note_guide}
async def repair_karten(topic: str, format_name: str) -> list[str]:
"""QA-Befund-getriebenes Guide-Repair: Karten, die im jüngsten Guide-QA-Report
Befunde tragen, gehen zurück auf `pruefer` (md bleibt) — Prüfer+Fix beheben gezielt,
generate_guide resumt die offenen Karten und misst am Ende neu. Pendant zum
Blocks-Repair („Score unter 10 muss einen Fix-Pfad haben"). → betroffene Blocktitel."""
import qa as qa_mod
tdir = qa_mod.QA_DIR / topic
reports = sorted(tdir.glob("guide-*.json"), key=lambda p: p.stat().st_mtime) if tdir.is_dir() else []
rep = _json_file(reports[-1]) if reports else None
if not rep:
return []
cards = {c["block_norm"]: c for c in await db.list_guide_cards(topic, format_name)}
norms: set[str] = set()
for e in rep.get("marker_fehlend", []): # "Block · sub"
norms.add(_norm_title(str(e).split(" · ")[0]))
for e in rep.get("ziel_ohne_anker", []): # "block_norm · (id) text"
norms.add(str(e).split(" · ")[0])
for e in rep.get("laengen_ausreisser", []): # {"block": titel}
norms.add(_norm_title(e.get("block", "") if isinstance(e, dict) else str(e)))
for e in rep.get("lesbarkeit", []): # "Block: hinweis"
norms.add(_norm_title(str(e).split(":")[0]))
for t in rep.get("fachlich_falsch", []) or []:
norms.add(_norm_title(str(t)))
for e in rep.get("redundanz", []): # {"a": "Block: absatz", "b": …}
for seite in ("a", "b"):
norms.add(_norm_title(str(e.get(seite, "")).split(":")[0]))
betroffen = []
for n in sorted(norms & set(cards)):
await db.set_guide_card(topic, format_name, n, stage="pruefer", status="open", gate_info="")
betroffen.append(cards[n]["block"])
return betroffen
async def reset_card(topic: str, format_name: str, block_norm: str, ab_stage: int) -> bool:
"""Reset ONE guide card to a stage (single-card variant of reset_from_stage):
fields re-zeroed, md only wiped for writer(2) and earlier, lernziele only for 0."""