_setup_run_log ruimde handlers alleen op via het instance-attribuut
self._run_logger; bij een maubot-reload is dat op de nieuwe instance weer
None, terwijl de geregistreerde logger (zelfde naam) de oude handler behield.
Elke reload voegde zo een handler toe, waardoor elke poll-run N× werd
gelogd. Fix: logger altijd op naam opruimen.
Regel C: doorlaten bij (titel-match >= 1) of (totaalscore >= 3).
Een treffer in de titel is een sterke OV-intentie (score 2 volstaat);
treffers alleen in de samenvatting moeten dubbel bevestigd worden.
Weert bv. woningbrand-berichten die via 'bussen rijden om'/'busverkeer'
in de lead binnenkwamen, zonder de 112/trein/staking-berichten te raken.
Gevalideerd op 30d kamerhistorie: 96 doorlaat -> 7 geblokkeerd (allemaal ruis).
Deze feeds dragen geen paywall-marker (<premium>/<dpp:paid>); premium-artikelen
leven onder /ps/. Gedeelde helper _is_paywalled_link voor RSS- en JSON-parsing.
- losse 1-hit in summary volstaat niet meer: 'ns-trein' in een
rechtszaak-artikel (stenengooier) telt als 1 cluster en wordt geblokkeerd
- cluster-aware teller: aaneengesloten matches (NS-trein, openbaar vervoer,
pdf) samenvoegen
- bus(?:sen)? suffix: 'Meer bussen naar TU' komt terug
- root-cause config-corruptie: re.sub-replacement de-escaped \\b naar \b
(YAML-backspace); nu regel-bewerking zonder escape-processing
- parse_feed: expliciete aiohttp ClientTimeout(total=20) zodat een hangende
feed nooit de poll blokkeert (sessie had geen total-timeout; feeds bleven
open en semaphore-sloten raakten bezet)
- poll_parallelism_limit: 0 in instance-config (alle feeds parallel)
- RTV Oost-feed vervangen door directe URL (rss/index.xml, geen redirect)
- match_filter is nu instance-config (geldt voor ALLE feeds), niet per
subscription: !rss set-filter <regex> zet het globale filter en slaat
config op; !rss subscriptions toont het globale filter
- v7-migratie: per-subscription kolom match_filter verwijderd
- filter scant titel + HTML-ontdaan summary
- plugin id nl.eddydevink.rss, module buzzrss (uniek, voorkomt botsing met
xyz.maubot.rss die dezelfde 'rss'-module importeert)
- match_filter (v6-migratie, hernoemd van title_exclude_filter): post wordt
alleen verstuurd als de regex matcht op titel OF (HTML-ontdaan) summary
- config-default whitelist voor ov-only: gvb/ebs/connexxion/transdev/keolis/
ret/gvu/bus/metro/tram/trein(verwanten)/ov/ov-staking/staking
- set-filter: lege filter valt terug op config-default