From 1e8a05761553ce58eecd3f24677b929bd9bdf6ea Mon Sep 17 00:00:00 2001 From: team3 Date: Mon, 12 Oct 2026 17:53:12 +0200 Subject: [PATCH] =?UTF-8?q?Stufe=20=E2=80=9EStoff=20ausw=C3=A4hlen?= =?UTF-8?q?=E2=80=9C=20vor=20der=20Gliederung:=20Auswahl=20und=20Tiefe=20j?= =?UTF-8?q?e=20Thema?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neuer Agent entscheidet aus Quellen und Leitfrage, welche Themen ins Buch kommen und wie tief (herleiten, erklären, nennen, weggelassen), mit Begründung in buch/STOFF.md. Die Gliederung baut nur daraus, das Gewicht folgt der Tiefe. Autoren und Prüfer halten sich an STOFF.md. Nachgetragene Stufen gelten als fertig, wenn eine spätere schon fertig ist. Co-Authored-By: Claude Fable 5.1 --- API.md | 6 ++++-- README.md | 2 +- backend/config.py | 1 + backend/pipeline.py | 21 ++++++++++++++++++++- backend/state.py | 10 ++++++---- prompts/gliederung.md | 12 +++++++----- prompts/kapitel.md | 6 ++++-- prompts/pruefung.md | 4 ++-- prompts/stoff.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 88 insertions(+), 17 deletions(-) create mode 100644 prompts/stoff.md diff --git a/API.md b/API.md index a832cb9..04b14a4 100644 --- a/API.md +++ b/API.md @@ -28,7 +28,9 @@ Ohne `v2` gilt die neueste Version. ## Stufen -`recherche → gliederung → schreiben → pruefung → lektorat → konsistenz → montage`. Das Lektorat glättet jedes geprüfte Kapitel +`recherche → stoff → gliederung → schreiben → pruefung → lektorat → konsistenz → montage`. Die Stoffauswahl (`prompts/stoff.md`) +entscheidet vor der Gliederung, welche Themen ins Buch kommen und wie tief (`herleiten`, `erklären`, `nennen`, weggelassen), mit +Begründung in `buch/STOFF.md`; die Gliederung baut nur daraus, Autoren und Prüfer halten sich daran. Das Lektorat glättet jedes geprüfte Kapitel Abschnitt für Abschnitt sprachlich (ohne Werkzeuge, `prompts/lektorat.md`); ein Abschnitt wird nur übernommen, wenn Bezeichner, Zahlen, Überschriften, Codeblöcke und Diagramme erhalten sind und der Umfang nicht über 20 % wächst. Marker: `berichte/lektorat-NN.md`. Alte Zustände ohne diese Stufe bekommen sie beim Laden nachgetragen. @@ -99,7 +101,7 @@ storage// deutung.json vom Recherche-Agenten position.json Leseposition quellen/ QUELLEN.md + geklonte/geladene Quellen - buch/ STIL.md, GLIEDERUNG.md, 00-vorwort.md, NN-*.md, README.md, buch.md, buch.pdf + buch/ STIL.md, STOFF.md, GLIEDERUNG.md, 00-vorwort.md, NN-*.md, README.md, buch.md, buch.pdf berichte/ .md (Abschlussberichte) arbeit/ Arbeitsdateien der Agenten log.jsonl Ereignisse diff --git a/README.md b/README.md index 5b9fc69..5c4ce91 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # buchwerk Aus einem Thema (plus optionaler Spezialisierung, die es eingrenzt, und optionalen Hinweisen) entsteht ein deutschsprachiges Sachbuch. Ein Python-Backend -steuert Agenten des Claude Agent SDK (Opus 5.5): Recherche und Deutung, Gliederung, Kapitel parallel +steuert Agenten des Claude Agent SDK (Opus 5.5): Recherche und Deutung, Stoffauswahl (was kommt rein, wie tief), Gliederung, Kapitel parallel schreiben, jedes Kapitel durch einen unabhängigen Agenten prüfen, Querverweise abgleichen, Vorwort, Montage (Markdown, README, PDF). Das Buch wird im Browser als Leseansicht gezeigt. diff --git a/backend/config.py b/backend/config.py index f2208da..73648b9 100644 --- a/backend/config.py +++ b/backend/config.py @@ -16,6 +16,7 @@ LESE_WPM = 120 STUFEN = [ ("recherche", "Thema deuten und Quellen beschaffen"), + ("stoff", "Stoff auswählen"), ("gliederung", "Gliederung"), ("schreiben", "Kapitel schreiben"), ("pruefung", "Kapitel prüfen"), diff --git a/backend/pipeline.py b/backend/pipeline.py index d6c0eae..33b46c5 100644 --- a/backend/pipeline.py +++ b/backend/pipeline.py @@ -136,6 +136,25 @@ async def st_recherche(name: str) -> None: s["fertig"] = 1 +async def st_stoff(name: str) -> None: + """Auswahl vor der Struktur: welche Themen ins Buch kommen und wie tief (buch/STOFF.md); die Gliederung baut nur daraus.""" + thema, hinweise, spez = _thema(name) + s = state.stufe(name, "stoff") + s.update(gesamt=1, fertig=0) + v = state.verzeichnis(name) + if not state.bericht_lesen(name, "stoff") or not (v / "buch" / "STOFF.md").exists(): + (v / "berichte" / "stoff.md").unlink(missing_ok=True) + p = prompts.laden("stoff", thema=thema, hinweise_block=prompts.hinweise_block(hinweise), + spezialisierung_block=prompts.spezialisierung_block(spez)) + r = await agenten.laufen(name, "stoff", "stoff", "Stoff auswählen", p) + if r["status"] != "fertig": + raise Abbruch("Stoffauswahl gescheitert: " + r["bericht"][:200]) + if not (v / "buch" / "STOFF.md").exists(): + (v / "berichte" / "stoff.md").unlink(missing_ok=True) + raise Abbruch("Stoffauswahl unvollständig: buch/STOFF.md fehlt") + s["fertig"] = 1 + + async def st_gliederung(name: str) -> None: thema, hinweise, spez = _thema(name) s = state.stufe(name, "gliederung") @@ -242,5 +261,5 @@ async def st_montage(name: str) -> None: s["fertig"] = 1 -STUFEN_FN = {"recherche": st_recherche, "gliederung": st_gliederung, "schreiben": st_schreiben, +STUFEN_FN = {"recherche": st_recherche, "stoff": st_stoff, "gliederung": st_gliederung, "schreiben": st_schreiben, "pruefung": st_pruefung, "lektorat": st_lektorat, "konsistenz": st_konsistenz, "montage": st_montage} diff --git a/backend/state.py b/backend/state.py index ad011c8..f71c4bf 100644 --- a/backend/state.py +++ b/backend/state.py @@ -190,13 +190,15 @@ def zustand(name: str) -> dict: for a in st["agenten"]: if a["status"] == "laeuft": a["status"] = "abgebrochen" - # Später hinzugekommene Stufen (z. B. Lektorat) in alte Zustände einfügen, in der Reihenfolge der Konfiguration + # Später hinzugekommene Stufen (z. B. Lektorat, Stoff) in alte Zustände einfügen, in der Reihenfolge der Konfiguration; + # eine nachgetragene Stufe gilt als fertig, wenn eine spätere Stufe schon fertig ist (der Lauf ist darüber hinaus). vorhanden = {x["id"] for x in st["stufen"]} if vorhanden != {sid for sid, _ in config.STUFEN}: alt = {x["id"]: x for x in st["stufen"]} - fertig = st.get("status") == "fertig" - st["stufen"] = [alt.get(sid) or {"id": sid, "titel": t, "status": "fertig" if fertig else "offen", "fertig": 0, "gesamt": 0, - "kosten_usd": 0.0, "tokens": 0, "gestartet": "", "beendet": ""} for sid, t in config.STUFEN] + reihe = [sid for sid, _ in config.STUFEN] + fertig_bis = max((reihe.index(x["id"]) for x in st["stufen"] if x["status"] == "fertig" and x["id"] in reihe), default=-1) + st["stufen"] = [alt.get(sid) or {"id": sid, "titel": t, "status": "fertig" if i <= fertig_bis else "offen", "fertig": 0, "gesamt": 0, + "kosten_usd": 0.0, "tokens": 0, "gestartet": "", "beendet": ""} for i, (sid, t) in enumerate(config.STUFEN)] _cache[name] = st return _cache[name] diff --git a/prompts/gliederung.md b/prompts/gliederung.md index c4ddd2c..a37dcc8 100644 --- a/prompts/gliederung.md +++ b/prompts/gliederung.md @@ -1,11 +1,13 @@ Du entwirfst die Gliederung eines deutschsprachigen Sachbuchs zum Thema „{{thema}}“. {{hinweise_block}}{{spezialisierung_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. +Lies zuerst vollständig: `buch/STOFF.md`, `buch/STIL.md`, `quellen/QUELLEN.md` und `deutung.json`. + +Die Gliederung entsteht aus `buch/STOFF.md`: nur die dort genommenen Themen, in der dort festgelegten Tiefe. Die Quellen unter `quellen/` nutzt du, um Themen richtig zuzuschneiden und zu ordnen, nicht um neue hinzuzufügen. Fehlt in STOFF.md etwas, ohne das ein Kapitel nicht verständlich wäre, nimm es als `(kurz)` auf und nenne es im Bericht. 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 – aber Grundlagen des Fachgebiets bleiben drin, notfalls als `(kurz)`-Abschnitt; weggelassen wird nur, was außerhalb der Deutung liegt. Bei einer Spezialisierung bekommt nur Stoff ein Kapitel oder einen Abschnitt, der dafür gebraucht wird; Grundlagen nur, soweit sie dafür nötig sind. 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 ist ein eigenständiges Thema mit eigener Leitfrage. Verwandte Themen zusammenlegen, wenn sie gemeinsam unter 4 Abschnitte passen. Keine Kapitel der Vollständigkeit halber; was STOFF.md weglässt, bekommt weder Kapitel noch Abschnitt. Ab 8 Kapiteln in Teile gruppieren. +- Ein Abschnitt je genommenem Thema der Tiefe `erklären` oder `herleiten`; eng zusammengehörige Themen dürfen einen Abschnitt teilen. Themen der Tiefe `nennen` bekommen keinen Abschnitt, sie gehören als Absatz in den Abschnitt, der sie braucht. Mindestens 2, höchstens 7 Abschnitte je Kapitel, sonst teilen oder zusammenlegen. Reihenfolge nach dem, was man zuerst wissen muss. +- Das Gewicht eines Abschnitts folgt der Tiefe aus STOFF.md: `erklären` → `(kurz)` ≈ 800 Wörter; `herleiten` → mittel ≈ 1.300 Wörter (ohne Angabe) oder `(lang)` ≈ 2.000 Wörter, wenn Herleitung und Beispiel beide nötig sind. - 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 (jedes Thema wird nur in seinem Kapitel erklärt). - Titel deutsch, konkret, keine Marketingsprache. @@ -29,4 +31,4 @@ Schreibe `buch/GLIEDERUNG.md` GENAU in diesem Format (Parser liest es): 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 – 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, Summe der Richtwerte in Wörtern, und was bewusst weggelassen oder zusammengelegt wurde. +Antworte am Ende kurz (max. 6 Zeilen): Anzahl Teile/Kapitel/Abschnitte, Summe der Richtwerte in Wörtern, welche Themen aus STOFF.md zusammengelegt wurden und was du über STOFF.md hinaus ergänzt hast. diff --git a/prompts/kapitel.md b/prompts/kapitel.md index 0baafac..b99d6e7 100644 --- a/prompts/kapitel.md +++ b/prompts/kapitel.md @@ -1,6 +1,8 @@ Du schreibst ein Kapitel für ein deutschsprachiges Sachbuch zum Thema „{{thema}}“. {{spezialisierung_block}} -Lies zuerst vollständig: `buch/STIL.md`, `buch/GLIEDERUNG.md`, `quellen/QUELLEN.md`. +Lies zuerst vollständig: `buch/STIL.md`, `buch/GLIEDERUNG.md`, `buch/STOFF.md`, `quellen/QUELLEN.md`. + +`buch/STOFF.md` legt fest, welche Themen das Buch behandelt und wie tief. Was dort weggelassen ist, kommt nicht vor, auch nicht als Beispiel oder Exkurs. Themen der Tiefe `nennen` bekommen höchstens einen Absatz, dort, wo dein Kapitel sie braucht. 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. @@ -8,7 +10,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). Am Ende des Kapitels der Abschnitt `## N.M Merken` nach STIL.md: Bullet-Liste „Begriff: Kern“, fünf bis zehn Zeilen. 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 – im Gerüst unter `arbeit/`, ins Buch kommt nur der Kern. 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, keine Verweisklammern, keine Wiederholung von Themen anderer Kapitel, falls oben eine Spezialisierung steht: nichts außerhalb davon, auch nicht als Beispiel oder Exkurs; 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, nichts, was STOFF.md weglässt oder was außerhalb der Spezialisierung liegt, auch nicht als Beispiel oder Exkurs; 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/pruefung.md b/prompts/pruefung.md index 7b86ba2..e5b1fab 100644 --- a/prompts/pruefung.md +++ b/prompts/pruefung.md @@ -1,6 +1,6 @@ Du bist unabhängiger Fachlektor und Faktenprüfer für ein deutschsprachiges Sachbuch zum Thema „{{thema}}“. Du hast das Kapitel nicht geschrieben und traust ihm nicht. {{spezialisierung_block}} -Lies zuerst: `buch/STIL.md`, `buch/GLIEDERUNG.md`, `quellen/QUELLEN.md`. +Lies zuerst: `buch/STIL.md`, `buch/GLIEDERUNG.md`, `buch/STOFF.md`, `quellen/QUELLEN.md`. Prüfe vollständig: `buch/{{datei}}` (Kapitel {{n}} – {{kapitel_titel}}). @@ -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, dazu als letzter Abschnitt `## N.M Merken` (fortlaufend nummeriert), als Bullet-Liste „Begriff: Kern“ mit fünf bis zehn Zeilen aus ganzen, allein verständlichen Sätzen, ohne Beispiele, Herleitungen oder Absätze, der nichts enthält, was das Kapitel nicht erklärt (Stichwortreihen zu Sätzen machen, über 120 Wörter kürzen); 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); falls oben eine Spezialisierung steht: Stoff außerhalb davon streichen, auch Beispiele und Exkurse; 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 streichen. 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, dazu als letzter Abschnitt `## N.M Merken` (fortlaufend nummeriert), als Bullet-Liste „Begriff: Kern“ mit fünf bis zehn Zeilen aus ganzen, allein verständlichen Sätzen, ohne Beispiele, Herleitungen oder Absätze, der nichts enthält, was das Kapitel nicht erklärt (Stichwortreihen zu Sätzen machen, über 120 Wörter kürzen); 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); Stoff, den `buch/STOFF.md` weglässt oder der außerhalb der Spezialisierung liegt, streichen, auch Beispiele und Exkurse; Themen der Tiefe `nennen` auf einen Absatz kürzen; 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 streichen. 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/stoff.md b/prompts/stoff.md new file mode 100644 index 0000000..16a6339 --- /dev/null +++ b/prompts/stoff.md @@ -0,0 +1,43 @@ +Du wählst den Stoff für ein deutschsprachiges Sachbuch zum Thema „{{thema}}“ aus. +{{hinweise_block}}{{spezialisierung_block}} +Lies zuerst vollständig: `deutung.json`, `buch/STIL.md`, `quellen/QUELLEN.md`. Verschaffe dir dann anhand der Quellen unter `quellen/` einen Überblick, welche Themen es gibt (Inhaltsverzeichnisse der Doku, Klassenlisten, Titel der Studien, Artikel). + +Deine Aufgabe ist die Auswahl, nicht die Struktur: Du entscheidest, welche Themen ins Buch kommen und wie tief. Die Gliederung entsteht später nur aus deiner Auswahl. Der Stoff kommt aus den Quellen, die Auswahl aus der Leitfrage. + +Maßstab ist der Leser aus STIL.md: ohne Vorkenntnisse, liest das Buch von vorn nach hinten, will die Sache verstehen, nicht anwenden und nicht nachschlagen. Für solche Leser gilt: Weniger, zusammenhängend erklärt, wird besser verstanden als mehr. Interessante, aber unnötige Details senken das Verständnis. + +Vorgehen: +1. **Leitfrage** formulieren: Was soll der Leser am Ende verstanden haben? Ein bis zwei Sätze. +2. **Kandidaten** sammeln: alle Themen, die die Quellen zum Thema hergeben. Diese Liste ist nicht das Buch. +3. **Je Kandidat entscheiden** anhand einer Frage: Kann der Leser die Leitfrage ohne dieses Thema beantworten? + - `herleiten` – Kern: ohne das Thema ist die Leitfrage nicht zu beantworten. Bekommt Raum für Herleitung und Beispiel. + - `erklären` – Voraussetzung oder Zusammenhang, den der Kern braucht. Was es ist und warum es so ist, ohne Detail. + - `nennen` – der Leser soll den Begriff einmal gehört und eingeordnet haben. Ein Absatz an passender Stelle, kein eigener Abschnitt. + - `weglassen` – alles andere. Auch wenn es in den Quellen steht, auch wenn es interessant ist. +4. **Typische Streichkandidaten** gesondert prüfen: Geschichte und Entstehung; Vergleiche mit anderen Produkten, Werkzeugen oder Spielen, sofern sie keine Entscheidung im Hauptthema erklären; Vollständigkeitslisten (alle Varianten, alle Optionen, alle Klassen); Betrieb, Geschäft und Organisation rund um die Sache; Ratschläge zur Anwendung; Forschungsdebatten ohne Folge für das Verständnis. +5. Hinweise und Spezialisierung oben entscheiden im Zweifel. Was außerhalb der Spezialisierung liegt, wird weggelassen, auch wenn es zum Thema gehört. + +Schreibe `buch/STOFF.md` GENAU in diesem Format (die Gliederung liest es): + +``` +# Stoffauswahl – + +## Leitfrage + + +## Genommen +| Thema | Tiefe | Warum der Leser es braucht | +|---|---|---| +| | herleiten | | +| | erklären | | +| | nennen | | + +## Weggelassen +| Thema | Warum nicht | +|---|---| +| | | +``` + +Ein Thema ist ein benennbarer Gegenstand („Mana als wachsende Ressource“, „Signale als lose Kopplung“), kein Kapiteltitel und kein Stichwort. Reihenfolge in „Genommen“: so, wie der Leser die Themen braucht, Voraussetzungen zuerst. Keine weiteren Abschnitte in der Datei. + +Antworte am Ende kurz (max. 8 Zeilen): Leitfrage; Anzahl je Tiefe; die wichtigsten Streichungen und warum.