{"queue_id": 12, "relative_path": "Runbooks/PROJECT_EMAIL_SERIES_REPORT.md", "title": "Projekt-E-Mail-Serien-Bericht", "import_key": "f606a46e14a25c25f95102c316ffe6db6370751dfb22ba907929a984c00b6b1e", "chunk_count": 19, "created_nodes": 20, "created_relationships": 37, "body": null, "chunks": [{"chunk_key": "b262541b4549b9e97eaffb64d2b33f0f9a326e997aed21e77ea4b64be0be31cb", "chunk_index": 0, "heading": "Projekt-E-Mail-Serien-Bericht", "text": "# Projekt-E-Mail-Serien-Bericht\n\n**Erstellt:** 2026-05-22\n**Testserie:** K:\\Projekte-AG\\Test-emails\n**Mails verarbeitet:** 13\n**Zeitraum:** 16. Januar – 24. Februar 2026\n\n---", "text_hash": "a174775a60e42e491d25325de6a536a58182a5a806e3ee9ab8f6081e2b2800d0"}, {"chunk_key": "cbcf91d49059e0b58d4277d4043187d7603012f4921a7f0218f283efe77a60f1", "chunk_index": 1, "heading": "1. Zusammenfassung", "text": "Bericht\n\n**Erstellt:** 2026-05-22\n**Testserie:** K:\\Projekte-AG\\Test-emails\n**Mails verarbeitet:** 13\n**Zeitraum:** 16. Januar – 24. Februar 2026\n\n---\n## 1. Zusammenfassung\n\n13 reale Projekt-E-Mails wurden chronologisch ingestiert.\nAlle 13 liefen fehlerfrei durch die Pipeline.\n0 Pipeline-Abstürze. 0 Obsidian-Writes. 0 Graphiti-Writes.\n\n---", "text_hash": "3a80ef475a143e90d6812e63bfc254f3e98e2065c28d0d2ad3fa932e60450cd1"}, {"chunk_key": "d8ab544405f23c7d0697cc47795e84da8ab9834fad9b1a7f09b3ffd5e6f9fc07", "chunk_index": 2, "heading": "2. Verarbeitungsstatistik", "text": "E-Mails wurden chronologisch ingestiert.\nAlle 13 liefen fehlerfrei durch die Pipeline.\n0 Pipeline-Abstürze. 0 Obsidian-Writes. 0 Graphiti-Writes.\n\n---\n## 2. Verarbeitungsstatistik\n\n| Nr | Datei | Datum | Projekt (erkannt) | Facts | PII-Mask | Konflikte | Status |\n|----|-------|-------|-------------------|-------|----------|-----------|--------|\n| 1 | Anfrage.eml | 16.01.2026 | unclassified | 3 | 2 | 0 | OK |\n| 2 | Re_ Anfrage.eml | 16.01.2026 | unclassified | 5 | 0 | 1 | OK |\n| 3 | Re_ Anfrage-1.eml | 19.01.2026 | unclassified | 5 | 2 | 2 | OK |\n| 4 | Re_ Anfrage-2.eml | 20.01.2026 | unclassified | 5 | 2 | 2 | OK |\n| 5 | Re_ Anfrage-3.eml | 20.01.2026 | unclassified | 5 | 2 | 5 | OK |\n| 6 | Re_ Anfrage-4.eml | 21.01.2026 | vento (falsch) | 5 | 2 | 0 | OK |\n| 7 | Re_ Anfrage-5.eml | 22.01.2026 | vento (falsch) | 5 | 2 | 3 | OK |\n| 8 | Terminabstimmung Vor-Ort-Begehung.eml | 22.01.2026 | vento (falsch) | 5 | 2 | 4 | OK |\n| 9 | Termin 19.2. @ 1400.eml | 23.01.2026 | vento (falsch) | 5 | 2 | 5 | OK |\n| 10 | Re_ Termin 19.2. @ 1400.eml | 18.02.2026 | vento (falsch) | 5 | 2 | 5 | OK |\n| 11 | Octopus Energy.eml | 20.02.2026 | unclassified | 4 | 0 | 1 | OK |\n| 12 | Re_ Octopus Energy.eml | 20.02.2026 | unclassified | 5 | 2 | 5 | OK |\n| 13 | Angebot Waermepumpensystem Illetas.eml | 24.02.2026 | unclassified | 5 | 2 | 4 | OK |\n| | **Gesamt** | | | **62** | **22** | **37** | **13/13** |\n\n---", "text_hash": "124c088eecc181844e05895ad72a97c4a55b311215c898cfc0a2fd32e68302fa"}, {"chunk_key": "3689600aadfc1d67735896a2e7688a168a06176c649ae74234adf48ba2ed6886", "chunk_index": 3, "heading": "3. Erkannte Projektentwicklung", "text": "Angebot Waermepumpensystem Illetas.eml | 24.02.2026 | unclassified | 5 | 2 | 4 | OK |\n| | **Gesamt** | | | **62** | **22** | **37** | **13/13** |\n\n---\n## 3. Erkannte Projektentwicklung", "text_hash": "cfce4d75fe1d05153b5e185a31dcf3d575e0db910e4074269bc987f00f0c24e5"}, {"chunk_key": "9e959e7ae5ccf641fd974eb6d84c3bfdde39fe91c3ca22ea454c88682384c46e", "chunk_index": 4, "heading": "Projekt: Wärmepumpensystem Illetas (LPM-Kundenauftrag)", "text": "## 3. Erkannte Projektentwicklung\n### Projekt: Wärmepumpensystem Illetas (LPM-Kundenauftrag)\n\n**Anbieter:** LPM = Lüftungsprofi Mallorca\n**Kunde:** Michael Schuler\n**Standort:** Appartement Apt 77, Anchorage Club, Illetas\n\nVollständige Projektphase von Anfrage bis Angebotsversand in 39 Tagen:\n\n```\nPhase 1: Anfrage (16.01.)\n Kunde: Umrüstung 2-3 Zimmer von Radiatoren auf WLAN-steuerbare Klimageräte\n → 3 Räume: 15m², 20m², 35m²\n\nPhase 2: Technische Klärung (16. - 22.01.)\n LPM stellt Rückfragen (Raumgröße, Nutzungsart, Außengerät-Position)\n LPM erklärt Monoblock-Klimageräte als Lösung\n Technische Einschränkung: Geräuschentwicklung durch interne Ventilatoren\n Außengerät-Position: Dachterrasse (einzige Option laut Kunde)\n\nPhase 3: Terminabstimmung (22. - 23.01.)\n LPM schlägt 17.-20. Februar, 13:30 oder 14:00 Uhr vor\n Kunde bestätigt: 19. Februar um 14:00 Uhr\n Adresse: Apt 77 im Anchorage Club, Illetas\n Einlass: Name am Tor nennen\n\nPhase 4: Vor-Ort-Begehung (19.02.)\n Besuch fand statt (bestätigt durch Re: Octopus Energy vom 20.02.)\n Beratung vor Ort als \"kompetent\" bewertet\n\nPhase 5: Post-Visit (20.02.)\n LPM empfiehlt Octopus Energy (Stromanbieter)\n Referral-Link mit 50€ Startbonus\n Tarif: \"Octopus Relax\" (konstanter Arbeitspreis)\n Kunde nimmt Empfehlung an, erwartet KV (Kostenvoranschlag)\n\nPhase 6: Angebot (24.02.)\n LPM übermittelt Angebot für Umrüstung\n Basierend auf besprochenen Objekt- und Verbrauchsdaten\n Status: Angebot liegt beim Kunden zur Entscheidung\n```\n\n---", "text_hash": "7c792e0cadb9ce51817b21f95e667f03eb634f0bfe6f33c58ab2af46db72573c"}, {"chunk_key": "da9ac7d9e093c4c1b8eef06b7204600e15aef530b7e867175c03ea9cbc429925", "chunk_index": 5, "heading": "4. Statusänderungen im Projektverlauf", "text": "ermittelt Angebot für Umrüstung\n Basierend auf besprochenen Objekt- und Verbrauchsdaten\n Status: Angebot liegt beim Kunden zur Entscheidung\n```\n\n---\n## 4. Statusänderungen im Projektverlauf\n\n| Datum | Ereignis | Statusänderung |\n|-------|----------|----------------|\n| 16.01. | Erste Anfrage | offen → in Klärung |\n| 16.-22.01. | Technische Klärung | in Klärung → Terminvereinbarung |\n| 23.01. | Termin bestätigt | → Termin fixiert: 19.02. 14:00 |\n| 20.02. | Dankes-Mail nach Besuch | → Besuch abgeschlossen |\n| 24.02. | Angebot versandt | → Angebot offen |\n\nLetzter bekannter Status: **Angebot versandt, wartet auf Kundenentscheidung**\n\n---", "text_hash": "ae5dd0f1b7c66582df357dae714001750f97632a0161b1c4179d13f180af08e3"}, {"chunk_key": "7654bf23ca5e03a45a5b3ac063d55cd6e04652244fdb5f53a99a720e1f81cf31", "chunk_index": 6, "heading": "5. Konflikte", "text": "ch abgeschlossen |\n| 24.02. | Angebot versandt | → Angebot offen |\n\nLetzter bekannter Status: **Angebot versandt, wartet auf Kundenentscheidung**\n\n---\n## 5. Konflikte", "text_hash": "e658a6ab3ff6f5afbbf09b5c108bea90815fe40652ac2ada8a678cfb680060b4"}, {"chunk_key": "cf98453b990b68102fb076c168b31cca2dd6d168de86e084bae9d1b9993c7e9e", "chunk_index": 7, "heading": "5.1 Strukturell — Quote-Chains (37 von 37 Konflikten)", "text": "## 5. Konflikte\n### 5.1 Strukturell — Quote-Chains (37 von 37 Konflikten)\n\nAlle 37 erkannten Konflikte sind auf **Reply-Chains (Quoting)** zurückzuführen.\nWenn eine spätere Mail frühere Mails zitiert, extrahiert die Pipeline identische\nSätze als neue Facts und erkennt sie als Keyword-Overlap mit bestehenden Reviews.\n\nInhaltliche Widersprüche: **keine einzigen** in dieser Serie.\nDie Projektkommunikation ist konsistent und linear.", "text_hash": "d470150e117a1b575537beca3d0bbe2456bfe2d93d545071470e7e3cc72f4155"}, {"chunk_key": "d5e38f0d61a9d8a7357f0a4eb05a62b6c4ce3348b8a1e3f9ccb8f54ba3f13478", "chunk_index": 8, "heading": "5.2 Bewertung der Konflikterkennung in Quote-Chain-Mails", "text": "rd-Overlap mit bestehenden Reviews.\n\nInhaltliche Widersprüche: **keine einzigen** in dieser Serie.\nDie Projektkommunikation ist konsistent und linear.\n### 5.2 Bewertung der Konflikterkennung in Quote-Chain-Mails\n\nDie steigende Konfliktzahl ab Mail 5 (5/5 Konflikte) ist ein bekanntes Muster:\nJe mehr zitierte Mails enthalten sind, desto mehr Keyword-Overlaps entstehen.\n\nEmpfehlung für nächste Iteration: Quote-Block-Erkennung implementieren.\nZeilen die mit `>` beginnen, als zitiert markieren und nicht als eigenständige Facts extrahieren.\n\n---", "text_hash": "d0dcce5d05a4ea92e51b3033651d178445e86bdc520f69593253fbf1f76dafcc"}, {"chunk_key": "fc5531e4961f00ba72e98d4838b31d9af6ae814f72b477b7248fabfde4d2b86a", "chunk_index": 9, "heading": "6. Wiederkehrende Entities", "text": "teration: Quote-Block-Erkennung implementieren.\nZeilen die mit `>` beginnen, als zitiert markieren und nicht als eigenständige Facts extrahieren.\n\n---\n## 6. Wiederkehrende Entities\n\n| Entity | Typ | Vorkommen in Mails | Anmerkung |\n|--------|-----|-------------------|-----------|\n| Illetas | Standort | 1-13 | Konsistent |\n| Wärmepumpe / Klimagerät | Produkt | 1-13 | Konsistent |\n| Monoblock | Produktvariante | 4-13 | Ab Mail 4 etabliert |\n| Dachterrasse | Außengerät-Position | 7-13 | Bestätigt durch Kunden |\n| 19. Februar 14:00 | Termin | 9-13 | Zweimal bestätigt |\n| Anchorage Club | Adresse | 9-13 | PII — nicht maskiert (Bug) |\n| Apt 77 | Adresse | 9-13 | PII — nicht maskiert (Bug) |\n| Octopus Energy | Externer Dienst | 11-13 | Stromanbieter-Empfehlung |\n| Octopus Relax | Tarif | 11-12 | Konstantpreis-Tarif |\n\n---", "text_hash": "98f833ddb09c65066cf25d74189c89489eccbae83002ae253a14c259ecbcb70b"}, {"chunk_key": "af26a543df89bdddeaa57b3131c5de1d3a2aa2918ae6ebc3b05513a3b7311adb", "chunk_index": 10, "heading": "7. Timeline", "text": " maskiert (Bug) |\n| Octopus Energy | Externer Dienst | 11-13 | Stromanbieter-Empfehlung |\n| Octopus Relax | Tarif | 11-12 | Konstantpreis-Tarif |\n\n---\n## 7. Timeline\n\n```\n16 Jan 2026 Anfrage.eml Erstkontakt, 3 Räume (15/20/35m²)\n16 Jan 2026 Re_ Anfrage.eml LPM: technische Rückfragen\n19 Jan 2026 Re_ Anfrage-1.eml Kunde: Raummaße + Details\n20 Jan 2026 Re_ Anfrage-2.eml LPM: Monoblock-Lösung erklärt\n20 Jan 2026 Re_ Anfrage-3.eml Kunde: Vor-Ort-Termin gewünscht\n21 Jan 2026 Re_ Anfrage-4.eml LPM: Termin 1. Februarwoche möglich\n22 Jan 2026 Re_ Anfrage-5.eml Kunde: Zeichnungen, Dachterrasse OK\n22 Jan 2026 Terminabstimmung.eml LPM: 17.-20. Feb, 13:30 oder 14:00\n23 Jan 2026 Termin 19.2..eml Kunde: 19.2. um 14:00 bestätigt\n [Pause: 26 Tage]\n18 Feb 2026 Re_ Termin 19.2..eml LPM: Termin-Bestätigung + Anfahrt\n19 Feb 2026 [Vor-Ort-Begehung, kein EML]\n20 Feb 2026 Octopus Energy.eml LPM: Octopus Referral nach Besuch\n20 Feb 2026 Re_ Octopus Energy.eml Kunde: Dank + wechselt zu Octopus\n [Pause: 4 Tage]\n24 Feb 2026 Angebot Illetas.eml LPM: Angebot Wärmepumpensystem\n```\n\n---", "text_hash": "f108c8df3cf578073a744186c097034f5a03271830b083eb9dcca523738e3602"}, {"chunk_key": "9a27296062cdf5c7882dfdd40d708a1b314b193d67b9e1283fe6a6292a8188b7", "chunk_index": 11, "heading": "8. Technische Probleme", "text": "nergy.eml Kunde: Dank + wechselt zu Octopus\n [Pause: 4 Tage]\n24 Feb 2026 Angebot Illetas.eml LPM: Angebot Wärmepumpensystem\n```\n\n---\n## 8. Technische Probleme", "text_hash": "6420c0aa7edbe030880f895df636b0dd146d72c044c495d6c6013700dba74d73"}, {"chunk_key": "9b74845bf9221d74baac2a0a123d9311f61895f693ad955d5f58192abe8c56a1", "chunk_index": 12, "heading": "Problem 1 — Projekterkennung FALSCH (kritisch)", "text": "## 8. Technische Probleme\n### Problem 1 — Projekterkennung FALSCH (kritisch)\n\n**Beobachtung:** 6 von 13 Mails wurden als \"vento\" klassifiziert.\n**Ursache:** Das Wort \"whatsapp\" erscheint beiläufig in den Email-Bodies (vermutlich im Email-Footer oder Signatur \"Via WhatsApp erreichbar\"), Score 1 reicht für Klassifikation.\n**Tatsächliches Projekt:** LPM-Kundenauftrag — existiert nicht in PROJECT_KEYWORDS.\n**Auswirkung:** Facts landen unter falschem Projekt-Label in Review-Queue.\n**Empfehlung:** Score-Minimum erhöhen (≥ 2) oder \"whatsapp\" aus Projekt-Keywords entfernen, wenn es als Einzel-Treffer zu viele Falsch-Positive erzeugt.", "text_hash": "45c88a98ae669988f90b5cbdfc9013756fb55cb5de30874a659d88ae172fa103"}, {"chunk_key": "5725f51b375fcd97e8b09a04862370a21cdad455fcabb660b7564ed53fbfcde9", "chunk_index": 13, "heading": "Problem 2 — PII-Leck: Personenname und Adresse (kritisch)", "text": "Empfehlung:** Score-Minimum erhöhen (≥ 2) oder \"whatsapp\" aus Projekt-Keywords entfernen, wenn es als Einzel-Treffer zu viele Falsch-Positive erzeugt.\n### Problem 2 — PII-Leck: Personenname und Adresse (kritisch)\n\n**Beobachtung:** Folgende personenbezogene Daten erscheinen ungemaskiert in Facts:\n- Kundenname: \"Michael Schuler\"\n- Adresse: \"Apt 77, Anchorage Club, Illetas\"\n**Ursache:** PII_PATTERNS erfasst E-Mail-Adressen und Telefonnummern, aber keine Personennamen und Adressen.\n**Empfehlung:** Kein automatisches NER sinnvoll (zu fehleranfällig), stattdessen:\n Option A — Warnung bei Fakturen die Großschreibung + Kürzel (Apt/Nr/Str/Pl) enthalten\n Option B — Manueller PII-Review vor Obsidian-Schreibung (ohnehin Pflicht)", "text_hash": "4499a84a79fe39df472a9fd67ad37abc1d3c5a290dbab26113d79fc5abc287f3"}, {"chunk_key": "a32cf52049d36b6cf2adb80d4d00880fea7ac37fc01cf31076c70320d1adeeae", "chunk_index": 14, "heading": "Problem 3 — Quote-Chain-Inflation (mittel)", "text": "Warnung bei Fakturen die Großschreibung + Kürzel (Apt/Nr/Str/Pl) enthalten\n Option B — Manueller PII-Review vor Obsidian-Schreibung (ohnehin Pflicht)\n### Problem 3 — Quote-Chain-Inflation (mittel)\n\n**Beobachtung:** Mails 5-10 haben 5/5 Konflikte — alle aus zitierten Vorgänger-Mails.\n**Ursache:** Zeilen die mit `>` beginnen werden als eigenständige Kandidaten behandelt.\n**Empfehlung:** Quote-Erkennung: Zeilen die mit `>` oder `>>` beginnen, als `quoted: true` markieren und aus Fact-Kandidaten ausschließen. Können als Kontext-Metadaten gespeichert werden, nicht als Facts.", "text_hash": "4f54fb2b2a6f273d1cb483cb8caffe1025080a78b7b71a00cf4dbb225cac4990"}, {"chunk_key": "c38c029274c4bc8bf5bac3b27290f02cf0445d3de8f7f83efce81975e33e22ff", "chunk_index": 15, "heading": "Problem 4 — Satzfragmente als Facts (niedrig)", "text": "er `>>` beginnen, als `quoted: true` markieren und aus Fact-Kandidaten ausschließen. Können als Kontext-Metadaten gespeichert werden, nicht als Facts.\n### Problem 4 — Satzfragmente als Facts (niedrig)\n\n**Beobachtung:** Einige Facts sind Satzhälften (\"können, sind vorab einige technische...\") weil HTML→Text-Konvertierung Satzumbrüche an Zeilengrenzen einfügt.\n**Ursache:** Text-Extraktion trennt bei Zeilenumbrüchen, nicht bei Satzenden.\n**Empfehlung:** Aufeinanderfolgende kurze Zeilen zusammenführen (Sentence-Merging) bevor Fact-Extraktion.\n\n---", "text_hash": "51634dd2bfdcb589c7c7ab70bdd01ad8ba0a1d3f019bd582aebb9b60685fe591"}, {"chunk_key": "fe5a008905aa031ffab78b0dafe300c39757b8459087789841b8cd76d0238356", "chunk_index": 16, "heading": "9. Review-Queue-Zuwachs", "text": "i Zeilenumbrüchen, nicht bei Satzenden.\n**Empfehlung:** Aufeinanderfolgende kurze Zeilen zusammenführen (Sentence-Merging) bevor Fact-Extraktion.\n\n---\n## 9. Review-Queue-Zuwachs\n\n| Vorher | Nachher | Neu durch diese Serie |\n|--------|---------|----------------------|\n| 9 Reviews | 71 Reviews | 62 neue Reviews |\n\nDavon 37 mit conflict_detected: true (alle Quote-Chain-bedingt).\nKein einziger Review mit obsidian_write_allowed: true.\nKein einziger Review mit status: approved.\n\n---", "text_hash": "412f1033dd499cb958d5d5d73f1002615d9bedd835e046ffb00e0a31214fd89b"}, {"chunk_key": "425b1122b2ddac5c4576cbb758a9e07c2e3c56b7fe9900b67f4c9830b5b2d1fb", "chunk_index": 17, "heading": "10. Bewertung der Ingestion-Qualität", "text": "lict_detected: true (alle Quote-Chain-bedingt).\nKein einziger Review mit obsidian_write_allowed: true.\nKein einziger Review mit status: approved.\n\n---\n## 10. Bewertung der Ingestion-Qualität\n\n| Kriterium | Ergebnis | Bewertung |\n|-----------|----------|-----------|\n| Pipeline-Stabilität | 13/13 erfolgreich | ✅ Erfüllt |\n| Fehlerrate | 0% | ✅ Erfüllt |\n| Duplicate-Schutz | getestet, funktioniert | ✅ Erfüllt |\n| PII E-Mail/Telefon | 100% maskiert | ✅ Erfüllt |\n| PII Name/Adresse | NICHT maskiert | ❌ Lücke |\n| Obsidian-Write | 0 | ✅ Erfüllt |\n| Graphiti-Write | 0 | ✅ Erfüllt |\n| Review-Queue | alle Facts drin | ✅ Erfüllt |\n| Auto-Approve | 0 | ✅ Erfüllt |\n| Projekterkennung | 6/13 falsch (vento) | ❌ Lücke |\n| Conflict-Qualität | 37/37 Quote-Chain | ⚠ Überdetektiert |\n\n**Gesamtbewertung: 8/11 Kriterien erfüllt**\n\n---", "text_hash": "05f4bb3b8cc20f03b1f73324db0a42f353503c8ecfbb9af1582557f6a3161a96"}, {"chunk_key": "95bfced7f1c957542538ea7810a55a6d91bb11553096c845e395ab577a72e162", "chunk_index": 18, "heading": "11. Nächste Schritte vor IMAP-Freigabe", "text": "nnung | 6/13 falsch (vento) | ❌ Lücke |\n| Conflict-Qualität | 37/37 Quote-Chain | ⚠ Überdetektiert |\n\n**Gesamtbewertung: 8/11 Kriterien erfüllt**\n\n---\n## 11. Nächste Schritte vor IMAP-Freigabe\n\nPflicht-Fixes vor weiteren Tests:\n\n1. **Quote-Erkennung** — Zeilen die mit `>` beginnen aus Fact-Kandidaten ausschließen\n2. **Score-Minimum** für Projekterkennung auf ≥ 2 erhöhen\n3. **PII Name/Adresse** — Warnmechanismus für Großschreibungsmuster implementieren\n\nOptionale Verbesserungen:\n\n4. **LPM/Lüftungsprofi** als bekanntes Projekt in PROJECT_KEYWORDS aufnehmen\n5. **Sentence-Merging** — kurze aufeinanderfolgende Zeilen zusammenführen\n6. **Quote-Filter** — Zitierter Inhalt als Kontext speichern, nicht als Fact\n\nFreigabe-Bedingung:\n- Alle Pflicht-Fixes implementiert\n- 5 weitere reale Mails ohne falsche Projekterkennung\n- PII-Warnung aktiv für Adressen/Namen\n\n---\n\n*Bericht: /opt/struktur/hermes-carlo/ingestion/PROJECT_EMAIL_SERIES_REPORT.md*\n*Pipeline: /opt/struktur/ingestion/ingest_email.py*\n*Testprotokoll: /opt/struktur/hermes-carlo/ingestion/EMAIL_MANUAL_TEST_PROTOCOL.md*", "text_hash": "3e3132071acb2d59e934a21105f903c84e6d60656461130001a0acc2fa8d484c"}], "elapsed_s": 0.059}