{"queue_id": 42, "relative_path": "Solutions/SOL_006_MINIFIX_PACK2_REPORT.md", "title": "SOL_006_MINIFIX_PACK2_REPORT", "import_key": "12e4eef6b897b82157977b2c2d4a618e8986b84c18c95f178f163091093f7c7e", "chunk_count": 16, "created_nodes": 0, "created_relationships": 0, "body": null, "chunks": [{"chunk_key": "7065c1ffdb5c5ca0004e3fc1f3bcd51a806be085b77f02fb1db72e863c3a91ad", "chunk_index": 0, "heading": "SOL_006_MINIFIX_PACK2_REPORT", "text": "# SOL_006_MINIFIX_PACK2_REPORT\nDrei Restprobleme aus SOL-006 behoben — minimale, isolierte Fixes\nDatum: 2026-05-28 | Status: Abgeschlossen | Testergebnis: 9/9 PASS\n\n---", "text_hash": "3ebafa3236d9853a7cd99f7aacf7107602192829530a331c63ac154ae65348ad"}, {"chunk_key": "9a8fe3291557c90ecfe639c022c7b5caa78c7069926f0d0c3e47ce3fc70fa283", "chunk_index": 1, "heading": "Uebersicht", "text": "PACK2_REPORT\nDrei Restprobleme aus SOL-006 behoben — minimale, isolierte Fixes\nDatum: 2026-05-28 | Status: Abgeschlossen | Testergebnis: 9/9 PASS\n\n---\n## Uebersicht\n\n| Fix | Datei | Problem | Status |\n|-----|-------|---------|--------|\n| FIX-1 | app.py | mal_rel=0 Signale im Cockpit | Behoben |\n| FIX-2 | signal_classifier.py | Goodbye-Deutschland TV → schimmel_risiko | Behoben |\n| FIX-3 | signal_classifier.py | Spanische Lebensmittel-Keywords fehlen | Behoben |\n\n---", "text_hash": "595a7c55f0393296fbd1e86a31db997725d0f6a26f898420fc37c6cb3eafc2c4"}, {"chunk_key": "110f16bd8b30bfdabc62096baac60c8b4fb73579dfb5f800947798c0d5cf0a03", "chunk_index": 2, "heading": "Backups", "text": "ier.py | Goodbye-Deutschland TV → schimmel_risiko | Behoben |\n| FIX-3 | signal_classifier.py | Spanische Lebensmittel-Keywords fehlen | Behoben |\n\n---\n## Backups\n\n```\n/opt/struktur/social-media-agent/app.py.bak.minifix2\n/opt/struktur/social-media-radar/classification/signal_classifier.py.bak.minifix2\n```\n\nRollback:\n```bash\ncp /opt/struktur/social-media-agent/app.py.bak.minifix2 \\\n /opt/struktur/social-media-agent/app.py\ncp /opt/struktur/social-media-radar/classification/signal_classifier.py.bak.minifix2 \\\n /opt/struktur/social-media-radar/classification/signal_classifier.py\nsystemctl restart social-media-agent\n```\n\n---", "text_hash": "a83334c7e12fe23939e027642ec7f01577899a479da47ee1375b233f1f9640a4"}, {"chunk_key": "37ad9313a15dbdc03b2f0a99b76a7e31007fc415bb4c98633a45068715280ba7", "chunk_index": 3, "heading": "FIX-1 — mal_rel=0 Cockpit-Noise", "text": "nal_classifier.py.bak.minifix2 \\\n /opt/struktur/social-media-radar/classification/signal_classifier.py\nsystemctl restart social-media-agent\n```\n\n---\n## FIX-1 — mal_rel=0 Cockpit-Noise\n\n**Problem:** 7 Signale ohne Mallorca-Bezug (UK-Sun, ZDFheute, Mercadona-Tipps,\nLas Vegas, generische Ratgeber) erschienen im Standard-Cockpit weil nur\n`radar_score >= 31` als Filter existierte.\n\n**Geaenderte Datei:** `/opt/struktur/social-media-agent/app.py`\n\n**Einfuegestelle:** SQL-Query in `get_radar_signals()`, direkt nach `WHERE radar_score >= 31`\n\n```python", "text_hash": "545b2393a053bf02f6f6417db73583223dc2b60cd70395aab1617d3bed46cc22"}, {"chunk_key": "84f3c56b6c9630b502c58ffb877b4b004795ae6d491b5dd1adfa2d51617c66cf", "chunk_index": 4, "heading": "VORHER:", "text": "** `/opt/struktur/social-media-agent/app.py`\n\n**Einfuegestelle:** SQL-Query in `get_radar_signals()`, direkt nach `WHERE radar_score >= 31`\n\n```python\n# VORHER:\n\" WHERE radar_score >= 31\"", "text_hash": "0a410d5410db87bdae9741db1862e2ab915fa7cb36fbe0724fa63aa1dd1ab907"}, {"chunk_key": "236d3621fc03d26f55e4bdf8c73b5d1fc01cea183e6e01f564ce961ce2f4e6c1", "chunk_index": 5, "heading": "NACHHER:", "text": "# VORHER:\n\" WHERE radar_score >= 31\"\n# NACHHER:\n\" WHERE radar_score >= 31\"\n\" AND (mallorca_relevance > 0 OR director_action IN ('pruefen','veroeffentlichen'))\"\n```\n\n**Effekt:**\n\n| | Signale |\n|-|---------|\n| Cockpit vorher | 327 |\n| Cockpit nachher | 320 |\n| Gefiltert | 7 |\n\n**Gefilterte Signale (alle korrekt):**\n\n| Signal (gekuerzt) | Score | mal_rel |\n|-------------------|-------|---------|\n| \"The 7 warning signs mould in your home...\" (UK) | 50 | 0 |\n| \"Gegen Luftfeuchtigkeit und Schimmel...\" (DE) | 42 | 0 |\n| \"Mercadona dice adiós al moho...\" (ES) | 42 | 0 |\n| \"Kondenswasser an der Innenseite...\" (DE) | 36 | 0 |\n| \"5 easy ways to stop mould...\" (UK) | 34 | 0 |\n| \"Manual práctico para prevenir las humedades...\" (ES) | 32 | 0 |\n| \"Black mold destroys Las Vegas apartment...\" (US) | 32 | 0 |\n\n**Invariante:** Kein echtes Mallorca-Signal (mal_rel>0) gefiltert.\nSignale mit director_action='pruefen' oder 'veroeffentlichen' bleiben immer sichtbar\n(auch wenn mal_rel=0, da vom Director explizit markiert).\n\n---", "text_hash": "b524f884d9aef70a69ff7a47aa677e5f9caf6b7ea24d22dc07d5b9ed8d9ee875"}, {"chunk_key": "4d3b06a0a6ddde31fb3b0c63de28d0c0fe085effee8f37b83f541ef5da9103c2", "chunk_index": 6, "heading": "FIX-2 — Goodbye-Deutschland TV-Muster", "text": "t.\nSignale mit director_action='pruefen' oder 'veroeffentlichen' bleiben immer sichtbar\n(auch wenn mal_rel=0, da vom Director explizit markiert).\n\n---\n## FIX-2 — Goodbye-Deutschland TV-Muster\n\n**Problem:** Signale mit TV-/Reality-/Entertainment-Kontext (\"Goodbye Deutschland\",\nVox, RTL2 etc.) landeten bei `schimmel_risiko`, weil der FOOD_CONTEXT Guard nicht\nTV-Kontext abdeckte.\n\n**Geaenderte Datei:** `/opt/struktur/social-media-radar/classification/signal_classifier.py`\n\n**Aenderung 1:** Neue `TV_CONTEXT_KW` Liste (nach `FOOD_CONTEXT_KW`)\n\n```python\nTV_CONTEXT_KW = [\n \"goodbye deutschland\", \"vox \", \" vox,\", \" rtl2\",\n \"kabel eins\", \"auswanderer\", \"reality show\", \"reality-show\",\n \"tv-bericht\", \"fernsehbericht\", \"reportage vox\", \"doku vox\",\n]\n```\n\n**Aenderung 2:** `tv_hit` Guard in Kategorie-Zuweisung\n\n```python", "text_hash": "901479686d14cd19d20eab0a55a3529f1554fc4646033cdbf18a476f797ac7f8"}, {"chunk_key": "340834243dc135f6c03ff0f8e3c1824c27f469af4c6a7292f52e3b1831759edb", "chunk_index": 7, "heading": "Nach food_hit:", "text": "ality-show\",\n \"tv-bericht\", \"fernsehbericht\", \"reportage vox\", \"doku vox\",\n]\n```\n\n**Aenderung 2:** `tv_hit` Guard in Kategorie-Zuweisung\n\n```python\n# Nach food_hit:\ntv_hit = any(kw in t for kw in TV_CONTEXT_KW)", "text_hash": "1c1b3584623d2c8b1ce4f5697fd0119ee62faf2c486558aa034f6ae5b3c0c728"}, {"chunk_key": "33f75b9d68af52033a089a0148b862692c231e3210b284cc7c672ed20e9afcde", "chunk_index": 8, "heading": "Kategorie:", "text": "# Nach food_hit:\ntv_hit = any(kw in t for kw in TV_CONTEXT_KW)\n# Kategorie:\nif core_hits > 0 and (\"schimmel\" in t or \"mold\" in t or \"moho\" in t) and food_hit == 0 and not tv_hit:\n signal_category = \"schimmel_risiko\"", "text_hash": "0bb22dacdab889ff01b66fe9b37aa75fd67ab652578d3eea6bf0fe077e580e98"}, {"chunk_key": "aebb221cae9c0cac7493ac2b8ada070ead8a3fbd972d611a04b095df4ef7a636", "chunk_index": 9, "heading": "case_types:", "text": "egorie:\nif core_hits > 0 and (\"schimmel\" in t or \"mold\" in t or \"moho\" in t) and food_hit == 0 and not tv_hit:\n signal_category = \"schimmel_risiko\"\n# case_types:\nif (\"schimmel\" in t or \"mold\" in t or \"moho\" in t) and food_hit == 0 and not tv_hit:\n case_types += [\"schimmel_risiko\", \"feuchtefall\"]\n```\n\n**Effekt:** TV-Signale mit Schimmel-Kontext fallen auf `feuchte` (nicht `schimmel_risiko`).\n\n---", "text_hash": "9778ff57f06e4c854f405c5ded7320b5707f18ef63b2c5863bdcd5ae60d4920c"}, {"chunk_key": "99c0312771795b8f8218545db1f6f0e07a89b8b3f93070b4191bde2cd688f7e6", "chunk_index": 10, "heading": "FIX-3 — Spanische Lebensmittel-Keywords", "text": "case_types += [\"schimmel_risiko\", \"feuchtefall\"]\n```\n\n**Effekt:** TV-Signale mit Schimmel-Kontext fallen auf `feuchte` (nicht `schimmel_risiko`).\n\n---\n## FIX-3 — Spanische Lebensmittel-Keywords\n\n**Problem:** REGEL-01 (Lebensmittel-Ausschluss) deckte nur deutsche Keywords ab.\nSpanische Berichte ueber verdorbene Lebensmittel, Salmonellen oder Vergiftungen\nkonnten faelschlich als `schimmel_risiko` klassifiziert werden.\n\n**Geaenderte Datei:** `/opt/struktur/social-media-radar/classification/signal_classifier.py`\n\n**Erweiterung FOOD_CONTEXT_KW:**\n\n```python", "text_hash": "499f80d4481dc07b8e15e1ae7ecb4fd4e59e369eae2f61d1b824bb7ca85b5651"}, {"chunk_key": "27ea51bef6df185f29b305a2400b1a532d7bdfd7f89162e20463e5ee3c6d5ca7", "chunk_index": 11, "heading": "Neu hinzugefuegt:", "text": "ert werden.\n\n**Geaenderte Datei:** `/opt/struktur/social-media-radar/classification/signal_classifier.py`\n\n**Erweiterung FOOD_CONTEXT_KW:**\n\n```python\n# Neu hinzugefuegt:\n\"carne\", \"comida\", \"alimento\", \"alimentaria\", \"lejia\",\n\"salmonela\", \"intoxicacion\", \"contaminacion alimentaria\",\n\"embutido\", \"jamon\", \"queso\",\n```\n\n---", "text_hash": "34e50db2f896bf1af0c1d3f87a612fe93cb8f2a5800dad63d068e52678cb6005"}, {"chunk_key": "e913b51f46f26065d0bbac9d11c30ef8e63c072d55b98d786f0807852e9052b9", "chunk_index": 12, "heading": "Testergebnisse", "text": "carne\", \"comida\", \"alimento\", \"alimentaria\", \"lejia\",\n\"salmonela\", \"intoxicacion\", \"contaminacion alimentaria\",\n\"embutido\", \"jamon\", \"queso\",\n```\n\n---\n## Testergebnisse\n\n**9/9 PASS**\n\n| TC | Test | Ergebnis |\n|----|------|----------|\n| TC-1a | mal_rel=0 Noise dokumentiert | PASS |\n| TC-1b | Echte Mallorca-Signale (rel>0) erhalten | PASS (321 Signale) |\n| TC-2a | Echter Mallorca-Feuchte-Fall: schimmel_risiko | PASS (Score 68) |\n| TC-2b | Echter Mallorca-Feuchte-Fall: mallorca_relevance>0 | PASS |\n| TC-3 | Goodbye Deutschland+Vox: != schimmel_risiko | PASS (feuchte/allgemein) |\n| TC-4 | Echter Schimmel-Fall ohne TV: schimmel_risiko | PASS |\n| TC-5a | \"Intoxicacion por carne\" → != schimmel_risiko | PASS |\n| TC-5b | \"Contaminacion alimentaria por jamon\" → != schimmel_risiko | PASS |\n| TC-6 | \"Moho en piso de alquiler en Palma\" → schimmel_risiko | PASS |\n\n---", "text_hash": "3a65e27b979954d0961e5ea983303afd0f4a2c17507b8156af103c7f5803cea1"}, {"chunk_key": "98ed248eea5279eb75ab182a07e34efc956cbcd0502e1ad952d3a837d3e48a63", "chunk_index": 13, "heading": "Rescore nach Aenderung", "text": "-5b | \"Contaminacion alimentaria por jamon\" → != schimmel_risiko | PASS |\n| TC-6 | \"Moho en piso de alquiler en Palma\" → schimmel_risiko | PASS |\n\n---\n## Rescore nach Aenderung\n\n```\n362 Signale aktualisiert\nScore-Durchschnitt: 36.4 → 36.3 (minimale Aenderung)\nScore-Range: 5-70 (unveraendert)\n```\n\nOperativ-Signale (score>=70): 0 → 0 (unveraendert, korrekt)\n\n---", "text_hash": "442c3078d09561f989921607b94aac5ade41358eced70ccf1cae49cf835e9e1f"}, {"chunk_key": "91fd0c4eb8e696f928e705bfed282914930176cd46506c2f29d436270c1ea022", "chunk_index": 14, "heading": "Hinweise zu bestehenden DB-Signalen", "text": "-Durchschnitt: 36.4 → 36.3 (minimale Aenderung)\nScore-Range: 5-70 (unveraendert)\n```\n\nOperativ-Signale (score>=70): 0 → 0 (unveraendert, korrekt)\n\n---\n## Hinweise zu bestehenden DB-Signalen\n\nBestehende TV-Signale in der DB, die vor diesem Fix als `schimmel_risiko`\nklassifiziert wurden, behalten diese Kategorie wenn ihr Topic-Text kein\nSchimmel-Keyword enthaelt (Kategorie kommt dann aus `base_category` des Rescore).\nNur Signale mit gleichzeitig TV-KW UND Schimmel-Keyword im Text werden neu\nin `feuchte` umkategorisiert.\n\nFuer vollstaendige Neukategorisierung bestehender TV-Signale waere ein\n`rescore.py --reset-category --live` noetig (nicht Teil dieses Fixes).\n\n---", "text_hash": "970c46f8c34089b2341c8deb202df0c88379e672626d71d347075624f985e653"}, {"chunk_key": "f9f102182e7cffa2bc36eff70f9d9fe4829d13974a9ae4fd32a629cc6fa5b2a9", "chunk_index": 15, "heading": "Nicht angefasst (gemaess Aufgabe)", "text": "t.\n\nFuer vollstaendige Neukategorisierung bestehender TV-Signale waere ein\n`rescore.py --reset-category --live` noetig (nicht Teil dieses Fixes).\n\n---\n## Nicht angefasst (gemaess Aufgabe)\n\n- REGEL-04 (Source-Suffix-Fix)\n- Director-System\n- Briefing-System\n- Scheduler\n- Datenbankschema\n- UI ausserhalb Cockpit-Filter\n\n---\n\n*Erstellt: 2026-05-28 | Autor: AG (Claude Sonnet 4.6)*\n*Tests: 9/9 PASS | Syntaxchecks: OK | Service-Restart: OK*", "text_hash": "03e9d3c8306d6177609d5ffa0ba840d9a9b9d32dc561284c5c594f8e281e4a00"}], "elapsed_s": 0.036}