{
    "success": true,
    "data": {
        "ready": true,
        "release": "2.9.0",
        "environment": "staging",
        "production_ready": false,
        "production_gate_status": "blocked",
        "blockers": [
            "publication_enabled",
            "csp_enforced",
            "authentication",
            "object_authorization"
        ],
        "checks": [
            {
                "code": "environment_mode",
                "label": "Omgevingsmodus",
                "status": "warning",
                "severity": "medium",
                "detail": "De applicatie draait in staging-modus."
            },
            {
                "code": "production_gate",
                "label": "Productiepoort",
                "status": "fail",
                "severity": "critical",
                "detail": "Productie blijft geblokkeerd: publication_enabled, csp_enforced, authentication, object_authorization."
            },
            {
                "code": "https_transport",
                "label": "HTTPS-transport",
                "status": "pass",
                "severity": "critical",
                "detail": "De huidige aanvraag gebruikt HTTPS."
            },
            {
                "code": "host_allowlist",
                "label": "Toegestane hostnamen",
                "status": "pass",
                "severity": "high",
                "detail": "2 hostnaam/hostnamen zijn toegestaan."
            },
            {
                "code": "content_security_policy",
                "label": "Content Security Policy",
                "status": "warning",
                "severity": "high",
                "detail": "CSP-modus: report-only."
            },
            {
                "code": "security_headers",
                "label": "Beveiligingsheaders",
                "status": "pass",
                "severity": "high",
                "detail": "Clickjacking-, MIME-, referrer- en permissionsheaders worden centraal gezet."
            },
            {
                "code": "csrf_foundation",
                "label": "CSRF-bescherming",
                "status": "pass",
                "severity": "critical",
                "detail": "Sessiegebonde CSRF-tokens zijn beschikbaar voor toekomstige schrijfacties."
            },
            {
                "code": "rate_limiting",
                "label": "Rate limiting",
                "status": "pass",
                "severity": "critical",
                "detail": "API-limieten zijn centraal voorbereid en actief op beveiligde endpoints."
            },
            {
                "code": "audit_logging",
                "label": "Security-auditlogging",
                "status": "pass",
                "severity": "high",
                "detail": "Beveiligingsgebeurtenissen kunnen in een afzonderlijke tabel worden vastgelegd."
            },
            {
                "code": "authentication_mfa",
                "label": "Authenticatie en MFA",
                "status": "warning",
                "severity": "critical",
                "detail": "De account-, MFA-, sessie- en tokenfundering is geïnstalleerd; echte loginactivatie blijft geblokkeerd."
            },
            {
                "code": "object_authorization",
                "label": "Rollen en objectrechten",
                "status": "warning",
                "severity": "critical",
                "detail": "Rollen, permissies en deny-by-default objectgrants zijn gemodelleerd; productiewrites blijven dicht."
            },
            {
                "code": "admin_write_lock",
                "label": "Beheerwrites geblokkeerd",
                "status": "pass",
                "severity": "critical",
                "detail": "Onbeveiligde beheerwrites zijn server-side geblokkeerd."
            },
            {
                "code": "database_least_privilege",
                "label": "Database least privilege",
                "status": "pass",
                "severity": "critical",
                "detail": "De applicatie gebruikt geen root-account."
            },
            {
                "code": "display_errors",
                "label": "Foutweergave",
                "status": "pass",
                "severity": "high",
                "detail": "display_errors is uit."
            },
            {
                "code": "sensitive_path_protection",
                "label": "Bescherming gevoelige paden",
                "status": "pass",
                "severity": "high",
                "detail": "Config-, storage-, database-, docs-, tests- en toolpaden worden door Apache afgeschermd."
            },
            {
                "code": "directory_listing",
                "label": "Directory listing",
                "status": "pass",
                "severity": "medium",
                "detail": "Directory listing wordt centraal uitgeschakeld."
            },
            {
                "code": "diagnostics_exposure",
                "label": "Diagnostiek",
                "status": "pass",
                "severity": "high",
                "detail": "Publieke diagnostiek is uitgeschakeld."
            }
        ],
        "summary": {
            "pass": 12,
            "warning": 4,
            "fail": 1,
            "not_applicable": 0
        },
        "security_event_count": 0,
        "stored_environment": null,
        "stored_checks": [
            {
                "check_code": "controlled_activation",
                "status": "warning",
                "severity": "critical",
                "label": "Gecontroleerde accountactivatie",
                "detail": "Production readiness and controlled activation v3.2.0 installed; account activation remains locked until all external production attestations and approvals pass.",
                "observed_at": "2026-07-27 14:40:42"
            }
        ],
        "config": {
            "release": "2.9.0",
            "environment": "staging",
            "production_publication_enabled": false,
            "force_https": true,
            "csp_mode": "report-only",
            "allowed_host_count": 2,
            "api_rate_limit_per_minute": 120,
            "write_rate_limit_per_minute": 20,
            "anonymous_checkin_enabled": true,
            "portal_write_enabled": false,
            "diagnostics_enabled": false,
            "authentication_ready": false,
            "object_authorization_ready": false,
            "csrf_ready": true,
            "rate_limiting_ready": true,
            "audit_logging_ready": true,
            "security_headers_ready": true
        },
        "request": {
            "request_id": "116bf1b93841605185d9923d81cfd8bb",
            "host": "ganjaguide.nl",
            "https": true,
            "path": "/pwa_demo/api/v1/publication/readiness.php",
            "method": "GET",
            "local_development": false
        }
    },
    "meta": {
        "api_version": "v1",
        "release": "2.9.0",
        "read_only_demo": true
    }
}