# buzz-rss — verplichte regels bij elke wijziging (wordt automatisch bij sessiestart geladen) Maubot-plugin `nl.eddydevink.rss` (RSS → Matrix + WhatsApp), met een OV-nieuwsfilter dat **vast in code** staat. ## Verplicht vóór elke filterwijziging 1. Lees het **volledige classificatiebeleid** in `buzzrss/bot.py` — het blok BOVEN `MATCH_FILTER_STRONG` (drie regels: sterk signaal in de titel → door; score van unieke semantische groepen ≥ 3 mét titel-signaal → door; anders wegfilteren. Sterk=2, ambigu=1/2, drempel 3; geen whitelist/blacklist — woordgrenzen weren de botsingen. Werkwijze voor nieuwe woorden = beleidsblok). 2. Draai **`python3 validate_filter.py`** (repo-root) — de filter-invarianten en regressie-cases MOETEN groen zijn voordat filtercode gecommit/gedeployed wordt. 3. **Compleetheids-audit (verplicht, besluit 2026-09-12):** check bij elke filterwijziging óók of de woordenlijsten compleet zijn — draai de OV-gap-scan over de afgewezen artikelen van de OV-specialist-feeds (SpoorPro.nl / Treinreiziger.nl / Mobiliteit, query op `entry` in schema `mbp_rss`), klasseer nieuwe kandidaten volgens het beleid (minimaal één extra LLM; enige stem TWIJFEL/NIET-OV => zwak) en vul de families desgevraagd aan. Exacte procedure = stap (e) in het beleidsblok in `buzzrss/bot.py`. 4. Precision-first (gebruikersbesluit 2026-09-10): **liever een OV-bericht te veel gefilterd dan een niet-OV-bericht te veel doorgelaten.** Bij twijfel over een woord: ambigu maken (eigen groep), nooit sterk. ## Niet doen - **NOOIT** maubot `reload` gebruiken. Deploy = mbp bouwen uit de VOLLEDIGE bron (incl. `base-config.yaml`, anders `BaseMissingError`), upload met `allow_override=true`, daarna container-restart. Exacte procedure: `skill://maubot`. - **NOOIT** de wwebjs-container of WhatsApp-sessies (her)starten/beëindigen — meerdere bots delen die sessies. - Productie draait het **geïnstalleerde mbp**, niet deze werkdirectory: een commit is pas actief na build+upload+restart. ## Bekend — NIET onderzoeken - Na een deploy (upload + container-restart) staan er 2 verse `run complete`-regels in de run-log binnen enkele seconden: maubot herstart de instance bij een nieuwe plugin-versie (upstream) én de container-restart start opnieuw, elke start doet direct één poll. Dat is géén handler-lek en hoort niet onderzocht te worden (besluit 2026-09-11). Alleen verdubbeling op élke poll-run is een probleem. Zie `skill://maubot` → Veelgemaakte fouten.