- _filter_passes: 'zwak-alleen in samenvatting' en 'sterk+zwak uitsluitend in
samenvatting' reduceren tot één regel: zonder enig titel-signaal (familie-hit,
whitelist-term of storingszin) mag de score geen zwak woord bevatten.
Equivalentie bewezen over de volledige beslissing-ruimte (420 configuraties).
- Nieuwe dienststoring-context 'vervoerswoord rijdt/rijden niet' (gedeeld
patroon): sterk titel-signaal (+2) en familie (2) — 'sprinters rijden niet
tussen Utrecht en Amsterdam', 'metro rijdt niet tussen Rotterdam en
Schiedam' passeren nu; bus/tram/metro/sprinter zelf blijven zwak/medium.
- Overlappende regexes opgeruimd: busbaan/bushokje uit de halte-familie.
- Blacklist 29 -> 2 woorden: restant (stationsstraat, stationair, stationcar,
stationeren ...) was inert sinds de woordgrens-familie; vastgelegd in tests.
- validate_filter.py: 56 -> 90 regressie-cases + invariant 4 (whitelist-term
in familie, blacklist-term door familie gematcht).
- _filter_summary/beleidsdocumentatie geactualiseerd.
'busbaan' stond in de bus-samenstelling-familie (fam 4) én de
halte/busbaan-familie (fam 13): één woord scoorde 2+2=4 en liet zo
een niet-OV-bericht door (Omroep Brabant politie-achtervolging 'via
de busbaan', 13-09-2026). Latente dubbeltellingen: 'ov-chipkaart'
bevat 'chipkaart', 'openbaar vervoer' bevat 'vervoer'.
_fam_hits voegt nu overlappende span van verschillende families samen
met het hoogste gewicht (retour blijft (familie-index, gewicht), dus
de familie-één-signaal-regel over titel+samenvatting is intact).
Beleidscommentaar + regressie (56 cases) bijgewerkt; 45-dagen-replay
(90 geposte entries): precies 1 gedragsverschil — het fatbikers-
bericht wordt nu geweerd, delftopzondag (tram+halte, twee termen)
blijft door (besluit 2026-09-13).
Gebruikersbesluit 2026-09-11: 'busstation' 60x in een artikel is één signaal, niet
60x de score. _filter_passes combineert titel- en samenvattingshits nu per familie
(dict over beide teksten). Gevolg (regressie-pinned): 'Pand naast busstation'
(titel+samenvatting) en 'Busstation wordt verbouwd' (zonder andere OV-term) zijn
nu geweerd; combinaties over 2 families (metro+halte, metrostation+metro) blijven
door.
Gebruikersbesluit 2026-09-11: een medium-hit in de TITEL haalt het filter te
makkelijk ('restaurant naast busstation' = 2x2=4 was door). Formule gelijkgemaakt:
score = titelscore + samenvattingscore >= 3. Gevolg (regressie-pinned):
- enkel-woord-medium in titel is nu onvoldoende (fietsenstalling/restaurant-case
geweerd); zware/sterke woorden en combinaties over 2 families blijven door.
- zwak-alleen-regel (titel-anker + >=2 families) ongewijzigd.
Gebruikersbesluit 2026-09-11 n.a.v. Omroep West-artikel 'Restaurant weg, pand
staat te verloederen': één 'busstation'-hit in de samenvatting ('pand naast
busstation') is geen OV-nieuws en mocht niet doorgelaten worden.
- Familie station-samenstellingen (trein/bus/metro-station): gewicht 3 -> 2
(medium). In de samenvatting moet nu een tweede OV-woord bijkomen; in de
titel volstaat het anker nog (2x2=4).
- 'busstation'/'metrostation' van de whitelist af (whitelist = altijd door).
- 'station' uit de voertuig-samenstelling-familie verwijderd: 'busstation'
telde dubbel mee (via 'bus' én 'station', 2x3=6).
- validate_filter.py: 6 nieuwe regressie-cases + invariant 2-aanpassing.
Aanleiding: Omroep Brabant-golfbericht (Solheim Cup Cromvoirt, 11-09-2026) kwam door
het filter. 'pendelbus' stond op de whitelist (evenementpendel vanaf station Den Bosch),
en 'station'+'bus'+'pendelbus' in de samenvatting was samen al drempel 3.
- pendelbus/shuttlebus: whitelist + medium -> zwak (1), één familie (synoniemen tellen
niet als twee onafhankelijke signalen).
- _filter_passes: bij uitsluitend zwakke hits moet minstens één zwak woord in de TITEL
staan; zwakke woorden alleen in de samenvatting zijn geen bewijs.
- validate_filter.py: invariant 1 uitgebreid + 3 regressiecases (golfbericht, zwak-alleen
samenvatting, positieve controle met titel-anker).
- _filter_summary()/docstrings gelijkgetrokken met de werkelijke gewichten.