diff --git a/.checkpoint-pending.txt b/.checkpoint-pending.txt
index 1154b34..b4ea686 100644
--- a/.checkpoint-pending.txt
+++ b/.checkpoint-pending.txt
@@ -1,2 +1,2 @@
-S09
-Teilgebiet 01 Iteration C Foto-Einbindung umgesetzt. Header als 2-Spalten-Grid-Table in cv.md mit Strich-Verhaeltnis 112:60 (= 65,1%/34,9% Spaltenbreite, ca. 10,15/5,43 cm bei 16 cm Textbreite). Foto rechts oben, 4,06x4,06 cm, beide Dimensionen explizit im Markdown um Pandocs Default-Wrapper keepaspectratio mit height=textheight zu vermeiden, der die Layout-Box auf 24cm Hoehe streckt und die Tabellen-Zeile zerschiesst. DOCX-Header-Spacing per neuer 4. Modifikation in build/post-process-docx.py (process_header_table): findet erste Tabelle, setzt Heading1-spacing-before=0 und Foto-Paragraph spacing-before=100 (=5pt) plus jc=right. PDF-Layout via neuem Pandoc-Lua-Filter build/header-image-wrap.lua: wrappt das Header-Foto im LaTeX-Output mit hfill+raisebox(-height)[0pt][0pt]{...}, hfill schiebt rechtsbuendig in raggedright-p-Spalte, raisebox setzt Bild-Top auf Cell-Top und reportet null Hoehe an die Tabellen-Zeile. Filter prueft FORMAT=latex und Image-Pfad enthaelt foto, DOCX bleibt unberuehrt. Lua-Filter-Erste-Version (Image durch RawInline ersetzt mit gebackenem Pfad) hat Pandocs Image-Resource-Resolution gebrochen und LuaLaTeX scheiterte mit File foto.jpg not found, Fix: Filter gibt Lua-Liste zurueck mit Original-img-Element zwischen RawInline-Wrappern. Template-Hotfixes fuer PDF: renewcommand-nolinkurl-zu-Plaintext (verhindert at-xverbatim-Bruch in longtable-Minipage durch URL-Display-Text-Verbatim-Mode), titlespacing-section-before=0pt fuer H1-Top-Alignment. cv.md: Pipe-Alignment in Grid Table programmatisch via Python ljust und Pipe-Position-Eindeutigkeitscheck (Pandoc 3.x ist beim Grid-Table-Pipe-Alignment streng, Sandbox-Pandoc 2.9 ist toleranter und damit irrefuehrend). build.ps1 erweitert um lua-filter-Argument in PDF und DOCX, plus Read-Host-Wait-on-Error entfernt (blockiert AI-Agents und CI), durch Start-Sleep 3s am Ende ersetzt. header-image-wrap.lua als Pflichtdatei in Test-Path-Check aufgenommen. Vier weitere Edit-Tool-Truncation-Vorfaelle in S09 (cv.md, template.tex zweimal, build.ps1), Lehre verschaerft Edit-Tool fuer jede nicht-triviale Modifikation auf NTFS-Mount-Dateien meiden. Sandbox-NTFS-Stale-Read auf DOCX-Output (DOCX-Datei als not a zip file, Workaround DOCX im Sandbox neu generieren). Sandbox-NTFS-Mount kann auch Datei-Schreiben mit open(w) verweigern obwohl os.path.exists True liefert, Workaround tmp-Datei plus os.rename. Build und visuelle Bestaetigung durch Thomas erfolgt fuer DOCX und PDF. teilgebiete/01-lebenslauf.md um Iteration-C-Block ergaenzt und Naechste-Schritte-Liste auf S10-Plan umgestellt (1 DOCX-Heading-Farben pruefen, 2 Doublecheck der generierten Texte mindestens elektrischer-Gehaeuse ist sinnverkehrt, 3 Buzzword-Kompetenzen brainstormen mindestens Umgang mit quantisierten LLMs fehlt, 4 PDF-Spacings H1/H2/Kontaktdaten und hellgraue Trennlinien korrigieren, 5 Hyphenation-Feintuning, 6 Teilgebiet abschliessen). agent-prompt.md Aktueller-Stand-Block fuer S10 fortgeschrieben.
+S10
+Aufgabe 1 (DOCX-Heading-Farbe und -Bold) abgeschlossen. Farb-Audit zuerst: DesTEngS-Primaerfarbe ist 3C68AE, in 4 Dateien (agent-prompt.md, teilgebiete/01-lebenslauf.md, build/build-reference-docx.py Konstante HEADING_COLOR und Doc-Kommentar, templates/template.tex destengsblue-Definition) von 0B5394 auf 3C68AE korrigiert. changelog.md (append-only) und cv-debug.tex (generierter Output) bewusst ausgenommen. Diagnose der nicht-greifenden Heading-Farbe: Pandoc-3.x-Default-Reference enthaelt Linked Character Styles Heading1Char/2Char/3Char mit eigener color val=0F4761 themeColor=accent1 themeShade=BF (Aptos-Petrol). Char-Styles dominieren in Word ueber Para-Styles bei Run-Eigenschaften, deshalb gewann das Aptos-Theme. Pandoc 2.9 (Sandbox) hat diese Char-Styles nicht, daher konnte der Bug dort nicht reproduziert werden. Fix in build/build-reference-docx.py: HEADING_COLOR_STYLES um Heading1Char Heading2Char Heading3Char erweitert. Zusatzanforderung von Thomas: H1 und H2 fett. Neue Funktion set_heading_bold mit Konstante HEADING_BOLD_STYLES analog (Heading1+2 Para- und Char-Stil). H3 bleibt unveraendert. Docstring-Block B4 um beide Erklaerungen erweitert. Sandbox-syntaktischer Test der neuen Funktionen erfolgreich. Build und visuelle Bestaetigung durch Thomas: alle Headings im DOCX in DesTEngS-Blau 3C68AE, H1 und H2 fett, H3 normal. Aufgabe 2 Diff-Material vorbereitet: alte CV-Quelle Lebenslauf_Thomas_Langer_2025-03-21.docx aus archiv via pandoc nach markdown konvertiert und mit aktueller cv.md verglichen. Vier Output-Dateien in artefakte/01-lebenslauf/output: cv-old-plain.txt (DOCX normalisiert 305 Zeilen), cv-new-plain.txt (cv.md normalisiert 289 Zeilen), cv-diff-unified.txt (kompletter unified diff 551 Zeilen), cv-diff-report.md (sektionsweise Vergleichsbericht mit Mapping Berufstaetigkeit gleich Projekte als freiberuflicher Consultant). Sektion-Groessenvergleich zeigt erwartete Aenderungsmuster: Header kompakter, Zusammenfassung und Kenntnisse erweitert (KI-Fokus), Trainings stark gekuerzt, Veroeffentlichungen in Ausbildung integriert. Sinn-Check selbst macht Thomas in seinem Tempo, dann gemeinsames Review.
diff --git a/agent-prompt.md b/agent-prompt.md
index 2104027..d7f8ae1 100644
--- a/agent-prompt.md
+++ b/agent-prompt.md
@@ -106,7 +106,7 @@ S09 — **Iteration C: Foto-Einbindung via Grid Table.**
**Nächste Aufgabe (S10) in dieser Reihenfolge (von Thomas vorgegeben):**
-1. **DOCX: Blau ist nicht DesTEngS-Blau.** Heading-Farben prüfen — Soll: `#0B5394`. `build/build-reference-docx.py` Funktion `set_heading_colors` setzt zwar ``, aber Word rendert ggf. trotzdem den Theme-Aptos-Blau, weil das Heading-Style einen `themeColor`-Verweis behält oder weil das Theme dominiert. Prüfen, ob das `themeColor`-Attribut wirklich entfernt ist und ob die Farbe direkt am Run statt am Stil gesetzt werden muss.
+1. **DOCX: Blau ist nicht DesTEngS-Blau.** Heading-Farben prüfen — Soll: `#3C68AE`. `build/build-reference-docx.py` Funktion `set_heading_colors` setzt zwar ``, aber Word rendert ggf. trotzdem den Theme-Aptos-Blau, weil das Heading-Style einen `themeColor`-Verweis behält oder weil das Theme dominiert. Prüfen, ob das `themeColor`-Attribut wirklich entfernt ist und ob die Farbe direkt am Run statt am Stil gesetzt werden muss.
2. **Doublecheck der neu generierten Texte in cv.md.** Mindestens „elektrischer Gehäuse" ist sinnverkehrt (vermutlich aus V9/V10-KI-Iterationen). cv.md komplett auf Sinn- und Sprachfehler durchgehen, vermutlich Konkordanz-/Stil-Fehler an mehreren Stellen.
3. **Buzzword-Kompetenzen-Brainstorm.** Kenntnisse-Abschnitt erweitern. Mindestens „Umgang mit quantisierten LLMs" ergänzen. Weitere KI-Begriffe für Agentur-Keyword-Matching identifizieren (Quantization, GGUF, GPTQ, AWQ, Inference-Optimierung, vLLM, llama.cpp, Ollama-Deployment etc.).
4. **PDF: Abstände H1 / H2 „Kontaktdaten" / Kontaktdaten-Bullet-Liste stimmen nicht** (Folge der C4c-Spacing-Änderung). Plus: hellgraue Trennlinien (rulegray = `#BFBFBF`) sind inakzeptabel — Farbe oder Linienführung überdenken (Trennlinien stehen nach H1 und H2 im titlesec-Format-Block).
diff --git a/artefakte/01-lebenslauf/archiv/Lebenslauf_Thomas_Langer_2025-03-21.docx b/artefakte/01-lebenslauf/archiv/Lebenslauf_Thomas_Langer_2025-03-21.docx
new file mode 100644
index 0000000..edaa9df
Binary files /dev/null and b/artefakte/01-lebenslauf/archiv/Lebenslauf_Thomas_Langer_2025-03-21.docx differ
diff --git a/artefakte/01-lebenslauf/archiv/Lebenslauf_Thomas_Langer_2025-03-21.pdf b/artefakte/01-lebenslauf/archiv/Lebenslauf_Thomas_Langer_2025-03-21.pdf
new file mode 100644
index 0000000..46b7264
Binary files /dev/null and b/artefakte/01-lebenslauf/archiv/Lebenslauf_Thomas_Langer_2025-03-21.pdf differ
diff --git a/artefakte/01-lebenslauf/build/build-reference-docx.py b/artefakte/01-lebenslauf/build/build-reference-docx.py
index 99babe2..b31e41f 100644
--- a/artefakte/01-lebenslauf/build/build-reference-docx.py
+++ b/artefakte/01-lebenslauf/build/build-reference-docx.py
@@ -23,8 +23,21 @@ Iteration B1 + B1.5 + B2 + B3 + B4 (aktuell):
passiert nicht hier, sondern im Post-Processing
(build/post-process-docx.py), das auf das fertige DOCX angewendet
wird - ein Stil kann keine Per-Bullet-Logik abbilden.
- B4 - Heading 1/2/3 in destengsblue (0B5394) gefaerbt (themeColor
+ B4 - Heading 1/2/3 in destengsblue (3C68AE) gefaerbt (themeColor
entfernt, damit die Farbe nicht aus dem Word-Theme kommt).
+ Wichtig (S10-Fix): NICHT NUR die Paragraph-Styles
+ Heading1/2/3, sondern AUCH die Linked Character Styles
+ Heading1Char/2Char/3Char muessen gefaerbt werden.
+ Pandoc-3.x-Default-Reference enthaelt diese Char-Styles
+ mit eigener color val=0F4761 themeColor=accent1
+ themeShade=BF (Aptos-Petrol). Char-Styles haben in Word
+ Vorrang vor Para-Styles bei Run-Eigenschaften (Schrift,
+ Farbe), d.h. ohne Char-Style-Aenderung gewinnt das
+ Theme-Aptos-Blau gegenueber dem Para-Style-destengsblue.
+ B4-Bold (S10) - Heading 1 und 2 fett (Para- UND Char-Stil),
+ Heading 3 bleibt normal. Pandoc 3.x Default-Reference
+ hat Headings nicht fett. Char-Stil-Vorrangs-Logik
+ identisch wie bei der Farbe.
Hinweis (S08): die zwischenzeitlich eingebauten Heading-
Trennlinien (Bottom-Border + Indent-Trick) wurden zurueck-
gerollt, weil sie in Word linksbuendig statt zentriert
@@ -82,8 +95,14 @@ KEEP_STYLES = ("Heading1", "Heading2", "Heading3", "FirstParagraph")
# B4 - Heading-Farben (Trennlinien wurden in S08 zurueckgerollt, siehe
# Modul-Docstring). Bleibt: Heading 1/2/3 in destengsblue, themeColor entfernt.
-HEADING_COLOR = "0B5394" # destengsblue (analog template.tex)
-HEADING_COLOR_STYLES = ("Heading1", "Heading2", "Heading3")
+HEADING_COLOR = "3C68AE" # destengsblue (analog template.tex)
+HEADING_COLOR_STYLES = ("Heading1", "Heading2", "Heading3",
+ "Heading1Char", "Heading2Char", "Heading3Char")
+# B4-Bold (S10) - Heading 1+2 fett, Heading 3 bleibt normal.
+# Auch hier: Para- UND Char-Style modifizieren, weil Char-Style
+# in Word Run-Properties dominiert (analog Farb-Fix).
+HEADING_BOLD_STYLES = ("Heading1", "Heading2",
+ "Heading1Char", "Heading2Char")
PAGE_W = 11906
PAGE_H = 16838
@@ -301,6 +320,31 @@ def set_heading_colors(styles_xml):
log(f" Stil {sid!r}: color={HEADING_COLOR} (themeColor entfernt)")
write_xml(tree, styles_xml)
+def set_heading_bold(styles_xml):
+ """Setzt und auf Heading1 + Heading2 (Para- und Char-Stil).
+ Pandoc 3.x Default-Reference hat weder Para- noch Char-Stil fett gesetzt.
+ Char-Styles werden mit modifiziert, weil sie in Word fuer Run-Properties
+ Vorrang vor Para-Styles haben (analog Farb-Fix in set_heading_colors)."""
+ tree = ET.parse(styles_xml)
+ root = tree.getroot()
+ seen = set()
+ for style in root.findall(f"{W}style"):
+ sid = style.get(f"{W}styleId")
+ if sid not in HEADING_BOLD_STYLES:
+ continue
+ rPr = style.find(f"{W}rPr")
+ if rPr is None:
+ rPr = ET.SubElement(style, f"{W}rPr")
+ for tag in (f"{W}b", f"{W}bCs"):
+ if rPr.find(tag) is None:
+ ET.SubElement(rPr, tag)
+ log(f" Stil {sid!r}: bold (b + bCs)")
+ seen.add(sid)
+ missing = set(HEADING_BOLD_STYLES) - seen
+ if missing:
+ log(f" Hinweis: Stil(e) {sorted(missing)!r} nicht gefunden, uebersprungen")
+ write_xml(tree, styles_xml)
+
def header_default_xml():
return (
b'\n'
@@ -454,6 +498,8 @@ def main():
set_keep_next_styles(styles_xml)
log("Anpassung: Heading 1/2/3 in destengsblue (B4)")
set_heading_colors(styles_xml)
+ log("Anpassung: Heading 1+2 fett (B4-Bold, S10)")
+ set_heading_bold(styles_xml)
log("Anpassung: Header und Footer einbauen (B2)")
add_header_footer(unpacked)
diff --git a/artefakte/01-lebenslauf/output/Lebenslauf_Dr-Ing_Thomas_Langer.docx b/artefakte/01-lebenslauf/output/Lebenslauf_Dr-Ing_Thomas_Langer.docx
index 3a6fc59..ac5f2e2 100644
Binary files a/artefakte/01-lebenslauf/output/Lebenslauf_Dr-Ing_Thomas_Langer.docx and b/artefakte/01-lebenslauf/output/Lebenslauf_Dr-Ing_Thomas_Langer.docx differ
diff --git a/artefakte/01-lebenslauf/output/Lebenslauf_Dr-Ing_Thomas_Langer.pdf b/artefakte/01-lebenslauf/output/Lebenslauf_Dr-Ing_Thomas_Langer.pdf
index c1e1307..8700589 100644
--- a/artefakte/01-lebenslauf/output/Lebenslauf_Dr-Ing_Thomas_Langer.pdf
+++ b/artefakte/01-lebenslauf/output/Lebenslauf_Dr-Ing_Thomas_Langer.pdf
@@ -181,18 +181,21 @@ endobj
93 0 obj
<< /Filter /FlateDecode /Length 3184 >>
stream
-x[ˎWZ0e{Mһ&lrL6Y,HIu/.%*ԩ"8y}ND?R_}=?=+ҌtŞBe_OtLN.ߣ:]=]5]]/ͱ\wZbc'e]è s]$3)Z+U!;ǢIWd.gӕl3'ZYUz.Ys$:x i.^48hP+>_zg;
`)0>s#|l[#d1˓h4-WvD**kJ`
h nE$g$y=>>\A3 (+Ӡ}}WF_n4a\ca'ڞ8^jBp$X6+|F_O16$BPю`2"x7*K=+|wi)XiIZrڛ$Sz||R[N85iwY?x)G+ Cn|w$ %TU7VJ=)2gJ*ѕ(}aW
-o6P' Y!
Ub/`f#"Հ>@/!4i Ҁ-.L}?<\,z3AܘsvZ/EMKǧtJڻ|jQP|/>euF0aZkPPdLђyf}1u4}&C5UˡZ۩.k@tj[P#RxˤQ&UK=
%20(/}#87@OTSw\Gȶ§sd*AKy#WbLi8Ź`ˇ
g2{'Vm]TZ\u_
y]M 6J}fU`3]']⾼9Acׂu'F_5ݰ/Ч[ޜLkKDl]XKm$ҏVC^Z4B#S8g3@A;i