buzz-rss/AGENTS.md
Eddy de Vink ac30575660 v1.15.0: filter vereenvoudigd naar drie regels — 30 semantische groepen i.p.v. families+whitelist+blacklist
- Strip de filter terug tot: (1) sterk signaal in de titel -> door;
  (2) score van unieke semantische groepen >= 3 met titel-signaal -> door;
  (3) anders weg. Geen whitelist (82 termen), geen blacklist, geen span-merge,
  geen dienststoring-titelanker meer; woordgrenzen/lookbehinds weren de
  bekende botsingen structureel (schoolbus/VW-bus/stationsstraat/stationair/
  treinstraat/treinweg).
- Lijsten 49 families + 82 whitelist + 2 blacklist = 133 -> 16 sterk + 14
  ambigu = 30 groepen; filterzone 524 -> ~292 regels; match-methodes 4 -> 2.
- Vijf historische uitzonderings-families geschrapt (busongeluk, sein, breng,
  hermes, inchecken, kaartje, rails, staking, e.d.) — die woorden leveren nu
  0 signalen op en de bekende false positives blijven geweerd.
- Completheids-audit ving de Maaslijn/Nedersaksenlijn/Kamperlijn/waterbus-
  regressie op (hersteld); resterende zero-hit-kandidaten geen wijziging.
- validate_filter.py: invarianten 1-3 + 113 regressie-cases (90 onveranderd
  groen + 23 nieuw); prompt-matrix 27/27.
- Gedragswijziging op 45 productiedagen: uitsluitend false positives extra
  geweerd (buitenlandse veerboot-rampen, Zwitsers busongeluk, delftopzondag
  tram+halte, Cox/RET, tram-blokkade); 0 recalls verloren.
- README/AGENTS.md/vault bijgewerkt.
2026-09-13 09:28:28 +02:00

2.5 KiB

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.