Helper aus AegisSight-Monitor/src/services/org_settings.py uebernommen.
Wird in Phase 7 vom Verwaltungs-Org-Router verwendet, um output_language
beim Org-Anlegen/Bearbeiten zu setzen.
Phase 1 von 8 (eng_demo / Org-Sprache).
Service-Module (source_classifier, external_reputation) liegen jetzt in shared/services/, Endpoints unter /api/sources/classification/* sind hier statt im Monitor:
- classification/{stats,queue,bulk-classify,bulk-approve}
- {id}/classification/{approve,reject,reclassify}
- external-reputation/sync
modalSource erweitert um Klassifikations-Section (Politik, Medientyp, Reliability, state-affiliated, Land, 12 Alignment-Chips). Neuer Sub-Tab Klassifikation mit Review-Queue, Pending-Counter, Bulk-Actions. Auth via get_current_admin, Audit-Logging.
Begleit-Refactor: Monitor verliert die Klassifikations-UI/-Endpoints separat.
Drei zusammenhaengende Verbesserungen am Quellen-Health-Bereich:
1. shared/services/source_suggester.py:
- sync mit Monitor commit 49c5572.
- Neue Funktion generate_strategy_escalation_suggestions: erzeugt
deactivate-Vorschlaege fuer Quellen mit fetch_strategy=googlebot|
paywall, deren Reachability-Check trotzdem error meldet.
2. source-health.js: Loesung-suchen-Button erweitert.
Bisher nur bei status=error AND check_type=reachability. Jetzt auch
bei status=warning AND check_type=feed_validity (z.B. "Feed
erreichbar aber leer"). Backend-Endpoint /api/sources/health/
search-fix wird in beiden Faellen aufgerufen, Claude sucht eine
bessere URL fuer die Quelle.
3. source-health.js: Trend-Delta im Counter.
Liest healthHistoryCache[1] (vorletzter Run) und vergleicht mit
aktuellen errors/warnings/ok. Zeigt z.B. "3 Fehler (+2)" rot oder
"143 Warnungen (-15)" gruen. Bei steigenden ok-Counts ist Plus
gruen, bei steigenden Fehlern ist Plus rot. Wenn der vorletzte
Run nicht verfuegbar (Initial-Lauf): kein Delta.
Cache-Buster source-health.js auf 20260509l gebumpt.
Spiegelung von AegisSight-Monitor commit d973dc7. Identische Datei
(Pre-Commit-Hook prueft Drift gegen Monitor-Master = 0).
Neue Funktion generate_stale_deactivation_suggestions wird beim
manuellen Health-Check-Run ueber das Verwaltungsportal-UI aufgerufen
(/api/sources/health/run-stream am Ende). Karteileichen-Quellen
landen damit im Vorschlaege-Tab als deactivate_source-Vorschlaege
und koennen per Klick angenommen werden.
- migrations/2026-05-09d_source_health_history.py NEU: source_health_history-Tabelle
(Append-only Verlauf der Health-Check-Runs mit run_id und archived_at)
- shared/services/source_health.py:
- tenant_id IS NULL Filter raus -> auch Tenant-Quellen werden gecheckt
- Mojibake (Triple-Encoded UTF-8) via ftfy gefixt
- DELETE FROM source_health_checks: vorher Stand mit run_id (uuid4) in
source_health_history archivieren -> kein Datenverlust mehr
- User-Agent + Timeout aus config.HEALTH_CHECK_* statt hardcoded
- routers/sources.py /health/run-stream: gleiche Änderungen wie oben
- config.py: HEALTH_CHECK_USER_AGENT + HEALTH_CHECK_TIMEOUT_S ergänzt