"""B16 wiring — Footer-Label-vs-URL-Slug-Drift-Detector. Hängt sich an `state["extra_findings"]` an und rendert einen V2-Block (`url_slug_drift_html`). """ from __future__ import annotations import html import logging from compliance.services.url_slug_drift_check import check_url_slug_drift logger = logging.getLogger(__name__) def run_b16(state: dict) -> None: new = check_url_slug_drift(state) if not new: return extras = state.get("extra_findings") or [] extras.extend(new) state["extra_findings"] = extras state["url_slug_drift_html"] = _render(new) logger.info("B16 url-slug-drift: %d finding(s)", len(new)) def _render(findings: list[dict]) -> str: cards = [] for f in findings: sev = (f.get("severity") or "").upper() color = "#64748b" if sev == "LOW" else "#f59e0b" alts = f.get("alt_slugs_404") or [] alts_html = "" if alts: alts_html = ( "
" f"404-Slugs: {html.escape(', '.join(alts))}
" ) cards.append( f"
" f"
" f"{sev} · {html.escape(f.get('check_id') or '')}
" f"
" f"{html.escape(f.get('title') or '')}
" f"
" f"{html.escape(f.get('norm') or '')}
" f"{alts_html}" f"
" f"{html.escape(f.get('evidence') or '')}
" f"
" f"→ Empfehlung: " f"{html.escape(f.get('action') or '')}
" "
" ) return ( "
" "

" "🔗 Standard-Slug-Brüche (SEO / Bookmarks)" "

" + "".join(cards) + "
" )