Current behavior
The access table has a UID, destination IP, block decision, and uncertainty flag. DNS observations are global: they store qname, aname, resource, time, and TTL, but no UID. Consequently, getQAName(uid, ip, ...) cannot determine which hostname a specific app resolved; it reuses hostnames globally observed for that IP.
This can cause both shared-IP ambiguity and cross-app attribution ambiguity in per-app blocking decisions.
Options
- Low-risk partial improvement: key the in-memory tracker-verdict cache by
(uid, destination IP) instead of destination IP alone. This reduces cross-app cache bleed but does not make DNS evidence app-specific.
- Full attribution redesign: persist DNS observations with a UID, link DNS evidence to access observations, or adopt a different attribution model. This affects schema, migration, collection/query logic, and the semantics of
uncertain.
Decision needed
Choose whether the product goal is only more-conservative cache reuse or genuine per-app DNS evidence, and decide how conservative standard blocking should be when evidence remains global and ambiguous.
Current behavior
The access table has a UID, destination IP, block decision, and uncertainty flag. DNS observations are global: they store qname, aname, resource, time, and TTL, but no UID. Consequently,
getQAName(uid, ip, ...)cannot determine which hostname a specific app resolved; it reuses hostnames globally observed for that IP.This can cause both shared-IP ambiguity and cross-app attribution ambiguity in per-app blocking decisions.
Options
(uid, destination IP)instead of destination IP alone. This reduces cross-app cache bleed but does not make DNS evidence app-specific.uncertain.Decision needed
Choose whether the product goal is only more-conservative cache reuse or genuine per-app DNS evidence, and decide how conservative standard blocking should be when evidence remains global and ambiguous.