feat: Plan B + A + C — DSE-Versions-MCs + Legacy-URL + Multi-Version
CI / detect-changes (push) Successful in 7s
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 / build-sha-integrity (push) Failing after 4s
CI / validate-canonical-controls (push) Successful in 10s
CI / loc-budget (push) Failing after 11s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-build (push) Has been skipped
CI / nodejs-lint (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 28s
CI / test-python-document-crawler (push) Has been skipped
CI / test-python-dsms-gateway (push) Has been skipped
CI / detect-changes (push) Successful in 7s
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 / build-sha-integrity (push) Failing after 4s
CI / validate-canonical-controls (push) Successful in 10s
CI / loc-budget (push) Failing after 11s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-build (push) Has been skipped
CI / nodejs-lint (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 28s
CI / test-python-document-crawler (push) Has been skipped
CI / test-python-dsms-gateway (push) Has been skipped
Drei verwandte Mechanismen für DSE-Beweisbarkeit + URL-Hygiene.
Plan B + PDF — Versions-Beweisbarkeit-MCs (dse_checks.py):
- mc-dse_version_date (HIGH) — sichtbares Stand/Versionsdatum
Pflicht. 12 Regex-Pattern: "Stand: April 2024", ISO-Datum,
"Letzte Aktualisierung", "Version 3.2", englische
Varianten ("Last updated", "Effective date as of …").
Norm: Art. 7 Abs. 1 DSGVO (Nachweisbarkeit Einwilligung).
- mc-dse_version_proof (MED) — PDF-Download oder
versionierte Archiv-URL. Reine HTML-DSE ohne Snapshot ist
juristisch fragil. 8 Pattern: .pdf, Download-Hinweis,
web.archive.org, /dse-vNNN.html.
Norm: DSK-Orientierungshilfe 2024.
Plan A — Legacy-URL-Discovery (legacy_url_discovery.py + B20):
Vier komplementäre Quellen:
A.1 /sitemap.xml + Sub-Sitemaps parsen, auf compliance-
relevante Slugs filtern
A.2 archive.org/wayback/available pro Slug — wenn Wayback
zeigt ≥18 Monate alten Snapshot UND Seite heute noch
200 liefert UND nicht im Footer → Legacy-Verdacht
A.3 Slug-Permutations: 6 doc_types × 6 Slug-Varianten ×
5 Lang-Prefixe × 4 Brand-Parameter
A.4 Banner-Modal-Links (über consent-tester Stufe 4 Tour)
Mail-Block "🗂️ Legacy-URL-Inventar" mit Tabelle: URL · HTTP ·
Wayback-Alter · Footer · Empfehlung (301/Offline/Behalten).
Engine entscheidet NICHT was Legacy ist — präsentiert das
Inventar, Kunde wählt.
Real-World-Smoke Elli:
/en/cookies → HTTP 200, Wayback 69 Mo alt, nicht im Footer
→ "Legacy-Verdacht, 301 setzen"
/en/impressum → HTTP 302, redirected → "behalten"
Plan C — Multi-Version-DSE-Analyse (multi_version_dse.py):
Wenn ≥2 DSE-URLs reachable: pro Variante DSB-Name + Datum +
Wortzahl + SHA-256 extrahieren, Inkonsistenzen flaggen
(date_divergent, dsb_divergent, no_date_count).
Mail-Block "📑 Mehrere DSE-Versionen erkannt" mit
Vergleichstabelle + rotem Hinweis "Nur eine Version kann
gültig sein". Beispiel Elli: /de/datenschutz (Mollstr-DSB,
2022) vs /de/datenschutzerklaerung?brand=elli (Proliance,
ohne Datum).
API-Response erweitert um legacy_url_inventory +
html_blocks.legacy_urls + multi_version_dse_html im V2-Layout.
ENV-Override: LEGACY_URL_DISABLED=1.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -411,4 +411,75 @@ ART13_CHECKLIST = [
|
||||
"severity": "LOW",
|
||||
"hint": "Vollstaendigen Namen, Adresse und Website der Aufsichtsbehoerde angeben. Haeufiger Fehler: 'die zustaendige Aufsichtsbehoerde' ohne Konkretisierung. Korrekt z.B.: 'LfDI BW, Koenigstrasse 10a, 70173 Stuttgart, www.baden-wuerttemberg.datenschutz.de'.",
|
||||
},
|
||||
|
||||
# ── L1: Versionsdatum / Nachweisbarkeit der Einwilligung ─────────
|
||||
#
|
||||
# Art. 7 Abs. 1 DSGVO verlangt vom Verantwortlichen, die Einwilligung
|
||||
# NACHWEISEN zu koennen — inkl. WELCHEM Stand der DSE der Nutzer
|
||||
# zugestimmt hat. Ohne Datum/Versionsnummer ist das nicht moeglich.
|
||||
{
|
||||
"id": "dse_version_date",
|
||||
"label": "Stand/Versionsdatum der DSE auffindbar",
|
||||
"level": 1, "parent": None,
|
||||
"patterns": [
|
||||
# "Stand: April 2024", "Stand Januar 2026"
|
||||
r"stand:?\s*(?:januar|februar|m(?:ae|ä)rz|april|mai|juni|juli|"
|
||||
r"august|september|oktober|november|dezember)\s+\d{4}",
|
||||
# "Stand: 01.04.2024", "Stand 04/2024", "Stand 2024-04-01"
|
||||
r"stand:?\s*\d{1,2}[./-]\d{1,2}[./-]\d{2,4}",
|
||||
r"stand:?\s*\d{4}-\d{2}(?:-\d{2})?",
|
||||
r"stand:?\s*\d{1,2}/\d{2,4}",
|
||||
# "Letzte Aktualisierung: …", "Zuletzt geaendert: …"
|
||||
r"letzte\s+(?:aktualisierung|(?:ae|ä)nderung|anpassung)",
|
||||
r"zuletzt\s+(?:ge)?(?:ae|ä)ndert",
|
||||
r"g(?:ue|ü)ltig\s+(?:ab|seit|f(?:ue|ü)r)",
|
||||
r"version\s+\d+[.\d]*",
|
||||
r"version:?\s*v?\d+\.\d+",
|
||||
# Englisch
|
||||
r"last\s+(?:updated|modified|revised|amended)",
|
||||
r"effective\s+(?:date|as\s+of)",
|
||||
r"as\s+of\s+(?:january|february|march|april|may|june|july|"
|
||||
r"august|september|october|november|december)\s+\d{4}",
|
||||
],
|
||||
"severity": "HIGH",
|
||||
"hint": (
|
||||
"Art. 7 Abs. 1 DSGVO: Verantwortlicher muss NACHWEISEN koennen, "
|
||||
"welcher DSE-Version der Nutzer zugestimmt hat. Ohne ein "
|
||||
"sichtbares Versionsdatum / 'Stand: …' ist die Einwilligung "
|
||||
"nicht beweisbar — Aufsichtsbehoerden + Verbraucherzentralen "
|
||||
"stossen genau hier nach. Korrekt: 'Stand: Januar 2026' oder "
|
||||
"'Version 3.2 — gueltig ab 01.01.2026' sichtbar am Anfang oder "
|
||||
"Ende der DSE."
|
||||
),
|
||||
},
|
||||
{
|
||||
"id": "dse_version_proof",
|
||||
"label": "Versions-eindeutige Beweis-Verankerung (PDF / Download / Archiv-Link)",
|
||||
"level": 2, "parent": "dse_version_date",
|
||||
"patterns": [
|
||||
# PDF-Download verfuegbar
|
||||
r"\.pdf\b",
|
||||
r"(?:dse|datenschutz|privacy)[\w\-]*\.pdf",
|
||||
# Download-Hinweis
|
||||
r"(?:dse|datenschutzerkl(?:ae|ä)rung|datenschutzhinweis(?:e)?)"
|
||||
r"[^.]{0,80}herunterladen",
|
||||
r"als\s+pdf\s+(?:herunterladen|speichern|laden|verf(?:ue|ü)gbar)",
|
||||
r"download[^.]{0,40}(?:dse|datenschutzerkl|privacy|policy)",
|
||||
# Konkrete Versions-URL (Wayback / Archiv / versionierte URL)
|
||||
r"web\.archive\.org",
|
||||
r"version[\-_]?archive",
|
||||
r"(?:dse|privacy)-v?\d+[.\d]*\.html?",
|
||||
],
|
||||
"severity": "MEDIUM",
|
||||
"hint": (
|
||||
"Beste-Praxis nach DSK-Orientierungshilfe 2024: fuer den Beweis "
|
||||
"der konkreten DSE-Version sollte zusaetzlich zur Web-Version "
|
||||
"ein PDF-Download oder ein versionierter Archiv-Link verfuegbar "
|
||||
"sein. Reine HTML-DSE ohne Snapshot ist juristisch fragil — "
|
||||
"der Anbieter kann die DSE jederzeit aendern und das Original "
|
||||
"ist nicht mehr nachweisbar. Empfehlung: 'Aktuelle DSE als PDF "
|
||||
"herunterladen' im Kopfbereich, oder eindeutige Versions-URLs "
|
||||
"(z.B. /dse/v2026-01.html)."
|
||||
),
|
||||
},
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user