Stufe Lektorat: Sprache glätten, Abschnitt für Abschnitt

Nach der Prüfung glättet ein Lektor ohne Werkzeuge jeden Abschnitt
(Satzbau, Zusammenhang, Wortwahl, Begriffe erinnern). Eingebaute
Verlustprüfung: Bezeichner, Zahlen, Überschriften, Code, Diagramme,
Querverweise, Umfang ±20 % – sonst bleibt das Original. Alte Zustände
bekommen die Stufe beim Laden nachgetragen.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
team3
2026-10-05 20:45:40 +02:00
parent e27d2177b9
commit d07218307f
7 changed files with 171 additions and 2 deletions

View File

@@ -3,7 +3,7 @@ Dateimarker (Bericht existiert = Agent fertig)."""
import asyncio
import logging
from . import agenten, config, gliederung, montage, prompts, state
from . import agenten, config, gliederung, lektorat, montage, prompts, state
log = logging.getLogger("buchwerk")
_laeufe: dict[str, asyncio.Task] = {}
@@ -184,6 +184,30 @@ async def st_pruefung(name: str) -> None:
await _parallel(name, "pruefung", aufgaben)
async def st_lektorat(name: str) -> None:
"""Geprüfte Kapitel sprachlich glätten; Marker: berichte/lektorat-NN.md."""
thema, _ = _thema(name)
kap = [k for k in _kapitel(name) if (state.verzeichnis(name) / "buch" / k["datei"]).exists()]
s = state.stufe(name, "lektorat")
offen = [k for k in kap if state.bericht_lesen(name, f"pruefung-{k['n']:02d}") and not state.bericht_lesen(name, f"lektorat-{k['n']:02d}")]
s.update(gesamt=len(kap), fertig=len(kap) - len(offen))
sem = asyncio.Semaphore(config.PARALLEL)
fehler = []
async def eins(k):
async with sem:
r = await lektorat.kapitel(name, k, thema)
if r["status"] == "fertig":
s["fertig"] += 1
else:
fehler.append(f"Kapitel {k['n']}")
state.speichern(name)
await asyncio.gather(*(eins(k) for k in offen))
if fehler:
raise Abbruch("Lektorat gescheitert bei " + ", ".join(fehler[:5]) + " – „Fortsetzen“ wiederholt nur die offenen")
async def st_konsistenz(name: str) -> None:
thema, _ = _thema(name)
kap = _kapitel(name)
@@ -211,4 +235,4 @@ async def st_montage(name: str) -> None:
STUFEN_FN = {"recherche": st_recherche, "gliederung": st_gliederung, "schreiben": st_schreiben,
"pruefung": st_pruefung, "konsistenz": st_konsistenz, "montage": st_montage}
"pruefung": st_pruefung, "lektorat": st_lektorat, "konsistenz": st_konsistenz, "montage": st_montage}