fix(source_suggester): Strategie-Eskalation vor Karteileichen ausfuehren

Live-Test heute zeigte: Strategie-Eskalations-Heuristik hat keine Vorschlaege
erzeugt, obwohl Verfassungsschutz und Rheinische Post beide fetch_strategy=
googlebot UND status=error haben. Grund: die Karteileichen-Heuristik lief
zuerst und fing diese Sources schon ein (article_count=0, weil googlebot-
Workaround blockiert), sodass die Doppel-Vermeidung der Strategie-
Eskalations-Stufe alles uebersprungen hat.

Fix: Reihenfolge in generate_suggestions umgekehrt. Strategie-Eskalation
zuerst (spezifischere Diagnose mit Begruendung "Workaround greift nicht:
HTTP 403"), Karteileichen danach (generische Auffanglogik).
Dieser Commit ist enthalten in:
Claude
2026-05-09 15:43:36 +00:00
Ursprung 49c557205d
Commit 5f053a3eca

Datei anzeigen

@@ -179,19 +179,22 @@ async def generate_strategy_escalation_suggestions(db: aiosqlite.Connection) ->
async def generate_suggestions(db: aiosqlite.Connection) -> int: async def generate_suggestions(db: aiosqlite.Connection) -> int:
"""Generiert Quellen-Vorschläge basierend auf Health-Checks und Lückenanalyse. """Generiert Quellen-Vorschläge basierend auf Health-Checks und Lückenanalyse.
Drei Stufen: Drei Stufen, in dieser Reihenfolge ausgeführt (spezifisch -> generisch -> KI):
1. Deterministisch: Karteileichen-Heuristik (article_count=0 oder >60d stumm) 1. Deterministisch: Strategie-Eskalations-Heuristik (fetch_strategy=googlebot
erzeugt sofort deactivate_source-Vorschläge ohne KI-Aufruf.
2. Deterministisch: Strategie-Eskalations-Heuristik (fetch_strategy=googlebot
oder paywall, aber Reachability weiter error) erzeugt deactivate_source- oder paywall, aber Reachability weiter error) erzeugt deactivate_source-
Vorschläge mit Priorität 'high'. Vorschläge mit Priorität 'high'. Spezifischste Diagnose: "Workaround
greift nicht". Läuft ZUERST, damit diese Sources nicht von der
generischeren Karteileichen-Stufe weggefangen werden.
2. Deterministisch: Karteileichen-Heuristik (article_count=0 oder >60d stumm)
erzeugt sofort deactivate_source-Vorschläge für alle übrigen toten
Quellen ohne KI-Aufruf.
3. KI-basiert: Haiku schaut sich Quellensammlung + Health-Probleme an 3. KI-basiert: Haiku schaut sich Quellensammlung + Health-Probleme an
und schlägt weitere Verbesserungen vor (add_source, deactivate_source, und schlägt weitere Verbesserungen vor (add_source, deactivate_source,
fix_url, ...). fix_url, ...).
Rückgabe ist die Gesamtzahl neu erzeugter Vorschläge aller Stufen. Rückgabe ist die Gesamtzahl neu erzeugter Vorschläge aller Stufen.
""" """
stale_count = await generate_stale_deactivation_suggestions(db)
strategy_count = await generate_strategy_escalation_suggestions(db) strategy_count = await generate_strategy_escalation_suggestions(db)
stale_count = await generate_stale_deactivation_suggestions(db)
logger.info("Starte Quellen-Vorschläge via Haiku...") logger.info("Starte Quellen-Vorschläge via Haiku...")