feat(cookie+routing): Storage-Typ-Filter + legal_notice capture-only
#3 Storage-Filter: cookie-check exponiert per-Cookie-Speichertyp (storage_inventory.per_cookie); CookieResultView bekommt Filter-Chips (Cookie/Local Storage/Framework …) + eine Speicher-Spalte, Anbieter ohne passenden Treffer werden ausgeblendet, KPI zeigt gefilterte Zahl. A-Routing: legal_notice ist jetzt ein kanonischer Doc-Type. Eigene Discovery-Regel (legal-disclaimer/rechtlicher-hinweis) VOR impressum → die Disclaimer-Seite wird nicht mehr als Impressum substituiert (Ursache, dass die Cross-Doc-Reconciliation nie zündete). capture-only: als doc_entry für B persistiert, aber nicht einzeln gescort (keine 0%-Noise, da ohne eigene Checkliste). Im Scan-Form als Option auswählbar. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -81,11 +81,15 @@ def build_storage_inventory(vendors: list[dict]) -> dict:
|
||||
"""Zählt je Speichertyp + liefert Beispiele für Nicht-Cookies."""
|
||||
by_type: dict[str, int] = {}
|
||||
examples: list[dict] = []
|
||||
per_cookie: dict[str, str] = {}
|
||||
for v in vendors or []:
|
||||
vname = v.get("name") or "?"
|
||||
for c in v.get("cookies") or []:
|
||||
st = detect_storage_type(c.get("name", ""), c.get("expiry", ""))
|
||||
by_type[st] = by_type.get(st, 0) + 1
|
||||
n = (c.get("name") or "").lower()
|
||||
if n:
|
||||
per_cookie[n] = st
|
||||
if st != "cookie" and len(examples) < 10:
|
||||
examples.append({
|
||||
"name": c.get("name", ""), "type": st, "vendor": vname,
|
||||
@@ -98,6 +102,8 @@ def build_storage_inventory(vendors: list[dict]) -> dict:
|
||||
"real_cookies": cookies,
|
||||
"other_storage": total - cookies,
|
||||
"examples": examples,
|
||||
# name_lower → Speichertyp (für den Frontend-Filter).
|
||||
"per_cookie": per_cookie,
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user