{
  "schema": "evulgare.deployment-cutover.v1",
  "release": "2.0.0-rc.9-WIP",
  "status": "READY_FOR_OPERATOR_CUTOVER_WITH_WIP_QUALIFICATIONS",
  "cpanel": {
    "python": "3.13.14",
    "application_root": "evulgare.com",
    "application_url_path": "",
    "startup_file": "cpanel_app.py",
    "entry_point": "application",
    "passenger_wrapper_owned_by_cpanel": true
  },
  "preconditions": [
    "Back up .env, MySQL, and the current application root.",
    "Stop the cPanel Python application before replacing the root.",
    "Use one complete root-content archive; do not merge selected folders from different releases.",
    "Keep the private .env outside the distributable ZIP and restore it only after staging verification.",
    "Do not set the cPanel startup file to passenger_wsgi.py."
  ],
  "phases": [
    {
      "id": "CUT-01",
      "name": "BACKUP",
      "operator_action": true,
      "changes_live_state": true,
      "description": "Create timestamped backups of .env, MySQL, and the current application root."
    },
    {
      "id": "CUT-02",
      "name": "VERIFY ARCHIVE",
      "operator_action": true,
      "changes_live_state": false,
      "description": "Verify root layout, build identity, runtime-integrity manifest, member hashes, modes, and forbidden-file rules."
    },
    {
      "id": "CUT-03",
      "name": "STAGE",
      "operator_action": true,
      "changes_live_state": false,
      "description": "Extract to a separate staging directory and verify the clean tree before touching the active root."
    },
    {
      "id": "CUT-04",
      "name": "REPLACE ROOT",
      "operator_action": true,
      "changes_live_state": true,
      "description": "Replace the active root with the verified staged tree while preserving the private environment file."
    },
    {
      "id": "CUT-05",
      "name": "INSTALL AND MIGRATE",
      "operator_action": true,
      "changes_live_state": true,
      "description": "Install requirements in the Python 3.13.14 virtual environment, run Alembic upgrade, and run idempotent seeding."
    },
    {
      "id": "CUT-06",
      "name": "DIAGNOSE",
      "operator_action": true,
      "changes_live_state": false,
      "description": "Run full-stack, runtime-integrity, deterministic proof, memory, preflight, and pytest checks."
    },
    {
      "id": "CUT-07",
      "name": "RESTART",
      "operator_action": true,
      "changes_live_state": true,
      "description": "Restart Passenger only after all staged and application checks pass."
    },
    {
      "id": "CUT-08",
      "name": "LIVE PROBE",
      "operator_action": true,
      "changes_live_state": false,
      "description": "Verify candidate version, database reachability, catalog readiness, routes, redirects, headers, cache, compression, and absence of secret leakage."
    },
    {
      "id": "CUT-09",
      "name": "EVIDENCE REVIEW",
      "operator_action": true,
      "changes_live_state": false,
      "description": "Create a bounded production-host evidence candidate, review it explicitly, and preserve residual unknowns."
    }
  ],
  "expected_routes": [
    "/",
    "/livez",
    "/readyz",
    "/healthz",
    "/simulations/",
    "/simulations/autonomous-drone-control",
    "/docs/acceptance",
    "/docs/acceptance/deployment-cutover",
    "/company/eviulon-defense-partnership",
    "/api/v2/status",
    "/api/v2/deployment/cutover",
    "/api/v2/simulations/health",
    "/robots.txt",
    "/sitemap.xml"
  ],
  "readiness_conditions": [
    "Repository-controlled package version equals the candidate release.",
    "Configured APP_VERSION is absent or matches the package version.",
    "All critical runtime files match the packaged integrity manifest.",
    "The cPanel Passenger wrapper points to cpanel_app.py/application and is not recursive.",
    "MySQL is reachable and Alembic migration state is current.",
    "The ten-record Simulation Explorer catalog reports READY.",
    "No required route returns an unhandled server error."
  ],
  "rollback": {
    "automatic": false,
    "requirements": [
      "Preserve the pre-cutover root and database backup until live acceptance completes.",
      "Rollback must restore a mutually compatible root, database schema, and private environment.",
      "A rollback restores technical state only; it does not erase evidence of the failed cutover."
    ]
  },
  "runtime_integrity": {
    "passed": true,
    "critical_file_count": 25,
    "status_sha256": "31304b2be16f5e4479768a2ead683f56217028cfe5479136475720ccbf91c9fe",
    "passenger_wrapper_state": "CPANEL_WRAPPER_POINTS_TO_CPANEL_APP"
  },
  "automatic_activation": false,
  "automatic_database_change": false,
  "automatic_release_promotion": false,
  "public_persistence": false,
  "operational": false,
  "terminal": "SYNTHETIC_NULL_SINK",
  "qualification": "This is a deployment and evidence contract, not evidence that the cPanel cutover occurred.",
  "cutover_sha256": "48d38ca6a489dc97862cf8dbfeb923f704cb6c712bd01d4bfbb4e9791977a9d2"
}
