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.

This commit is contained in:
tlg
2026-04-27 18:51:18 +02:00
parent 93bf43301e
commit b26cfd0ab3
13 changed files with 3438 additions and 764 deletions

View File

@@ -85,34 +85,43 @@ Setze zwischen sinnvollen Zwischenständen Checkpoints (z.B. nach "Marketing.md
## Aktueller Stand / Nächste Aufgabe
**Letzte Session:** S08 (2026-04-26)
**Letzte Session:** S09 (2026-04-27)
**Was wurde gemacht:** Iteration B fuer das DOCX abgeschlossen, plus zwei zusätzliche Anpassungen:
- **B4.1 — Heading-Farben in destengsblue** (`build/build-reference-docx.py` Funktion `set_heading_colors`, color val=`0B5394`, themeColor accent1 entfernt). H1, H2, H3 alle in destengsblue.
- **B4.2 — Heading-Trennlinien direkt am Stil verworfen.** Bottom-Border + Indent-Trick (`hanging`) erzeugte in Word linksbündige statt zentrierte Linien. Wichtige Lehre: Words `right`-Indent begrenzt sowohl Text als auch Border — eine Border *schmaler als der Heading-Text* ist über den Stil selbst nicht abbildbar.
- **B4.3 — Markdown-HRs aus cv.md entfernt** (21 alleinstehende `---`-Zeilen). Quelle der wahrgenommenen „Doppellinien": Pandoc-DOCX-Konvertierung von `---` zu VML-`<v:rect ... o:hr="t"/>` (Embossed-Look). Tabellen-Strich-Zeilen blieben unangetastet. **Vorfall:** Sandbox-NTFS-Stale-Read der cv.md (20043 statt 20201 Bytes) hätte fast die Live-Datei truncated, sofortige Wiederherstellung aus `git show HEAD` + HR-Removal erneut mit der git-Version als Input.
- **B4.4 — H2-Trennlinien via Post-Processing** (`build/post-process-docx.py` um Funktion erweitert): nach jedem H2-Absatz ein leerer Trenn-Absatz mit linksbündiger Bottom-Border, schwarz (`000000`), 8,6 cm Linienlänge (right-Indent 4196 dxa), 1,25 pt dick (sz=10).
- **B5 — Trainings als Tabelle** (cv.md): Trainings-Bullet-Liste durch Pandoc-Multiline-Tabelle ersetzt (analog Ausbildung), Inhalte normal nicht fett.
- **B6 — Bullet-Einzüge verkleinert** (`build/post-process-docx.py` modifiziert `numbering.xml` direkt; Pandoc IGNORIERT die `numbering.xml`-Werte der reference.docx, daher MUSS das im Post-Processing passieren). E1: Einzug 0,25 cm + Sondereinzug 0,35 cm (left=340/hanging=198 dxa); E2: Einzug 0,80 cm + Sondereinzug 0,40 cm (left=681/hanging=227 dxa). Word-Konvention: „Einzug links" = `(left - hanging)` = Bullet-Position; „Sondereinzug Hängend" = `hanging`.
**Was wurde in S09 gemacht:**
**Nächste Aufgabe:** Teilgebiet 01 — verbleibende Iterationen:
1. **C — Foto-Einbindung** in cv.md mit Pandoc-Image-Syntax und Template-Anpassung für Position/Größe (z.B. oben rechts neben Name, ca. 3 cm).
2. **D — Hyphenation-Feintuning für PDF** — kurze Wortteile am Zeilenanfang mit höherer Penalty oder `\hyphenation`-Ausnahmen reduzieren.
S09 — **Iteration „Links"** in cv.md: alle nackten URLs auf explizite Markdown-Link-Syntax migriert, damit Pandoc echte Hyperlink-Elemente in DOCX (`<w:hyperlink>`) und PDF (`\href`) emittiert. E-Mail als Pandoc-Autolink-Form `<email>`, Telefon als `[+49 ...](tel:+49...)`-Link, Web-Links als `[[text]](url)` mit sichtbaren äußeren eckigen Klammern. Display-Texte „Link zum Profil" für LinkedIn/Freelance.de, „destengs.de" für Website (`.com` → `.de`), „Dissertation" für Promotion, „Link zum Zertifikat (funktioniert nur im Browser)" für TÜV. TÜV-Link diagnostiziert: certif-id.com hinter Cloudflare-Bot-Schutz, Word-urlmon-Pre-Flight-Anfrage scheitert mit 403, Direkt-Klick aus Word funktioniert nicht trotz funktionierender URL im Browser. Optionen A (destengs.de-Redirect), B (LinkedIn-Safety-Redirect), C (kein Link) abgewogen, D gewählt: direkter Link mit erklärendem Display-Text. Detaillierte Doku siehe `teilgebiete/01-lebenslauf.md` Block „Iteration Links (S09)".
Nach D): Status von Teilgebiet 01 in `zentral-index.md` auf „abgeschlossen" setzen (R2-OK von Thomas). Anschließend nächstes Teilgebiet nach Priorität (laut Index Teilgebiet 02 „Zeugnis von ASMPT").
S09 — **Iteration C: Foto-Einbindung via Grid Table.**
**Offene Punkte (unverändert seit S04):** Zuschnitt und Festpreise der KI-Produkte (marketing.md Abschnitt 2), KMU-Direkthonorarsatz festlegen (marketing.md Abschnitt 2), Vergütungsmodell-Wahl bei erstem konkreten Fall (Notiz in marketing.md Abschnitt 2).
- Header-Layout als 2-Spalten-Grid-Table in cv.md (Name+Kontaktdaten links, Foto rechts), Spalten-Verhältnis 65:35 (LEFT_W=112, RIGHT_W=60 Striche).
- Pandoc 3.x ist beim Pipe-Alignment in Grid Tables strikt (Pandoc 2.9 ist toleranter und damit irreführend für Sandbox-Tests). Grid Table programmatisch in Python aufbauen mit `ljust(LEFT_W)` und Pipe-Position-Eindeutigkeitscheck.
- DOCX-Header-Spacing per neuer 4. Modifikation in `build/post-process-docx.py` (`process_header_table`): H1-spacing-before = 0, Foto-Paragraph-spacing-before = 5 pt + jc=right.
- Foto-Größe 4,06 × 4,06 cm, beide Dimensionen explizit im Markdown — verhindert Pandoc-Default `keepaspectratio,height=\textheight`, der die Image-Layout-Box auf 24 cm Höhe streckt und das Tabellen-Layout zerschießt.
- PDF-Layout via Pandoc-Lua-Filter `build/header-image-wrap.lua`: wrappt das Header-Foto im LaTeX-Output mit `\hfill\raisebox{-\height}[0pt][0pt]{...}`. `\hfill` schiebt rechtsbündig in der `\raggedright`-p-Spalte, `\raisebox` setzt Bild-Top auf Cell-Top und reportet null Höhe an die Tabellen-Zeile. Filter prüft `FORMAT="latex"` und Image-Pfad enthält „foto"; DOCX bleibt unberührt.
- Lua-Filter-Erste-Version (Image durch RawInline ersetzt) hat Pandocs Image-Resource-Resolution gebrochen → `File 'foto.jpg' not found`. Fix: Filter gibt Lua-Liste zurück, in der das Original-`img`-Element zwischen RawInline-Wrappern erhalten bleibt.
- Template-Hotfixes für PDF: `\renewcommand{\nolinkurl}[1]{#1}` (verhindert `\@xverbatim`-Bruch in `longtable`-Minipage durch URL-Display-Text-Verbatim), `\titlespacing*{\section}{0pt}{0pt}{0.5em}` (H1-Top-Alignment).
- `build/build.ps1`: `--lua-filter=$luaFilter` zu PDF- und DOCX-Pandoc-Calls hinzugefügt; `Read-Host`-Wait-on-Error entfernt (blockiert AI-Agents/CI), durch `Start-Sleep -Seconds 3` am Ende bei Fehler ersetzt.
**Vier weitere Edit-Tool-Truncation-Vorfälle in S09** (cv.md, template.tex zweimal, build.ps1). Lehre verschärft: Edit-Tool für jede nicht-triviale Modifikation auf NTFS-Mount-Dateien meiden, generell Python-aus-git-HEAD- oder Python-aus-Disk-Pattern bevorzugen.
**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 `<w:color w:val="0B5394"/>`, 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).
**Hinweise für die nächste Session:**
- **Word-Indent-Konvention (S08-Lehre):** Word zeigt im Absatz-Dialog „Einzug links" als `(left - hanging)`, NICHT als `left`. „Sondereinzug Hängend" ist `hanging`. Daher gilt: `left = (gewünschter Einzug + gewünschter Hanging-Indent)` in dxa.
- **Word-Border-Limit (S08-Lehre):** Words paragraph-Border folgt den Indents; eine Border *schmaler als der Heading-Text* geht NICHT über `<w:ind right="...">` auf dem Heading-Stil, weil der right-Indent auch den Text begrenzt. Lösung wenn nötig: separater Trenn-Absatz nach dem Heading via Post-Processing.
- **Pandoc IGNORIERT die `numbering.xml` der reference.docx (S08-Lehre).** Wer Bullet-Einzüge ändern will, muss das im Post-Processing tun, nicht in `build-reference-docx.py`.
- **Pandoc generiert für Markdown-`---` im DOCX VML-Horizontal-Lines (`<v:rect o:hr="t"/>`)** — sehen aus wie Doppellinien (Embossed). Im PDF rendert Pandoc dieselbe Quelle als saubere zentrierte Halblinie. Wenn man saubere DOCX-Trennung braucht: HRs in cv.md entfernen oder Pandoc-Lua-Filter für DOCX-Build.
- **Sandbox-NTFS-Stale-Reads sind häufiger und kritischer als gedacht (S08-Lehre).** Sandbox kann auch git-Status, Datei-Existenz und Datei-Inhalte verzerrt sehen, ohne dass die echte Datei betroffen ist. **Bei jedem Sandbox-Schreiben auf eine grössere NTFS-Mount-Datei: ERST git-Version verifizieren und als Input verwenden, NICHT blind dem Sandbox-Read trauen.** Bei seltsamen git-status-Outputs aus der Sandbox: erst Thomas auf PowerShell `git status` ausführen lassen.
- **Edit-Tool truncated regelmäßig** (mehrfach in S07 und S08 erlebt — Skript-Dateien, `.checkpoint-pending.txt`, `agent-prompt.md`, `teilgebiete/01-lebenslauf.md`). Faustregel: Bei jedem Edit auf NTFS-Mount-Datei nach `Edit` mit `wc -c` und `tail -c 80` verifizieren. Bei längeren Edits oder wenn das Risiko hoch ist: lieber per Heredoc/Python aus der git-Version neu schreiben.
- **Sandbox-Pandoc ist 2.9.x, Thomas' System läuft Pandoc 3.x.** Output-Unterschiede zwischen den Versionen können Build-Probleme verursachen. Sandbox-Pandoc emittiert weder die calc-basierten Spaltenbreiten (`p{... * \real{...}}`) noch `\def\LTcaptype{none}` — beides Pandoc-3.x-Eigenheiten. Bei Fehlern, die nur auf Thomas' System auftreten, **synthetisch das Pandoc-3.x-Output-Fragment in einer Mini-Tex-Datei nachbauen** und damit gegen das Template kompilieren.
- **Sandbox kann nichts an `.git/` schreiben** (NTFS-Permission-Issue): Lock-Files, korrupte Index — alles muss von PowerShell aus repariert werden.
- **`checkpoint.ps1` ist robust** gegen Anführungszeichen, Pipes, Whitespace-Anomalien und Index-Lock-Reste. `.checkpoint-pending.txt` darf ganz normal Sonderzeichen enthalten.
- **`build.ps1` pausiert bei Fehler 3 Sekunden pro fehlgeschlagenem Schritt.** Nicht überrascht sein, wenn ein fehlerhafter Lauf entsprechend länger braucht.
- **`build/build-reference-docx.py` muss VOR `build.ps1` manuell aufgerufen werden, wenn `templates/reference.docx` neu gebaut werden soll.** Das Skript ist nicht in `build.ps1` integriert (würde jeden Build verlangsamen und Pandoc-Default-Reference jedes Mal neu ziehen). Wenn jemand die `reference.docx` von Hand in Word editiert, gehen die Änderungen beim nächsten Skript-Lauf verloren — Stile gehören also ins Skript, nicht in Word.
- **DOCX-Pipeline ist jetzt 3-stufig mit drei Post-Processing-Modifikationen:** (1) `build/build-reference-docx.py` baut die `reference.docx` (manuell aufrufen, wenn Stile geändert werden sollen), (2) `build/build.ps1` baut PDF und DOCX, (3) `build/post-process-docx.py` wird automatisch aus `build.ps1` aufgerufen und macht: 3-3-Listen-Bullet-Regel, H2-Trennlinien-Einfügung, Bullet-Einzug-Anpassung in `numbering.xml`. Wer das Bullet-Verhalten oder Trennlinien ändern will, fasst das Post-Processing-Skript an.
- **Pandoc 3.x ist beim Grid-Table-Pipe-Alignment strikt (S09-Lehre).** Grid Tables programmatisch bauen mit `ljust()`-Padding und Pipe-Position-Verifikation, nicht von Hand. Sandbox-Pandoc 2.9 ist toleranter und kann beim Testen den Eindruck erwecken, dass etwas funktioniert, was bei Thomas (Pandoc 3.x) nicht funktioniert.
- **Pandoc 3.x emittiert in p-Spalten mit nur einem Image-Element keine `\begin{minipage}`-Wrapper (S09-Lehre).** Das Image landet direkt in der `p{calc...}`-Spalte und unterliegt der `\parbox[t]`-Baseline-Logik (Image-Bottom = Baseline = Cell-Top, Image ragt nach oben heraus). Lösung: Lua-Filter mit `\raisebox{-\height}[0pt][0pt]{...}`.
- **Pandoc emittiert für href mit URL-Display-Text `\nolinkurl{}` (Verbatim-Mode, S09-Lehre).** In `longtable`-Minipage bricht das mit `! Paragraph ended before \@xverbatim was complete.` ab. Fix mit `\renewcommand{\nolinkurl}[1]{#1}` ist drin.
- **Pandoc-3.x-`keepaspectratio,height=\textheight`-Default ist tückisch (S09-Lehre).** Layout-Box wird auf textheight gestreckt selbst wenn das Bild visuell klein ist — beide Dimensionen explizit setzen, wenn das Bild in einer Tabelle ist.
- **Lua-Filter müssen das `img`-Element im AST belassen, sonst kein Resource-Path-Resolution (S09-Lehre).** Lua-Liste-Return mit `{RawInline, img, RawInline}` statt einzelnes RawInline mit gebackenem Pfad.
- **Edit-Tool-Truncation auf NTFS-Mount-Dateien ist nach S07/S08/S09 ein systematisches Problem** — durchgehend Python-aus-git-HEAD- oder Python-aus-Disk-Pattern verwenden (atomar via `os.replace`). Sandbox kann zudem stale-reads liefern (z.B. DOCX als „not a zip file"), bei Verdacht git-Version verifizieren oder Build neu erzeugen.
- **`build.ps1` ist jetzt nicht-blockierend (S09-Lehre).** AI-Agents und CI-Systeme können das Skript aufrufen ohne Read-Host-Hänger. Bei Fehler 3 s Pause am Ende plus 3 s pro fehlgeschlagenem Schritt.
- **Sandbox-Index-Lock-Issue:** Sandbox kann nichts an `.git/` schreiben (NTFS-Permission-Issue), Index-Lock-Reste muss Thomas auf PowerShell beseitigen. Bei dauerhaftem Lock-File-Vorhandensein zeigt `git status` eine Warning, aber lesende git-Operations (show, log) funktionieren weiter.
- **DOCX-Pipeline ist 3-stufig mit vier Post-Processing-Modifikationen:** (1) `build/build-reference-docx.py` baut die `reference.docx` (manuell aufrufen), (2) `build/build.ps1` baut PDF und DOCX, (3) `build/post-process-docx.py` macht: 3-3-Listen-Bullet-Regel, H2-Trennlinien, Bullet-Einzüge in `numbering.xml`, Header-Tabellen-H1-Spacing-und-Foto-Spacing.
- **Kein Hyphenation-Feintuning (Iteration D) in S09.** Steht in S10-Liste hinter den vier Korrektur-Punkten.
**Offene Punkte (unverändert seit S04):** Zuschnitt und Festpreise der KI-Produkte (marketing.md Abschnitt 2), KMU-Direkthonorarsatz festlegen (marketing.md Abschnitt 2), Vergütungsmodell-Wahl bei erstem konkreten Fall (Notiz in marketing.md Abschnitt 2).