feat(fimi): EUvsDisinfo-Pflicht-Disclaimer + Doku

Rechtslage: EUvsDisinfo (EEAS East StratCom Task Force), Datensatz CC BY-SA 4.0.
Pflichten: Attribution (erfuellt via Case-Links), keine Verfaelschung, Disclaimer
"keine offizielle EU-Position". Disclaimer dezent als graue Fusszeile der
FIMI-Qualitaetsleiste (UI.fimiDisclaimerHtml) und im Tooltip der Einzeltreffer.
CLAUDE.md um FIMI-Abschnitt inkl. Rechtslage ergaenzt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
Claude Code
2026-06-14 09:55:35 +00:00
Ursprung f32b8a8ec6
Commit 8b84447ad4
3 geänderte Dateien mit 67 neuen und 0 gelöschten Zeilen

Datei anzeigen

@@ -221,6 +221,49 @@ Changelog-Kategorien in TaskMate:
- 35 = Changelog Website
- 36 = Changelog TaskMate
## FIMI / Counter-Disinformation (Passiver Modus)
Abgleich von Monitor-Artikeln gegen den EUvsDisinfo-Falschbehauptungsbestand,
vollstaendig im Monitor (kein Vigil-Call). Zweistufig:
```yaml
stufe_1_embedding_vorfilter:
modell: sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 (384-dim)
service: src/services/embeddings.py (Lazy-Singleton, Modell-Cache ~/.cache/huggingface mit Vigil geteilt)
matcher: src/services/fimi_matcher.py (Claim-Embeddings als numpy-Matrix im RAM, Kosinus)
threshold: 0.55 Floor, 0.65 fuer Uebergabe an Stufe 2
zweck: thematisch nahe Kandidaten finden (hoher Recall)
stufe_2_llm_verifikation:
modell: CLAUDE_MODEL_FAST (Haiku), tools=None
zweck: "verbreitet die Behauptung" vs. "berichtet/widerlegt" trennen (Embedding ist themen-, nicht haltungssensitiv)
ergebnis: nur bestaetigte Verbreitungen werden gespeichert, inkl. woertlichem Zitat
env: FIMI_VERIFY_ENABLED (default true), FIMI_VERIFY_CONCURRENCY (default 4)
daten:
tabelle_claims: fimi_claims (id=Vigil-claim.id, embedding-BLOB, source_ref euvsdisinfo:<slug>, case_url)
tabelle_treffer: article_fimi_matches (article_id, fimi_claim_id, score, role, matched_text)
marker: articles.fimi_checked_at (verhindert Re-Encoding gepruefter Artikel)
import: scripts/import_fimi_claims.py (Sync aus vigil-data/vigil.db, idempotenter UPSERT)
pipeline:
hook: orchestrator nach dem Translator-Schritt, nur neue Artikel des Refreshes (match_article_ids)
endpoints:
GET /incidents/{id}/fimi-matches: Treffer pro Artikel inkl. Provenienz (Andockpunkt 1)
GET /incidents/{id}/fimi-summary: Aggregat fuers Lagebild (Andockpunkt 3)
sources-summary: fimi_match_count pro Quelle (Andockpunkt 2)
frontend:
andockpunkt_1: dezenter Inline-Hinweis am Artikel (Quellen-Detailliste)
andockpunkt_2: Track-Record-Badge pro Quelle
andockpunkt_3: Qualitaetsleiste ueber dem Lagebild + aufklappbare Top-Narrative
rechtslage_euvsdisinfo:
quelle: EUvsDisinfo, Projekt des EEAS (East StratCom Task Force)
lizenz: Forschungsdatensatz CC BY-SA 4.0; EU-Inhalte mit Quellenangabe weiterverwendbar
pflichten: Attribution (Quelle + Case-Link), keine Verfaelschung, Disclaimer "keine offizielle EU-Position"
disclaimer_ort: Fusszeile der FIMI-Qualitaetsleiste (UI.fimiDisclaimerHtml) + Tooltip der Einzeltreffer
provenienz_leitplanke: Monitor wertet nie selbst, zeigt nur was EUvsDisinfo als widerlegt fuehrt
offene_punkte:
- Verifizierer-Prompt feinjustieren (seltene FP bei serioesen Medien, die ueber eine Aussage berichten)
- Per-Satz-Extraktion (Vigil Phase 2) als Praezisionsstufe optional nachruestbar
```
## Staging-Umgebung
```yaml