diff --git a/API.md b/API.md index 7a3e2e2..3d056d4 100644 --- a/API.md +++ b/API.md @@ -46,7 +46,7 @@ Alte Zustände ohne diese Stufe bekommen sie beim Laden nachgetragen. {"id": "gliederung", "titel": "Gliederung", …}, {"id": "schreiben", "titel": "Kapitel schreiben", "status": "laeuft", "fertig": 3, "gesamt": 18, …}, {"id": "pruefung", "titel": "Kapitel prüfen", …}, - {"id": "konsistenz", "titel": "Querverweise und Vorwort", …}, + {"id": "konsistenz", "titel": "Doppelungen und Vorwort", …}, {"id": "montage", "titel": "Buch zusammensetzen", …} ], "kosten_usd": 12.3, "tokens": 4100000, diff --git a/backend/config.py b/backend/config.py index 918d641..f2208da 100644 --- a/backend/config.py +++ b/backend/config.py @@ -11,7 +11,7 @@ EFFORT = "high" PARALLEL = 5 # gleichzeitige Kapitel-Agenten LEKTORAT_PARALLEL = 8 # gleichzeitige Lektorat-Anfragen (ohne Werkzeuge, je Abschnitt) MAX_TURNS = 800 -KONSISTENZ_GRUPPE = 5 # Kapitel je Querverweis-Agent +KONSISTENZ_GRUPPE = 5 # Kapitel je Konsistenz-Agent LESE_WPM = 120 STUFEN = [ @@ -20,6 +20,6 @@ STUFEN = [ ("schreiben", "Kapitel schreiben"), ("pruefung", "Kapitel prüfen"), ("lektorat", "Sprache glätten"), - ("konsistenz", "Querverweise und Vorwort"), + ("konsistenz", "Doppelungen und Vorwort"), ("montage", "Buch zusammensetzen"), ] diff --git a/backend/lektorat.py b/backend/lektorat.py index 9eb7cb8..cfa193b 100644 --- a/backend/lektorat.py +++ b/backend/lektorat.py @@ -1,5 +1,5 @@ """Lektorat: jedes geprüfte Kapitel wird Abschnitt für Abschnitt sprachlich geglättet (ohne Werkzeuge). -Ein Abschnitt wird nur übernommen, wenn nichts verloren ging (Bezeichner, Zahlen, Überschriften, Code, Verweise, Diagramme) +Ein Abschnitt wird nur übernommen, wenn nichts verloren ging (Bezeichner, Zahlen, Überschriften, Code, Diagramme) und der Umfang nicht über 20 % wächst; sonst bleibt der Originalabschnitt.""" import asyncio import re @@ -24,7 +24,7 @@ def pruefen(alt: str, neu: str) -> list[str]: fehler = [] if not neu.strip(): return ["leere Antwort"] - for name, rx in (("Überschriften", r"^#{1,4} .*$"), ("Querverweise", r"→ (?:Abschnitt|Kapitel) [0-9.]+")): + for name, rx in (("Überschriften", r"^#{1,4} .*$"),): a, n = re.findall(rx, alt, flags=re.M), re.findall(rx, neu, flags=re.M) if sorted(a) != sorted(n): fehler.append(f"{name} verändert") diff --git a/backend/pipeline.py b/backend/pipeline.py index 36ac5cb..babe0ec 100644 --- a/backend/pipeline.py +++ b/backend/pipeline.py @@ -218,7 +218,7 @@ async def st_konsistenz(name: str) -> None: if state.bericht_lesen(name, f"konsistenz-{gi}"): continue dateien = ", ".join(f"`buch/{k['datei']}` (Kapitel {k['n']})" for k in g) - aufgaben.append((f"konsistenz-{gi}", f"Querverweise Kapitel {g[0]['n']}–{g[-1]['n']}", + aufgaben.append((f"konsistenz-{gi}", f"Konsistenz Kapitel {g[0]['n']}–{g[-1]['n']}", prompts.laden("konsistenz", thema=thema, dateien=dateien, gruppe=str(gi)))) if not state.bericht_lesen(name, "vorwort"): aufgaben.append(("vorwort", "Vorwort schreiben", prompts.laden("vorwort", thema=thema))) diff --git a/prompts/gliederung.md b/prompts/gliederung.md index c61059a..4a3095e 100644 --- a/prompts/gliederung.md +++ b/prompts/gliederung.md @@ -7,7 +7,7 @@ Anforderungen – der Stoff bestimmt den Umfang, nicht eine Zielzahl: - Je Kapitel so viele Abschnitte, wie es getrennte Fragen gibt: typisch 4, mindestens 2, höchstens 7. Reihenfolge nach dem, was man zuerst wissen muss. - Jeder Abschnitt bekommt ein Gewicht, das seine Länge festlegt: `(kurz)` ≈ 800 Wörter für Abgrenzung, Überblick, Einordnung; ohne Angabe = mittel ≈ 1.300 Wörter, der Normalfall; `(lang)` ≈ 2.000 Wörter für Kernverfahren mit Herleitung und Beispiel. - Ein Kapitel soll in einer Lesesitzung zu schaffen sein: Summe der Richtwerte höchstens 8.000 Wörter. Braucht ein Thema mehr, wird es geteilt, nicht gestapelt. -- Jedes Thema hat genau ein zuständiges Kapitel; Überschneidungen vermeiden (später wird per Querverweis verwiesen). +- Jedes Thema hat genau ein zuständiges Kapitel; Überschneidungen vermeiden (jedes Thema wird nur in seinem Kapitel erklärt). - Titel deutsch, konkret, keine Marketingsprache. Schreibe `buch/GLIEDERUNG.md` GENAU in diesem Format (Parser liest es): diff --git a/prompts/kapitel.md b/prompts/kapitel.md index a4fd78d..493fbd4 100644 --- a/prompts/kapitel.md +++ b/prompts/kapitel.md @@ -8,7 +8,7 @@ Arbeite in diesem Loop: 1. RECHERCHE in den lokalen Quellen (siehe QUELLEN.md): Verstehe die Sache anhand von Quellcode, Referenz, Doku bzw. Abstracts, bevor du schreibst. Online nur, wenn lokal nicht klärbar und QUELLEN.md es erlaubt. 2. SCHREIBEN mit Write (bei Länge in mehreren Schritten, dann anhängen). 3. VERIFIZIEREN: Lies das fertige Kapitel vollständig. Prüfe JEDE Tatsachenangabe (Bezeichner, Signaturen, Versionsangaben, Namen, Jahre, Zahlen, Studienergebnisse) gegen die Quellen; führe Codebeispiele aus, wo STIL.md das verlangt. Korrigiere oder entschärfe alles Unbelegte. -4. PRÜFEN gegen STIL.md: Überschriften exakt wie in der Gliederung, keine Übungen/Merkkästen/Zusammenfassungen/Literaturlisten, Prosa statt Listenwüste, Querverweise statt Redundanz zu anderen Kapiteln, Umfang, Umlaute. Überarbeite, bis alles passt. +4. PRÜFEN gegen STIL.md: Überschriften exakt wie in der Gliederung, keine Übungen/Merkkästen/Zusammenfassungen/Literaturlisten, Prosa statt Listenwüste, keine Verweisklammern, keine Wiederholung von Themen anderer Kapitel, Umfang, Umlaute. Überarbeite, bis alles passt. Arbeitsdateien (Testskripte, Notizen) nur unter `arbeit/kapitel-{{n}}/` anlegen, nicht in `buch/` oder `quellen/`. Keine persönlichen Daten an externe Dienste senden. diff --git a/prompts/konsistenz.md b/prompts/konsistenz.md index a89ba3b..4ee9f6b 100644 --- a/prompts/konsistenz.md +++ b/prompts/konsistenz.md @@ -1,16 +1,13 @@ -Du prüfst Querverweise und Doppelungen in einem deutschsprachigen Sachbuch zum Thema „{{thema}}“. Alle Kapitel sind geschrieben und einzeln geprüft; sie liegen unter `buch/` (Gliederung: `buch/GLIEDERUNG.md`). +Du prüfst Doppelungen, Verweise und Widersprüche in einem deutschsprachigen Sachbuch zum Thema „{{thema}}“. Alle Kapitel sind geschrieben und einzeln geprüft; sie liegen unter `buch/` (Gliederung: `buch/GLIEDERUNG.md`). Das Buch wird von vorn nach hinten gelesen, ohne zu springen. Deine Kapitel: {{dateien}} -Für jeden Querverweis der Form „(→ Kapitel N)“, „(→ Abschnitt N.M)“ oder Formulierungen wie „wird in Kapitel N behandelt“ in deinen Kapiteln: -1. Stelle fest, auf welches Thema verwiesen wird. -2. Prüfe per grep/Read in der Zieldatei, ob das Thema dort tatsächlich behandelt wird – nicht nur laut Gliederung, im Text. Bei „Abschnitt N.M“: steht es in genau diesem Abschnitt? -3. Wenn nicht: Korrigiere den Verweis auf die Stelle, wo das Thema wirklich steht (grep über alle Kapitel), oder entferne den Verweis bzw. formuliere den Satz um, falls das Thema nirgends behandelt wird. Behauptungen wie „wird in Kapitel X ausführlich behandelt“ nur stehen lassen, wenn das zutrifft. +Verweise: Verweisklammern der Form „(→ Kapitel N)“ oder „(→ Abschnitt N.M)“ dürfen nicht vorkommen – entferne sie und glätte den Satz. Rückverweise wie „wie Abschnitt N.M gezeigt hat“ streichen oder zu einem Halbsatz ohne Nummer machen („wie beim Lebenszyklus der Knoten“). Vorausverweise wie „Kapitel N erklärt das“ nur stehen lassen, wenn das Thema dort wirklich behandelt wird (grep/Read in der Zieldatei); sonst umformulieren. -Doppelungen: Prüfe, ob dieselbe Studie, dasselbe Konzept oder dieselbe Mechanik in mehreren Kapiteln AUSFÜHRLICH beschrieben wird (grep über alle Kapitel). Die Hauptstelle ist das Kapitel, zu dessen Thema es laut Gliederung gehört. Kürze in DEINEN Kapiteln Nebenstellen auf ein bis zwei Sätze mit Verweis auf die Hauptstelle. Ändere Kapitel anderer Gruppen nicht; melde stattdessen, was dort zu kürzen wäre. +Doppelungen: Prüfe, ob dieselbe Studie, dasselbe Konzept oder dieselbe Mechanik in mehreren Kapiteln AUSFÜHRLICH beschrieben wird (grep über alle Kapitel). Die Hauptstelle ist das Kapitel, zu dessen Thema es laut Gliederung gehört. Kürze in DEINEN Kapiteln Nebenstellen auf ein bis zwei Sätze, die genug erklären, um den Absatz zu verstehen. Ändere Kapitel anderer Gruppen nicht; melde stattdessen, was dort zu kürzen wäre. Widersprüche: Widersprechen sich Angaben zum selben Sachverhalt zwischen deinen Kapiteln und dem Zielkapitel (andere Zahl, anderes Jahr, andere Versionsangabe, anderes Verhalten)? Kläre per Quelle (siehe `quellen/QUELLEN.md`) und gleiche in deinen Kapiteln an; melde, wenn das andere Kapitel falsch ist. Ändere nur deine Kapitel, minimal-invasiv mit Edit. Arbeitsdateien nur unter `arbeit/konsistenz-{{gruppe}}/`. -Antworte am Ende kurz (max. 8 Zeilen, Markdown): Anzahl geprüfter Verweise, Korrekturen, gefundene Widersprüche und Doppelungen in fremden Kapiteln (Datei, Stelle, was zu tun ist). +Antworte am Ende kurz (max. 8 Zeilen, Markdown): entfernte Verweise, Korrekturen, gefundene Widersprüche und Doppelungen in fremden Kapiteln (Datei, Stelle, was zu tun ist). diff --git a/prompts/lektorat.md b/prompts/lektorat.md index 9571cc2..aba13ff 100644 --- a/prompts/lektorat.md +++ b/prompts/lektorat.md @@ -6,7 +6,7 @@ Regeln: 3. Wortwahl: Verben statt Substantivierungen; keine Füllwörter („grundsätzlich“, „im Wesentlichen“, „durchaus“). 4. Ein Fachbegriff wird beim zweiten Auftreten mit einem halben Satz in Erinnerung gerufen. -Unverändert bleiben: alle Fakten, Zahlen, Namen, Bezeichner in `Code-Schrift`, Codeblöcke, Tabellen, Diagramme (```diagramm), Überschriften, Querverweise „(→ …)“ und Quellenangaben. Nichts weglassen, nichts hinzufügen, nicht kürzen. Der Text darf höchstens 10 % länger werden. +Unverändert bleiben: alle Fakten, Zahlen, Namen, Bezeichner in `Code-Schrift`, Codeblöcke, Tabellen, Diagramme (```diagramm), Überschriften. Nichts weglassen, nichts hinzufügen, nicht kürzen. Der Text darf höchstens 10 % länger werden. Beispiel 1 – vorher: „Neben der Welle führt der Code Buchhaltung, die sich bei jedem Streichen mitändert: die Zahl der verbleibenden Muster je Zelle, die Summe ihrer Gewichte und die Summe der Terme w · log w.“ diff --git a/prompts/pruefung.md b/prompts/pruefung.md index d6c1d94..bc6e293 100644 --- a/prompts/pruefung.md +++ b/prompts/pruefung.md @@ -11,7 +11,7 @@ Loop, bis nichts mehr zu korrigieren ist: 1. Lies das Kapitel komplett. Extrahiere alle überprüfbaren Behauptungen: Bezeichner und Signaturen, Versionsangaben, Studien (Autoren, Jahr, Design, Stichprobe, Ergebnis, Effektgröße), Zahlen, Zitate, Verhaltensbeschreibungen („was passiert wann“), Zuschreibungen („X hat Y eingeführt“), Textdiagramme (jedes Element und jeder Pfeil gegen Quellcode/Doku) und Ausgabeblöcke (gegen den eigenen Testlauf). 2. Verifiziere möglichst ALLE gegen die lokalen Quellen (QUELLEN.md). Priorisiere nach Fehlerwahrscheinlichkeit. Führe Codebeispiele aus bzw. teste beschriebenes Verhalten mit kleinen Skripten, wo STIL.md das vorsieht. Versionsangaben gegen Tags/Changelogs prüfen. Achte besonders auf: falsche Zuschreibungen, verdrehte Effektrichtungen, überzogene Kausalaussagen aus Korrelationsstudien, erfundene Stichprobengrößen, veraltete oder erfundene Bezeichner, Doku-Aussagen, die dem Quellcode widersprechen (dann gilt der Quellcode). 3. Korrigiere Fehler direkt in der Datei mit Edit (minimal-invasiv, Stil beibehalten). Unbelegbares vorsichtiger formulieren oder streichen. -4. Prüfe Form: Überschriften exakt wie GLIEDERUNG.md; keine Übungen/Merkkästen/Zusammenfassungen/Literaturlisten; Querverweise zeigen auf Kapitel, die das Thema laut Gliederung (und, falls die Datei schon existiert, laut Text) wirklich behandeln; keine größeren Doppelungen mit Themen, die in andere Kapitel gehören (dann kürzen und verweisen); Rechtschreibung, Umlaute, Markdown. Satzbau: Sätze über 30 Wörter in mehrere auflösen, Inhalt unverändert; Zielschnitt unter 20 Wörter je Satz. Sätze mit drei und mehr Code-Bezeichnern entflechten: in Worten erklären, Namenslisten in eine Tabelle oder ein Codebeispiel. Verständlichkeit: Begriffe, die der Abschnitt benutzt, ohne sie bis dahin eingeführt zu haben, kurz erklären oder auf die Einführung verweisen; Interna, die kein sichtbares Verhalten erklären, streichen; Zwischenabschnitte unter 150 Wörtern mit dem Nachbarn zusammenlegen; Gedankensprünge schließen, wo zwischen zwei Sätzen oder Absätzen die Verbindung fehlt. Umfang: Abschnitte über 120 % ihres Richtwerts aus der Gliederung (`(kurz)` ≈ 800, ohne Angabe ≈ 1.300, `(lang)` ≈ 2.000 Wörter) straffen – zuerst Wiederholungen und Quellenformeln ohne Informationswert, keine Fakten oder Beispiele streichen. +4. Prüfe Form: Überschriften exakt wie GLIEDERUNG.md; keine Übungen/Merkkästen/Zusammenfassungen/Literaturlisten; keine Verweisklammern „(→ …)“ und keine Rückverweise auf frühere Abschnitte; Vorausverweise nur als Halbsatz und nur, wenn das Thema dort laut Gliederung steht; keine größeren Doppelungen mit Themen, die in andere Kapitel gehören (dann kürzen und verweisen); Rechtschreibung, Umlaute, Markdown. Satzbau: Sätze über 30 Wörter in mehrere auflösen, Inhalt unverändert; Zielschnitt unter 20 Wörter je Satz. Sätze mit drei und mehr Code-Bezeichnern entflechten: in Worten erklären, Namenslisten in eine Tabelle oder ein Codebeispiel. Verständlichkeit: Begriffe, die der Abschnitt benutzt, ohne sie bis dahin eingeführt zu haben, kurz erklären oder auf die Einführung verweisen; Interna, die kein sichtbares Verhalten erklären, streichen; Zwischenabschnitte unter 150 Wörtern mit dem Nachbarn zusammenlegen; Gedankensprünge schließen, wo zwischen zwei Sätzen oder Absätzen die Verbindung fehlt. Umfang: Abschnitte über 120 % ihres Richtwerts aus der Gliederung (`(kurz)` ≈ 800, ohne Angabe ≈ 1.300, `(lang)` ≈ 2.000 Wörter) straffen – zuerst Wiederholungen und Quellenformeln ohne Informationswert, keine Fakten oder Beispiele streichen. 5. Wiederhole, bis du keine Fehler mehr findest. Ändere nur `buch/{{datei}}`. Arbeitsdateien nur unter `arbeit/pruefung-{{n}}/`. Keine persönlichen Daten an externe Dienste senden. diff --git a/prompts/stil_basis.md b/prompts/stil_basis.md index 43fe564..44f40ea 100644 --- a/prompts/stil_basis.md +++ b/prompts/stil_basis.md @@ -10,7 +10,7 @@ Ein deutschsprachiges Sachbuch, das **Verständnis** vermittelt: Wie ist die Sac - Überwiegend Fließtext. Listen und Tabellen nur, wo sie echte Klarheit bringen – sparsam. - Fachbegriffe bei der ersten Nennung kurz erklären; englische Fachbegriffe nennen, wo sie üblich sind. - Keine Quellenangaben im Text, weder in Klammern noch als „laut Dokumentation“: Quellen dienen der Prüfung, nicht dem Leser. Klassen und Befehle in `Code`-Formatierung, Versionsangaben („seit 4.3“) nur, wenn geprüft. -- Querverweise „(→ Kapitel 8)“ bzw. „(→ Abschnitt 8.2)“ statt Wiederholung. Die Gliederung zeigt, was wo steht; Themen anderer Kapitel nur kurz streifen und verweisen. +- Keine Querverweise: keine Verweisklammern „(→ Abschnitt 8.2)“, keine Rückverweise („wie Abschnitt 3.2 zeigte“). Das Buch wird von vorn nach hinten gelesen; der Leser hat das Frühere gerade gelesen. Ein Thema wird nur in seinem Kapitel erklärt, anderswo höchstens in einem Halbsatz gestreift. Kommt ein Begriff vor seinem Kapitel vor, genügt ein Halbsatz wie „das erklärt Kapitel 8“. - Codebeispiele (falls das Thema Software ist): kurz (typisch 5–30 Zeilen), nur wo sie ein Konzept erklären, mit Sprachangabe im Codeblock, im Text erklärt. - Hat ein Codebeispiel eine Ausgabe, steht die tatsächliche Ausgabe des eigenen Testlaufs als ```text-Block direkt darunter, gekürzt auf das Wesentliche (höchstens etwa 10 Zeilen). - Strukturdiagramme: Baum-, Ablauf- und Zustandsstrukturen, die aus Quellcode oder Doku belegt sind, als Textdiagramm mit Kästen und Pfeilen in einem ```diagramm-Block (Zeichen ┌─┐│└┘├┤┬┴ und ▶ ▼, höchstens 60 Zeichen breit, höchstens eines je Abschnitt). Jedes Element im Diagramm kommt auch im Text vor. Keine Illustrationen, keine Szenen, nichts Erfundenes. diff --git a/prompts/vorwort.md b/prompts/vorwort.md index 4d5f422..6ef4272 100644 --- a/prompts/vorwort.md +++ b/prompts/vorwort.md @@ -6,7 +6,6 @@ Schreibe `buch/00-vorwort.md` (Markdown, Überschrift `# Vorwort`, 350–600 Wö - Worum es geht und für wen das Buch ist; was es nicht ist (kein Tutorial, kein Ratgeber, keine Referenz). - Wie das Buch aufgebaut ist (die Teile in einem Absatz, keine Liste). - Woran sich die Darstellung orientiert (Referenzversion bzw. Literaturstand) und wie die Angaben geprüft wurden – ehrlich, ohne Übertreibung; welche Grenzen bleiben. -- Hinweis auf Querverweise „(→ Abschnitt N.M)“. - Bei Gesundheitsthemen: ein Satz, dass das Buch informiert und nicht berät, mit Hinweis auf Hilfsangebote (Deutschland: 116 117, Telefonseelsorge 0800 111 0 111 / 0800 111 0 222). Sachbuchprosa, keine Anrede des Lesers, keine Werbung. Antworte am Ende mit einer Zeile.