{
  "artifact_version": 1,
  "generated_at": "2026-04-12T06:50:18.565Z",
  "checked_at": "2026-04-12T06:50:18.564Z",
  "route": "/setup",
  "viewer_mode": "public",
  "host": "0.0.0.0:3000",
  "verification": {
    "overall": "blocked",
    "label": "Blocked",
    "summary": "Required verification checks are failing. Resolve those first before trusting the instance.",
    "ready": false,
    "fully_verified": false,
    "readiness_status": "blocked"
  },
  "runtime": {
    "node_version": "v20.20.2",
    "node_env": "production"
  },
  "categories": [
    {
      "id": "application",
      "title": "Core Readiness",
      "status": "pass",
      "summary": "OSuite responded to the verification request.",
      "what_was_checked": "The /setup page rendered and the server runtime reported process metadata.",
      "evidence_summary": "Behavior verified: the app process responded and exposed runtime metadata.",
      "pending_proof": "",
      "checks": [
        {
          "id": "app_reachable",
          "label": "Verify surface reachable",
          "status": "pass",
          "detail": "The Setup & Verify page rendered successfully.",
          "sub_detail": "",
          "likely_cause": "",
          "next_action": ""
        },
        {
          "id": "runtime",
          "label": "Runtime metadata",
          "status": "pass",
          "detail": "Application runtime is available.",
          "sub_detail": "",
          "likely_cause": "",
          "next_action": ""
        }
      ]
    },
    {
      "id": "database",
      "title": "Database Verification",
      "status": "fail",
      "summary": "1 required table(s) are still missing.",
      "what_was_checked": "DATABASE_URL presence, a live database connection, and the required OSuite core tables.",
      "evidence_summary": "Connection succeeded, but schema verification failed.",
      "pending_proof": "Bootstrap migrations still need to complete before database verification can pass.",
      "checks": [
        {
          "id": "database_url",
          "label": "DATABASE_URL",
          "status": "pass",
          "detail": "DATABASE_URL is present.",
          "sub_detail": "",
          "likely_cause": "",
          "next_action": ""
        },
        {
          "id": "db_connection",
          "label": "Connection test",
          "status": "pass",
          "detail": "Database connection succeeded.",
          "sub_detail": "",
          "likely_cause": "",
          "next_action": ""
        },
        {
          "id": "db_schema",
          "label": "Core schema",
          "status": "fail",
          "detail": "1 required table check(s) failed.",
          "sub_detail": "Sign in for the exact missing table names.",
          "likely_cause": "Bootstrap migrations have not run yet, or they did not complete successfully.",
          "next_action": "Run the setup migrations, then reload this page."
        }
      ]
    },
    {
      "id": "configuration",
      "title": "Configuration",
      "status": "pass",
      "summary": "Required and recommended settings are present.",
      "what_was_checked": "Presence of required and advisory environment variables. Values are never shown here.",
      "evidence_summary": "Configuration presence checks passed for required and recommended settings.",
      "pending_proof": "",
      "checks": [
        {
          "id": "database_url",
          "label": "DATABASE_URL",
          "status": "pass",
          "detail": "DATABASE_URL is present.",
          "sub_detail": "Postgres connection string",
          "likely_cause": "",
          "next_action": ""
        },
        {
          "id": "nextauth_secret",
          "label": "NEXTAUTH_SECRET",
          "status": "pass",
          "detail": "NEXTAUTH_SECRET is present.",
          "sub_detail": "Session signing secret",
          "likely_cause": "",
          "next_action": ""
        },
        {
          "id": "nextauth_url",
          "label": "NEXTAUTH_URL",
          "status": "pass",
          "detail": "NEXTAUTH_URL is present.",
          "sub_detail": "Public URL of this OSuite instance",
          "likely_cause": "",
          "next_action": ""
        },
        {
          "id": "osuite_api_key",
          "label": "OSUITE_API_KEY",
          "status": "pass",
          "detail": "OSUITE_API_KEY is present.",
          "sub_detail": "Default API key for agent authentication",
          "likely_cause": "",
          "next_action": ""
        },
        {
          "id": "cron_secret",
          "label": "CRON_SECRET",
          "status": "pass",
          "detail": "CRON_SECRET is present.",
          "sub_detail": "Secret token protecting /api/cron/* routes from unauthorized invocation",
          "likely_cause": "",
          "next_action": ""
        }
      ]
    },
    {
      "id": "auth",
      "title": "Auth Readiness",
      "status": "pass",
      "summary": "At least one sign-in method is available.",
      "what_was_checked": "Whether at least one complete sign-in method exists and whether agent API authentication has a configured path.",
      "evidence_summary": "Auth ready: a normal operator sign-in path exists.",
      "pending_proof": "",
      "checks": [
        {
          "id": "signin_methods",
          "label": "Sign-in readiness",
          "status": "pass",
          "detail": "At least one sign-in method is configured.",
          "sub_detail": "",
          "likely_cause": "",
          "next_action": ""
        },
        {
          "id": "auth_local_password",
          "label": "Local admin password",
          "status": "pass",
          "detail": "OSUITE_LOCAL_ADMIN_PASSWORD is configured with SaaS break-glass access enabled.",
          "sub_detail": "",
          "likely_cause": "",
          "next_action": ""
        },
        {
          "id": "agent_api_access",
          "label": "Agent API access",
          "status": "pass",
          "detail": "Agent API authentication appears configured.",
          "sub_detail": "",
          "likely_cause": "",
          "next_action": ""
        }
      ]
    },
    {
      "id": "billing",
      "title": "Billing Readiness",
      "status": "info",
      "summary": "Billing configuration is optional in self-host mode.",
      "what_was_checked": "Platform mode and hosted billing settings.",
      "evidence_summary": "Self-host mode does not require Stripe for normal operator setup.",
      "pending_proof": "",
      "checks": [
        {
          "id": "billing_mode",
          "label": "Hosted billing mode",
          "status": "info",
          "detail": "OSuite is not running in SaaS mode, so Stripe-backed hosted billing is optional.",
          "sub_detail": "",
          "likely_cause": "",
          "next_action": ""
        }
      ]
    },
    {
      "id": "deploy",
      "title": "Deploy Readiness",
      "status": "warn",
      "summary": "Deploy configuration has recommendations.",
      "what_was_checked": "NEXTAUTH_URL vs current host, realtime backend suitability for serverless or multi-instance deployment.",
      "evidence_summary": "Deploy checks passed.",
      "pending_proof": "",
      "checks": [
        {
          "id": "nextauth_url",
          "label": "NEXTAUTH_URL does not match deployment host",
          "status": "warn",
          "detail": "Configured: studio.osuite.ai — current: 0.0.0.0:3000",
          "sub_detail": "",
          "likely_cause": "",
          "next_action": "Set NEXTAUTH_URL to https://0.0.0.0:3000 in your deployment configuration and redeploy."
        },
        {
          "id": "realtime_backend",
          "label": "Realtime backend: Redis",
          "status": "pass",
          "detail": "Mission Control live stream is active.",
          "sub_detail": "",
          "likely_cause": "",
          "next_action": ""
        }
      ]
    },
    {
      "id": "sdk",
      "title": "SDK and Integration Verification",
      "status": "warn",
      "summary": "Finish core verification first, then run live SDK checks.",
      "what_was_checked": "This section does not execute SDK calls. It verifies whether a live validation path is available and documents the exact next commands.",
      "evidence_summary": "Live SDK proof is pending because core instance verification is not complete yet.",
      "pending_proof": "Use the \"Run test\" button above to validate your API key and capture proof.",
      "checks": [
        {
          "id": "sdk_live_proof",
          "label": "Live validation proof",
          "status": "warn",
          "detail": "No live validation proof has been captured yet.",
          "sub_detail": "Click \"Run test\" above with your API key to capture proof and upgrade to verified.",
          "likely_cause": "",
          "next_action": ""
        },
        {
          "id": "sdk_gate",
          "label": "Core verification gate",
          "status": "warn",
          "detail": "Core verification is still incomplete, so validation should wait.",
          "sub_detail": "",
          "likely_cause": "Database, required configuration, or auth readiness still needs attention.",
          "next_action": "Fix the blocked or warning checks above first."
        },
        {
          "id": "sdk_api_key_gate",
          "label": "API key available",
          "status": "pass",
          "detail": "An API authentication path is available.",
          "sub_detail": "",
          "likely_cause": "",
          "next_action": ""
        }
      ]
    }
  ],
  "workflow": [
    {
      "id": "core_instance",
      "title": "Core instance verification",
      "status": "fail",
      "summary": "Core instance verification is not complete yet.",
      "proof": "Blocked until required config and database checks pass.",
      "next_action": "Resolve the blocked checks in Configuration and Database first."
    },
    {
      "id": "auth_operator",
      "title": "Operator and auth verification",
      "status": "pass",
      "summary": "At least one operator sign-in path is configured.",
      "proof": "Verified by checking complete sign-in provider configuration.",
      "next_action": ""
    },
    {
      "id": "billing_self_serve",
      "title": "Hosted billing verification",
      "status": "blocked",
      "summary": "Billing verification should wait until core checks pass.",
      "proof": "Verified by checking Stripe server key, publishable key, webhook signing secret, and all public plan prices.",
      "next_action": "Resolve the blocked core checks first."
    },
    {
      "id": "sdk_live",
      "title": "SDK and integration verification",
      "status": "blocked",
      "summary": "Live SDK validation should wait until core checks pass.",
      "proof": "No live SDK proof collected yet.",
      "next_action": "Complete the core verification step first."
    },
    {
      "id": "proof_artifact",
      "title": "Verification proof artifact",
      "status": "pass",
      "summary": "A structured JSON artifact is available for the current verification view.",
      "proof": "The artifact records timestamp, mode, overall state, categories checked, per-check status, and next steps.",
      "next_action": "Download the proof artifact once you are ready to share or archive the current verification state."
    }
  ],
  "recommended_next_steps": [
    {
      "id": "run_migrations",
      "title": "Run setup migrations",
      "variant": "warn",
      "summary": "The database is reachable, but OSuite schema setup is incomplete.",
      "details": [
        "What failed: one or more required core tables are still missing.",
        "Likely cause: bootstrap migrations have not run, or they only ran partially.",
        "Next action: run the migration commands, then reload /setup."
      ],
      "code": "Sign in for the exact migration commands.",
      "note": "1 required schema check(s) are still failing."
    }
  ],
  "sdk_validation": {
    "base_url": "https://0.0.0.0:3000",
    "node_command": "node ./osuite-platform-intelligence/scripts/validate-integration.mjs \\\n  --base-url https://0.0.0.0:3000 \\\n  --api-key <api-key> \\\n  --full \\\n  --capture-setup-proof",
    "python_command": "pip install osuite\npython -c \"from osuite import Osuite; client = Osuite(base_url='https://0.0.0.0:3000', api_key='<api-key>'); print(client.ping())\"",
    "live_proof": null,
    "note": "These commands are guidance for live validation. The artifact does not claim they have already been executed."
  },
  "notice": "This page is intentionally safe to open before login. Some operator details stay hidden until you sign in."
}