{"ops":{"checks":[{"id":"database.backups","category":"backup","title":"Automated database backups","status":"needs_setup","severity":"high","evidence":"No hosted backup policy exists yet.","owner":"ops","runbookUrl":"docs/ops/production-deployment-readiness.md#database-and-backups","lastCheckedAt":"2026-05-19 05:29:26"},{"id":"deployment.environment","category":"deployment","title":"Hosted environments configured","status":"needs_setup","severity":"high","evidence":"Local Next.js prototype only; production/staging hosting is not configured.","owner":"ops","runbookUrl":"docs/ops/production-deployment-readiness.md#hosted-environments","lastCheckedAt":"2026-05-19 05:29:26"},{"id":"incident.runbook","category":"incident","title":"Incident response runbook","status":"needs_setup","severity":"high","evidence":"Incident ownership, escalation, and user notice process remain draft.","owner":"product","runbookUrl":"docs/ops/production-deployment-readiness.md#incident-response","lastCheckedAt":"2026-05-19 05:29:26"},{"id":"monitoring.uptime","category":"monitoring","title":"Uptime and API monitoring","status":"needs_setup","severity":"high","evidence":"Smoke API exists locally; external monitors are not configured.","owner":"ops","runbookUrl":"docs/ops/production-deployment-readiness.md#monitoring","lastCheckedAt":"2026-05-19 05:29:26"},{"id":"release.rollback","category":"deployment","title":"Source-pack rollback path","status":"manual_review","severity":"medium","evidence":"Trust manifest has rollback metadata placeholder; signed production rollback is not active.","owner":"engineering","runbookUrl":"docs/ops/production-deployment-readiness.md#rollback","lastCheckedAt":"2026-05-19 05:29:26"},{"id":"logging.privacy","category":"logging","title":"Privacy-aware application logging","status":"manual_review","severity":"medium","evidence":"Logs must avoid diary contents, prayer text, youth details, and sensitive situation text.","owner":"engineering","runbookUrl":"docs/ops/production-deployment-readiness.md#logging","lastCheckedAt":"2026-05-19 05:29:26"},{"id":"deployment.preflight","category":"deployment","title":"Production preflight command","status":"ready","severity":"medium","evidence":"npm run preflight:production reports hosted deployment gaps without exposing secrets.","owner":"engineering","runbookUrl":"docs/ops/production-deployment-readiness.md#preflight-command","lastCheckedAt":"2026-05-19 05:29:26"},{"id":"deployment.packaging","category":"deployment","title":"Provider-neutral production packaging","status":"ready","severity":"medium","evidence":"Dockerfile, .dockerignore, and production start wrapper define a container path for hosts with persistent storage.","owner":"engineering","runbookUrl":"docs/ops/production-deployment-readiness.md#container-packaging","lastCheckedAt":"2026-05-19 05:29:26"},{"id":"database.migrations","category":"migration","title":"Repeatable SQLite migrations","status":"ready","severity":"medium","evidence":"Schema and migration guards run during db reset and server startup.","owner":"engineering","runbookUrl":"docs/ops/production-deployment-readiness.md#database-and-backups","lastCheckedAt":"2026-05-19 05:29:26"},{"id":"deployment.hosted-smoke","category":"monitoring","title":"Hosted smoke command","status":"ready","severity":"medium","evidence":"npm run smoke:hosted runs production preflight, API smoke, and browser smoke against a hosted URL.","owner":"engineering","runbookUrl":"docs/ops/production-deployment-readiness.md#hosted-smoke","lastCheckedAt":"2026-05-19 05:29:26"}],"totals":{"total":10,"ready":4,"needsSetup":4,"blocked":0,"manualReview":2},"publicLaunchAllowed":false,"boundary":"Ops readiness is a launch gate. Local smoke tests do not replace hosted migrations, backups, monitoring, privacy-aware logs, or incident response."}}