From 8c4ef6b2cf7d05d32ad74767c89bbba9242df6e1 Mon Sep 17 00:00:00 2001 From: UserIsMH Date: Fri, 1 May 2026 18:52:02 +0200 Subject: [PATCH 1/3] =?UTF-8?q?CATEGORY=5FREPUTATION:=20Schl=C3=BCssel=20a?= =?UTF-8?q?n=20aktuelle=20DB-Werte=20angepasst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Reputation-Map nutzte veraltete Schlüssel (presseagenturen, behoerden, nachrichten_de/int), die nirgends in der DB vorkamen — die DB hat nachrichtenagentur, behoerde, oeffentlich-rechtlich, qualitaetszeitung, think-tank, regional, telegram, boulevard. Folge war ein stiller Bug: alle hochwertigen Quellen (Reuters, ZDF, tagesschau, Spiegel, FAZ, BMI etc.) bekamen den Default-Score 0.4 wie "sonstige" und wurden in der Relevanz-Sortierung nicht bevorzugt. Map jetzt vollständig auf aktuelle Kategorie-Werte: - nachrichtenagentur, behoerde: 1.00 - oeffentlich-rechtlich: 0.95 - qualitaetszeitung, think-tank: 0.85 - fachmedien: 0.80 - international: 0.75 - regional: 0.65 - telegram: 0.50 - sonstige: 0.40 - boulevard: 0.30 Test mit 200 zufälligen Artikeln aus der Live-DB: 155 besser bewertet, 0 schlechter, 45 unverändert. Stärkster Effekt bei ÖR (+0.165), Nachrichtenagenturen (+0.18), Qualitätszeitungen (+0.135). Co-Authored-By: Claude Opus 4.7 (1M context) --- src/agents/orchestrator.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/agents/orchestrator.py b/src/agents/orchestrator.py index e8cc76d..72bb3a1 100644 --- a/src/agents/orchestrator.py +++ b/src/agents/orchestrator.py @@ -21,15 +21,21 @@ from source_rules import ( logger = logging.getLogger("osint.orchestrator") -# Reputations-Score nach Quellenkategorie (für Relevanz-Scoring) +# Reputations-Score nach Quellenkategorie (fuer Relevanz-Scoring). +# Keys muessen mit den tatsaechlichen DB-Werten in sources.category uebereinstimmen +# (siehe DOMAIN_CATEGORY_MAP in source_rules.py). CATEGORY_REPUTATION = { - "nachrichten_de": 0.9, - "nachrichten_int": 0.9, - "presseagenturen": 1.0, - "behoerden": 1.0, - "fachmedien": 0.8, - "international": 0.7, - "sonstige": 0.4, + "nachrichtenagentur": 1.0, # Reuters, AP, dpa, AFP — Primärquellen + "behoerde": 1.0, # BMI, BSI, Europol — offizielle Quellen + "oeffentlich-rechtlich": 0.95, # tagesschau, ZDF, ARD, BBC, ORF + "qualitaetszeitung": 0.85, # Spiegel, Zeit, FAZ, NZZ, Süddeutsche + "think-tank": 0.85, # SWP, IISS, Brookings, Chatham House + "fachmedien": 0.8, # heise, golem, netzpolitik, Handelsblatt + "international": 0.75, # CNN, Guardian, NYT, Al Jazeera, France24 + "regional": 0.65, # regionale Tageszeitungen + "telegram": 0.5, # OSINT-Kanaele — gemischte Qualitaet + "sonstige": 0.4, # unkategorisiert + "boulevard": 0.3, # Bild, Sun etc. } # Research-Modus: Automatisch 3 Durchläufe für optimale Ergebnisse -- 2.49.1 From 62c0be64eed0ce6390a5ac15956f44993c91ef55 Mon Sep 17 00:00:00 2001 From: UserIsMH Date: Fri, 1 May 2026 21:59:46 +0200 Subject: [PATCH 2/3] =?UTF-8?q?Analysepipeline:=20Reihenfolge=20"Fakten=20?= =?UTF-8?q?pr=C3=BCfen"=20vor=20"Lagebild=20verfassen"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reihenfolge in der Pipeline-Anzeige getauscht — passt zur perspektivischen Backend-Umstellung (Faktencheck-Output soll als Kontext ins Lagebild einfließen, statt parallel zu generieren). Backend läuft aktuell noch parallel; sobald die sequenzielle Variante mit Kontext-Übergabe steht, stimmt die Anzeige mit dem realen Flow überein. Im 3x3-Snake-Layout liegt jetzt: Reihe 2: Relevanz bewerten → Orte erkennen → Fakten prüfen Reihe 3: Lagebild verfassen → Qualitätscheck → Benachrichtigen Co-Authored-By: Claude Opus 4.7 (1M context) --- src/services/pipeline_tracker.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/services/pipeline_tracker.py b/src/services/pipeline_tracker.py index 27bf724..5ec0e82 100644 --- a/src/services/pipeline_tracker.py +++ b/src/services/pipeline_tracker.py @@ -50,18 +50,18 @@ PIPELINE_STEPS = [ "icon": "map-pin", "tooltip": "Aus den Meldungen werden Ortsangaben erkannt und auf der Karte verortet.", }, - { - "key": "summary", - "label": "Lagebild verfassen", - "icon": "file-text", - "tooltip": "Aus allen geprüften Meldungen wird ein zusammenhängendes Lagebild geschrieben, mit Quellenangaben am Text.", - }, { "key": "factcheck", "label": "Fakten prüfen", "icon": "shield", "tooltip": "Behauptungen aus den Meldungen werden gegeneinander abgeglichen: Bestätigt? Umstritten? Noch unklar?", }, + { + "key": "summary", + "label": "Lagebild verfassen", + "icon": "file-text", + "tooltip": "Aus allen geprüften Meldungen wird ein zusammenhängendes Lagebild geschrieben, mit Quellenangaben am Text.", + }, { "key": "qc", "label": "Qualitätscheck", -- 2.49.1 From 26fac0e824080f96c3e62116c547d545f2bd74cb Mon Sep 17 00:00:00 2001 From: UserIsMH Date: Fri, 1 May 2026 22:06:06 +0200 Subject: [PATCH 3/3] Analysepipeline: Reset auf "pending" beim Refresh-Start MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beim ersten Schritt (sources_review) eines neuen Refreshs werden alle nachfolgenden Schritte sichtbar auf "pending" (grau) zurückgesetzt. Vorher hingen sie weiterhin als "done" vom letzten Refresh in grün herum, während die Pipeline schon einen neuen Durchlauf zeigte. - Bedingung in pipeline.js entschärft: nicht mehr nur bei pass_number > 1 (Multi-Pass), sondern bei jedem ersten Schritt-Active - Bei Reset wird das ganze Stage neu gezeichnet (nicht nur der einzelne Block), damit die zurückgesetzten Schritte tatsächlich grau erscheinen - Greift sowohl bei normalem Refresh als auch bei Multi-Pass-Wechsel einer Research-Lage Co-Authored-By: Claude Opus 4.7 (1M context) --- src/static/dashboard.html | 2 +- src/static/js/pipeline.js | 21 +++++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/static/dashboard.html b/src/static/dashboard.html index ecee0b2..2b4921a 100644 --- a/src/static/dashboard.html +++ b/src/static/dashboard.html @@ -646,7 +646,7 @@ - + diff --git a/src/static/js/pipeline.js b/src/static/js/pipeline.js index 0f3551b..a4b184b 100644 --- a/src/static/js/pipeline.js +++ b/src/static/js/pipeline.js @@ -141,20 +141,29 @@ const Pipeline = { } } - // Wenn ein neuer Pass startet (pass_number > prev und status="active" beim ERSTEN step): - // alle Schritte zurück auf pending setzen, damit die Animation neu durchläuft. + // Wenn der ERSTE Schritt (sources_review) auf "active" geht, beginnt ein neuer + // Refresh oder ein neuer Multi-Pass-Durchlauf — alle nachfolgenden Schritte auf + // "pending" (grau) zuruecksetzen, damit der User sieht: das ist neu und + // noch nicht durchlaufen. Sonst stehen sie als "done" vom letzten Mal da. + let didReset = false; if (d.status === 'active' && this._definition && this._definition.length - && key === this._definition[0].key && passNr > 1 && (!prev || prev.pass_number < passNr)) { - // Alle anderen Steps in "pending" zurueck (visuell), Werte behalten wir + && key === this._definition[0].key) { this._definition.forEach(s => { if (s.key !== key && this._stateByKey[s.key]) { this._stateByKey[s.key].status = 'pending'; + didReset = true; } }); } - this._patchBlock(key); - this._patchMiniBlock(key); + if (didReset) { + // Beim Reset alle Bloecke neu zeichnen, nicht nur den aktuellen + this._render(); + this._renderMini(); + } else { + this._patchBlock(key); + this._patchMiniBlock(key); + } }, _onRefreshDone(msg) { -- 2.49.1