diff --git a/.gitignore b/.gitignore
index ac3378d..e4f9760 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,11 +30,8 @@ produktionsmix_ergebnis.xlsx
# Die Arbeitsgrundlagen des Umbaus - Rezension und Verbesserungsvorschlaege.
# Sie haben ihren Zweck erfuellt und gehoeren nicht in die Veroeffentlichung.
-#
-# AUSNAHME: NEUER_TITEL.md bleibt versioniert. Es ist die einzige Quelle des
-# Titeltexts (siehe titeltexte_04.py); ohne diese Datei bricht der Bau ab,
-# bevor er die erste Seite schreibt. Deshalb '/*' und Gegenausnahme statt
-# eines Verzeichnismusters - Git kann eine Datei nicht zurueckholen, deren
-# Verzeichnis als Ganzes ausgeschlossen ist.
-Kritik_und_Verbesserungsvorschlaege/*
-!Kritik_und_Verbesserungsvorschlaege/NEUER_TITEL.md
+# NEUER_TITEL.md lag frueher hier und musste per Gegenausnahme gerettet
+# werden; seit dem Umzug nach Operations_Research_mit_Python_Version_04/
+# steht die Titelquelle bei den uebrigen Quellen, und das ganze Verzeichnis
+# kann ausgeschlossen werden.
+Kritik_und_Verbesserungsvorschlaege/
diff --git a/CLAUDE.md b/CLAUDE.md
index 340cd1e..d251e89 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -24,6 +24,7 @@ Dieses Verzeichnis ist die Wurzel; alle Skripte leiten ihre Pfade daraus ab
```
Operations_Research_mit_Python_Version_04/ Quelle: 37 Kapiteldateien + Build-Skripte
+ + NEUER_TITEL.md (Titeltext)
bilder_04/ Quelle: Diagramme + erzeuge_*.py-Generatoren
web_04/ Quelle: site.css, site.js, icons.svg,
plotly.min.js, katex/ - die statischen
@@ -33,10 +34,6 @@ Operations_Research_mit_Python_Version_04.pdf generiert: PDF (xelatex)
OR_HTML_04/ generiert: Mehrseiten-Website
Operations_Research_mit_Python_Version_04_Programme/ generiert: Beispielprogramme
Notebooks_04/ generiert: ein .ipynb je Kapitel
-Kritik_und_Verbesserungsvorschlaege/ NEUER_TITEL.md - die EINE Quelle des
- Titeltexts (PDF-Titelseite + Startseite).
- Nur diese Datei ist versioniert; Rezension und
- Verbesserungsvorschläge stehen in .gitignore
pyproject.toml Quelle: Abhängigkeiten in Gruppen
Dockerfile, .dockerignore Quelle: Kurs-Image (Programme + JupyterLab)
LICENSE, LICENSE-TEXT.md MIT fuer Code, CC BY-SA 4.0 fuer den Text
@@ -120,9 +117,7 @@ bewacht jede Familie. Konkret:
existieren, und kein Verweis darf auf das Glossar selbst zeigen. Begriffe, die es nur im
Glossar gibt, stehen ausdrücklich in `NUR_IM_GLOSSAR` — sonst ließe sich ein solcher Fall
nicht von einem Tippfehler unterscheiden.
-* **Der Titeltext steht in `Kritik_und_Verbesserungsvorschlaege/NEUER_TITEL.md`** — die
- einzige versionierte Datei dieses Verzeichnisses, und zwar genau deshalb: Ohne sie bricht
- der Bau ab, bevor er die erste Seite schreibt. Der Titel steht dort und
+* **Der Titeltext steht in `Operations_Research_mit_Python_Version_04/NEUER_TITEL.md`** und
nirgends sonst. `titeltexte_04.py` liest ihn; die PDF-Titelseite
(`bilder_04/erzeuge_titelseite.py`) und der Hero-Block der Startseite
(`baue_landingpage()`) speisen sich daraus. Eine Titeländerung wird **einmal** dort
diff --git a/OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf b/OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf
index bc9f09e..e5a586d 100644
Binary files a/OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf and b/OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf differ
diff --git a/OR_HTML_04/bilder_04/titelseite.svg b/OR_HTML_04/bilder_04/titelseite.svg
index 48088c5..64b97a6 100644
--- a/OR_HTML_04/bilder_04/titelseite.svg
+++ b/OR_HTML_04/bilder_04/titelseite.svg
@@ -2603,46 +2603,37 @@ z
-
+
-
-
+
diff --git a/OR_HTML_04/gesamtdokument.html b/OR_HTML_04/gesamtdokument.html
index b92c2cd..43280e6 100644
--- a/OR_HTML_04/gesamtdokument.html
+++ b/OR_HTML_04/gesamtdokument.html
@@ -381,7 +381,7 @@
Personaleinsatz-, Schicht- und Vertretungspläne, Fahrtrouten, Logistik und Maschinen- und Netzwerkauslastung über Energieverteilung und Ressourcenplanung bis zur Portfoliooptimierung und besseren Entscheidungen an den Finanzmärkten – mit Python modellieren, optimieren und belegbar fundierte Entscheidungen treffen.
Personaleinsatz-, Schicht- und Vertretungspläne, Fahrtrouten, Logistik und Maschinen- und Netzwerkauslastung über Energieverteilung und Ressourcenplanung bis zur Portfoliooptimierung und besseren Entscheidungen an den Finanzmärkten – mit Python modellieren, optimieren und belegbar fundierte Entscheidungen treffen.
Autor / Herausgeber: Dieter Schlüter
<dieter(dot)schlueter(atsign)linix(dot)de>
-
Stand: 8. September 2026
+
Stand: 9. September 2026
Vorwort
Dieses Buch hat ein einziges Ziel: Sie sollen am Ende in der Lage sein, ein reales Entscheidungsproblem aus Ihrem eigenen Umfeld in ein mathematisches Modell zu übersetzen, es in Python zu lösen und das Ergebnis jemandem zu erklären, der kein Mathematiker ist.
diff --git a/Operations_Research_mit_Python_Version_04.md b/Operations_Research_mit_Python_Version_04.md
index 1d4a9d5..96dfaec 100644
--- a/Operations_Research_mit_Python_Version_04.md
+++ b/Operations_Research_mit_Python_Version_04.md
@@ -26,7 +26,7 @@ Autor / Herausgeber: Dieter Schlüter
-Stand: 8. September 2026
+Stand: 9. September 2026
---
diff --git a/Operations_Research_mit_Python_Version_04.pdf b/Operations_Research_mit_Python_Version_04.pdf
index bc9f09e..e5a586d 100644
Binary files a/Operations_Research_mit_Python_Version_04.pdf and b/Operations_Research_mit_Python_Version_04.pdf differ
diff --git a/Kritik_und_Verbesserungsvorschlaege/NEUER_TITEL.md b/Operations_Research_mit_Python_Version_04/NEUER_TITEL.md
similarity index 100%
rename from Kritik_und_Verbesserungsvorschlaege/NEUER_TITEL.md
rename to Operations_Research_mit_Python_Version_04/NEUER_TITEL.md
diff --git a/Operations_Research_mit_Python_Version_04/README.md b/Operations_Research_mit_Python_Version_04/README.md
index 290c026..fd6a00f 100644
--- a/Operations_Research_mit_Python_Version_04/README.md
+++ b/Operations_Research_mit_Python_Version_04/README.md
@@ -157,4 +157,4 @@ Details zu den Lernpfaden stehen in [`00_Vorwort_und_Lesehilfe.md`](00_Vorwort_u
---
-*Autor / Herausgeber: Dieter Schlüter · Stand: 8. September 2026*
+*Autor / Herausgeber: Dieter Schlüter · Stand: 9. September 2026*
diff --git a/Operations_Research_mit_Python_Version_04/build_version_04.py b/Operations_Research_mit_Python_Version_04/build_version_04.py
index 3c00e1e..34b9854 100644
--- a/Operations_Research_mit_Python_Version_04/build_version_04.py
+++ b/Operations_Research_mit_Python_Version_04/build_version_04.py
@@ -158,7 +158,12 @@ DATEIEN = [
# Zurzeit keine: Plan und Fortschritt liegen als PLAN.md/PROGRESS.md im
# Repo-Wurzelverzeichnis, nicht hier. README-Dateien faengt pruefe_dateien()
# ueber das Namenspraefix ab.
-KEINE_KAPITELDATEIEN: set[str] = set()
+# Quellen im Kapitelverzeichnis, die KEINE Kapiteldatei sind und deshalb nicht
+# in DATEIEN gehoeren. Ohne diesen Eintrag meldete pruefe_dateien() sie als
+# "nicht eingebundene .md-Datei".
+KEINE_KAPITELDATEIEN: set[str] = {
+ "NEUER_TITEL.md", # Quelle des Titeltexts, gelesen von titeltexte_04.py
+}
# Das Inhaltsverzeichnis wird unmittelbar vor dieser Ueberschrift eingefuegt -
# also direkt nach dem Titelblock, noch vor dem Vorwort.
diff --git a/Operations_Research_mit_Python_Version_04/titeltexte_04.py b/Operations_Research_mit_Python_Version_04/titeltexte_04.py
index 1177f74..f4cf35c 100644
--- a/Operations_Research_mit_Python_Version_04/titeltexte_04.py
+++ b/Operations_Research_mit_Python_Version_04/titeltexte_04.py
@@ -3,7 +3,7 @@
# titeltexte_04.py
#
# Liest den Titeltext des Buchs aus seiner EINEN Quelle:
-# Kritik_und_Verbesserungsvorschlaege/NEUER_TITEL.md
+# Operations_Research_mit_Python_Version_04/NEUER_TITEL.md
#
# Warum es dieses Modul gibt: Der Titeltext stand viermal im Repository - in
# NEUER_TITEL.md, in den Konstanten von bilder_04/erzeuge_titelseite.py (PDF),
@@ -23,8 +23,7 @@ import re
HIER = os.path.dirname(os.path.abspath(__file__))
BASIS = os.path.dirname(HIER)
-TITEL_QUELLE = os.path.join(BASIS, "Kritik_und_Verbesserungsvorschlaege",
- "NEUER_TITEL.md")
+TITEL_QUELLE = os.path.join(HIER, "NEUER_TITEL.md")
def _saeubern(text: str) -> str:
diff --git a/PROGRESS.md b/PROGRESS.md
index 6812d31..f181af2 100644
--- a/PROGRESS.md
+++ b/PROGRESS.md
@@ -2453,6 +2453,40 @@ angebotenen Treffer zu Sutton/Barto (eine Rezension der ersten Auflage von 1998)
Übernahme des besten Treffers hätte fünf falsche DOIs ins Buch geschrieben — sichtbar wurde
es erst beim Abgleich von Typ, Verlag und Jahr.
+### ✅ `NEUER_TITEL.md` zu den Quellen, Kritik-Verzeichnis ganz heraus
+
+Rezension und Verbesserungsvorschläge haben ihren Zweck erfüllt und gehören nicht in die
+Veröffentlichung. Der erste Anlauf schloss das Verzeichnis mit einer Gegenausnahme aus, weil
+`NEUER_TITEL.md` darin lag und der Bau ohne diese Datei abbricht:
+
+```
+Kritik_und_Verbesserungsvorschlaege/*
+!Kritik_und_Verbesserungsvorschlaege/NEUER_TITEL.md
+```
+
+Das funktionierte, war aber die schlechtere Lösung — eine Bauquelle blieb in einem
+Verzeichnis liegen, das laut eigener Beschreibung aus dem Repository verschwinden soll. Jetzt
+steht sie als `Operations_Research_mit_Python_Version_04/NEUER_TITEL.md` bei den übrigen
+Quellen, und `.gitignore` braucht nur noch eine Zeile.
+
+**Eine Stelle im Build musste mit.** `pruefe_dateien()` meldet jede `.md` im Quellverzeichnis,
+die weder in `DATEIEN` steht noch mit `README` beginnt, als „nicht eingebundene Datei". Die
+bis dahin leere Menge `KEINE_KAPITELDATEIEN` führt jetzt `NEUER_TITEL.md` — eine Quelle, aber
+keine Kapiteldatei.
+
+**Der Nachweis, dass der Umzug nichts verändert hat**, brauchte einen Umweg: Die Prüfsumme von
+`titelseite.svg` änderte sich — aber nur, weil das Fußband das Tagesdatum trägt und
+inzwischen der 9. September war. Mit dem Datum des Vortags erzeugt, ist die Datei
+**byte-identisch** zum committeten Stand (`1b076697…`). Dass der Text unverändert ist, zeigt
+schon der Strukturvergleich: 721 Glyphenverweise und 81 Pfaddefinitionen in beiden Fassungen.
+
+Gegengeprüft mit einem simulierten Klon: Das Kritik-Verzeichnis fehlt dort vollständig,
+`NEUER_TITEL.md` liegt im Quellverzeichnis, und `--check` liefert dieselben Zahlen wie lokal.
+
+**Was das *nicht* leistet:** Die fünf Dateien verschwinden aus künftigen Klons, nicht aus der
+Historie. Wer einen alten Commit auscheckt, bekommt sie weiterhin. Sie wirklich zu tilgen,
+verlangte `git filter-repo` und einen erzwungenen Push — dafür ist der Anlass zu gering.
+
---
## 8. Commit-Historie des V04-Strangs
diff --git a/README.md b/README.md
index 0663912..1b0f610 100644
--- a/README.md
+++ b/README.md
@@ -113,10 +113,9 @@ pip install -r Operations_Research_mit_Python_Version_04_Programme/requirements.
| Pfad | Rolle |
| --- | --- |
-| `Operations_Research_mit_Python_Version_04/` | **Quelle**: 37 Kapiteldateien (inkl. 5 Teil-Synthesen) + Build-Skripte |
+| `Operations_Research_mit_Python_Version_04/` | **Quelle**: 37 Kapiteldateien (inkl. 5 Teil-Synthesen), Build-Skripte und `NEUER_TITEL.md` — der Titeltext, aus dem PDF-Titelseite und Startseite entstehen |
| `bilder_04/` | **Quelle**: 33 Diagramme (SVG) + 16 `erzeuge_*.py`-Generatoren |
| `web_04/` | **Quelle**: `site.css`, `site.js`, `icons.svg`, `plotly.min.js`, `katex/` — die statischen Bestandteile der Website |
-| `Kritik_und_Verbesserungsvorschlaege/NEUER_TITEL.md` | **Quelle**: der Titeltext — daraus entstehen PDF-Titelseite und Startseite |
| `pyproject.toml`, `Dockerfile`, `.dockerignore` | **Quelle**: Abhängigkeitsgruppen und Kurs-Image |
| `pandoc-defaults-*.yaml`, `pandoc/` | **Quelle**: Konfiguration des PDF-Baus |
| `PLAN.md` / `PROGRESS.md` | **Quelle**: Ziel des Umbaus und erreichter Stand |
diff --git a/bilder_04/erzeuge_titelseite.py b/bilder_04/erzeuge_titelseite.py
index 0293f08..4aec669 100644
--- a/bilder_04/erzeuge_titelseite.py
+++ b/bilder_04/erzeuge_titelseite.py
@@ -198,7 +198,7 @@ def _setze_block(ax, zeilen, x, y0, groesse, durchschuss, **stil) -> float:
# --- Die Texte der Titelseite ----------------------------------------------
# Nur diese Zeichenketten aendern, wenn das Buch anders heissen soll. Der Text
-# stammt aus Kritik_und_Verbesserungsvorschlaege/NEUER_TITEL.md; die beiden
+# stammt aus Operations_Research_mit_Python_Version_04/NEUER_TITEL.md; die beiden
# Absaetze KOMPENDIUM und ANWENDUNGEN
# stehen gemeinsam in der grossen Solver-Karte.
#
diff --git a/bilder_04/titelseite.svg b/bilder_04/titelseite.svg
index 48088c5..64b97a6 100644
--- a/bilder_04/titelseite.svg
+++ b/bilder_04/titelseite.svg
@@ -2603,46 +2603,37 @@ z
-
+
-
-
+