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:
43
CLAUDE.md
43
CLAUDE.md
@@ -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
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren