{
    "schema": "https://saferpage.de/schemas/operator-api-key-readiness-smoke.v1",
    "generated_at": "2026-06-09T19:20:35+00:00",
    "ok": true,
    "summary": "No-Secret-Smoke fuer API-Key-Readiness, Migration-Preflight, Runtime-Gates und Operator-Go-live-Verknuepfung.",
    "source_readiness_schema": "https://saferpage.de/schemas/operator-api-key-readiness.v1",
    "source_readiness_url": "https://saferpage.de/api-zugriff/key-readiness-json",
    "metrics": {
        "target_count": 6,
        "http_passed_count": 6,
        "http_failed_count": 0,
        "check_count": 6,
        "failed_check_count": 0,
        "blocked_expected_count": 1,
        "api_access_storage_table_count": 0,
        "api_access_storage_ready": 0,
        "missing_required_artifact_count": 2,
        "runtime_implementation_passed_count": 7,
        "runtime_implementation_gate_count": 7
    },
    "checks": [
        {
            "id": "public_routes_http_200",
            "label": "Öffentliche API-Key-Readiness-Routen erreichbar",
            "status": "passed",
            "evidence": "6/6 Route(s) liefern HTTP 200.",
            "operator_action": "Weiter mit Preflight/Go-live-Gates."
        },
        {
            "id": "migration_preflight_public",
            "label": "Migration-Preflight öffentlich und sanitisiert",
            "status": "passed",
            "evidence": "missing_required_artifacts=2, admin_dsn_required=yes.",
            "operator_action": "Admin-DSN aus sicherer Shell setzen und Migration anwenden."
        },
        {
            "id": "runtime_controls_documented",
            "label": "API-Runtime-Kontrollen dokumentiert",
            "status": "passed",
            "evidence": "7/7 Implementierungs-Gates; 8 Runtime-Control-Einträge.",
            "operator_action": "Deny-/Allow-/Revocation-Smokes nach Storage-Migration erneut ausführen."
        },
        {
            "id": "storage_blocker_explicit",
            "label": "Produktivblocker API-Storage explizit",
            "status": "blocked_expected",
            "evidence": "api_access_storage_table_count=0/2; storage_ready=0.",
            "operator_action": "Migration mit kurzlebigem Admin-DSN anwenden; keine Secrets veröffentlichen."
        },
        {
            "id": "operator_go_live_links_api_blocker",
            "label": "Operator-Go-live verlinkt API-Blocker",
            "status": "passed",
            "evidence": "Go-live API-Storage=0/2.",
            "operator_action": "Go-live-Center nach Migration erneut prüfen."
        },
        {
            "id": "migration_sql_no_secret_scan",
            "label": "Migration-SQL enthält keine offensichtlichen Secret-Werte",
            "status": "passed",
            "evidence": "Keine Forbidden-Pattern-Treffer.",
            "operator_action": "SQL kann an DB-Owner übergeben werden."
        }
    ],
    "failed_checks": [],
    "failed_targets": [],
    "targets": [
        {
            "id": "api_key_readiness_json",
            "label": "API-Key-Readiness JSON",
            "url": "https://saferpage.de/api-zugriff/key-readiness-json",
            "path": "/api-zugriff/key-readiness-json",
            "expected_http_status": 200,
            "actual_http_status": 200,
            "ok": true,
            "started_at": "2026-06-09T19:20:34Z",
            "finished_at": "2026-06-09T19:20:34Z"
        },
        {
            "id": "api_runtime_gate_probe_json",
            "label": "API Runtime Gate Probe JSON",
            "url": "https://saferpage.de/api-zugriff/runtime-gate-probe-json",
            "path": "/api-zugriff/runtime-gate-probe-json",
            "expected_http_status": 200,
            "actual_http_status": 200,
            "ok": true,
            "started_at": "2026-06-09T19:20:34Z",
            "finished_at": "2026-06-09T19:20:34Z"
        },
        {
            "id": "api_access_migration_preflight",
            "label": "API Access Migration Preflight",
            "url": "https://saferpage.de/evidence/api-access-migration-preflight.json",
            "path": "/evidence/api-access-migration-preflight.json",
            "expected_http_status": 200,
            "actual_http_status": 200,
            "ok": true,
            "started_at": "2026-06-09T19:20:34Z",
            "finished_at": "2026-06-09T19:20:34Z"
        },
        {
            "id": "api_runtime_controls",
            "label": "API Runtime Controls",
            "url": "https://saferpage.de/evidence/api-runtime-controls.json",
            "path": "/evidence/api-runtime-controls.json",
            "expected_http_status": 200,
            "actual_http_status": 200,
            "ok": true,
            "started_at": "2026-06-09T19:20:34Z",
            "finished_at": "2026-06-09T19:20:34Z"
        },
        {
            "id": "api_access_migration_sql",
            "label": "API Access Migration SQL",
            "url": "https://saferpage.de/api-zugriff/access-migration.sql",
            "path": "/api-zugriff/access-migration.sql",
            "expected_http_status": 200,
            "actual_http_status": 200,
            "ok": true,
            "started_at": "2026-06-09T19:20:34Z",
            "finished_at": "2026-06-09T19:20:34Z"
        },
        {
            "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-09T19:20:34Z",
            "finished_at": "2026-06-09T19:20:34Z"
        }
    ],
    "no_secret_policy": {
        "contains_secrets": 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 erzeugt keine API-Keys, setzt keine Env-Gates, wendet keine Migration an und prüft keine privaten Zielsysteme."
}
