{"queue_id": 39, "relative_path": "Solutions/SMA_CAPTION_REFACTOR_REPORT.md", "title": "SMA_CAPTION_REFACTOR_REPORT", "import_key": "13d441c14781029c80586f648ebe0d1ad81815d214d1f2d2f2e27493c0293d26", "chunk_count": 15, "created_nodes": 16, "created_relationships": 29, "body": null, "chunks": [{"chunk_key": "cd866d37f92c17567080f2a131424179226414442bd3e55f0a378a957b4b82bc", "chunk_index": 0, "heading": "SMA_CAPTION_REFACTOR_REPORT", "text": "# SMA_CAPTION_REFACTOR_REPORT\nCaption Engine Refactor Phase 1 — Abschlussdokumentation\nDatum: 2026-05-28 | Status: ABGESCHLOSSEN\n\n---", "text_hash": "7274e18f2a8bd13d47c4f4e49e247e3308c22b3590ce8f70908658907bcac762"}, {"chunk_key": "2be8529746d7f568dac2bc4f328061a9182f04080e95b62095e1d78b34542826", "chunk_index": 1, "heading": "Geänderte Dateien", "text": "# SMA_CAPTION_REFACTOR_REPORT\nCaption Engine Refactor Phase 1 — Abschlussdokumentation\nDatum: 2026-05-28 | Status: ABGESCHLOSSEN\n\n---\n## Geänderte Dateien\n\n| Datei | Änderung | Backup |\n|-------|----------|--------|\n| `/opt/struktur/social-media-agent/caption_render.py` | Vollständig refactored (v2) | `caption_render.py.bak.refactor_v2` |\n| `/opt/struktur/social-media-radar/caption_gate.py` | Block für zurueckstellen hinzugefügt | `caption_gate.py.bak.refactor_v2` |\n| `/opt/struktur/social-media-radar/content_briefing.py` | 19 Umlaut-Fixes in nutzen/winkel-Strings | `content_briefing.py.bak.umlaute` |\n\n---", "text_hash": "10274117f8dd51b246504e23f9362a3c0f15f8d926e926ab3872f363ebd51aa0"}, {"chunk_key": "a2d03b1870d819733707a11924c7d45a15843b3d4104614de6956888916dd1f0", "chunk_index": 2, "heading": "Problem 1 — Rohtext-Leak: Ursache und Lösung", "text": "r_v2` |\n| `/opt/struktur/social-media-radar/content_briefing.py` | 19 Umlaut-Fixes in nutzen/winkel-Strings | `content_briefing.py.bak.umlaute` |\n\n---\n## Problem 1 — Rohtext-Leak: Ursache und Lösung", "text_hash": "0534a7b758e2e7d8138b64c578b019731ca2c8341cbbd36b099960c9afda8ab8"}, {"chunk_key": "3d7ef0343c29b720d61365b99b720aab7c5864ebdea0cb8d809b31296c7b9017", "chunk_index": 3, "heading": "Ursache (vollständige Kausalkette)", "text": "## Problem 1 — Rohtext-Leak: Ursache und Lösung\n### Ursache (vollständige Kausalkette)\n\n```\ncontent_briefing.py\n CAT_META[\"feuchte\"][\"nutzen_sek\"] = \"Community-Relevanz und Sichtbarkeit aufbauen\"\n ↓ compute_briefing()\n signals.db briefing_nutzen = \"Community-Relevanz und Sichtbarkeit aufbauen\"\n ↓ caption_render.py build_facebook_context()\n nutzen_line = signal.get(\"briefing_nutzen\") ← direkter DB-Zugriff\n ↓ Jinja2 Template\n VERÖFFENTLICHTER TEXT: \"Community-Relevanz und Sichtbarkeit aufbauen\"\n```", "text_hash": "35a501447dbcbf5e16ef1e42981ccb06addcfb9f35d86890dd58dd122680801b"}, {"chunk_key": "24569195a151b69e6a192b236b122cc2289c039016c6fca34d19d5d9fadc9170", "chunk_index": 4, "heading": "Lösung", "text": "nal.get(\"briefing_nutzen\") ← direkter DB-Zugriff\n ↓ Jinja2 Template\n VERÖFFENTLICHTER TEXT: \"Community-Relevanz und Sichtbarkeit aufbauen\"\n```\n### Lösung\n\n`caption_render.py` verwendet `briefing_nutzen`/`briefing_winkel` nicht mehr als Caption-Text.\n\n**Neu:** Zwei Lookup-Tabellen ersetzen die DB-Felder vollständig:\n\n```python\nNUTZEN_FB[(cat, post_typ)] # Primärauswahl: Kategorie × Post-Typ\nNUTZEN_CAT_FB[cat] # Fallback: nur Kategorie\nCONTEXT_FB[cat] # Kontext-Zeile: generisch per Kategorie\n```\n\nDie Tabellen enthalten korrekte, veröffentlichbare Sätze — z.B.:\n\n| Kategorie | Post-Typ | Satz |\n|-----------|----------|------|\n| feuchte | Erklaerung | \"Hohe Luftfeuchtigkeit ist auf Mallorca einer der häufigsten Auslöser für Schimmelschäden in Wohnräumen.\" |\n| feuchte | Warnhinweis | \"Unkontrollierte Feuchtigkeit zerstört Bausubstanz — oft lange bevor Schäden sichtbar werden.\" |\n| schimmel_risiko | Warnhinweis | \"Schimmelbefall in Mallorca-Immobilien ist häufiger als erwartet — und in vielen Fällen frühzeitig erkennbar.\" |\n| ferienimmobilie | Eigentuemer-Tipp | \"Professionelle Betreuung schützt den Wert Ihrer Ferienimmobilie auf Mallorca langfristig.\" |\n| mallorca_news | Erklaerung | \"Als Eigentümer auf Mallorca ist es wichtig, lokale Entwicklungen frühzeitig zu kennen.\" |\n| wetter_klima | Saison-Hinweis | \"Starkregen und Stürme erhöhen das Feuchterisiko in Mallorca-Immobilien messbar.\" |\n\nGleiche Struktur für LinkedIn: `NUTZEN_LI`, `NUTZEN_CAT_LI`, `CONTEXT_LI`.\n\n---", "text_hash": "661e2fe9253eb12a1de7ef6f25c4540b1daac2968aa9c74d169bba9c8d76fb89"}, {"chunk_key": "90e2c08b859334b6c2413becc88529d35dcdb3fe1f12989b5d979588f275ff78", "chunk_index": 5, "heading": "Problem 2 — Umlaut-Encoding: 19 Reparaturen", "text": "d Stürme erhöhen das Feuchterisiko in Mallorca-Immobilien messbar.\" |\n\nGleiche Struktur für LinkedIn: `NUTZEN_LI`, `NUTZEN_CAT_LI`, `CONTEXT_LI`.\n\n---\n## Problem 2 — Umlaut-Encoding: 19 Reparaturen\n\n**Ursprung:** `content_briefing.py` — CAT_META + `_get_winkel()` — enthielt ASCII-Substitute.\n\n| Vorher | Nachher |\n|--------|---------|\n| `fruehzeitig` | `frühzeitig` |\n| `fuer ` | `für ` |\n| `Loesung` | `Lösung` |\n| `schuetzen` | `schützen` |\n| `schaerfen` | `schärfen` |\n| `staerken` | `stärken` |\n| `Marktueberblick` | `Marktüberblick` |\n| `Schimmelpraevention` | `Schimmelprävention` |\n| `Eigentuemer erhaelt` | `Eigentümer erhält` |\n| `Frueherkennung` | `Früherkennung` |\n| `muessen` | `müssen` |\n| `Eigentuemer` (5×) | `Eigentümer` |\n\n**Hinweis:** Interne Identifier (`\"Eigentuemer-Tipp\"`, `\"Erklaerung\"`) wurden nicht geändert — sie werden als DB-Schlüssel verwendet und caption_render.py nutzt sie als Lookup-Keys.\n\n---", "text_hash": "1dea8d07321f531730ff58b7a16cac2ad8e217abcf2aec93576496a983a109da"}, {"chunk_key": "06927f46816e853806969f5289cb91a2933a030230090fae718fd1b1518233b5", "chunk_index": 6, "heading": "Problem 3 — Caption-Gate verschärft", "text": "igentuemer-Tipp\"`, `\"Erklaerung\"`) wurden nicht geändert — sie werden als DB-Schlüssel verwendet und caption_render.py nutzt sie als Lookup-Keys.\n\n---\n## Problem 3 — Caption-Gate verschärft\n\n**Neue Regel in `caption_gate.py`:**\n\n```python", "text_hash": "27520a328577e0129b95c68bb849265587e08667d02e78859464f82d9d173fae"}, {"chunk_key": "ab85c70cd28716917dff5f7cf78f8f5007eac527840ce740bedf2b4fd436a6fc", "chunk_index": 7, "heading": "BLOCK 2a: Freigabe zurückgestellt — nicht postbar", "text": "## Problem 3 — Caption-Gate verschärft\n\n**Neue Regel in `caption_gate.py`:**\n\n```python\n# BLOCK 2a: Freigabe zurückgestellt — nicht postbar\nif freigabe == \"zurueckstellen\":\n return _block(f\"[{sid}] briefing_freigabe=zurueckstellen\")\n```\n\n**Wirkung:**\n- `mallorca_news` + `wetter_klima` mit `zurueckstellen` → jetzt korrekt blockiert\n- `feuchte` mit `pruefen` → weiterhin erlaubt (korrekt)\n- `ferienimmobilie` + `schimmel_risiko` mit `pruefen` → weiterhin erlaubt\n\n---", "text_hash": "67e441ce87ea6a663d044e19f4cd743e70f2706f23ac0e99970677f9e50fd71b"}, {"chunk_key": "19d4ce011f95508cdb587338b8a5f4a95dd6a5b6ce9348d637dfb30752fc1b17", "chunk_index": 8, "heading": "Vorher / Nachher", "text": "rrekt blockiert\n- `feuchte` mit `pruefen` → weiterhin erlaubt (korrekt)\n- `ferienimmobilie` + `schimmel_risiko` mit `pruefen` → weiterhin erlaubt\n\n---\n## Vorher / Nachher", "text_hash": "b3513e569cc53701cd3f9eb51fdd1b0832da8701496d1de3b04b2b84fc42f8d8"}, {"chunk_key": "3390c0aacb7de6dd116b07621d7e40b6bcc35318bb4040c31e0beb6febc8c5e6", "chunk_index": 9, "heading": "Signal 2d9bfcd3 — feuchte, score=70", "text": "## Vorher / Nachher\n### Signal 2d9bfcd3 — feuchte, score=70\n\n**VORHER:**\n```\n💬 Mallorca hat europaweit die \"höchste Luftfeuchtigkeit\"\n\nEigentümer erkennt Feuchteproblem fruehzeitig und handelt gezielt ← ROHTEXT + Umlautfehler\n\nFeuchteprobleme in Mallorca-Wohnungen: Ursachen und Loesung — das betrifft Mallorca-Eigentümer direkt.\n ↑ Umlautfehler ↑ ROHTEXT\n```\n\n**NACHHER:**\n```\n💬 Mallorca hat europaweit die \"höchste Luftfeuchtigkeit\"\n\nHohe Luftfeuchtigkeit ist auf Mallorca einer der häufigsten Auslöser für Schimmelschäden in Wohnräumen.\n\nDas Thema Feuchtigkeit betrifft nahezu jede Immobilie auf Mallorca — besonders in den Wintermonaten.\n```", "text_hash": "7b07da3ee720eff9aab2629a9833567551b074bc35ab6198b9273679e3a25105"}, {"chunk_key": "c2c0311e6dab1c3380a09ef4c8aa06c5b45852f7d5bd5f3fa59c922fecc48c11", "chunk_index": 10, "heading": "Signal 17b7738a — mallorca_news, zurueckstellen", "text": " Auslöser für Schimmelschäden in Wohnräumen.\n\nDas Thema Feuchtigkeit betrifft nahezu jede Immobilie auf Mallorca — besonders in den Wintermonaten.\n```\n### Signal 17b7738a — mallorca_news, zurueckstellen\n\n**VORHER:** Caption erzeugt mit Rohtext \"Community-Relevanz und Sichtbarkeit aufbauen\"\n\n**NACHHER:** Gate blockiert — `briefing_freigabe=zurueckstellen`", "text_hash": "9f2bd70b1706e88511e5c14ff6c5fe8ef9545fb8e3e72124e99bbc1eed3bcfe7"}, {"chunk_key": "83e406146b90052c610dd7b6d2ce7fdcbe9f011450427ff5a6e1ea3da61967c0", "chunk_index": 11, "heading": "Signal 7647e636 — ferienimmobilie, Eigentuemer-Tipp", "text": "VORHER:** Caption erzeugt mit Rohtext \"Community-Relevanz und Sichtbarkeit aufbauen\"\n\n**NACHHER:** Gate blockiert — `briefing_freigabe=zurueckstellen`\n### Signal 7647e636 — ferienimmobilie, Eigentuemer-Tipp\n\n**VORHER:**\n```\nMarktueberblick und Kontextwissen fuer Interessierte ← ROHTEXT + Umlautfehler\n\nImmobilienwert auf Mallorca langfristig schuetzen — das betrifft Mallorca-Eigentümer direkt.\n ↑ Umlautfehler ↑ ROHTEXT\n```\n\n**NACHHER:**\n```\nProfessionelle Betreuung schützt den Wert Ihrer Ferienimmobilie auf Mallorca langfristig.\n\nGut betreute Immobilien auf Mallorca erzielen höhere Renditen und bereiten weniger Überraschungen.\n```\n\n---", "text_hash": "64aa6d3c17beae1163ba4205ad9f05f435af343524eba14f407c28634f69a447"}, {"chunk_key": "41b608f64fc847e487d2fb660a1ee5dfbbae43abcdc8007d34751d6398fbb106", "chunk_index": 12, "heading": "Testergebnisse (7 Cases)", "text": "Ferienimmobilie auf Mallorca langfristig.\n\nGut betreute Immobilien auf Mallorca erzielen höhere Renditen und bereiten weniger Überraschungen.\n```\n\n---\n## Testergebnisse (7 Cases)\n\n| Test | Ergebnis |\n|------|----------|\n| feuchte erlaubt | PASS — kein Rohtext, korrekte Umlaute |\n| wetter_klima erlaubt | SKIP — alle aktiven wetter_klima haben zurueckstellen oder abgelaufen |\n| ferienimmobilie erlaubt | PASS — kein Rohtext |\n| mallorca_news erlaubt | SKIP — alle aktiven mallorca_news haben zurueckstellen |\n| schimmel_risiko erlaubt | PASS — kein Rohtext |\n| zurueckstellen blockiert | PASS — neu: Gate greift korrekt |\n| Todesfall blockiert | PASS — bestehende Regel weiterhin aktiv |\n\n**5/5 tatsächlicher Tests PASS (2 SKIP = DB-Datenlage, kein Code-Problem)**\n\n---", "text_hash": "d192d13f0f36ce06bc45a45795628b8de8adc8e5b4431f5a01bfa7032d6b7e24"}, {"chunk_key": "973fe00d6e8ab853aadde1cc76720861f16428fd88294bcc3a77d5fdf2588f5e", "chunk_index": 13, "heading": "Rohtext-Prüfung (automatisiert)", "text": " |\n| Todesfall blockiert | PASS — bestehende Regel weiterhin aktiv |\n\n**5/5 tatsächlicher Tests PASS (2 SKIP = DB-Datenlage, kein Code-Problem)**\n\n---\n## Rohtext-Prüfung (automatisiert)\n\nDie Testsuite prüft nach jeder Caption-Generierung auf verbotene Strings:\n\n```python\nFORBIDDEN = [\"fuer \", \"fruehzeitig\", \"loesung\", \"schuetzen\",\n \"schimmelpraevention\", \"marktueberblick\", \"eigentuemer erhaelt\",\n \"Kontextwissen fuer\", \"Community-Relevanz\", \"Sichtbarkeit aufbauen\",\n \"MAS als informierte Stimme\"]\n```\n\n**Ergebnis aller 6 generierten Captions:** Kein Rohtext-Leak gefunden.\n\n---", "text_hash": "62a8e4cbfdc648f901232a9a0f9c0a3682e71b6702e146a202a09541c04bd56f"}, {"chunk_key": "548be6128e2835be2dba3667be4bb322e267f9f86e167e9cf66ab1bed3e069d1", "chunk_index": 14, "heading": "Verbleibende Einschränkungen", "text": ", \"Sichtbarkeit aufbauen\",\n \"MAS als informierte Stimme\"]\n```\n\n**Ergebnis aller 6 generierten Captions:** Kein Rohtext-Leak gefunden.\n\n---\n## Verbleibende Einschränkungen\n\n| Einschränkung | Schwere | Erklärung |\n|---------------|---------|-----------|\n| Thematische Mismatches (ferienimmobilie, schimmel_risiko) | MITTEL | Radar/Classifier-Problem — nicht Caption-Layer-Problem |\n| wetter_klima: keine aktiven pruefen-Signale | STRUKTURELL | TTL < 24h, alle abgelaufen oder zurueckstellen |\n| Wiederholung bei gleicher Kategorie + Post-Typ | NIEDRIG | Template-Engine ohne LLM — normale Einschränkung |\n| Interner Identifier \"Eigentuemer-Tipp\" in briefing_post_typ | TRIVIAL | Cockpit-Anzeige; kein Einfluss auf Caption-Output |\n\n---\n\n*Erstellt: 2026-05-28 | Autor: AG (Claude Sonnet 4.6)*\n*Rohtext-Leaks: 0 | Umlaut-Fixes: 19 | Gate-Blockierungen: 4/4 korrekt*", "text_hash": "b158b9c83cfd0586366c5494b3f121c936597c8d090ec86520335546fb124a36"}], "elapsed_s": 0.059}