Hello Quinn @DTS Engineer,
Thanks for the pointer,
I ran the direct NEURLFilter.verdict(for:) call > this confirms the issue is not browser-related at all, and points to something specific in how the verdict is computed.
Results (from the SDK header, NEURLFilterVerdictAllow = 2, Deny = 3, Unknown = 1):
winamax.fr -> Deny (3) — correct
unibet.fr -> Allow (2) — wrong
betclic.fr -> Allow (2) — wrong
olybet.fr -> Allow (2) — wrong (this is the one that flaps in-browser)
fdj.fr -> Deny (3) — correctThis is the key part: it's returning a confident Allow, not Unknown (which would mean the validation itself failed). And I'd already independently proven, by querying our deployed PIR database shards directly (bypassing OHTTP, the app, and the device entirely), that every one of these domains - including unibet.fr and betclic.fr - correctly returns the blocked value in our data. Our local bloom prefilter file is also confirmed byte-correct, with all of these domains properly hashed in.
So: the local prefilter data is right, the PIR database is right, yet the on-device verdict computation still returns the wrong answer for these specific domains. That narrows it down to something inside the verdict pipeline itself - bloom-check-to-PIR-query handoff, or PIR response interpretation - rather than any input data I can inspect or fix on my end. Is there anything you can share about how NEURLFilter resolves a verdict internally, or does this look like something worth filing as a bug?
Topic:
App & System Services
SubTopic:
Networking
Tags: