Umfang aus der Gliederung statt aus Zahlenvorgaben

Der Gliederungs-Agent vergibt je Abschnitt ein Gewicht (kurz/mittel/lang,
800/1300/2000 Wörter); Kapitel typisch 4 Abschnitte (2–7), Summe höchstens
8000 Wörter. Autor und Prüfer richten sich nach dem Richtwert, keine
Untergrenze mehr. Parser liest das Gewicht und prüft die Grenzen.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
team3
2026-10-05 15:09:14 +02:00
parent 705ff5d876
commit 140d6e4864
5 changed files with 26 additions and 16 deletions

View File

@@ -4,10 +4,13 @@ import re
KAPITEL_RE = re.compile(r"^\*\*Kapitel (\d+) – (.+?)\*\* \(`([0-9]{2}-[a-z0-9-]+\.md)`\)\s*$")
TEIL_RE = re.compile(r"^## (Teil .+?)\s*$")
TITEL_RE = re.compile(r"^# Gliederung – (.+?)(?:\. (.+))?$")
# Richtwerte je Abschnitt (Wörter); ein Kapitel soll eine Lesesitzung bleiben.
RICHTWERT = {"kurz": 800, "mittel": 1300, "lang": 2000}
KAPITEL_MAX = 8000
def parsen(text: str) -> dict:
"""→ {"titel", "untertitel", "kapitel": [{"n","titel","datei","teil","abschnitte":[{"nr","titel"}]}], "fehler": [...]}"""
"""→ {"titel", "untertitel", "kapitel": [{"n","titel","datei","teil","abschnitte":[{"nr","titel","gewicht","richtwert"}]}], "fehler": [...]}"""
aus = {"titel": "", "untertitel": "", "kapitel": [], "fehler": []}
teil = ""
zeilen = text.splitlines()
@@ -29,9 +32,11 @@ def parsen(text: str) -> dict:
j += 1
if j < len(zeilen):
for teilstueck in re.split(r"\s+·\s+", zeilen[j].strip()):
am = re.match(r"^(\d+)\.(\d+)\s+(.+)$", teilstueck.strip())
am = re.match(r"^(\d+)\.(\d+)\s+(.+?)(?:\s*\((kurz|mittel|lang)\))?$", teilstueck.strip())
if am and int(am.group(1)) == n:
k["abschnitte"].append({"nr": f"{am.group(1)}.{am.group(2)}", "titel": am.group(3).strip()})
gewicht = am.group(4) or "mittel"
k["abschnitte"].append({"nr": f"{am.group(1)}.{am.group(2)}", "titel": am.group(3).strip(),
"gewicht": gewicht, "richtwert": RICHTWERT[gewicht]})
else:
aus["fehler"].append(f"Kapitel {n}: Abschnittszeile unlesbar: „{teilstueck.strip()[:60]}“")
i = j
@@ -42,8 +47,11 @@ def parsen(text: str) -> dict:
aus["fehler"].append(f"Kapitelzeile nicht im Format: „{z[:80]}“")
i += 1
for k in aus["kapitel"]:
if not 3 <= len(k["abschnitte"]) <= 6:
aus["fehler"].append(f"Kapitel {k['n']} hat {len(k['abschnitte'])} Abschnitte (3–6 verlangt)")
if not 2 <= len(k["abschnitte"]) <= 7:
aus["fehler"].append(f"Kapitel {k['n']} hat {len(k['abschnitte'])} Abschnitte (2–7 verlangt; mehr Stoff → Kapitel teilen)")
summe = sum(a["richtwert"] for a in k["abschnitte"])
if summe > KAPITEL_MAX:
aus["fehler"].append(f"Kapitel {k['n']}: Richtwerte summieren sich auf {summe} Wörter (höchstens {KAPITEL_MAX}) – Kapitel teilen oder Gewichte senken")
nummern = [k["n"] for k in aus["kapitel"]]
if nummern != list(range(1, len(nummern) + 1)):
aus["fehler"].append(f"Kapitelnummern nicht fortlaufend: {nummern}")

View File

@@ -2,9 +2,11 @@ Du entwirfst die Gliederung eines deutschsprachigen Sachbuchs zum Thema „{{the
{{hinweise_block}}
Lies zuerst vollständig: `buch/STIL.md`, `quellen/QUELLEN.md` und `deutung.json`. Verschaffe dir dann anhand der Quellen unter `quellen/` (Inhaltsverzeichnisse der Doku, Klassenlisten, Titel der Studien) einen Überblick, was das Thema umfasst – die Gliederung muss aus dem Stoff kommen, nicht aus dem Gedächtnis.
Anforderungen:
- Breite Übersicht über alles Wichtige; keine feste Kapitelzahl, typisch 10–25 Kapitel, ab 8 Kapiteln in Teile gruppiert.
- Je Kapitel 3–6 Abschnitte. Reihenfolge nach dem, was man zuerst wissen muss.
Anforderungen – der Stoff bestimmt den Umfang, nicht eine Zielzahl:
- Ein Kapitel ist ein eigenständiges Thema mit eigener Leitfrage. Verwandte Themen zusammenlegen, wenn sie gemeinsam unter 4 Abschnitte passen. Keine Kapitel der Vollständigkeit halber. Ab 8 Kapiteln in Teile gruppieren.
- 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).
- Titel deutsch, konkret, keine Marketingsprache.
@@ -16,15 +18,15 @@ Schreibe `buch/GLIEDERUNG.md` GENAU in diesem Format (Parser liest es):
## Teil I – <Name des Teils>
**Kapitel 1 – <Titel>** (`01-<slug>.md`)
1.1 <Titel> · 1.2 <Titel> · 1.3 <Titel>
1.1 <Titel> (kurz) · 1.2 <Titel> · 1.3 <Titel> (lang)
**Kapitel 2 – <Titel>** (`02-<slug>.md`)
2.1 <Titel> · 2.2 <Titel> · 2.3 <Titel> · 2.4 <Titel>
2.1 <Titel> · 2.2 <Titel> (lang) · 2.3 <Titel> · 2.4 <Titel> (kurz)
## Teil II – <Name>
…
```
Regeln für das Format: Dateiname zweistellig nummeriert, slug nur Kleinbuchstaben, Ziffern und Bindestriche (ae/oe/ue/ss statt Umlauten); Abschnitte in einer Zeile, getrennt durch „ · “; Nummerierung fortlaufend; Teile mit `## Teil <römisch> – Name`; bei weniger als 8 Kapiteln keine Teile-Zeilen. Keine weiteren Zeilen außer Leerzeilen.
Regeln für das Format: Dateiname zweistellig nummeriert, slug nur Kleinbuchstaben, Ziffern und Bindestriche (ae/oe/ue/ss statt Umlauten); Abschnitte in einer Zeile, getrennt durch „ · “; das Gewicht steht als `(kurz)` oder `(lang)` am Ende des Abschnittstitels, mittel bleibt ohne Angabe; Nummerierung fortlaufend; Teile mit `## Teil <römisch> – Name`; bei weniger als 8 Kapiteln keine Teile-Zeilen. Keine weiteren Zeilen außer Leerzeilen.
Antworte am Ende kurz (max. 6 Zeilen): Anzahl Teile/Kapitel/Abschnitte und was bewusst weggelassen wurde.
Antworte am Ende kurz (max. 6 Zeilen): Anzahl Teile/Kapitel/Abschnitte, Summe der Richtwerte in Wörtern, und was bewusst weggelassen oder zusammengelegt wurde.

View File

@@ -2,7 +2,7 @@ Du schreibst ein Kapitel für ein deutschsprachiges Sachbuch zum Thema „{{them
Lies zuerst vollständig: `buch/STIL.md`, `buch/GLIEDERUNG.md`, `quellen/QUELLEN.md`.
Aufgabe: **Kapitel {{n}} – {{kapitel_titel}}**, Datei `buch/{{datei}}`, mit genau den Abschnitten aus der Gliederung.
Aufgabe: **Kapitel {{n}} – {{kapitel_titel}}**, Datei `buch/{{datei}}`, mit genau den Abschnitten aus der Gliederung. Das Gewicht hinter dem Abschnittstitel – `(kurz)` ≈ 800 Wörter, ohne Angabe ≈ 1.300, `(lang)` ≈ 2.000 – ist der Richtwert für die Länge; es gehört nicht in die Überschrift.
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.
@@ -12,4 +12,4 @@ Arbeite in diesem Loop:
Arbeitsdateien (Testskripte, Notizen) nur unter `arbeit/kapitel-{{n}}/` anlegen, nicht in `buch/` oder `quellen/`. Keine persönlichen Daten an externe Dienste senden.
Antworte am Ende mit einem kurzen Bericht (max. 10 Zeilen, Markdown): Wortzahl; was du per Quelle abgesichert oder korrigiert hast; eine Liste der Aussagen, die du NICHT belegen konntest (diese Liste bekommt der unabhängige Prüfer).
Antworte am Ende mit einem kurzen Bericht (max. 10 Zeilen, Markdown): Wortzahl je Abschnitt neben dem Richtwert, Abweichungen über 20 % begründet; was du per Quelle abgesichert oder korrigiert hast; eine Liste der Aussagen, die du NICHT belegen konntest (diese Liste bekommt der unabhängige Prüfer).

View File

@@ -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“).
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.
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. 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.

View File

@@ -21,7 +21,7 @@ Fließtext, ggf. mit ### Unterabschnitten.
## N.2 …
```
Überschriften exakt wie in GLIEDERUNG.md (Nummerierung beibehalten). Umfang je Abschnitt ca. 1.000–2.000 Wörter, je Kapitel ca. 5.000–10.000 Wörter. Lieber substanziell als aufgebläht.
Überschriften exakt wie in GLIEDERUNG.md (Nummerierung beibehalten, ohne das Gewicht `(kurz)`/`(lang)`). Der Richtwert je Abschnitt steht in der Gliederung: `(kurz)` ≈ 800 Wörter, ohne Angabe ≈ 1.300, `(lang)` ≈ 2.000; ±20 % sind in Ordnung. Nicht auffüllen: Ist der Stoff erschöpft, ist der Abschnitt fertig. Abweichungen über 20 % im Bericht begründen.
## Korrektheit
- Jede Tatsachenangabe (Name, Jahr, Zahl, Bezeichner, Signatur, Versionsangabe, Studienergebnis) muss gegen die im Abschnitt „Quellen und Prüfung“ genannten Quellen geprüft sein. Nichts aus dem Gedächtnis übernehmen, ohne es zu prüfen; was sich nicht belegen lässt, vorsichtiger formulieren oder weglassen.