{
    "schema": "https://saferpage.de/schemas/security-feed-launch-board.v1",
    "generated_at": "2026-07-17T20:55:21+00:00",
    "domain": "anrufer.info",
    "launch_ready": false,
    "status": "blocked",
    "summary": "anrufer.info: Security-Feed-Launch ist blockiert; 6/7 Gate(s) offen.",
    "metrics": {
        "gate_count": 7,
        "passed_gate_count": 1,
        "blocked_gate_count": 6,
        "latest_smoke_available": 1,
        "latest_smoke_ok": 1,
        "latest_smoke_target_count": 17,
        "latest_smoke_failed_check_count": 0,
        "latest_smoke_blocked_expected_count": 2,
        "latest_smoke_dry_run_executed_count": 0,
        "latest_smoke_dry_run_stored_observation_count": 0,
        "missing_secret_count": 0,
        "missing_database_artifact_count": 0,
        "runner_error_count": 50,
        "runner_executed_count": 0,
        "runner_stored_observation_count": 0,
        "storage_canary_stored_observation_count": 0,
        "parity_item_count": 7,
        "blocked_parity_item_count": 4,
        "security_coverage_item_count": 8,
        "public_security_coverage_count": 8,
        "public_security_coverage_percent": 100,
        "production_secret_coverage_item_count": 5,
        "production_secret_blocked_coverage_count": 5,
        "consolidation_status_count": 5,
        "claim_boundary_count": 5
    },
    "gates": [
        {
            "id": "feed_credentials",
            "label": "Produktive Feed-Credentials",
            "status": "blocked",
            "passed": false,
            "evidence": "Secret-Readiness nicht abrufbar.",
            "owner": "IT/Security",
            "next_action": "SAFERPAGE_URLHAUS_AUTH_KEY und SAFERPAGE_GOOGLE_SAFE_BROWSING_API_KEY serverseitig setzen und Rotation dokumentieren.",
            "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/feed-secrets-json"
        },
        {
            "id": "storage_schema",
            "label": "Storage-Tabellen, Indizes und Trigger",
            "status": "passed",
            "passed": true,
            "evidence": "Security-Feed-Storage ist noch nicht schreibbereit: 0 Datenbank-Artefakt(e) fehlen oder die Serverfreigabe ist nicht aktiv.",
            "owner": "DB-Owner",
            "next_action": "Keine Aktion im Launch-Gate offen; weiterhin überwachen.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-storage-readiness-json"
        },
        {
            "id": "storage_approval",
            "label": "Betreiberfreigabe für Speicherung",
            "status": "blocked",
            "passed": false,
            "evidence": "Ohne Serverfreigabe bleibt Speicherung deaktiviert, selbst wenn Tabellen vorhanden sind.",
            "owner": "Betreiber/Datenschutz",
            "next_action": "SAFERPAGE_SECURITY_FEED_STORAGE_APPROVED=yes erst nach Retention-, Review- und Alert-Routing-Freigabe setzen.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-storage-readiness-json"
        },
        {
            "id": "delivery_signature",
            "label": "Signierte Delivery",
            "status": "blocked",
            "passed": false,
            "evidence": "Delivery-Signatur-Gate nicht passed.",
            "owner": "IT/Security",
            "next_action": "SAFERPAGE_WEBHOOK_SECRET oder SAFERPAGE_OPERATOR_WEBHOOK_SECRET setzen und HMAC-Dry-Run dokumentieren.",
            "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/feed-activation-json"
        },
        {
            "id": "runner_operational",
            "label": "systemd Runner operational",
            "status": "blocked",
            "passed": false,
            "evidence": "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.",
            "owner": "Webbetrieb",
            "next_action": "Timer, Runner-State und letzte Ausführung prüfen; Fehler im Journal beheben.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-runner-json"
        },
        {
            "id": "runner_guarded",
            "label": "Keine ungeprüften externen Runs oder Speicherungen",
            "status": "blocked",
            "passed": false,
            "evidence": "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.",
            "owner": "Webbetrieb/Datenschutz",
            "next_action": "Vor produktiver Aktivierung prüfen, warum externe Runs oder Speicherungen bereits aufgetreten sind.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-runner-json"
        },
        {
            "id": "activation_ready",
            "label": "Launch-Aktivierung",
            "status": "blocked",
            "passed": false,
            "evidence": "Activation-Paket nicht abrufbar.",
            "owner": "Programm-Owner",
            "next_action": "Alle blockierten Activation-Gates nacheinander schließen und danach Einzeltest ausführen.",
            "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/feed-activation-json"
        }
    ],
    "latest_smoke_result": {
        "schema": "https://saferpage.de/schemas/security-feed-readiness-smoke.v1",
        "generated_at": "2026-06-15T00:27:44+00:00",
        "ok": true,
        "summary": "No-Secret-Smoke für Security-Feed-Launch-Board, Credential-Preflight, Storage-Readiness, Runner, Runtime-Kontrollen, Operator-Go-live und isolierten Dry-run.",
        "host": "anrufer.info",
        "source_launch_board_schema": "https://saferpage.de/schemas/security-feed-launch-board.v1",
        "source_launch_board_url": "https://saferpage.de/sicherheit/feed-launch-board-json",
        "metrics": {
            "target_count": 17,
            "http_passed_count": 17,
            "http_failed_count": 0,
            "check_count": 25,
            "failed_check_count": 0,
            "blocked_expected_count": 2,
            "missing_required_secret_reference_count": 3,
            "storage_missing_database_artifact_count": 0,
            "storage_approved": 0,
            "storage_preflight_required_artifact_count": 11,
            "storage_preflight_ready_artifact_count": 11,
            "storage_preflight_missing_artifact_count": 0,
            "storage_preflight_admin_dsn_required": 0,
            "storage_preflight_artifact_ready": 1,
            "storage_migration_signoff_item_count": 6,
            "storage_rollback_rehearsal_step_count": 5,
            "storage_post_migration_canary_step_count": 6,
            "storage_feed_source_quality_count": 6,
            "storage_observation_review_workflow_step_count": 6,
            "storage_false_positive_playbook_step_count": 5,
            "storage_public_claim_policy_count": 5,
            "storage_retention_dpia_control_count": 5,
            "storage_feed_escalation_slo_count": 4,
            "storage_feed_owner_handoff_step_count": 6,
            "storage_feed_owner_handoff_private_input_count": 6,
            "storage_feed_owner_handoff_public_output_count": 7,
            "storage_feed_owner_handoff_forbidden_output_count": 8,
            "storage_feed_owner_handoff_acceptance_count": 7,
            "storage_feed_owner_handoff_evidence_url_count": 7,
            "storage_feed_owner_handoff_validation_query_count": 5,
            "storage_feed_owner_handoff_safe_command_count": 5,
            "storage_canary_ready_to_run": 0,
            "storage_canary_storage_approved": 0,
            "storage_canary_expected_effect_count": 5,
            "storage_canary_forbidden_effect_count": 3,
            "storage_canary_operator_command_count": 6,
            "storage_canary_acceptance_criterion_count": 5,
            "storage_canary_stored_observation_count": 0,
            "launch_blocked_gate_count": 4,
            "launch_consolidation_status_count": 5,
            "launch_claim_boundary_count": 5,
            "runner_executed_count": 0,
            "runner_stored_observation_count": 0,
            "security_feed_runtime_controls_ok": 1,
            "security_feed_runtime_controls_control_count": 7,
            "security_feed_runtime_controls_enabled_control_count": 7,
            "security_feed_runtime_controls_missing_control_count": 0,
            "security_feed_runtime_controls_secret_value_count": 0,
            "security_feed_runtime_controls_no_secret_policy_ok": 1,
            "dry_run_executed_count": 0,
            "dry_run_stored_observation_count": 0,
            "storage_preflight_missing_required_artifact_count": 0,
            "security_notification_digest_available": 1,
            "security_notification_channel_count": 5,
            "security_notification_frequency_count": 3,
            "security_notification_contains_real_recipients": 0,
            "security_alerting_digest_public_route_count": 12,
            "security_alerting_digest_gate_count": 5,
            "security_alerting_digest_blocked_gate_count": 3,
            "security_alerting_digest_operator_action_count": 4,
            "security_alerting_digest_alert_outbox_count": 12,
            "security_alerting_digest_impact_triage_count": 4,
            "security_alerting_digest_communication_template_count": 4,
            "security_alerting_digest_communication_ticket_html_link_count": 1,
            "security_alerting_digest_receiver_contract_count": 5,
            "security_alerting_digest_user_guidance_count": 3,
            "security_alerting_digest_scheduled_scan_plan_count": 4,
            "security_alerting_digest_alert_routing_matrix_count": 4,
            "security_alerting_digest_scheduled_scan_acceptance_count": 5,
            "security_alerting_digest_canary_activation_step_count": 6,
            "security_alerting_digest_retention_review_count": 5,
            "security_alerting_digest_kill_switch_rollback_count": 5,
            "security_alerting_digest_parity_acceptance_count": 6,
            "security_alerting_digest_parity_acceptance_ready_count": 3,
            "security_alerting_digest_parity_acceptance_blocked_count": 3,
            "security_alerting_digest_parity_closure_plan_count": 3,
            "security_alerting_digest_parity_closure_done_count": 0,
            "security_alerting_digest_parity_closure_waiting_count": 3,
            "security_alerting_digest_parity_closure_unlock_count": 9,
            "security_alerting_digest_parity_closure_acceptance_criterion_count": 9,
            "security_alerting_digest_parity_closure_boundary_count": 3,
            "security_alerting_digest_parity_closure_evidence_url_count": 3,
            "security_alerting_digest_drill_evidence_pack_row_count": 6,
            "security_alerting_digest_drill_evidence_pack_passed_count": 4,
            "security_alerting_digest_drill_evidence_pack_blocked_expected_count": 2,
            "security_alerting_digest_drill_evidence_pack_evidence_url_count": 6,
            "security_alerting_digest_drill_evidence_pack_no_secret_boundary_count": 6,
            "security_alerting_digest_drill_evidence_pack_operator_input_count": 6,
            "security_alerting_digest_drill_evidence_pack_acceptance_criterion_count": 18,
            "security_alerting_digest_drill_evidence_pack_stop_condition_count": 18,
            "operator_go_live_activation_packet_count": 3,
            "operator_go_live_security_feed_activation_step_count": 6,
            "operator_go_live_security_feed_rollback_action_count": 4,
            "operator_go_live_security_feed_watch_signal_count": 5,
            "operator_go_live_signoff_dossier_count": 3,
            "operator_go_live_signoff_evidence_url_count": 16,
            "operator_go_live_signoff_acceptance_criterion_count": 15,
            "operator_go_live_signoff_stop_condition_count": 12,
            "operator_go_live_signoff_no_secret_check_count": 15
        },
        "checks": [
            {
                "id": "public_routes_http_200",
                "label": "Öffentliche Security-Feed-Readiness-Routen erreichbar",
                "status": "passed",
                "evidence": "17/17 Route(s) liefern HTTP 200.",
                "operator_action": "Weiter mit Go-live-Gates und Runner-Smokes."
            },
            {
                "id": "dry_run_blocks_external_feeds",
                "label": "Dry-run ruft keine externen Feeds auf",
                "status": "passed",
                "evidence": "dry_run_ok=yes, executed_count=0.",
                "operator_action": "Dry-run isoliert halten; echte Feed-Runs nur mit explizitem Execute- und Credential-Gate starten."
            },
            {
                "id": "dry_run_blocks_storage",
                "label": "Dry-run speichert keine Observations",
                "status": "passed",
                "evidence": "stored_observation_count=0.",
                "operator_action": "Storage-Schreibpfad erst nach Migration, Retention-Review und SAFERPAGE_SECURITY_FEED_STORAGE_APPROVED aktivieren."
            },
            {
                "id": "runtime_controls_documented",
                "label": "Security-Feed-Runtime-Kontrollen dokumentiert",
                "status": "passed",
                "evidence": "manifest_ok=yes, controls=7/7, missing=0, secrets=0, Execute-/Storage-/Dry-run-Gates geprüft.",
                "operator_action": "Runtime-Controls bei Runner- oder Connector-Änderungen erneut reviewen."
            },
            {
                "id": "credential_blocker_explicit",
                "label": "Produktivblocker Feed-Credentials explizit",
                "status": "blocked_expected",
                "evidence": "missing_required_secret_reference_count=3, external_feed_ready=no.",
                "operator_action": "URLhaus- und Safe-Browsing-Keys nur serverseitig setzen; keine Secret-Werte exportieren."
            },
            {
                "id": "storage_blocker_explicit",
                "label": "Produktivblocker Feed-Storage explizit",
                "status": "blocked_expected",
                "evidence": "missing_database_artifact_count=0, storage_approved=no.",
                "operator_action": "Storage-Migration und Betreiberfreigabe aus sicherer Shell abschließen."
            },
            {
                "id": "storage_admin_dsn_gate_explicit",
                "label": "Storage-Migration braucht DB-Admin-Verantwortungs-DSN statt Web-DB-User",
                "status": "passed",
                "evidence": "required_artifacts=11, ready_artifacts=11, missing_artifacts=0, admin_dsn_required=no.",
                "operator_action": "Retention-Freigabe und Canary als naechsten Schritt nutzen."
            },
            {
                "id": "storage_canary_blueprint_ready",
                "label": "Storage-Canary für synthetische private Observation ist ohne externe Feed-Abfrage definiert",
                "status": "passed",
                "evidence": "status=not_run_yet, ready_to_run=no, storage_approved=no, expected_effects=5, commands=6, canary_stored=0.",
                "operator_action": "Nach DDL-Migration und Storage-Freigabe zuerst den synthetischen Canary ausführen; echte externe Feed-Observations bleiben bis danach blockiert."
            },
            {
                "id": "storage_migration_signoff_pack_ready",
                "label": "Storage-Migration hat Signoff-Paket, Rollback-Probe und Post-Migration-Canary",
                "status": "passed",
                "evidence": "signoff_items=6, rollback_steps=5, post_migration_canary_steps=6.",
                "operator_action": "Migration Evidence Receipt, Rollback-Rehearsal und Canary-Abnahme im Storage-Readiness-Export pflegen; keine DSN, Feed-Rohpayloads oder Secret-Werte exportieren."
            },
            {
                "id": "threat_feed_operations_quality_ready",
                "label": "Threat-Feed-Operations dokumentiert Quellenqualität, Review, False Positives, Claims, Retention und SLO",
                "status": "passed",
                "evidence": "sources=6, review=6, false_positive=5, claims=5, retention_dpia=5, slo=4.",
                "operator_action": "Quellenqualität, Observation-Review, False-Positive-Playbook, öffentliche Claim-Regeln, Retention/DPIA und Eskalations-SLO im Feed-Storage-Dossier pflegen; keine Feed-Rohpayloads, Secrets oder personenbezogenen Logs veröffentlichen."
            },
            {
                "id": "feed_owner_handoff_packet_ready",
                "label": "Security-Feed-Handoff trennt DB-Verantwortung, Credentials, Storage-Approval, Canary und Claim-Grenzen",
                "status": "passed",
                "evidence": "status=waiting_for_db_owner_and_operator_approval, steps=6, private_inputs=6, public_outputs=7, forbidden_outputs=8, acceptance=7, evidence_urls=7, validation_queries=5, safe_commands=5, unsafe_evidence_urls=0.",
                "operator_action": "Feed-Handoff muss öffentlich nur Status, Hashes, Zähler, sichere Commands und saferpage.de-Evidence zeigen; DSN, Feed-Keys, Rohpayloads, Ziel-URLs, Empfänger, Header und Besucherlogs bleiben verboten."
            },
            {
                "id": "launch_board_exposes_blocked_gates",
                "label": "Launch-Board macht Go-live-Blocker sichtbar",
                "status": "passed",
                "evidence": "blocked_gate_count=4, launch_ready=no.",
                "operator_action": "Blockierte Gates im Launch-Board abarbeiten und erneut smoke-testen."
            },
            {
                "id": "launch_board_consolidation_boundaries_ready",
                "label": "Launch-Board trennt Konsolidierungsstand und Claim-Grenzen",
                "status": "passed",
                "evidence": "consolidation_status=5, claim_boundaries=5.",
                "operator_action": "Launch-Board muss für Betreiber klar zeigen: belegbar, blockiert, Grenze, nächster sicherer Schritt und nicht erlaubter Security-Claim."
            },
            {
                "id": "operator_go_live_links_security_feed_blocker",
                "label": "Operator-Go-live verlinkt Security-Feed-Blocker",
                "status": "passed",
                "evidence": "Go-live Feed-Phase=yes, feed_runner_available=1, feed_runner_errors=0.",
                "operator_action": "Go-live-Center nach Storage-/Credential-Freigaben erneut prüfen."
            },
            {
                "id": "operator_go_live_security_feed_activation_packet",
                "label": "Operator-Go-live liefert Security-Feed-Aktivierungspaket mit Rollback und Nachlauf",
                "status": "passed",
                "evidence": "packets=1, steps=6, rollback_actions=4, watch_signals=5.",
                "operator_action": "Security-Feed-Aktivierungspaket im Go-live-Center pflegen; echte Feed-Runs bleiben ohne Rollback-/Nachlaufregeln blockiert."
            },
            {
                "id": "operator_go_live_signoff_dossiers_ready",
                "label": "Operator-Go-live liefert Signoff-Dossiers mit No-Secret-Checklisten",
                "status": "passed",
                "evidence": "dossiers=3, evidence_urls=16, acceptance=15, stop=12, no_secret=15.",
                "operator_action": "Signoff-Dossiers im Go-live-Center pflegen; Live-Claims erst nach Betreiberfreigabe und erneuten Smokes zulassen."
            },
            {
                "id": "migration_sql_no_secret_scan",
                "label": "Storage-Migration enthält keine offensichtlichen Secret-Werte",
                "status": "passed",
                "evidence": "Keine Forbidden-Pattern-Treffer.",
                "operator_action": "SQL kann an die DB-Verantwortung übergeben werden."
            },
            {
                "id": "security_notification_digest_contract",
                "label": "Security-Notification-Digest öffentlich belegbar",
                "status": "passed",
                "evidence": "channels=5, frequencies=3, digest_available=yes.",
                "operator_action": "Security-Alerts müssen Digest, Frequenzen, Rollen und Exportkanaele ausweisen, bevor externe Zustellung beworben wird."
            },
            {
                "id": "security_notification_no_recipient_leak",
                "label": "Security-Notification ohne echte Empfänger im Public Export",
                "status": "passed",
                "evidence": "digest_contains_real_recipients=no, metric=0, subscription_policy_public_safe=yes.",
                "operator_action": "Nur Rollen, Zweckbindung, Hash-/Statusdaten und Evidence-Links öffentlich zeigen; echte Empfänger bleiben im Betreiber-Zielsystem."
            },
            {
                "id": "security_alerting_digest_ready",
                "label": "Security-Alerting-Digest bündelt Feed, Runner, Delivery und Go-live-Gates",
                "status": "passed",
                "evidence": "public_routes=12, gates=5, blocked=3, outbox=12.",
                "operator_action": "Alerting-Digest, Public-Evidence-Routen und No-Secret-Gates reparieren, wenn die Betreiberansicht unvollständig ist."
            },
            {
                "id": "security_alerting_digest_impact_communication_ready",
                "label": "Security-Alerting-Digest hat Impact-Triage, Kommunikationsvorlagen und Receiver-Vertrag",
                "status": "passed",
                "evidence": "impact_triage=4, templates=4, ticket_html_links=1, receiver_contracts=5, guidance=3.",
                "operator_action": "Besucherrisiko, Datenschutztriage, Betreibertexte und Receiver-Vertrag im Alerting-Digest pflegen; echte Empfänger und Webhooks bleiben privat."
            },
            {
                "id": "security_alerting_digest_scheduled_scan_plan_ready",
                "label": "Security-Alerting-Digest dokumentiert tägliche Scans, Routing und Abnahme",
                "status": "passed",
                "evidence": "scan_plan=4, routing=4, acceptance=5, canary=6, retention=5, rollback=5.",
                "operator_action": "Tägliche Scan-Kadenz, Rollenrouting und Abnahmekriterien im Alerting-Digest pflegen; echte Empfänger und Zielsysteme bleiben privat."
            },
            {
                "id": "security_alerting_digest_parity_acceptance_ready",
                "label": "Security-Alerting-Digest weist Wettbewerbs-Parity-Abnahme aus",
                "status": "passed",
                "evidence": "parity_acceptance=3/6, blocked=3.",
                "operator_action": "Parity-Abnahme für tägliche Scans, automatische Alerts, Security-Report, Canary und Go-live-Grenzen pflegen."
            },
            {
                "id": "security_alerting_digest_parity_closure_plan_ready",
                "label": "Security-Alerting-Digest hat Schließplan für die Security-Alerting-Parity-Lücke",
                "status": "passed",
                "evidence": "closure_steps=3, done=0, waiting=3, unlocks=9, acceptance=9, boundaries=3, evidence_urls=3.",
                "operator_action": "Feed-Credentials, Storage/Retention und Receiver-Approval als getrennte Parity-Schritte mit Nicht-behaupten-Grenzen pflegen."
            },
            {
                "id": "security_alerting_digest_drill_evidence_pack_ready",
                "label": "Security-Alerting-Digest liefert No-Secret-Drill-Evidence für Feed und Alert-Zustellung",
                "status": "passed",
                "evidence": "rows=6, passed=4, blocked=2, evidence_urls=6, no_secret=6, operator_input=6, acceptance=18, stops=18.",
                "operator_action": "Drill-Evidence muss Feed-Smoke, Delivery-Smoke, Runtime-Kontrollen, Produktivblocker, Betreiberinput und Nicht-Claims getrennt ausweisen."
            }
        ],
        "failed_checks": [],
        "failed_targets": [],
        "targets": [
            {
                "id": "security_feed_launch_board_json",
                "label": "Security-Feed Launch-Board JSON",
                "url": "https://saferpage.de/sicherheit/feed-launch-board-json",
                "path": "/sicherheit/feed-launch-board-json",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:40Z",
                "finished_at": "2026-06-15T00:27:41Z"
            },
            {
                "id": "security_feed_credential_preflight_json",
                "label": "Security-Feed Credential Preflight JSON",
                "url": "https://saferpage.de/sicherheit/feed-credential-preflight-json?host=anrufer.info",
                "path": "/sicherheit/feed-credential-preflight-json",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:41Z",
                "finished_at": "2026-06-15T00:27:41Z"
            },
            {
                "id": "security_feed_storage_readiness_json",
                "label": "Security-Feed Storage Readiness JSON",
                "url": "https://saferpage.de/sicherheit/feed-storage-readiness-json",
                "path": "/sicherheit/feed-storage-readiness-json",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:41Z",
                "finished_at": "2026-06-15T00:27:41Z"
            },
            {
                "id": "security_feed_runner_json",
                "label": "Security-Feed Runner JSON",
                "url": "https://saferpage.de/sicherheit/feed-runner-json",
                "path": "/sicherheit/feed-runner-json",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:41Z",
                "finished_at": "2026-06-15T00:27:41Z"
            },
            {
                "id": "security_feed_runtime_controls",
                "label": "Security-Feed Runtime Controls",
                "url": "https://saferpage.de/evidence/security-feed-runtime-controls.json",
                "path": "/evidence/security-feed-runtime-controls.json",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:42Z",
                "finished_at": "2026-06-15T00:27:42Z"
            },
            {
                "id": "security_feed_storage_preflight",
                "label": "Security-Feed Storage Preflight",
                "url": "https://saferpage.de/evidence/security-feed-storage-preflight.json",
                "path": "/evidence/security-feed-storage-preflight.json",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:42Z",
                "finished_at": "2026-06-15T00:27:42Z"
            },
            {
                "id": "security_feed_storage_canary_json",
                "label": "Security-Feed Storage Canary JSON",
                "url": "https://saferpage.de/sicherheit/feed-storage-canary-json",
                "path": "/sicherheit/feed-storage-canary-json",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:42Z",
                "finished_at": "2026-06-15T00:27:42Z"
            },
            {
                "id": "security_feed_storage_migration_sql",
                "label": "Security-Feed Storage Migration SQL",
                "url": "https://saferpage.de/sicherheit/feed-storage-migration.sql",
                "path": "/sicherheit/feed-storage-migration.sql",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:42Z",
                "finished_at": "2026-06-15T00:27:42Z"
            },
            {
                "id": "operator_go_live_json",
                "label": "Operator Go-live JSON",
                "url": "https://saferpage.de/betreiber/go-live-json",
                "path": "/betreiber/go-live-json",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:42Z",
                "finished_at": "2026-06-15T00:27:42Z"
            },
            {
                "id": "security_feed_secrets_json",
                "label": "Security-Feed Secret Readiness JSON",
                "url": "https://saferpage.de/sicherheit/anrufer.info/feed-secrets-json",
                "path": "/sicherheit/anrufer.info/feed-secrets-json",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:42Z",
                "finished_at": "2026-06-15T00:27:42Z"
            },
            {
                "id": "security_feed_activation_json",
                "label": "Security-Feed Activation JSON",
                "url": "https://saferpage.de/sicherheit/anrufer.info/feed-activation-json",
                "path": "/sicherheit/anrufer.info/feed-activation-json",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:42Z",
                "finished_at": "2026-06-15T00:27:42Z"
            },
            {
                "id": "security_alerts_json",
                "label": "Security Alerts JSON",
                "url": "https://saferpage.de/sicherheit/anrufer.info/alerts-json",
                "path": "/sicherheit/anrufer.info/alerts-json",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:42Z",
                "finished_at": "2026-06-15T00:27:42Z"
            },
            {
                "id": "security_alert_delivery_json",
                "label": "Security Alert Delivery JSON",
                "url": "https://saferpage.de/sicherheit/anrufer.info/alerts-delivery-json",
                "path": "/sicherheit/anrufer.info/alerts-delivery-json",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:42Z",
                "finished_at": "2026-06-15T00:27:42Z"
            },
            {
                "id": "security_alerting_digest_html",
                "label": "Security Alerting Digest HTML",
                "url": "https://saferpage.de/sicherheit/alerting-digest",
                "path": "/sicherheit/alerting-digest",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:42Z",
                "finished_at": "2026-06-15T00:27:44Z"
            },
            {
                "id": "security_alerting_digest_json",
                "label": "Security Alerting Digest JSON",
                "url": "https://saferpage.de/sicherheit/alerting-digest-json",
                "path": "/sicherheit/alerting-digest-json",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:44Z",
                "finished_at": "2026-06-15T00:27:44Z"
            },
            {
                "id": "security_alerting_digest_csv",
                "label": "Security Alerting Digest CSV",
                "url": "https://saferpage.de/sicherheit/alerting-digest-csv",
                "path": "/sicherheit/alerting-digest-csv",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:44Z",
                "finished_at": "2026-06-15T00:27:44Z"
            },
            {
                "id": "security_alerting_digest_markdown",
                "label": "Security Alerting Digest Markdown",
                "url": "https://saferpage.de/sicherheit/alerting-digest-md",
                "path": "/sicherheit/alerting-digest-md",
                "expected_http_status": 200,
                "actual_http_status": 200,
                "ok": true,
                "started_at": "2026-06-15T00:27:44Z",
                "finished_at": "2026-06-15T00:27:44Z"
            }
        ],
        "dry_run_smoke": {
            "ok": true,
            "exit_code": 0,
            "evaluated_count": 1,
            "executed_count": 0,
            "stored_observation_count": 0,
            "external_feed_calls_only_if": "activation_ready=true and --execute-ready was passed"
        },
        "storage_canary": {
            "schema": "https://saferpage.de/schemas/security-feed-storage-canary.v1",
            "status": "not_run_yet",
            "ready_to_run": false,
            "storage_approved": false,
            "does_not_call_external_feeds": true,
            "does_not_send_alerts": true,
            "does_not_publish_hit": true,
            "stored_observation_count": 0,
            "links": {
                "html": "https://saferpage.de/sicherheit/feed-storage-canary",
                "json": "https://saferpage.de/sicherheit/feed-storage-canary-json",
                "csv": "https://saferpage.de/sicherheit/feed-storage-canary-csv",
                "markdown": "https://saferpage.de/sicherheit/feed-storage-canary-md",
                "runner": "https://saferpage.de/sicherheit/feed-runner-json",
                "storage_readiness": "https://saferpage.de/sicherheit/feed-storage-readiness-json",
                "launch_board": "https://saferpage.de/sicherheit/feed-launch-board-json"
            }
        },
        "no_secret_policy": {
            "contains_secrets": false,
            "contains_feed_raw_payloads": false,
            "contains_private_target_urls": false,
            "contains_recipients": false,
            "contains_private_documents": false,
            "contains_visitor_logs": false,
            "sql_secret_pattern_hits": []
        },
        "claim_boundary": "Dieser Smoke setzt keine Feed-Credentials, ruft keine externen Malware-/Safe-Browsing-Feeds auf, speichert keine echten Observations, versendet keine Alerts und wendet keine Migration an.",
        "available": true,
        "status": "passed",
        "url": "https://saferpage.de/evidence/security-feed-readiness-smoke.json"
    },
    "consolidation_status": [
        {
            "id": "public_security_evidence",
            "label": "Öffentliche Security-Evidence",
            "state": "erreicht",
            "evidence": "8/8 Coverage-Punkte sind öffentlich belegbar; passives Sicherheitsprofil, Badge, Delivery-Vertrag, Feed-Vertrag und Runner-Status sind verlinkt.",
            "boundary": "Öffentliche Evidence ist kein Penetrationstest, kein Malwarefrei-Zertifikat und kein Nachweis ausgeführter externer Feed-Abfragen.",
            "next_action": "Coverage-Routen in Evidence-Health und Launch-Board weiter prüfen; Claims nur aus belegten Evidence-Paketen ableiten."
        },
        {
            "id": "feed_go_live",
            "label": "Security-Feed-Go-live",
            "state": "blockiert",
            "evidence": "1/7 Launch-Gates passed; 6 Gate(s) blockieren externe Feeds, Speicherung oder Alerts.",
            "boundary": "Nicht behaupten: tägliche Malware-/Blacklist-/Phishing-Feeds laufen produktiv, solange Launch-Gates blockiert sind.",
            "next_action": "Credentials, Storage-Approval, Delivery-Signatur, Runner-Status und Aktivierung nacheinander schließen; danach Smoke erneut veröffentlichen."
        },
        {
            "id": "dry_run_guardrails",
            "label": "Dry-run- und No-Secret-Grenzen",
            "state": "erreicht",
            "evidence": "Letzter Smoke: external_runs=0, stored_observations=0, failed_checks=0.",
            "boundary": "Smokes prüfen öffentliche Verträge und Guardrails; sie starten keine echten Feed-Jobs, speichern keine echten Observations und versenden keine Alerts.",
            "next_action": "Nach jeder Änderung am Runner, Credential-Preflight oder Storage zuerst Dry-run-Smoke, dann Launch-Board-Smoke ausführen."
        },
        {
            "id": "storage_canary",
            "label": "Storage-Canary",
            "state": "offen",
            "evidence": "Canary stored_observation_count=0; Storage ready=no.",
            "boundary": "Canary ist synthetisch und privat; er ersetzt keine externen Feed-Credentials und darf nie als echter Treffer erscheinen.",
            "next_action": "Nach Storage-Migration und Freigabe den synthetischen Canary kontrolliert ausführen."
        },
        {
            "id": "parity_claims",
            "label": "Wettbewerbs-Claims",
            "state": "begrenzt",
            "evidence": "3/7 Parity-Punkte sind ohne offenen Produktivblocker belegbar.",
            "boundary": "Nicht behaupten: automatische Security-Feeds, produktive Alerts oder Malwarefreiheit sind live, solange Parity-Punkte blockiert/offen sind.",
            "next_action": "Marketing-/Betreibertexte nur aus erlaubten Claim-Grenzen ableiten und blockierte Parity-Punkte im Go-live-Board offen zeigen."
        }
    ],
    "claim_boundaries": [
        {
            "id": "no_live_feed_claim",
            "label": "Keine produktiven Daily-Feeds behaupten",
            "claim_allowed": "Security-Feed-Launch ist vorbereitet und no-secret belegbar.",
            "claim_forbidden": "Taegliche externe Malware-/Blacklist-/Phishing-Feeds laufen produktiv.",
            "reason": "Feed-Credentials, Storage-Approval, Runner-Aktivierung und Launch-Gates müssen zusammen passed sein.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-launch-board-json"
        },
        {
            "id": "no_clean_certificate",
            "label": "Kein Malwarefrei-Zertifikat",
            "claim_allowed": "Im belegten passiven Prüfumfang und in den freigegebenen Feeds wurden bestimmte Signale geprüft.",
            "claim_forbidden": "Die Domain ist garantiert malwarefrei oder sicher.",
            "reason": "Feeds sind Momentaufnahmen, können veraltet sein und brauchen Quellenfrische, Review und klare Scope-Grenzen.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-storage-readiness-json"
        },
        {
            "id": "no_alert_delivery_claim",
            "label": "Keine produktive Alert-Zustellung ohne Secret/Freigabe",
            "claim_allowed": "Alert-Payloads, Receiver-Vertrag und HMAC-Blueprint sind vorbereitet.",
            "claim_forbidden": "Betreiber erhalten produktive Alerts.",
            "reason": "Echte Empfänger, Webhook-URLs, HMAC-Secrets und Dispatch-Freigaben bleiben private Betreiber-Gates.",
            "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/alerts-delivery-json"
        },
        {
            "id": "review_before_public_warning",
            "label": "Keine öffentliche Warnung ohne Review",
            "claim_allowed": "Ungeprüfte Feed-Treffer bleiben interne Observations mit Reviewstatus.",
            "claim_forbidden": "Ein Feed-Treffer beweist automatisch eine kompromittierte Website.",
            "reason": "False Positives durch alte URLs, CDN, Redirects, Fremdpfade oder Feed-Latenz müssen abgeglichen werden.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-storage-readiness-json"
        },
        {
            "id": "no_secret_or_payload_publication",
            "label": "Keine Secrets oder Rohpayloads veröffentlichen",
            "claim_allowed": "Öffentliche Exporte zeigen Status, Referenzen, Hashes, Zähler und Evidence-Links.",
            "claim_forbidden": "Feed-Keys, Webhook-URLs, Rohpayloads, Malware-Samples oder personenbezogene Logs sind öffentliche Evidence.",
            "reason": "Security-Feed-Evidence muss Betreiber und Endnutzer informieren, ohne Angriffs-, Secret- oder Datenschutzrisiken zu erzeugen.",
            "evidence_url": "https://saferpage.de/evidence/security-feed-readiness-smoke.json"
        }
    ],
    "competitor_parity": {
        "reference_pattern": "DACH-Security-Scanner mit Score, Siegel, täglicher Prüfung, Alarmierung, Malware-/Blacklist-/Phishing-/DAST-Signalen und vollständigem Sicherheitsbericht.",
        "status": "parity_blocked_until_feed_go_live",
        "blocked_item_count": 4,
        "items": [
            {
                "id": "security_score_report",
                "expectation": "Gesamtscore und vollständiger Sicherheitsbericht",
                "saferpage_evidence": "DACH-Sicherheitsprofil mit TLS, Headern, Redirects, Cookies, Script-/Version-Signalen, Runbook, JSON/CSV/Markdown und Kurzreport-Verlinkung.",
                "status": "abgedeckt",
                "owner": "IT/Security",
                "next_action": "Security-Profil regelmäßig in Monitoring und Betreiber-Board prüfen.",
                "evidence_url": "https://saferpage.de/sicherheit/anrufer.info"
            },
            {
                "id": "security_badge",
                "expectation": "Öffentliches Siegel oder Badge mit Prüfstatus",
                "saferpage_evidence": "Einbettbares Sicherheitsbadge mit Score, Nachweislinks, Badge-JSON und klarer Nicht-Zertifikat-Policy.",
                "status": "abgedeckt",
                "owner": "Website-Betrieb",
                "next_action": "Badge nur mit korrekter Aussage einbetten und bei Score-Änderungen Re-Scan auslösen.",
                "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/badge"
            },
            {
                "id": "operator_alerts",
                "expectation": "Benachrichtigung bei kritischen Security-Befunden",
                "saferpage_evidence": "Security-Alerts und Delivery-Payloads für Webhook, Slack, Teams, Jira und E-Mail sind erzeugbar; HMAC-Secret bleibt Launch-Gate.",
                "status": "blockiert",
                "owner": "IT/Security",
                "next_action": "Webhook-/Operator-Secret setzen und signierten Delivery-Dry-Run prüfen.",
                "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/alerts-delivery-json"
            },
            {
                "id": "daily_feed_monitoring",
                "expectation": "Tägliche Malware-/Blacklist-/Phishing-Prüfung registrierter Domains",
                "saferpage_evidence": "Schedule, systemd Runner, Credential-Preflight, Secret-Readiness, Storage-Plan und Launch-Board sind vorhanden; externe Feed-Runs bleiben bis Credentials/Freigabe gesperrt.",
                "status": "blockiert",
                "owner": "Programm-Owner",
                "next_action": "Credential-Preflight, Storage-Freigabe und blockierte Launch-Gates schließen.",
                "evidence_url": "https://saferpage.de/sicherheit/feed-credential-preflight-json?host=anrufer.info"
            },
            {
                "id": "feed_storage_review",
                "expectation": "Trefferhistorie, Dedupe, Review und Auditlog",
                "saferpage_evidence": "Storage-Vertrag, Retention, erlaubte/verbotene Felder, DB-Readiness und Approval-Dossier sind getrennt nachweisbar.",
                "status": "blockiert",
                "owner": "DB-Owner/Datenschutz",
                "next_action": "DDL-Migration anwenden und Storage-Freigabe erst nach Retention-/Review-Entscheidung setzen.",
                "evidence_url": "https://saferpage.de/sicherheit/feed-storage-readiness-json"
            },
            {
                "id": "storage_canary",
                "expectation": "Produktionsnaher Schreibpfad-Test ohne externe Feed-Abfrage",
                "saferpage_evidence": "Privater Storage-Canary definiert synthetische Observation, Dedupe, Retention, Auditlog, verbotene Felder, eigene systemd-Unit mit Timer und letzten Runner-Status getrennt von echten Feed-Runs.",
                "status": "offen",
                "owner": "DB-Owner/Webbetrieb",
                "next_action": "Storage-Canary-Timer prüfen, nach Tabellen-/Freigabe-Gate kontrolliert starten und Runner-State prüfen.",
                "evidence_url": "https://saferpage.de/sicherheit/feed-storage-canary-json"
            },
            {
                "id": "external_validation_plan",
                "expectation": "Externe DAST-/DOM-XSS-/CMS-/Malware-Nachweise",
                "saferpage_evidence": "Betreiber-Prüfplan mit Akzeptanzkriterien, Ownern und Exportlinks markiert externe Validierungen, die SaferPage nicht aus öffentlichem Scan behauptet.",
                "status": "abgedeckt",
                "owner": "IT/Security",
                "next_action": "Externe Prüfungen beauftragen oder Evidenz hochladen; SaferPage-Report danach gegen Re-Scan abgleichen.",
                "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/extern-json"
            }
        ]
    },
    "security_coverage": {
        "status": "public_evidence_ready_feed_go_live_blocked",
        "summary": "8/8 Security-Coverage-Punkte sind öffentlich belegbar; 5 produktive Feed-/Storage-/Delivery-Punkte warten auf sichere Secrets oder Freigaben.",
        "public_coverage_percent": 100,
        "items": [
            {
                "id": "tls_headers_profile",
                "label": "TLS, Security-Header und Redirect-Signale",
                "area": "passive_scan",
                "status": "covered",
                "covered_publicly": true,
                "requires_production_secret": false,
                "evidence": "DACH-Sicherheitsprofil exportiert TLS-/Header-/Security-Signale ohne externe Feed-Secrets.",
                "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/export"
            },
            {
                "id": "security_score_badge",
                "label": "Score und Badge mit Claim-Grenzen",
                "area": "public_trust",
                "status": "covered",
                "covered_publicly": true,
                "requires_production_secret": false,
                "evidence": "Sicherheitsbadge, Scorecard und Verifizierungsseiten sind öffentlich verlinkt.",
                "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/badge-json"
            },
            {
                "id": "security_alert_delivery_contract",
                "label": "Security-Alerts und Delivery-Vertrag",
                "area": "alerting",
                "status": "guarded_ready",
                "covered_publicly": true,
                "requires_production_secret": true,
                "evidence": "Alert-Payloads, HMAC-Receiver-Vertrag, Idempotency und Delivery-Preflight sind vorhanden; echte Zustellung wartet auf Freigabe.",
                "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/alerts-delivery-json"
            },
            {
                "id": "feed_evidence_contract",
                "label": "Malware-/Blacklist-/Phishing-Feed-Vertrag",
                "area": "external_feed",
                "status": "guarded_ready",
                "covered_publicly": true,
                "requires_production_secret": true,
                "evidence": "Feed-Evidence, Import-Preview, Live-Connector-Vertrag und Credential-Preflight sind vorhanden; externe Feed-Abfrage läuft nicht im Standard.",
                "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/feed-signale-json"
            },
            {
                "id": "feed_runner_operations",
                "label": "Geplanter Feed-Runner mit Stop-Bedingungen",
                "area": "operations",
                "status": "guarded_ready",
                "covered_publicly": true,
                "requires_production_secret": true,
                "evidence": "systemd Runner-State, Schedule, Dry-run-Drill, Go-live-Sequenz und Stop-Bedingungen sind öffentlich belegbar.",
                "evidence_url": "https://saferpage.de/sicherheit/feed-runner-json"
            },
            {
                "id": "feed_storage_readiness",
                "label": "Storage, Retention, Dedupe und Auditlog",
                "area": "storage",
                "status": "guarded_ready",
                "covered_publicly": true,
                "requires_production_secret": true,
                "evidence": "Storage-Vertrag, Migration-SQL, Preflight, Readiness, Canary und Approval-Dossier sind getrennt belegbar.",
                "evidence_url": "https://saferpage.de/sicherheit/feed-storage-readiness-json"
            },
            {
                "id": "external_validation_plan",
                "label": "Externe DAST-/DOM-XSS-/CMS-Nachweise",
                "area": "external_validation",
                "status": "covered",
                "covered_publicly": true,
                "requires_production_secret": false,
                "evidence": "Externer Prüfplan markiert, welche Nachweise Betreiber zusätzlich liefern oder beauftragen müssen.",
                "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/extern-json"
            },
            {
                "id": "launch_go_no_go_dossier",
                "label": "Go/No-Go-Freigabeakte",
                "area": "go_live",
                "status": "guarded_ready",
                "covered_publicly": true,
                "requires_production_secret": true,
                "evidence": "Launch-Board und Approval-Dossier bündeln Gates, Signoffs, Risiken, Environment-Vertrag und Evidence-Links ohne Secret-Ausgabe.",
                "evidence_url": "https://saferpage.de/sicherheit/feed-approval-dossier-json"
            }
        ],
        "claim_guardrails": [
            "SaferPage behauptet keine Malware-/Blacklist-Clean-Entscheidung ohne ausgeführte externe Feed-Connectoren.",
            "Badge und Sicherheitsprofil sind öffentliche Prüfhinweise, kein Zertifikat und kein Penetrationstest.",
            "Produktive Alerts, Feed-Speicherung und externe Feed-Abfragen benötigen explizite Betreiberfreigabe und Server-Secrets."
        ]
    },
    "blocked_actions": [
        {
            "gate": "feed_credentials",
            "owner": "IT/Security",
            "action": "SAFERPAGE_URLHAUS_AUTH_KEY und SAFERPAGE_GOOGLE_SAFE_BROWSING_API_KEY serverseitig setzen und Rotation dokumentieren.",
            "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/feed-secrets-json"
        },
        {
            "gate": "storage_approval",
            "owner": "Betreiber/Datenschutz",
            "action": "SAFERPAGE_SECURITY_FEED_STORAGE_APPROVED=yes erst nach Retention-, Review- und Alert-Routing-Freigabe setzen.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-storage-readiness-json"
        },
        {
            "gate": "delivery_signature",
            "owner": "IT/Security",
            "action": "SAFERPAGE_WEBHOOK_SECRET oder SAFERPAGE_OPERATOR_WEBHOOK_SECRET setzen und HMAC-Dry-Run dokumentieren.",
            "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/feed-activation-json"
        },
        {
            "gate": "runner_operational",
            "owner": "Webbetrieb",
            "action": "Timer, Runner-State und letzte Ausführung prüfen; Fehler im Journal beheben.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-runner-json"
        },
        {
            "gate": "runner_guarded",
            "owner": "Webbetrieb/Datenschutz",
            "action": "Vor produktiver Aktivierung prüfen, warum externe Runs oder Speicherungen bereits aufgetreten sind.",
            "evidence_url": "https://saferpage.de/sicherheit/feed-runner-json"
        },
        {
            "gate": "activation_ready",
            "owner": "Programm-Owner",
            "action": "Alle blockierten Activation-Gates nacheinander schließen und danach Einzeltest ausführen.",
            "evidence_url": "https://saferpage.de/sicherheit/anrufer.info/feed-activation-json"
        }
    ],
    "operator_sequence": [
        "DB-Owner Migration Package aus Storage-Readiness anwenden lassen.",
        "Credential-Preflight prüfen und Feed-/Delivery-Secrets serverseitig ohne Secret-Ausgabe nachweisen.",
        "Feed- und Delivery-Secrets serverseitig setzen; keine Secret-Werte veröffentlichen.",
        "Storage-Freigabe erst nach Retention-/Review-/Alert-Routing-Entscheidung aktivieren.",
        "Runner manuell starten, Launch-Board prüfen und erst dann Daily-Betrieb als produktiv markieren."
    ],
    "source_packages": {
        "secrets": "https://saferpage.de/sicherheit/anrufer.info/feed-secrets-json",
        "activation": "https://saferpage.de/sicherheit/anrufer.info/feed-activation-json",
        "storage_readiness": "https://saferpage.de/sicherheit/feed-storage-readiness-json",
        "storage_canary": "https://saferpage.de/sicherheit/feed-storage-canary-json",
        "runner_state": "https://saferpage.de/sicherheit/feed-runner-json"
    },
    "links": {
        "html": "https://saferpage.de/sicherheit/feed-launch-board",
        "json": "https://saferpage.de/sicherheit/feed-launch-board-json",
        "csv": "https://saferpage.de/sicherheit/feed-launch-board-csv",
        "markdown": "https://saferpage.de/sicherheit/feed-launch-board-md",
        "approval_dossier": "https://saferpage.de/sicherheit/feed-approval-dossier-json",
        "credential_preflight": "https://saferpage.de/sicherheit/feed-credential-preflight-json?host=anrufer.info",
        "storage_readiness": "https://saferpage.de/sicherheit/feed-storage-readiness-json",
        "storage_canary": "https://saferpage.de/sicherheit/feed-storage-canary-json",
        "runner": "https://saferpage.de/sicherheit/feed-runner-json",
        "readiness_smoke": "https://saferpage.de/evidence/security-feed-readiness-smoke.json",
        "secrets": "https://saferpage.de/sicherheit/anrufer.info/feed-secrets-json",
        "activation": "https://saferpage.de/sicherheit/anrufer.info/feed-activation-json",
        "comparison": "https://saferpage.de/vergleich/features-json"
    },
    "disclaimer": "Launch-Board aggregiert öffentliche Evidence-Pakete. Es ruft keine externen Malware-Feeds auf, speichert keine Treffer und veröffentlicht keine Secret-Werte."
}
