{
  "$schema": "./deployment.schema.json",
  "schemaVersion": 1,
  "environment": "production",
  "deploymentStatus": "blocked",
  "domains": {
    "frontend": "https://tools.press.zone",
    "api": "https://api.press.zone"
  },
  "components": {
    "cloudflareFrontend": {
      "kind": "cloudflare-astro",
      "artifact": "apps/web/dist",
      "accountId": null,
      "projectName": null,
      "deploymentTarget": null,
      "observedStatus": "unverified",
      "healthCheck": {
        "url": "https://tools.press.zone/",
        "method": "GET",
        "expectedStatuses": [200],
        "requiresAuthentication": false,
        "contentAssertion": {
          "kind": "body-contains",
          "value": "PDF2HTML",
          "verified": false
        },
        "verified": false
      }
    },
    "cloudpanelApi": {
      "kind": "cloudpanel-process",
      "artifact": "apps/api",
      "host": "cloudpanel01",
      "runtime": null,
      "serviceName": null,
      "originMapping": null,
      "observedStatus": "dns-tls-only",
      "healthCheck": {
        "url": "https://api.press.zone/healthz",
        "method": "GET",
        "expectedStatuses": [200],
        "requiresAuthentication": false,
        "contentAssertion": {
          "kind": "json-field-equals",
          "value": "status=ok",
          "verified": false
        },
        "verified": false
      },
      "readinessCheck": {
        "url": "https://api.press.zone/readyz",
        "method": "GET",
        "expectedStatuses": [200],
        "requiresAuthentication": false,
        "contentAssertion": {
          "kind": "json-field-equals",
          "value": "status=ok",
          "verified": false
        },
        "verified": false
      }
    },
    "cloudpanelWorker": {
      "kind": "cloudpanel-worker-container",
      "artifact": "apps/worker",
      "host": "cloudpanel01",
      "serviceName": null,
      "imageDigest": null,
      "runtime": null,
      "separateFromApi": true,
      "network": "disabled-for-conversion-job",
      "runAsNonRoot": true,
      "readOnlyRootFilesystem": true,
      "dropAllCapabilities": true,
      "noNewPrivileges": true,
      "resourceLimits": {
        "cpu": null,
        "memoryBytes": null,
        "pids": null,
        "temporaryStorageBytes": null,
        "outputBytes": null,
        "fileCount": null,
        "wallTimeSeconds": null
      },
      "healthCheck": {
        "mechanism": null,
        "expected": null,
        "verified": false
      }
    },
    "postgresMigrations": {
      "kind": "postgres-migrations",
      "artifact": null,
      "runner": null,
      "databaseTarget": null,
      "migrationCommand": null,
      "backupVerified": false,
      "restoreVerified": false,
      "transactional": null
    },
    "privateObjectStorage": {
      "kind": "s3-compatible-private",
      "adapter": null,
      "endpoint": null,
      "region": null,
      "bucket": null,
      "publicAccess": false,
      "encryption": null,
      "signedDownloadTtlSeconds": null,
      "lifecycle": {
        "sourcePrefix": null,
        "zipPrefix": null,
        "sourceDeadlineHours": 48,
        "zipDeadlineHours": 48,
        "providerRuleIds": null,
        "deadlineSemanticsVerified": false,
        "applicationReconciliation": true
      }
    }
  },
  "secretNames": {
    "api": [
      "DATABASE_URL",
      "SESSION_SECRET",
      "CSRF_SECRET",
      "STRIPE_SECRET_KEY",
      "STRIPE_WEBHOOK_SECRET",
      "S3_ENDPOINT",
      "S3_REGION",
      "S3_BUCKET",
      "S3_ACCESS_KEY_ID",
      "S3_SECRET_ACCESS_KEY"
    ],
    "worker": [
      "DATABASE_URL",
      "S3_ENDPOINT",
      "S3_REGION",
      "S3_BUCKET",
      "S3_ACCESS_KEY_ID",
      "S3_SECRET_ACCESS_KEY"
    ],
    "frontend": []
  },
  "rollout": {
    "strategy": "gated-sequential",
    "automaticPromotion": false,
    "steps": [
      "resolve-authenticated-values",
      "verify-backup-and-restore",
      "apply-postgres-migrations",
      "deploy-api",
      "deploy-worker-separately",
      "verify-api-health-and-readiness",
      "verify-worker-health",
      "deploy-cloudflare-frontend",
      "run-production-smoke"
    ],
    "requiredGates": [
      "authenticated-values-resolved",
      "migration-backup-restore-verified",
      "private-storage-lifecycle-verified",
      "api-health-verified",
      "worker-health-verified",
      "production-smoke-passed"
    ]
  },
  "rollback": {
    "automatic": false,
    "triggers": [
      {"failure": "migration-failure", "action": "database-restore"},
      {"failure": "post-migration-api-readiness-failure", "action": "database-restore"},
      {"failure": "api-health-failure", "action": "application-rollback"},
      {"failure": "worker-health-failure", "action": "application-rollback"},
      {"failure": "frontend-health-failure", "action": "application-rollback"},
      {"failure": "storage-lifecycle-failure", "action": "halt-only"},
      {"failure": "production-smoke-failure", "action": "application-rollback"}
    ],
    "steps": [
      "stop-promotion",
      "disable-new-job-acceptance",
      "restore-previous-api-artifact",
      "restore-previous-worker-image-by-digest",
      "restore-previous-frontend-deployment",
      "run-database-rollback-only-if-explicitly-authored-and-verified",
      "verify-health-before-resuming-job-acceptance"
    ],
    "previousFrontendDeployment": null,
    "previousApiArtifact": null,
    "previousWorkerImageDigest": null,
    "databaseRollbackProcedure": null
  },
  "unresolvedAuthenticatedValues": [
    {"path": "/components/cloudflareFrontend/accountId", "owner": "cloudflare", "reason": "requires authenticated Cloudflare account inspection"},
    {"path": "/components/cloudflareFrontend/projectName", "owner": "cloudflare", "reason": "requires authenticated Cloudflare deployment inspection"},
    {"path": "/components/cloudflareFrontend/deploymentTarget", "owner": "cloudflare", "reason": "requires authenticated Cloudflare deployment inspection"},
    {"path": "/components/cloudpanelApi/runtime", "owner": "cloudpanel", "reason": "requires authenticated CloudPanel01 inspection"},
    {"path": "/components/cloudpanelApi/serviceName", "owner": "cloudpanel", "reason": "requires authenticated CloudPanel01 inspection"},
    {"path": "/components/cloudpanelApi/originMapping", "owner": "cloudpanel", "reason": "DNS and TLS are observed but application origin mapping is not verified"},
    {"path": "/components/cloudpanelWorker/serviceName", "owner": "cloudpanel", "reason": "requires authenticated CloudPanel01 inspection"},
    {"path": "/components/cloudpanelWorker/imageDigest", "owner": "cloudpanel", "reason": "production worker image is not selected or verified"},
    {"path": "/components/cloudpanelWorker/runtime", "owner": "cloudpanel", "reason": "requires authenticated CloudPanel01 inspection"},
    {"path": "/components/cloudpanelWorker/resourceLimits", "owner": "cloudpanel", "reason": "limits require measured capacity and authenticated runtime configuration"},
    {"path": "/components/cloudpanelWorker/healthCheck", "owner": "cloudpanel", "reason": "worker health mechanism is not implemented or verified"},
    {"path": "/components/postgresMigrations/artifact", "owner": "application", "reason": "migration artifact path does not yet exist in the repository"},
    {"path": "/components/postgresMigrations/runner", "owner": "application", "reason": "migration runner package does not yet exist in the workspace"},
    {"path": "/components/postgresMigrations/databaseTarget", "owner": "postgres", "reason": "requires authenticated database inspection"},
    {"path": "/components/postgresMigrations/migrationCommand", "owner": "application", "reason": "migration implementation does not yet exist"},
    {"path": "/components/postgresMigrations/transactional", "owner": "postgres", "reason": "must be determined from the authored migrations and verified database capabilities"},
    {"path": "/components/privateObjectStorage/adapter", "owner": "application", "reason": "object-storage adapter package does not yet exist in the workspace"},
    {"path": "/components/privateObjectStorage/endpoint", "owner": "object-storage", "reason": "requires authenticated storage inspection"},
    {"path": "/components/privateObjectStorage/region", "owner": "object-storage", "reason": "requires authenticated storage inspection"},
    {"path": "/components/privateObjectStorage/bucket", "owner": "object-storage", "reason": "requires authenticated storage inspection"},
    {"path": "/components/privateObjectStorage/encryption", "owner": "object-storage", "reason": "requires authenticated storage inspection"},
    {"path": "/components/privateObjectStorage/signedDownloadTtlSeconds", "owner": "application", "reason": "signed URL policy is not yet configured"},
    {"path": "/components/privateObjectStorage/lifecycle/sourcePrefix", "owner": "object-storage", "reason": "requires an authenticated bucket layout decision"},
    {"path": "/components/privateObjectStorage/lifecycle/zipPrefix", "owner": "object-storage", "reason": "requires an authenticated bucket layout decision"},
    {"path": "/components/privateObjectStorage/lifecycle/providerRuleIds", "owner": "object-storage", "reason": "requires authenticated lifecycle inspection"},
    {"path": "/rollback/previousFrontendDeployment", "owner": "cloudflare", "reason": "requires an existing verified deployment"},
    {"path": "/rollback/previousApiArtifact", "owner": "cloudpanel", "reason": "requires an existing verified deployment"},
    {"path": "/rollback/previousWorkerImageDigest", "owner": "cloudpanel", "reason": "requires an existing verified deployment"},
    {"path": "/rollback/databaseRollbackProcedure", "owner": "postgres", "reason": "must be authored per migration and restore-tested"}
  ]
}
