feat(audit-mail): P58/P59c/P60b/P61/P62 — Mercedes-Cycle Phase 1 abgeschlossen
CI / nodejs-build (push) Has been skipped
CI / test-go (push) Has been skipped
CI / iace-gt-coverage (push) Has been skipped
CI / test-python-backend (push) Successful in 38s
CI / test-python-document-crawler (push) Has been skipped
CI / detect-changes (push) Successful in 12s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / secret-scan (push) Has been skipped
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / validate-canonical-controls (push) Successful in 14s
CI / loc-budget (push) Failing after 15s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-python-dsms-gateway (push) Has been skipped
CI / nodejs-build (push) Has been skipped
CI / test-go (push) Has been skipped
CI / iace-gt-coverage (push) Has been skipped
CI / test-python-backend (push) Successful in 38s
CI / test-python-document-crawler (push) Has been skipped
CI / detect-changes (push) Successful in 12s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / secret-scan (push) Has been skipped
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / validate-canonical-controls (push) Successful in 14s
CI / loc-budget (push) Failing after 15s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-python-dsms-gateway (push) Has been skipped
P58 Anti-Audit-Detection robuster (script-domain + settings-spezifisch —
war bereits im Code, jetzt sauber als completed dokumentiert).
P59c DACH-Custom-Cookies in compliance.cookie_library: Borlabs,
etracker, Matomo/Piwik, Userlike, Cookiebot/Cookieyes/Usercentrics,
Akamai/Cloudflare/Datadome Bot-Manager + HubSpot. 21 neue Eintraege
(3 von 24 schon via Open-Cookie-Database vorhanden).
Script: backend-compliance/scripts/seed_dach_cookies.py.
P60b Vendor-Pattern-Dedupe mit Fuzzy-Match (Jaccard >= 0.7) statt exakter
Tuple-Equality. Vendors mit teilweise befuellten Feldern (z.B.
Sitzland eingetragen) fallen nicht mehr aus der globalen Notice —
Bug: Amazon/Psyma/Qualtrics hatten zuvor wiederholte per-row Actions.
P61 "Untergeschobene Cookies"-Erkennung — wenn ein deklarierter Vendor
(z.B. Google Tag Manager) automatisch weitere mitbringt (GA + GCL_AU
+ DoubleClick), werden diese als separater Mail-Block (gelb) mit
COOKIE/VENDOR-Badges + Quellen-Doku ausgewiesen. Neuer Service:
compliance.services.vendor_package_cookies (8 Primary-Vendors mit
je 2-4 implicit Cookies/Vendors).
P62 Marketing-Manager-Disclaimer "Was wir sehen / nicht sehen" als
blauer Box-Block direkt unter dem Critical-Findings-Block. Erklaert
Grenzen unseres Audits (Server-Side-Tracking, Vendor-interne
Datenweitergabe, Cross-Page-Banner) und Risiko des Falschvertrauens
in einen 100%-Score. Neuer Renderer: compliance.api.scope_disclaimer.
Architektur: VVT-Tabellen-Renderer aus agent_doc_check_extras.py (552
LOC -> 242 LOC) in compliance.api.vvt_table_renderer ausgelagert, um den
500-LOC-Hardcap einzuhalten.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
"""
|
||||
P62 — Marketing-Manager-freundlicher Scope-Disclaimer ("Was wir sehen / nicht sehen").
|
||||
|
||||
Erklaert in 30 Sekunden was unser Audit tatsaechlich pruefen kann und wo
|
||||
die Grenzen sind. Ziel: vermeidet falsches Vertrauen in einen 100%-Score
|
||||
und macht klar, wo Marketing/IT zusaetzlich pruefen muss.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
def build_scope_disclaimer_html() -> str:
|
||||
"""Render: was wir sehen + was wir NICHT sehen koennen."""
|
||||
return (
|
||||
'<div style="font-family:-apple-system,BlinkMacSystemFont,sans-serif;'
|
||||
'max-width:700px;margin:8px auto 16px;padding:14px 18px;'
|
||||
'background:#f0f9ff;border:1px solid #bfdbfe;border-radius:8px">'
|
||||
'<h3 style="margin:0 0 8px;font-size:13px;color:#1e40af">'
|
||||
'Was diese Pruefung leistet — und wo ihre Grenzen liegen</h3>'
|
||||
|
||||
'<div style="font-size:11px;color:#1e293b;margin-bottom:10px">'
|
||||
'Wir sind ein <strong>technisches Audit-Tool</strong>, kein Anwalt. '
|
||||
'Ein 100%-Score bedeutet nicht "rechtssicher" — er bedeutet "alle '
|
||||
'Pruefkriterien automatisch erfuellt". Folgendes koennen wir vs. '
|
||||
'koennen wir nicht:</div>'
|
||||
|
||||
'<table style="width:100%;border-collapse:collapse;font-size:11px;'
|
||||
'margin-bottom:8px">'
|
||||
'<thead><tr style="background:#dbeafe;color:#1e40af;text-align:left">'
|
||||
'<th style="padding:5px 8px;width:50%">Was wir sehen</th>'
|
||||
'<th style="padding:5px 8px;width:50%">Was wir NICHT sehen</th>'
|
||||
'</tr></thead>'
|
||||
'<tbody>'
|
||||
|
||||
'<tr style="border-top:1px solid #bfdbfe">'
|
||||
'<td style="padding:5px 8px;color:#1e293b">'
|
||||
'✓ Cookies/Storage im Browser nach Klick auf Akzeptieren/Ablehnen'
|
||||
'</td>'
|
||||
'<td style="padding:5px 8px;color:#475569">'
|
||||
'✗ Server-seitiges Tracking (Meta Conversion API, GA4 Measurement '
|
||||
'Protocol — der Browser sieht nichts davon)'
|
||||
'</td></tr>'
|
||||
|
||||
'<tr style="border-top:1px solid #bfdbfe">'
|
||||
'<td style="padding:5px 8px;color:#1e293b">'
|
||||
'✓ Vendor-Listen aus dem Banner (TCF, CMP-Settings, Phase-G Klick-Tour)'
|
||||
'</td>'
|
||||
'<td style="padding:5px 8px;color:#475569">'
|
||||
'✗ Wer die Daten beim Vendor tatsaechlich erhaelt / weiterleitet '
|
||||
'(z.B. Google verteilt intern an Ads/Marketing-Plattform)'
|
||||
'</td></tr>'
|
||||
|
||||
'<tr style="border-top:1px solid #bfdbfe">'
|
||||
'<td style="padding:5px 8px;color:#1e293b">'
|
||||
'✓ Texte und Pflichtangaben in DSE/Cookie-Richtlinie/Impressum'
|
||||
'</td>'
|
||||
'<td style="padding:5px 8px;color:#475569">'
|
||||
'✗ Ob die internen Prozesse (Loeschkonzept, AVV-Pflege, '
|
||||
'Mitarbeiter-Schulungen) tatsaechlich gelebt werden'
|
||||
'</td></tr>'
|
||||
|
||||
'<tr style="border-top:1px solid #bfdbfe">'
|
||||
'<td style="padding:5px 8px;color:#1e293b">'
|
||||
'✓ Banner-UI-Verstoesse (Dark Patterns, ungleichgewichtige Buttons, '
|
||||
'fehlender Reject-Mechanismus)'
|
||||
'</td>'
|
||||
'<td style="padding:5px 8px;color:#475569">'
|
||||
'✗ Ob das Banner auf <em>jeder</em> Unterseite identisch ist '
|
||||
'(wir messen die Einstiegsseite)'
|
||||
'</td></tr>'
|
||||
|
||||
'<tr style="border-top:1px solid #bfdbfe">'
|
||||
'<td style="padding:5px 8px;color:#1e293b">'
|
||||
'✓ Untergeschobene Cookies (z.B. Google Tag Manager bringt automatisch '
|
||||
'GA + Ads — siehe P61-Block unten)'
|
||||
'</td>'
|
||||
'<td style="padding:5px 8px;color:#475569">'
|
||||
'✗ Drittland-Transfer auf Vertragsebene — ob ein SCC/DPF wirklich '
|
||||
'vorliegt, koennen nur Sie selbst pruefen'
|
||||
'</td></tr>'
|
||||
|
||||
'</tbody></table>'
|
||||
|
||||
'<div style="font-size:10px;color:#475569;margin-top:8px;'
|
||||
'padding-top:6px;border-top:1px dashed #bfdbfe">'
|
||||
'<strong>Hinweis fuer Marketing & Geschaeftsfuehrung:</strong> '
|
||||
'Selbst wenn dieser Bericht keinen Verstoss findet, kann ein '
|
||||
'individueller Bescheid einer Aufsichtsbehoerde oder eine Klage '
|
||||
'(NOYB, Verbraucherschutz, Sammelklage) zu einem anderen Ergebnis '
|
||||
'kommen — etwa wenn beim Vendor selbst (Server-Side) personenbezogene '
|
||||
'Daten verarbeitet werden, die wir browser-seitig nicht sehen. '
|
||||
'Dieser Bericht ersetzt keine anwaltliche Pruefung, hilft aber, '
|
||||
'<strong>technisch belegbare Verstoesse</strong> sofort zu schliessen.'
|
||||
'</div>'
|
||||
|
||||
'</div>'
|
||||
)
|
||||
Reference in New Issue
Block a user