{
  "schema": "smmods.production-readiness.v1",
  "generatedAt": "2026-05-29T05:43:00Z",
  "overallStatus": "not_release_ready",
  "liveBackend": false,
  "summary": "SMMODS has a validated static catalog, GitLab-hosted production manager artifact metadata, download artifacts, manual publishing lane, local backend publishing slice with role management, rate-limited write routes, an enforced live-upload gate, verification email delivery gating, post-publish file smoke, and backend deployment templates. It is not fully release-ready until the authenticated backend is deployed with durable storage and live smoke.",
  "releaseBlockers": [
    {
      "id": "live_backend_missing",
      "summary": "The backend has local account/session/role-management/upload-staging/moderation/catalog-publication/post-publish-smoke code plus nginx/systemd templates, rate-limited write routes, SMMODS_LIVE_UPLOADS enforcement, verification email delivery gating, and a non-mutating remote health smoke mode, but authenticated production deployment, durable storage, live account lifecycle smoke, and live audit operations are not deployed."
    }
  ],
  "evidence": {
    "catalogUrl": "https://smmods.com/api/v1/catalog.json",
    "runtimeUrl": "https://smmods.com/api/v1/runtime/latest.json",
    "frameworkUrl": "https://smmods.com/api/v1/framework/latest.json",
    "managerUrl": "https://smmods.com/api/v1/manager/latest.json",
    "publishingWorkflowUrl": "https://smmods.com/api/v1/publishing/workflow.json",
    "publishingBackendContractUrl": "https://smmods.com/api/v1/publishing/backend-contract.json",
    "manualPublishingRunbook": "docs/manual-publishing.md",
    "deploymentRunbook": "docs/deployment.md"
  },
  "gates": [
    {
      "id": 1,
      "title": "Public routes and flows",
      "status": "partial",
      "evidence": [
        "/players/",
        "/modders/",
        "/support/",
        "/mods/",
        "/download/",
        "/upload/",
        "/account/",
        "/moderation/",
        "/attribution/"
      ],
      "remaining": [
        "Replace account, upload, and moderation placeholder copy only after matching backend services are deployed."
      ]
    },
    {
      "id": 2,
      "title": "Manager API compatibility",
      "status": "ready",
      "evidence": [
        "/api/v1/catalog.json",
        "/api/v1/runtime/latest.json",
        "/api/v1/framework/latest.json",
        "/api/v1/manager/latest.json",
        "/api/v1/mods/index.json",
        "tools/Validate-Site.ps1"
      ],
      "remaining": []
    },
    {
      "id": 3,
      "title": "Immutable artifacts and hashes",
      "status": "ready",
      "evidence": [
        "https://gitlab.curtpme.com/starminer-modding/smmodmanager/-/releases/v0.1.24/downloads/smmodmanager-0.1.24-windows-x64.zip",
        "/downloads/framework/StarminerFramework-0.5.5.zip",
        "/downloads/mods/example.hello-lua/0.1.3/example.hello-lua-v0.1.3.zip",
        "/downloads/mods/example.hello-lua-companion/0.1.2/example.hello-lua-companion-v0.1.2.zip",
        "/downloads/mods/starminer.object-catalog-export/0.1.1/starminer.object-catalog-export-v0.1.1.zip",
        "tools/Test-ArtifactImmutability.ps1"
      ],
      "remaining": []
    },
    {
      "id": 4,
      "title": "Production mod publishing backend",
      "status": "blocked",
      "evidence": [
        "/api/v1/publishing/workflow.json",
        "/api/v1/publishing/backend-contract.json",
        "/api/v1/publishing/upload-submission.schema.json",
        "backend/server.mjs",
        "backend/server.test.mjs",
        "tools/Invoke-BackendSmoke.ps1",
        "backend-health-smoke:protected",
        "rate_limit_exceeded write-route guards",
        "GET /api/v1/accounts",
        "PUT /api/v1/accounts/{accountId}/roles",
        "SMMODS email verification webhook gate",
        "POST /api/v1/catalog/publish",
        "SMMODS_LIVE_UPLOADS upload gate",
        "smmods.post-publish-smoke.v1",
        "deploy/smmods-backend.service",
        "deploy/nginx-smmods-backend.conf",
        "/account/",
        "/upload/",
        "/moderation/"
      ],
      "remaining": [
        "Deploy the backend behind HTTPS with durable storage and verification email delivery after account, upload staging, validation, moderation, catalog publication, and audit paths are production-configured.",
        "Configure SMMODS_BACKEND_SMOKE_BASE_URL and run backend-health-smoke:protected against the deployed route, then run full account lifecycle smoke after the deployed email verification path can provide verification tokens to the smoke operator or CI job.",
        "Wire the local catalog publisher into deployment and live public smoke after HTTPS publication.",
        "Set liveBackend true only after the deployed services are covered by validation and smoke checks."
      ]
    },
    {
      "id": 5,
      "title": "Interim manual publishing lane",
      "status": "ready",
      "evidence": [
        "tools/Import-ModRelease.ps1",
        "docs/manual-publishing.md",
        "/api/v1/publishing/mod-release-submission.schema.json",
        "docs/mod-release-submission.example.json"
      ],
      "remaining": []
    },
    {
      "id": 6,
      "title": "Framework and sample mod resources",
      "status": "ready",
      "evidence": [
        "/modders/",
        "/wiki/getting-started/",
        "/mods/hello-lua/",
        "/mods/hello-lua-companion/",
        "/mods/object-catalog-export/",
        "/api/v1/framework/latest.json"
      ],
      "remaining": []
    },
    {
      "id": 7,
      "title": "Catalog dependency and update metadata",
      "status": "ready",
      "evidence": [
        "/api/v1/catalog.json",
        "/api/v1/mods/example.hello-lua/versions.json",
        "/api/v1/mods/example.hello-lua-companion/versions.json",
        "/api/v1/mods/starminer.object-catalog-export/versions.json"
      ],
      "remaining": []
    },
    {
      "id": 8,
      "title": "Production manager download",
      "status": "ready",
      "evidence": [
        "/download/",
        "/api/v1/manager/latest.json",
        "https://gitlab.curtpme.com/starminer-modding/smmodmanager/-/releases/v0.1.24/downloads/smmodmanager-0.1.24-windows-x64.zip",
        "sourceExecutableSha256"
      ],
      "remaining": []
    },
    {
      "id": 9,
      "title": "Public smoke coverage",
      "status": "ready",
      "evidence": [
        "tools/Invoke-PublicSmoke.ps1",
        "GitLab public-smoke:protected artifact"
      ],
      "remaining": []
    },
    {
      "id": 10,
      "title": "GitLab CI validation",
      "status": "ready",
      "evidence": [
        ".gitlab-ci.yml",
        "tools/Invoke-CIValidation.ps1",
        "tools/Validate-Site.ps1",
        "tools/Test-ArtifactImmutability.ps1"
      ],
      "remaining": []
    },
    {
      "id": 11,
      "title": "Deployment readiness",
      "status": "ready",
      "evidence": [
        "docs/deployment.md",
        "public-smoke:protected"
      ],
      "remaining": []
    },
    {
      "id": 12,
      "title": "Truthful user-facing copy",
      "status": "partial",
      "evidence": [
        "/account/",
        "/upload/",
        "/moderation/",
        "/api/v1/publishing/workflow.json"
      ],
      "remaining": [
        "Remove static placeholder language only when auth, uploads, and moderation are working in production."
      ]
    },
    {
      "id": 13,
      "title": "Release publication hygiene",
      "status": "partial",
      "evidence": [
        "git main",
        "GitLab pipeline",
        "public smoke report"
      ],
      "remaining": [
        "Keep committing, pushing, and smoke-verifying each production release increment until every blocker is removed."
      ]
    }
  ]
}
