{
    "schema": "https://saferpage.de/schemas/security-alerting-operations-digest.v5",
    "generated_at": "2026-08-05T11:18:14+00:00",
    "domain": "anrufer.info",
    "available": true,
    "status": "public_evidence_ready_productive_alerting_blocked",
    "summary": "Security-Alerting-Digest für anrufer.info: 12 Public-Evidence-Routen, 5 Go-live-Gates, 3 erwartete Produktivblocker.",
    "metrics": {
        "public_route_count": 12,
        "gate_count": 5,
        "blocked_gate_count": 3,
        "failed_gate_count": 0,
        "operator_action_count": 4,
        "launch_blocked_gate_count": 6,
        "missing_required_secret_reference_count": 3,
        "storage_missing_database_artifact_count": 0,
        "runner_executed_count": 0,
        "runner_stored_observation_count": 0,
        "alert_outbox_count": 0,
        "alert_sent_count": 0,
        "alert_configured_channel_count": 1,
        "security_feed_smoke_ok": 1,
        "security_feed_smoke_failed_check_count": 0,
        "security_feed_smoke_blocked_expected_count": 2,
        "alert_delivery_smoke_ok": 1,
        "alert_delivery_smoke_failed_check_count": 0,
        "alert_delivery_smoke_blocked_expected_count": 1,
        "notification_contains_real_recipients": 0,
        "severity_policy_count": 4,
        "escalation_step_count": 5,
        "dry_run_drill_count": 5,
        "role_count": 4,
        "impact_triage_count": 4,
        "communication_template_count": 4,
        "communication_ticket_html_link_count": 1,
        "receiver_contract_count": 5,
        "user_guidance_count": 3,
        "scheduled_scan_plan_count": 4,
        "alert_routing_matrix_count": 4,
        "scheduled_scan_acceptance_count": 5,
        "canary_activation_step_count": 6,
        "retention_review_count": 5,
        "kill_switch_rollback_count": 5,
        "delivery_signoff_receipt_count": 6,
        "receiver_approval_matrix_count": 5,
        "delivery_pause_policy_count": 5,
        "delivery_incident_drill_step_count": 5,
        "parity_acceptance_count": 6,
        "parity_acceptance_ready_count": 3,
        "parity_acceptance_blocked_count": 3,
        "parity_closure_plan_count": 3,
        "parity_closure_done_count": 0,
        "parity_closure_waiting_count": 3,
        "parity_closure_unlock_count": 9,
        "parity_closure_acceptance_criterion_count": 9,
        "claim_lane_count": 5,
        "claim_lane_public_ready_count": 2,
        "claim_lane_gated_readiness_count": 1,
        "claim_lane_blocked_live_count": 2,
        "claim_lane_operator_input_count": 5,
        "claim_lane_do_not_claim_count": 5,
        "claim_lane_acceptance_criterion_count": 15,
        "claim_lane_evidence_url_count": 16,
        "security_alert_drill_evidence_pack_row_count": 6,
        "security_alert_drill_evidence_pack_passed_count": 4,
        "security_alert_drill_evidence_pack_blocked_expected_count": 2,
        "security_alert_drill_evidence_pack_review_required_count": 0,
        "security_alert_drill_evidence_pack_evidence_url_count": 6,
        "security_alert_drill_evidence_pack_no_secret_boundary_count": 6,
        "security_alert_drill_evidence_pack_operator_input_count": 6,
        "security_alert_drill_evidence_pack_acceptance_criterion_count": 18,
        "security_alert_drill_evidence_pack_stop_condition_count": 18
    },
    "public_evidence_routes": [
        {
            "id": "launch_board",
            "label": "Security Feed Launch Board",
            "url": "https://saferpage.de/sicherheit/feed-launch-board-json",
            "purpose": "Go/No-Go-Gates für Feed-Credentials, Storage, Runner und Delivery prüfen."
        },
        {
            "id": "credential_preflight",
            "label": "Credential Preflight",
            "url": "https://saferpage.de/sicherheit/feed-credential-preflight-json?host=anrufer.info",
            "purpose": "URLhaus, Safe Browsing, HMAC und Storage-Refs ohne Secret-Werte prüfen."
        },
        {
            "id": "storage_readiness",
            "label": "Storage Readiness",
            "url": "https://saferpage.de/sicherheit/feed-storage-readiness-json",
            "purpose": "Tabellen, Indizes, Trigger, Retention und Storage-Freigabe prüfen."
        },
        {
            "id": "feed_runner",
            "label": "Security Feed Runner",
            "url": "https://saferpage.de/sicherheit/feed-runner-json",
            "purpose": "systemd-Runner, Schedule, Guardrails und externe Feed-Runs prüfen."
        },
        {
            "id": "alert_dispatch",
            "label": "Alert Dispatch Runner",
            "url": "https://saferpage.de/alarme/dispatch-runner-json",
            "purpose": "Outbox, Kanäle, Signatur, Idempotency und Freigabegate prüfen."
        },
        {
            "id": "security_alerts",
            "label": "Security Alerts",
            "url": "https://saferpage.de/sicherheit/anrufer.info/alerts-json",
            "purpose": "Alerts, Rollen-Digest, Frequenz und No-Recipient-Policy prüfen."
        },
        {
            "id": "alert_delivery",
            "label": "Alert Delivery",
            "url": "https://saferpage.de/sicherheit/anrufer.info/alerts-delivery-json",
            "purpose": "Webhook-/Slack-/Teams-/Jira-/E-Mail-Payloads und Receiver-Vertrag prüfen."
        },
        {
            "id": "delivery_preflight",
            "label": "Delivery Credential Preflight",
            "url": "https://saferpage.de/integrationen/delivery-credential-preflight-json",
            "purpose": "Zielsystem-Refs, Approval, HMAC und Dry-run ohne Empfänger prüfen."
        },
        {
            "id": "operator_go_live",
            "label": "Operator Go-live",
            "url": "https://saferpage.de/betreiber/go-live-json",
            "purpose": "Freigabequeue und Aktivierungsreihenfolge für Feed, Delivery und API prüfen."
        },
        {
            "id": "feed_smoke",
            "label": "Security Feed Smoke",
            "url": "https://saferpage.de/evidence/security-feed-readiness-smoke.json",
            "purpose": "No-Secret-Smoke für Feed, Storage, Runner und Dry-run prüfen."
        },
        {
            "id": "delivery_smoke",
            "label": "Alert Delivery Smoke",
            "url": "https://saferpage.de/evidence/alert-delivery-readiness-smoke.json",
            "purpose": "No-Secret-Smoke für Alert-Delivery, Runtime-Kontrollen und Dry-run prüfen."
        },
        {
            "id": "security_evidence",
            "label": "Security Evidence Index",
            "url": "https://saferpage.de/security-evidence-json",
            "purpose": "Öffentlichen Security-Evidence-Index und Badge-/Reportlinks prüfen."
        }
    ],
    "gates": [
        {
            "id": "feed_credentials",
            "label": "Feed-Credentials",
            "status": "blocked_expected",
            "owner": "IT/Security",
            "evidence_url": "https://saferpage.de/sicherheit/feed-credential-preflight-json?host=anrufer.info",
            "action": "URLhaus- und Safe-Browsing-Keys serverseitig setzen und Rotation dokumentieren."
        },
        {
            "id": "feed_storage",
            "label": "Feed-Storage",
            "status": "blocked_expected",
            "owner": "DB-Owner/Datenschutz",
            "evidence_url": "https://saferpage.de/sicherheit/feed-storage-readiness-json",
            "action": "Migration, Retention, Review und Storage-Approval abschließen."
        },
        {
            "id": "alert_delivery",
            "label": "Externe Alert-Zustellung",
            "status": "blocked_expected",
            "owner": "Delivery Owner",
            "evidence_url": "https://saferpage.de/alarme/dispatch-runner-json",
            "action": "Zielsysteme, HMAC-Secret, Empfängerfreigabe und Execute-ready-Gate setzen."
        },
        {
            "id": "runner_guarded",
            "label": "Runner bleibt bis Freigabe guarded",
            "status": "passed",
            "owner": "Webbetrieb/Datenschutz",
            "evidence_url": "https://saferpage.de/sicherheit/feed-runner-json",
            "action": "Unerwartete externe Runs oder Speicherungen prüfen."
        },
        {
            "id": "notification_digest",
            "label": "Rollenbasierter Alert-Digest",
            "status": "passed",
            "owner": "Security/Datenschutz",
            "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/alerts-json",
            "action": "Keine echten Empfänger im Public Export anzeigen."
        }
    ],
    "operator_actions": [
        {
            "priority": "hoch",
            "owner": "IT/Security",
            "action": "Feed-Credentials nur serverseitig setzen; danach Credential-Preflight und Security-Feed-Smoke erneut ausführen.",
            "url": "https://saferpage.de/sicherheit/feed-credential-preflight-json?host=anrufer.info"
        },
        {
            "priority": "hoch",
            "owner": "DB-Owner/Datenschutz",
            "action": "Storage-Migration, Retention-Entscheidung und Storage-Canary vor echten Feed-Treffern abschließen.",
            "url": "https://saferpage.de/sicherheit/feed-storage-readiness-json"
        },
        {
            "priority": "hoch",
            "owner": "Delivery Owner",
            "action": "Webhook/Slack/Teams/Jira/E-Mail-Zielsysteme mit HMAC, Idempotency und Empfängerfreigabe prüfen.",
            "url": "https://saferpage.de/integrationen/delivery-credential-preflight-json"
        },
        {
            "priority": "mittel",
            "owner": "Programm-Owner",
            "action": "Launch-Board, Operator-Go-live und beide No-Secret-Smokes als Go/No-Go-Abnahme verwenden.",
            "url": "https://saferpage.de/sicherheit/feed-launch-board-json"
        }
    ],
    "severity_policy": [
        {
            "severity": "critical",
            "label": "Kritischer Treffer",
            "trigger": "Malware, Phishing, aktive Blocklist oder kompromittierter Download mit hoher Sicherheit.",
            "first_response_sla": "15 Minuten nach bestätigtem Treffer",
            "update_sla": "alle 60 Minuten bis Eindämmung",
            "owner": "Security Lead",
            "channel": "Webhook/Slack/Teams plus E-Mail nur nach Delivery-Freigabe",
            "fallback": "Operator-Go-live bleibt blockiert; manueller Incident-Eintrag mit Evidence-Link."
        },
        {
            "severity": "high",
            "label": "Hoher Treffer",
            "trigger": "Verdächtige Drittanbieter, neue riskante Weiterleitung oder sicherheitsrelevante Header-/TLS-Verschlechterung.",
            "first_response_sla": "4 Stunden innerhalb der Betriebszeit",
            "update_sla": "täglich bis Abschluss",
            "owner": "Webbetrieb/Security",
            "channel": "Rollen-Digest und Zielsystem nach Freigabe",
            "fallback": "Fix-Ticket im Betreiber-Backlog mit Re-Scan-Frist."
        },
        {
            "severity": "medium",
            "label": "Mittlerer Treffer",
            "trigger": "Neue Privacy-/Security-Warnung ohne akute Blocklist-Bestätigung.",
            "first_response_sla": "2 Arbeitstage",
            "update_sla": "bei Statuswechsel oder Re-Scan",
            "owner": "Datenschutz/Webbetrieb",
            "channel": "Wochen-Digest und Reportlink",
            "fallback": "Monitoring-Digest und Fix-Guide reichen bis zur Zielsystemfreigabe."
        },
        {
            "severity": "low",
            "label": "Niedriger Hinweis",
            "trigger": "Hygiene-, Dokumentations- oder Verbesserungshinweis ohne akuten Schaden.",
            "first_response_sla": "30 Tage",
            "update_sla": "monatlich",
            "owner": "Programm-Owner",
            "channel": "Monatsreport",
            "fallback": "In Roadmap halten und beim nächsten Review priorisieren."
        }
    ],
    "escalation_policy": [
        {
            "step": 1,
            "label": "Triage",
            "owner": "Security Lead",
            "deadline": "innerhalb der Severity-SLA",
            "evidence": "https://saferpage.de/sicherheit/anrufer.info/alerts-json",
            "decision": "False Positive, Beobachtung, Betreiberfix oder Incident."
        },
        {
            "step": 2,
            "label": "Owner-Ack",
            "owner": "Webbetrieb/Datenschutz",
            "deadline": "nach Triage sofort dokumentieren",
            "evidence": "https://saferpage.de/betreiber/go-live-json",
            "decision": "Zustaendigkeit, Zielsystem und Kommunikationsweg bestätigen."
        },
        {
            "step": 3,
            "label": "Containment",
            "owner": "IT/Security",
            "deadline": "critical sofort, high am selben Arbeitstag",
            "evidence": "https://saferpage.de/fix-guides/anrufer.info",
            "decision": "Blockieren, Entfernen, Patchen, Provider kontaktieren oder Re-Scan einplanen."
        },
        {
            "step": 4,
            "label": "Datenschutz-/Legal-Review",
            "owner": "Datenschutz/Legal",
            "deadline": "bei Personenbezug oder Meldepflichtverdacht unverzueglich",
            "evidence": "https://saferpage.de/risiko/anrufer.info",
            "decision": "Breach-/DSFA-/Kommunikationspflicht bewerten."
        },
        {
            "step": 5,
            "label": "Closeout und Re-Scan",
            "owner": "Programm-Owner",
            "deadline": "nach Fix oder Entscheidung",
            "evidence": "https://saferpage.de/anrufer.info",
            "decision": "Nachweis, Statuswechsel, Retention und Lessons Learned dokumentieren."
        }
    ],
    "dry_run_drill_checklist": [
        {
            "id": "no_secret_smokes",
            "label": "No-Secret-Smokes ausführen",
            "owner": "Webbetrieb",
            "evidence_url": "https://saferpage.de/evidence/alert-delivery-readiness-smoke.json",
            "success_criteria": "failed_check_count=0, blocked_expected_count transparent."
        },
        {
            "id": "dry_run_dispatch",
            "label": "Dry-run-Dispatch prüfen",
            "owner": "Delivery Owner",
            "evidence_url": "https://saferpage.de/alarme/dispatch-runner-json",
            "success_criteria": "Keine externe Zustellung, keine echten Empfänger, keine Ziel-URLs im Public Export."
        },
        {
            "id": "critical_tabletop",
            "label": "Critical-Alert-Tabletop",
            "owner": "Security Lead",
            "evidence_url": "https://saferpage.de/sicherheit/alerting-digest-json",
            "success_criteria": "Triage, Ack, Containment, Datenschutzreview und Closeout zeitlich durchgespielt."
        },
        {
            "id": "receiver_contract",
            "label": "Receiver-Vertrag validieren",
            "owner": "Integration Owner",
            "evidence_url": "https://saferpage.de/integrationen/delivery-credential-preflight-json",
            "success_criteria": "HMAC, Idempotency, Retry, Dedupe und Approval-Gate dokumentiert."
        },
        {
            "id": "go_live_decision",
            "label": "Go/No-Go festhalten",
            "owner": "Programm-Owner",
            "evidence_url": "https://saferpage.de/betreiber/go-live-json",
            "success_criteria": "Produktivblocker, Verantwortliche und nächster Freigabeschritt sichtbar."
        }
    ],
    "roles": [
        {
            "role": "Security Lead",
            "responsibility": "Severity, Triage, Incident-Entscheidung und technische Eindämmung."
        },
        {
            "role": "Delivery Owner",
            "responsibility": "Zielsysteme, HMAC, Empfängerfreigabe, Dedupe und Dispatch-Gate."
        },
        {
            "role": "Datenschutz/Legal",
            "responsibility": "Personenbezug, Meldepflicht, Kommunikation und Retention bewerten."
        },
        {
            "role": "Programm-Owner",
            "responsibility": "Go/No-Go, SLA-Nachhaltung, Evidence-Archiv und Betreiberkommunikation."
        }
    ],
    "impact_triage": [
        {
            "id": "visitor_risk",
            "label": "Besucherrisiko",
            "question": "Können Besucher durch die Website auf Malware, Phishing, betruegerische Weiterleitungen oder kompromittierte Downloads treffen?",
            "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/alerts-json",
            "operator_decision": "Bei bestätigtem Risiko sofort technische Eindämmung, sichtbaren Hinweis und Re-Scan planen.",
            "privacy_boundary": "Keine Besucher-IP, keine Sessiondaten und keine Roh-HARs im Public Export."
        },
        {
            "id": "personal_data_risk",
            "label": "Personenbezug und Datenschutz",
            "question": "Kann der Treffer personenbezogene Daten, Tracking, Formulare, Loginbereiche oder Drittanbieter mit Personenbezug betreffen?",
            "evidence_url": "https://saferpage.de/risiko/anrufer.info",
            "operator_decision": "Datenschutz/Legal bewertet DSFA-, Breach- und Kommunikationspflichten.",
            "privacy_boundary": "Nur sanitisierte Evidence, Hashes, Rollen und Fristen öffentlich zeigen."
        },
        {
            "id": "business_continuity",
            "label": "Betriebsfähigkeit",
            "question": "Beeinflusst der Treffer zentrale Kontakt-, Checkout-, Termin-, Bewerbungs- oder Supportfunktionen?",
            "evidence_url": "https://saferpage.de/agentur/anrufer.info/deepscan-json",
            "operator_decision": "Business Owner bestätigt Workaround, Prioritaet und Kundenauswirkung.",
            "privacy_boundary": "Keine internen Umsatz-, Kundendaten oder Ticketdetails öffentlich exportieren."
        },
        {
            "id": "regulatory_signal",
            "label": "Regulatorisches Signal",
            "question": "Gibt es Hinweise auf NIS2-, Datenschutz-, Branchen- oder Meldepflichtrelevanz?",
            "evidence_url": "https://saferpage.de/nis2/anrufer.info/export",
            "operator_decision": "Meldepflichtverdacht frueh im Legal-/Security-Review dokumentieren.",
            "privacy_boundary": "Keine verbindliche Rechtsbewertung behaupten; Betreiberbestaetigung bleibt erforderlich."
        }
    ],
    "communication_templates": [
        {
            "id": "internal_ack",
            "label": "Interne Erstmeldung",
            "audience": "Security, Datenschutz, Webbetrieb",
            "trigger": "Critical oder High Alert bestätigt oder nicht binnen SLA widerlegt.",
            "subject_template": "[SaferPage] Security-Alert für anrufer.info - Triage erforderlich",
            "body_template": "SaferPage hat einen Security-Hinweis für anrufer.info markiert. Bitte prüfen: Evidence-Link, Severity, Besucherrisiko, Datenschutzbezug, Owner und Re-Scan-Frist. Keine Besucherlogs oder Secrets anhängen.",
            "evidence_url": "https://saferpage.de/sicherheit/alerting-digest-json?host=anrufer.info"
        },
        {
            "id": "provider_escalation",
            "label": "Provider-/Agentur-Eskalation",
            "audience": "Hosting, Agentur, CMS-/Shop-Dienstleister",
            "trigger": "Technische Eindämmung braucht externen Dienstleister.",
            "subject_template": "Bitte Security-Hinweis für anrufer.info prüfen",
            "body_template": "Wir benötigen technische Prüfung und Rückmeldung zu einem SaferPage-Hinweis. Bitte bestätigen: Ursache, betroffene Komponente, Maßnahme, Zeitplan und Re-Scan-Zeitfenster. Keine Zugangsdaten per E-Mail senden.",
            "evidence_url": "https://saferpage.de/fix-guides/anrufer.info/tickets",
            "machine_evidence_url": "https://saferpage.de/fix-guides/anrufer.info/tickets-json"
        },
        {
            "id": "visitor_notice_draft",
            "label": "Besucherhinweis-Entwurf",
            "audience": "Website-Besucher",
            "trigger": "Bestätigte Besuchergefaehrdung oder vorsorgliche Transparenz nach Betreiberentscheidung.",
            "subject_template": "Sicherheitshinweis zu anrufer.info",
            "body_template": "Wir prüfen aktuell einen Sicherheitshinweis zu dieser Website. Bitte laden Sie keine ungewoehnlichen Downloads, prüfen Sie die Adresszeile und kontaktieren Sie uns bei verdächtigen Beobachtungen. Der Hinweis wird aktualisiert, sobald die Prüfung abgeschlossen ist.",
            "evidence_url": "https://saferpage.de/sicherheit/anrufer.info"
        },
        {
            "id": "closeout_notice",
            "label": "Abschlussnotiz",
            "audience": "Programm-Owner, Datenschutz, Security",
            "trigger": "Fix abgeschlossen oder Alert als False Positive dokumentiert.",
            "subject_template": "[SaferPage] Security-Alert für anrufer.info abgeschlossen",
            "body_template": "Bitte dokumentieren: Entscheidung, Maßnahmen, Re-Scan-Ergebnis, verbleibendes Risiko, Retention und Lessons Learned. Öffentliche Evidence enthält weiterhin keine Secrets, Empfänger oder Besucherlogs.",
            "evidence_url": "https://saferpage.de/anrufer.info"
        }
    ],
    "receiver_contract": [
        {
            "id": "hmac_signature",
            "label": "HMAC-Signatur",
            "requirement": "Jede produktive Zustellung muss eine serverseitige Signatur oder gleichwertige Authentisierung nutzen.",
            "public_safe": true
        },
        {
            "id": "idempotency",
            "label": "Idempotency-Key",
            "requirement": "Receiver dedupliziert identische Alerts und bestätigt Wiederholungen ohne Doppel-Tickets.",
            "public_safe": true
        },
        {
            "id": "retry_backoff",
            "label": "Retry und Backoff",
            "requirement": "Retries sind begrenzt, jittered und erzeugen keine Alert-Flut.",
            "public_safe": true
        },
        {
            "id": "recipient_boundary",
            "label": "Empfängergrenze",
            "requirement": "Public Exports enthalten Rollen und Zwecke, aber keine echten E-Mail-Adressen, Webhooks oder Tokens.",
            "public_safe": true
        },
        {
            "id": "acknowledgement",
            "label": "Ack/Closeout",
            "requirement": "Receiver liefert Ack, Statuswechsel und Closeout-Referenz für Audit und Re-Scan.",
            "public_safe": true
        }
    ],
    "user_facing_guidance": [
        {
            "id": "plain_language_summary",
            "label": "Verstaendliche Zusammenfassung",
            "text": "Der Digest trennt technische Hinweise von bestätigten Risiken und zeigt, welche Prüfung vor einer öffentlichen Aussage fehlt."
        },
        {
            "id": "no_panic_copy",
            "label": "Keine Panik-Kommunikation",
            "text": "Besucherhinweise sollen konkret sagen, was zu tun ist, und keine unbelegten Kompromittierungen behaupten."
        },
        {
            "id": "privacy_first_alerts",
            "label": "Datenschutz zuerst",
            "text": "Alerts dürfen ohne Freigabe keine Besucherlogs, Rohpayloads, Secrets, Empfänger oder private Ziel-URLs veröffentlichen."
        }
    ],
    "scheduled_scan_plan": [
        {
            "id": "daily_registered_domain_check",
            "label": "Taegliche registrierte Domain-Prüfung",
            "cadence": "täglich nach Betreiberfreigabe",
            "runner": "saferpage-security-feed.timer",
            "scope": "registrierte Betreiber-Domains mit aktivem Feed-/Storage-/Delivery-Gate",
            "preconditions": [
                "Feed-Credentials present",
                "Storage-Freigabe aktiv",
                "Delivery-Gate oder Rollen-Digest freigegeben",
                "No-Secret-Smokes failed_check_count=0"
            ],
            "evidence_url": "https://saferpage.de/sicherheit/feed-runner-json",
            "public_safe": true
        },
        {
            "id": "critical_fast_recheck",
            "label": "Schneller Re-Check bei kritischem Treffer",
            "cadence": "innerhalb 60 Minuten nach Eindämmung",
            "runner": "manueller kontrollierter Re-Scan",
            "scope": "betroffene Domain und direkt verlinkte Nachweise",
            "preconditions": [
                "Owner-Ack dokumentiert",
                "Fix oder Containment umgesetzt",
                "keine Secret-/Rohpayload-Ausgabe"
            ],
            "evidence_url": "https://saferpage.de/anrufer.info",
            "public_safe": true
        },
        {
            "id": "weekly_digest_review",
            "label": "Woechentlicher Rollen-Digest",
            "cadence": "woechentlich",
            "runner": "Alert-Digest Export",
            "scope": "alle offenen Security-/Privacy-Hinweise nach Rolle",
            "preconditions": [
                "keine echten Empfänger im Public Export",
                "Rollen und Zwecke gepflegt",
                "blocked_expected Gates sichtbar"
            ],
            "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/alerts-json",
            "public_safe": true
        },
        {
            "id": "monthly_evidence_archive",
            "label": "Monatliches Evidence-Archiv",
            "cadence": "monatlich",
            "runner": "Evidence-Hub / Report-Pack",
            "scope": "Smokes, Launch-Board, Runner-State, Badge, Report und Go-live-Entscheidung",
            "preconditions": [
                "Competitive Evidence Smoke ok",
                "Security-Feed Smoke ok",
                "Alert-Delivery Smoke ok"
            ],
            "evidence_url": "https://saferpage.de/evidence-hub-json",
            "public_safe": true
        }
    ],
    "alert_routing_matrix": [
        {
            "severity": "critical",
            "primary_role": "Security Lead",
            "secondary_role": "Datenschutz/Legal",
            "channel_policy": "Webhook/Slack/Teams plus E-Mail nur nach Delivery-Freigabe",
            "fallback": "Manueller Incident-Eintrag mit Evidence-Link",
            "recipient_publication": "role_only"
        },
        {
            "severity": "high",
            "primary_role": "Webbetrieb/Security",
            "secondary_role": "Programm-Owner",
            "channel_policy": "Rollen-Digest und Zielsystem nach Freigabe",
            "fallback": "Fix-Ticket mit Re-Scan-Frist",
            "recipient_publication": "role_only"
        },
        {
            "severity": "medium",
            "primary_role": "Datenschutz/Webbetrieb",
            "secondary_role": "Programm-Owner",
            "channel_policy": "Wochen-Digest",
            "fallback": "Monitoring-Digest",
            "recipient_publication": "role_only"
        },
        {
            "severity": "low",
            "primary_role": "Programm-Owner",
            "secondary_role": "Webbetrieb",
            "channel_policy": "Monatsreport",
            "fallback": "Roadmap-Backlog",
            "recipient_publication": "role_only"
        }
    ],
    "scheduled_scan_acceptance": [
        {
            "id": "cadence_visible",
            "criterion": "Daily, critical re-check, weekly digest and monthly archive cadences are visible in JSON/CSV/Markdown.",
            "evidence_url": "https://saferpage.de/sicherheit/alerting-digest-json"
        },
        {
            "id": "runner_gated",
            "criterion": "Daily feed runner remains gated until credentials, storage approval and no-secret smokes are green.",
            "evidence_url": "https://saferpage.de/betreiber/go-live-json"
        },
        {
            "id": "roles_only_public",
            "criterion": "Routing matrix publishes roles and policies only, not real recipients or webhook URLs.",
            "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/alerts-json"
        },
        {
            "id": "retry_backoff",
            "criterion": "Retry/backoff and escalation are documented before external delivery is activated.",
            "evidence_url": "https://saferpage.de/integrationen/delivery-credential-preflight-json"
        },
        {
            "id": "post_fix_recheck",
            "criterion": "Critical alerts have a fast re-check path after containment and closeout.",
            "evidence_url": "https://saferpage.de/sicherheit/alerting-digest-json"
        }
    ],
    "canary_activation_plan": [
        {
            "id": "fixture_seed",
            "phase": "Fixture",
            "owner": "Security Lead",
            "status": "ready_blueprint",
            "action": "Einen synthetischen, nicht öffentlichen Canary-Indikator mit Testdomain, Test-Hash und erwarteter Severity definieren.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-storage-canary-json"
        },
        {
            "id": "storage_canary",
            "phase": "Storage",
            "owner": "DB-Owner/Datenschutz",
            "status": "blocked_until_storage_approval",
            "action": "Canary nur nach Migration, Retention-Review und Storage-Approval schreiben; keine echten Feed-Treffer verwenden.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-storage-canary-json"
        },
        {
            "id": "routing_preview",
            "phase": "Routing",
            "owner": "Delivery Owner",
            "status": "ready_blueprint",
            "action": "Canary-Alert durch Routing-Matrix, Rollen-Digest, Idempotency und Dedupe laufen lassen, aber nicht extern senden.",
            "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/alerts-delivery-json"
        },
        {
            "id": "receiver_dry_run",
            "phase": "Receiver",
            "owner": "Integration Owner",
            "status": "blocked_until_delivery_approval",
            "action": "Receiver nur gegen lokalen Sink/Testticket prüfen; HMAC, Retry, Ack und Closeout ohne echte Ziel-URL validieren.",
            "evidence_url": "https://saferpage.de/alarme/dispatch-runner-json"
        },
        {
            "id": "evidence_replay",
            "phase": "Audit",
            "owner": "Programm-Owner",
            "status": "ready_blueprint",
            "action": "Canary aus Evidence-Link, Alert-ID, Manifest, Ack, Closeout und Re-Scan rekonstruieren.",
            "evidence_url": "https://saferpage.de/evidence/security-feed-readiness-smoke.json"
        },
        {
            "id": "go_no_go",
            "phase": "Go/No-Go",
            "owner": "Security/Datenschutz/Delivery",
            "status": "blocked_until_all_gates_green",
            "action": "Produktiven Tageslauf erst freigeben, wenn Feed, Storage, Delivery, Retention, Rollback und Smokes abgenommen sind.",
            "evidence_url": "https://saferpage.de/betreiber/go-live-json"
        }
    ],
    "retention_review": [
        {
            "id": "public_evidence_retention",
            "label": "Public Evidence",
            "retention": "nur sanitisierte Status-, Hash- und Rollenfelder",
            "review": "monatlich",
            "delete_or_archive": "alte Evidence archivieren, keine Rohpayloads nachziehen"
        },
        {
            "id": "canary_observation_retention",
            "label": "Canary Observation",
            "retention": "kurzlebiger Testdatensatz bis Abnahme plus Auditnotiz",
            "review": "nach jedem Canary-Lauf",
            "delete_or_archive": "nach Closeout löschen oder als synthetischen Nachweis markieren"
        },
        {
            "id": "confirmed_alert_retention",
            "label": "Bestätigter Alert",
            "retention": "nach Betreiber-Policy und Legal-Review",
            "review": "bei Severity high/critical sofort",
            "delete_or_archive": "nach Fix und Re-Scan minimieren, personenbeziehbare Daten entfernen"
        },
        {
            "id": "delivery_event_retention",
            "label": "Delivery Event",
            "retention": "Ack, Idempotency-Key und Status ohne Secret oder Empfängerwert",
            "review": "woechentlich im Pilot",
            "delete_or_archive": "fehlgeschlagene Zielsystemdaten bereinigen, keine Webhook-URLs speichern"
        },
        {
            "id": "viewer_or_visitor_boundary",
            "label": "Besucher-/Viewer-Grenze",
            "retention": "keine Besucherlogs, keine IPs, keine Roh-HARs im Public Digest",
            "review": "bei jedem neuen Exportfeld",
            "delete_or_archive": "Export stoppen, wenn personenbezogene Rohdaten auftauchen"
        }
    ],
    "kill_switch_rollback": [
        {
            "id": "disable_feed_runner",
            "label": "Feed-Runner stoppen",
            "trigger": "unerwarteter externer Feed-Call, Fehlerquote oder falscher Scope",
            "action": "Timer deaktivieren, Queue einfrieren, Runner-State sichern und Dry-run-Smoke erneut ausführen."
        },
        {
            "id": "disable_storage_write",
            "label": "Storage-Write sperren",
            "trigger": "Retention unklar, Migration fehlerhaft oder Observation enthält unerwartete Rohdaten",
            "action": "Storage-Approval zurücknehmen, Write-Flag sperren, Canary/Observation isolieren und DB-Owner einbinden."
        },
        {
            "id": "disable_dispatch",
            "label": "Dispatch stoppen",
            "trigger": "falscher Empfänger, fehlende HMAC-Prüfung oder Zielsystemfehler",
            "action": "SAFERPAGE_ALERT_DISPATCH_APPROVED deaktivieren, Outbox halten, Idempotency-Key sperren und Receiver informieren."
        },
        {
            "id": "reclassify_alert",
            "label": "Alert neu klassifizieren",
            "trigger": "False Positive, falsche Severity oder fehlende Quelle",
            "action": "Severity zurückstufen, Kommentar und Evidence-Link schreiben, Kommunikation stoppen und Re-Scan planen."
        },
        {
            "id": "public_export_freeze",
            "label": "Public Export einfrieren",
            "trigger": "Secret, Empfänger, private URL, Besucherlog oder Rohpayload im Export entdeckt",
            "action": "Route aus Nginx/PHP blockieren, Evidence neu erzeugen, Forbidden-Pattern-Smoke ausführen und Ursache dokumentieren."
        }
    ],
    "delivery_signoff_receipt": [
        {
            "id": "receiver_owner_confirmed",
            "label": "Receiver Owner bestätigt",
            "owner": "Delivery Owner",
            "evidence": "Rolle, Zielsystem, Zweck und Eskalationskontakt sind intern dokumentiert; Public Export zeigt nur Rollen.",
            "status": "required_before_dispatch"
        },
        {
            "id": "hmac_and_idempotency_ready",
            "label": "HMAC und Idempotency abgenommen",
            "owner": "Integration Owner",
            "evidence": "https://saferpage.de/integrationen/delivery-credential-preflight-json",
            "status": "required_before_dispatch"
        },
        {
            "id": "recipient_boundary_reviewed",
            "label": "Empfängergrenze geprüft",
            "owner": "Datenschutz/Legal",
            "evidence": "Keine E-Mail-Adressen, Webhook-URLs, Tokens oder private Zielsystempfade in Public Evidence.",
            "status": "required_before_dispatch"
        },
        {
            "id": "dry_run_receipt",
            "label": "Dry-run-Receipt vorhanden",
            "owner": "Webbetrieb",
            "evidence": "https://saferpage.de/evidence/alert-delivery-readiness-smoke.json",
            "status": "required_before_dispatch"
        },
        {
            "id": "rollback_owner_confirmed",
            "label": "Rollback Owner benannt",
            "owner": "Programm-Owner",
            "evidence": "Kill-Switch, Outbox-Hold, Receiver-Info und Re-Enable-Entscheidung sind einem Owner zugeordnet.",
            "status": "required_before_dispatch"
        },
        {
            "id": "first_live_watch_ready",
            "label": "First-live-Watch geplant",
            "owner": "Security Lead",
            "evidence": "Erster produktiver Alert wird eng auf Ack, Retry, Dedupe, Severity und Empfängergrenze beobachtet.",
            "status": "required_before_dispatch"
        }
    ],
    "receiver_approval_matrix": [
        {
            "channel": "webhook",
            "approval": "HMAC, TLS, IP-/Auth-Policy, Idempotency und Dedupe im Zielsystem abgenommen",
            "public_boundary": "keine Webhook-URL, kein Token, kein Secret",
            "fallback": "local sink / Outbox Hold"
        },
        {
            "channel": "slack",
            "approval": "App/Bot oder Incoming Webhook nur serverseitig, Channel Owner und Retention geprüft",
            "public_boundary": "nur Rollenname, kein Channel, kein Webhook",
            "fallback": "Rollen-Digest"
        },
        {
            "channel": "teams",
            "approval": "Connector/Workflow signiert oder serverseitig geschützt, Owner und Retry-Regeln bestätigt",
            "public_boundary": "kein Tenant-/Webhook-Pfad",
            "fallback": "Rollen-Digest"
        },
        {
            "channel": "jira_ticket",
            "approval": "Projekt, Issue-Type, Dedupe-Feld, Priority-Mapping und Closeout-Status getestet",
            "public_boundary": "keine Projekt-Keys mit privatem Kontext",
            "fallback": "manuelles Ticket mit Evidence-Link"
        },
        {
            "channel": "email",
            "approval": "Nur Rollenverteiler oder Betreiberziel nach Freigabe, keine Besucher- oder Rohpayloaddaten",
            "public_boundary": "keine echten Empfängeradressen",
            "fallback": "monatlicher Report/Digest"
        }
    ],
    "delivery_pause_policy": [
        {
            "trigger": "recipient_bounce_or_4xx",
            "action": "Kanal pausieren, Owner benachrichtigen, Outbox halten und keine alternativen Empfänger raten.",
            "resume_criteria": "Receiver Owner bestätigt Ziel, HMAC/Dedupe erneut getestet."
        },
        {
            "trigger": "retry_storm_or_429",
            "action": "Backoff erhöhen, Dispatch-Gate deaktivieren und Dry-run-Smoke ausführen.",
            "resume_criteria": "Retry-After/Rate-Limit-Verhalten im Zielsystem bestätigt."
        },
        {
            "trigger": "wrong_severity_or_duplicate",
            "action": "Alert neu klassifizieren, Dedupe-Key prüfen, bestehendes Ticket aktualisieren statt neu zu senden.",
            "resume_criteria": "Severity-Mapping und Dedupe-Feld korrigiert."
        },
        {
            "trigger": "secret_or_recipient_leak_detected",
            "action": "Public Export einfrieren, Dispatch stoppen, Evidence neu erzeugen und Forbidden-Pattern-Smoke ausführen.",
            "resume_criteria": "Leak entfernt, Ursache dokumentiert, Smoke grün."
        },
        {
            "trigger": "operator_revokes_approval",
            "action": "SAFERPAGE_ALERT_DISPATCH_APPROVED entfernen, Zielsysteme nicht mehr ansprechen, Rollen-Digest behalten.",
            "resume_criteria": "Neue Betreiberfreigabe und aktueller No-Secret-Smoke."
        }
    ],
    "delivery_incident_drill": [
        {
            "step": 1,
            "label": "Canary-Alert vorbereiten",
            "expected": "Synthetischer Alert nutzt Testdomain/Test-ID und keine externen Feed-Rohdaten.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-storage-canary-json"
        },
        {
            "step": 2,
            "label": "Receiver-Dry-run ausführen",
            "expected": "Payload, HMAC, Idempotency und Dedupe werden gegen lokalen Sink oder Testticket geprüft.",
            "evidence_url": "https://saferpage.de/alarme/dispatch-runner-json"
        },
        {
            "step": 3,
            "label": "Ack und Eskalation simulieren",
            "expected": "Owner-Ack, Severity-SLA, Datenschutzreview und Closeout werden ohne echte Empfänger dokumentiert.",
            "evidence_url": "https://saferpage.de/sicherheit/alerting-digest-json?host=anrufer.info"
        },
        {
            "step": 4,
            "label": "Pause testen",
            "expected": "Dispatch-Gate lässt sich entfernen; Outbox sendet nicht extern; Rollback-Owner bestätigt.",
            "evidence_url": "https://saferpage.de/betreiber/go-live-json"
        },
        {
            "step": 5,
            "label": "Re-Enable entscheiden",
            "expected": "Freigabe erfolgt nur nach grünem Alert-Delivery-Smoke und Receiver-Approval.",
            "evidence_url": "https://saferpage.de/evidence/alert-delivery-readiness-smoke.json"
        }
    ],
    "parity_acceptance": [
        {
            "id": "daily_scheduled_scans",
            "label": "Tägliche Security-Scans",
            "competitor_signal": "SIWECOS-ähnliche tägliche Domainprüfung und wiederkehrende Security-Berichte.",
            "status": "blocked_expected",
            "must_prove": "Feed-Credentials, Storage-Approval, Timer, Retention und No-Secret-Smoke sind grün.",
            "operator_decision": "Produktiv erst nach serverseitigen Feed-Credentials und Storage-Freigabe aktivieren.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-launch-board-json",
            "public_boundary": "Public Evidence zeigt Status und Rollen, aber keine Feed-Keys, Rohpayloads oder privaten Ziel-URLs."
        },
        {
            "id": "automatic_notifications",
            "label": "Automatische Benachrichtigung bei kritischen Treffern",
            "competitor_signal": "Security-Scanner erwarten automatische Nachrichten bei kritischen Schwachstellen.",
            "status": "blocked_expected",
            "must_prove": "Receiver-Approval, HMAC/Idempotency, Zielsystemfreigabe, Pause Policy und Alert-Delivery-Smoke sind grün.",
            "operator_decision": "Externe Zustellung bleibt blockiert; Rollen-Digest und Dry-run reichen bis zur Freigabe.",
            "evidence_url": "https://saferpage.de/integrationen/delivery-credential-preflight-json",
            "public_boundary": "Keine echten Empfänger, Webhook-URLs, Tokens oder Channel-Namen in Public Exports."
        },
        {
            "id": "security_report_and_badge",
            "label": "Security-Report, Badge und öffentliche Nachweise",
            "competitor_signal": "Gute Scanner liefern Siegel, Gesamtscore, Report und verlinkbare Prüfdetails.",
            "status": "ready_blueprint",
            "must_prove": "Kurzreport, Security Evidence Index, Badge, Smoke-Evidence und Claim-Grenze sind öffentlich verlinkt.",
            "operator_decision": "Als öffentlicher Statusnachweis nutzbar, solange er keine Zertifizierung oder Live-Monitoring ohne Freigabe behauptet.",
            "evidence_url": "https://saferpage.de/security-evidence-json",
            "public_boundary": "Badge und Report zeigen letzten öffentlichen Check, keinen privaten Produktiv-Feed und keine Rechts- oder Sicherheitsgarantie."
        },
        {
            "id": "canary_before_live",
            "label": "Canary vor Live-Betrieb",
            "competitor_signal": "Produktive Scanner brauchen eine sichere Probe, bevor echte Alerts an Zielsysteme gehen.",
            "status": "blocked_expected",
            "must_prove": "Synthetischer Canary schreibt keine echten Feed-Treffer, sendet keine Alerts und ist im Audit rekonstruierbar.",
            "operator_decision": "Canary bleibt bis Storage-Approval blockiert.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-storage-canary-json",
            "public_boundary": "Nur synthetische Testindikatoren, keine echten Malware-Feed-Payloads und keine Besucherlogs."
        },
        {
            "id": "incident_closeout_and_rescan",
            "label": "Closeout, Re-Scan und Betreiberkommunikation",
            "competitor_signal": "Nützliche Alerting-Systeme enden nicht beim Fund, sondern bei Fix, Re-Scan und nachvollziehbarer Entscheidung.",
            "status": "ready_blueprint",
            "must_prove": "Ack, Owner, Datenschutz-/Legal-Review, Containment, Re-Scan und Closeout-Notiz sind als Ablauf vorhanden.",
            "operator_decision": "Ablauf ist als Betreiber-Runbook verwendbar; echte Incident-Kommunikation bleibt Betreiberentscheidung.",
            "evidence_url": "https://saferpage.de/sicherheit/alerting-digest-json?host=anrufer.info",
            "public_boundary": "Keine internen Tickets, Kundendaten, Empfänger oder privaten Incident-Details öffentlich ausgeben."
        },
        {
            "id": "no_secret_public_claim",
            "label": "Keine Produktivbehauptung ohne Freigabe",
            "competitor_signal": "Wettbewerbs-Parität muss belegbar sein, darf aber keine Scheinsicherheit erzeugen.",
            "status": "passed",
            "must_prove": "Digest, Smokes und Go-live-Center nennen Blocker und Grenzen sichtbar.",
            "operator_decision": "Öffentlich nur Readiness und Grenzen behaupten, bis Betreiberfreigaben, Secrets und Zielsysteme aktiv sind.",
            "evidence_url": "https://saferpage.de/vergleich/aktionsplan-json",
            "public_boundary": "Keine Feed-Credentials, keine externen Feed-Calls, keine echten Observations, keine Alerts und keine Empfänger im Public Digest."
        }
    ],
    "parity_closure_plan": [
        {
            "id": "feed_credentials_signoff",
            "label": "Feed-Credentials serverseitig freigeben",
            "status": "waiting_for_operator_secret",
            "owner": "IT/Security",
            "unlocks": [
                "tägliche registrierte Domain-Prüfung",
                "URLhaus-/Safe-Browsing-Abgleich",
                "Security-Feed-Runner"
            ],
            "operator_input": "URLhaus-/Safe-Browsing-Keys als Server-Secrets setzen, Rotation dokumentieren und Credential-Preflight erneut ausführen.",
            "acceptance_criteria": [
                "ready_for_external_feed_run=true",
                "missing_required_secret_reference_count=0",
                "external_probe_executed nur nach Freigabe"
            ],
            "competitor_parity_effect": "Schließt den Abstand zu Scannern mit wiederkehrender Malware-/Blocklist-Prüfung, ohne Feed-Keys offenzulegen.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-credential-preflight-json?host=anrufer.info",
            "do_not_claim_until_done": "Keine produktive Malware-, Safe-Browsing- oder tägliche Feed-Abfrage behaupten."
        },
        {
            "id": "storage_retention_signoff",
            "label": "Feed-Storage, Retention und Canary freigeben",
            "status": "waiting_for_storage_approval",
            "owner": "DB-Owner/Datenschutz",
            "unlocks": [
                "Observation-Historie",
                "Canary vor Live-Betrieb",
                "Review-/Suppress-/Retention-Audit"
            ],
            "operator_input": "Migration ausführen, Retention/DPIA-Kontrollen bestätigen, Storage-Canary trocken prüfen und Rollback-Rehearsal dokumentieren.",
            "acceptance_criteria": [
                "ready_for_write=true",
                "missing_database_artifact_count=0",
                "Canary schreibt nur synthetische Testindikatoren"
            ],
            "competitor_parity_effect": "Macht wiederkehrende Befunde auditierbar wie bei Monitoring-Produkten, ohne Rohpayloads oder Besucherlogs zu publizieren.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-storage-readiness-json",
            "do_not_claim_until_done": "Keine gespeicherten Feed-Observations, historischen Malware-Treffer oder Canary-Live-Läufe behaupten."
        },
        {
            "id": "receiver_delivery_signoff",
            "label": "Receiver-Approval und Dispatch-Freigabe abschließen",
            "status": "waiting_for_receiver_approval",
            "owner": "Delivery Owner",
            "unlocks": [
                "automatische Benachrichtigung",
                "Ack/Closeout im Zielsystem",
                "First-live-Watch"
            ],
            "operator_input": "Zielsysteme intern freigeben, HMAC/Idempotency/Dedupe prüfen, Pause Policy bestätigen und Dispatch-Approval setzen.",
            "acceptance_criteria": [
                "SAFERPAGE_ALERT_DISPATCH_APPROVED=yes",
                "Receiver prüft HMAC und Idempotency",
                "keine echten Empfänger im Public Export"
            ],
            "competitor_parity_effect": "Schließt die Lücke zu automatischen Schwachstellen-Benachrichtigungen, ohne Webhooks, Tokens oder Empfänger zu veröffentlichen.",
            "evidence_url": "https://saferpage.de/integrationen/delivery-credential-preflight-json",
            "do_not_claim_until_done": "Keine automatische externe Alert-Zustellung, Slack-/Teams-/Jira-Tickets oder E-Mail-Alerts behaupten."
        }
    ],
    "alerting_claim_lane": {
        "summary": "Security-/Alerting-Claims für Betreiberkommunikation: belegbare Readiness zeigen, geplante Scans gated formulieren und produktive Monitoring-/Delivery-Claims bis Feed-, Storage- und Receiver-Freigabe sperren.",
        "rows": [
            {
                "id": "security_evidence_readiness",
                "label": "Security-Evidence und Alerting-Readiness",
                "claim_state": "public_ready",
                "allowed_claim": "Betreiber können Security-Evidence, Alert-Digest, Rollenrouting, SLA, Dry-run und Go-live-Gates als öffentliche Readiness zeigen.",
                "required_operator_input": "Geprüften Host, Evidence-Routen, Rollenmodell und Claim-Grenze freigeben.",
                "do_not_claim": "Nicht behaupten: laufende externe Malware-/Safe-Browsing-Feeds, gespeicherte Live-Observations oder automatische Zustellung.",
                "acceptance_criteria": [
                    "Alerting-Digest, Security-Evidence-Index und Go-live-Center sind öffentlich erreichbar.",
                    "Security- und Delivery-Smokes laufen ohne failed_check_count.",
                    "Public Exports zeigen keine Empfänger, Webhook-URLs, Tokens, Rohpayloads oder Besucherlogs."
                ],
                "evidence_urls": [
                    "https://saferpage.de/sicherheit/alerting-digest-json?host=anrufer.info",
                    "https://saferpage.de/security-evidence-json",
                    "https://saferpage.de/betreiber/go-live-json"
                ]
            },
            {
                "id": "scheduled_security_scan_readiness",
                "label": "Geplante Security-Scans",
                "claim_state": "gated_readiness",
                "allowed_claim": "SaferPage kann geplante Security-Scan-Abläufe, Canaries, Retention-Review und Rollback als Betreiber-Blueprint zeigen.",
                "required_operator_input": "Feed-Credentials, Storage-Approval, Retention-Regeln und Canary-Freigabe setzen.",
                "do_not_claim": "Nicht behaupten: tägliche externe Feed-Abfrage, produktive Malware-Historie oder gespeicherte echte Feed-Treffer.",
                "acceptance_criteria": [
                    "Credential-Preflight zeigt erforderliche Secret-Refs ohne Secret-Ausgabe.",
                    "Storage-Readiness und Canary-Freigabe sind abgenommen.",
                    "Runner bleibt bis Freigabe guarded und speichert keine echten Observations."
                ],
                "evidence_urls": [
                    "https://saferpage.de/sicherheit/feed-credential-preflight-json?host=anrufer.info",
                    "https://saferpage.de/sicherheit/feed-storage-readiness-json",
                    "https://saferpage.de/sicherheit/feed-runner-json",
                    "https://saferpage.de/sicherheit/feed-storage-canary-json"
                ]
            },
            {
                "id": "alert_delivery_readiness",
                "label": "Alert-Zustellung und Receiver-Approval",
                "claim_state": "blocked_live",
                "allowed_claim": "Nur als Delivery-Preflight kommunizieren: Receiver-Vertrag, HMAC, Idempotency, Pause Policy und Incident-Drill sind vorbereitet.",
                "required_operator_input": "Zielsysteme, Empfängergruppen, HMAC-Secret, Dispatch-Approval und Stop-Bedingungen freigeben.",
                "do_not_claim": "Nicht behaupten: produktive Webhook-/Slack-/Teams-/Jira-/E-Mail-Zustellung oder aktive Empfänger.",
                "acceptance_criteria": [
                    "Delivery-Preflight und Alert-Delivery-Smoke sind grün.",
                    "Receiver-Approval-Matrix und Signoff-Receipt sind Betreiber-abgenommen.",
                    "Public Export enthält keine Ziel-URLs, Empfänger, HMAC-Secrets oder Payload-Rohdaten."
                ],
                "evidence_urls": [
                    "https://saferpage.de/integrationen/delivery-credential-preflight-json",
                    "https://saferpage.de/evidence/alert-delivery-readiness-smoke.json",
                    "https://saferpage.de/alarme/dispatch-runner-json"
                ]
            },
            {
                "id": "alert_sla_and_operator_workflow",
                "label": "Alert-SLA, Eskalation und Betreiberworkflow",
                "claim_state": "public_ready",
                "allowed_claim": "SLA, Eskalationspfad, Impact-Triage, Betreibertexte und Dry-run-Drills sind als öffentliche Abnahmeakte verfügbar.",
                "required_operator_input": "Owner, Reaktionszeiten, Datenschutzreview und Closeout-Regeln gegen Betreiberpraxis prüfen.",
                "do_not_claim": "Nicht behaupten: echte Incident-Bearbeitung, interne Tickets, personenbezogene Alert-Fälle oder externe Empfängerketten.",
                "acceptance_criteria": [
                    "Severity-Policy, Eskalation, Impact-Triage und Kommunikationsvorlagen sind vollständig.",
                    "Dry-run beschreibt Ack, Containment, Datenschutzreview und Closeout.",
                    "Betreibertexte bleiben generisch und enthalten keine Kundendaten oder echten Vorfälle."
                ],
                "evidence_urls": [
                    "https://saferpage.de/sicherheit/alerting-digest-json?host=anrufer.info",
                    "https://saferpage.de/evidence/alert-delivery-readiness-smoke.json",
                    "https://saferpage.de/vergleich/aktionsplan-json"
                ]
            },
            {
                "id": "security_monitoring_live_parity",
                "label": "Produktive Security-Monitoring-Parität",
                "claim_state": "blocked_live",
                "allowed_claim": "Nur als Parity-Schließplan kommunizieren: Feed-Credentials, Storage/Retention und Receiver-Approval sind getrennte Betreiberfreigaben.",
                "required_operator_input": "Alle drei Schließplan-Freigaben signieren, Smokes erneut ausführen und ersten produktiven Lauf überwachen.",
                "do_not_claim": "Nicht behaupten: vollständige Monitoring-Parität, Live-Alerts, externe Feed-Läufe oder automatische Security-Benachrichtigung.",
                "acceptance_criteria": [
                    "Parity-Closure-Plan steht auf done für Feed-Credentials, Storage und Receiver-Approval.",
                    "Go-live-Center gibt den Security-/Delivery-Claim frei.",
                    "First-live-Watch, Kill-Switch und Rollback sind Betreiber-abgenommen."
                ],
                "evidence_urls": [
                    "https://saferpage.de/sicherheit/alerting-digest-json?host=anrufer.info",
                    "https://saferpage.de/sicherheit/feed-launch-board-json",
                    "https://saferpage.de/betreiber/go-live-json"
                ]
            }
        ],
        "metrics": {
            "claim_count": 5,
            "public_ready_count": 2,
            "gated_readiness_count": 1,
            "blocked_live_count": 2,
            "operator_input_count": 5,
            "do_not_claim_count": 5,
            "acceptance_criterion_count": 15,
            "evidence_url_count": 16
        },
        "claim_boundary": "Diese Claim-Lane ist eine Kommunikationsfreigabe, kein Produktivbetrieb. Sie setzt keine Feed-Secrets, ruft keine externen Feeds auf, speichert keine echten Observations und sendet keine Alerts."
    },
    "security_alert_drill_evidence_pack": {
        "schema": "https://saferpage.de/schemas/security-alert-drill-evidence-pack.v1",
        "summary": "No-Secret-Drill für Security-Feed und Alert-Zustellung: öffentlich belegbare Readiness, erwartete Produktivblocker und klare Nicht-Claims vor Live-Monitoring.",
        "rows": [
            {
                "id": "feed_smoke_green",
                "label": "Security-Feed-Smoke ohne Fehler",
                "status": "passed",
                "evidence_url": "https://saferpage.de/evidence/security-feed-readiness-smoke.json",
                "operator_input": "Feed-Smoke nach jeder Änderung an Credential-, Storage- oder Runner-Gates erneut ausführen.",
                "no_secret_boundary": "Public Evidence zeigt nur Status, Zähler, Rollen und sichere Env-Refs, keine Feed-Keys oder Rohpayloads.",
                "acceptance_criteria": [
                    "ok=true",
                    "failed_check_count=0",
                    "blocked_expected_count bleibt sichtbar"
                ],
                "stop_conditions": [
                    "failed_check_count > 0",
                    "Secret-/Payload-Feld im Export",
                    "unerwarteter externer Feed-Run"
                ]
            },
            {
                "id": "delivery_smoke_green",
                "label": "Alert-Delivery-Smoke ohne Fehler",
                "status": "passed",
                "evidence_url": "https://saferpage.de/evidence/alert-delivery-readiness-smoke.json",
                "operator_input": "Delivery-Smoke nach jeder Zielsystem-, HMAC-, Receiver- oder Dispatch-Änderung erneut ausführen.",
                "no_secret_boundary": "Public Evidence zeigt keine echten Empfänger, Webhook-URLs, Channel-Namen, Tokens oder Payload-Rohdaten.",
                "acceptance_criteria": [
                    "ok=true",
                    "failed_check_count=0",
                    "dry_run_sent_count=0"
                ],
                "stop_conditions": [
                    "sent_count > 0 ohne Approval",
                    "Ziel-URL im Public Export",
                    "Empfänger oder Token sichtbar"
                ]
            },
            {
                "id": "runtime_controls_green",
                "label": "Runtime-Control-Manifeste für Feed und Delivery grün",
                "status": "passed",
                "evidence_url": "https://saferpage.de/evidence-hub-json",
                "operator_input": "Execute-, Storage-, Dispatch-, HMAC-, Dry-run- und No-Secret-Gates als verpflichtende Runtime-Kontrollen beibehalten.",
                "no_secret_boundary": "Manifeste dürfen Kontrollnamen und sichere Referenzen zeigen, aber keine Secret-Werte, privaten Zielsysteme oder Besucherlogs.",
                "acceptance_criteria": [
                    "Feed controls ok",
                    "Delivery controls ok",
                    "missing_control_count=0"
                ],
                "stop_conditions": [
                    "Runtime-Control fehlt",
                    "No-Secret-Policy rot",
                    "Direkter Execute-Pfad ohne Gate"
                ]
            },
            {
                "id": "feed_and_storage_blocked_until_operator_approval",
                "label": "Feed-Runs und Observation-Storage bis Betreiberfreigabe blockiert",
                "status": "blocked_expected",
                "evidence_url": "https://saferpage.de/sicherheit/feed-launch-board-json",
                "operator_input": "Feed-Credentials, Storage-Migration, Retention-Review und synthetischen Canary erst intern freigeben.",
                "no_secret_boundary": "Bis zur Freigabe keine produktive Malware-/Safe-Browsing-Abfrage, keine gespeicherten echten Observations und keine Malware-Frei-Aussage.",
                "acceptance_criteria": [
                    "ready_for_external_feed_run=true",
                    "ready_for_write=true",
                    "Canary erfolgreich ohne Rohpayloads"
                ],
                "stop_conditions": [
                    "missing_required_secret_reference_count > 0",
                    "storage_approved=false",
                    "Canary schreibt echten Feed-Treffer"
                ]
            },
            {
                "id": "delivery_blocked_until_receiver_approval",
                "label": "Externe Alert-Zustellung bis Receiver-Approval blockiert",
                "status": "blocked_expected",
                "evidence_url": "https://saferpage.de/integrationen/delivery-credential-preflight-json",
                "operator_input": "Receiver, Empfängergruppe, HMAC, Idempotency, Pause Policy und First-live-Watch privat freigeben.",
                "no_secret_boundary": "Bis zur Freigabe keine automatische Slack-/Teams-/Jira-/Webhook-/E-Mail-Zustellung behaupten.",
                "acceptance_criteria": [
                    "SAFERPAGE_ALERT_DISPATCH_APPROVED=yes",
                    "Receiver prüft HMAC/Idempotency",
                    "Alert-Delivery-Smoke bleibt grün"
                ],
                "stop_conditions": [
                    "native_ready_channel_count=0",
                    "dispatch_approved=false",
                    "Public Export enthält Empfänger oder Ziel-URL"
                ]
            },
            {
                "id": "operator_claim_boundary_visible",
                "label": "Claim-Grenze für Wettbewerbs-Parity sichtbar",
                "status": "passed",
                "evidence_url": "https://saferpage.de/sicherheit/alerting-digest-json?host=anrufer.info",
                "operator_input": "Öffentlich nur Readiness, Gates, Signoff-Pfad und Grenzen kommunizieren, bis Feed, Storage und Receiver freigegeben sind.",
                "no_secret_boundary": "Kein Live-Monitoring-, Zertifizierungs-, Malware-Clean-, Safe-Browsing-Clean- oder Zustellungsclaim ohne Operator-Signoff.",
                "acceptance_criteria": [
                    "Claim-Lane vorhanden",
                    "Parity-Closure-Plan vorhanden",
                    "Nicht-behaupten-Grenzen je Freigabe sichtbar"
                ],
                "stop_conditions": [
                    "Live-Parity-Claim trotz blocked_expected",
                    "fehlende Nicht-Claims",
                    "fehlender Korrektur-/Go-live-Pfad"
                ]
            }
        ],
        "metrics": {
            "row_count": 6,
            "passed_count": 4,
            "blocked_expected_count": 2,
            "review_required_count": 0,
            "evidence_url_count": 6,
            "no_secret_boundary_count": 6,
            "operator_input_count": 6,
            "acceptance_criterion_count": 18,
            "stop_condition_count": 18
        }
    },
    "source_snapshots": {
        "launch_board": {
            "url": "https://saferpage.de/sicherheit/feed-launch-board-json",
            "summary": "anrufer.info: Security-Feed-Launch ist blockiert; 6/7 Gate(s) offen."
        },
        "credential_preflight": {
            "url": "https://saferpage.de/sicherheit/feed-credential-preflight-json?host=anrufer.info",
            "summary": "anrufer.info: Credential-Preflight blockiert; 5/6 Check(s) offen, 3 Pflicht-Secret(s) fehlen."
        },
        "storage_readiness": {
            "url": "https://saferpage.de/sicherheit/feed-storage-readiness-json",
            "summary": "Security-Feed-Storage ist noch nicht schreibbereit: 0 Datenbank-Artefakt(e) fehlen oder die Serverfreigabe ist nicht aktiv."
        },
        "feed_runner": {
            "url": "https://saferpage.de/sicherheit/feed-runner-json",
            "summary": "Security-Feed-Runner: 50 Domain(s) geprüft, 0 aktivierungsbereit, 0 externe Feed-Run(s), 0 Observation(s) gespeichert, 0 durch Gates blockiert, 0 ohne Reportseite, 50 technische Fehler."
        },
        "alert_dispatch": {
            "url": "https://saferpage.de/alarme/dispatch-runner-json",
            "summary": "Alert-Dispatch-Runner: 50 Domain(s) geprüft, 0 zustellbare Outbox-Einträge, 0 gesendet, 0 blockiert, 50 Fehler."
        }
    },
    "links": {
        "html": "https://saferpage.de/sicherheit/alerting-digest",
        "json": "https://saferpage.de/sicherheit/alerting-digest-json",
        "csv": "https://saferpage.de/sicherheit/alerting-digest-csv",
        "markdown": "https://saferpage.de/sicherheit/alerting-digest-md",
        "launch_board": "https://saferpage.de/sicherheit/feed-launch-board-json",
        "go_live": "https://saferpage.de/betreiber/go-live-json"
    },
    "no_secret_policy": {
        "contains_secrets": false,
        "contains_feed_raw_payloads": false,
        "contains_recipients": false,
        "contains_private_target_urls": false,
        "contains_visitor_logs": false,
        "does_not_call_external_feeds": true,
        "does_not_send_alerts": true,
        "does_not_store_observations": true,
        "does_not_run_canary_without_storage_approval": true,
        "does_not_run_delivery_without_receiver_approval": true,
        "does_not_claim_live_parity_without_operator_approval": true,
        "contains_communication_recipients": false,
        "contains_webhook_urls": false
    },
    "claim_boundary": "Dieser Digest aggregiert öffentliche Readiness-Evidence. Er setzt keine Feed-Credentials, ruft keine externen Malware-/Safe-Browsing-Feeds auf, speichert keine echten Observations und sendet keine Alerts."
}
