{"ok":true,"service":"seo-vector-tool","phases":["skeleton","contracts","seo-core","worker-boundaries"],"integrations":{"supabase":true,"zyte":true,"openai":true,"embeddings":{"model":"text-embedding-3-large","dimensions":1536,"ready":true},"kgLookup":{"provider":"off","ready":false}},"readiness":{"ok":true,"coreReady":true,"checks":[{"key":"app_url","scope":"deployment","status":"ready","message":"Public app URL is configured."},{"key":"supabase_persistence","scope":"core","status":"ready","message":"Supabase persistence, RLS backend access, and pgmq queue are configured."},{"key":"supabase_storage","scope":"core","status":"ready","message":"Supabase Storage bucket name is configured for artifacts and exports."},{"key":"zyte","scope":"core","status":"ready","message":"Zyte SERP/scrape provider is configured."},{"key":"openai","scope":"core","status":"ready","message":"OpenAI LLM/embedding provider is configured."},{"key":"embeddings","scope":"core","status":"ready","message":"Embedding dimensions match pgvector schema."},{"key":"worker_loop","scope":"worker","status":"ready","message":"Worker loop is configured with concurrency=1, pollIntervalMs=5000."},{"key":"scheduled_reanalysis_secret","scope":"deployment","status":"ready","message":"Scheduled reanalysis trigger is protected by a shared secret."},{"key":"gsc_oauth","scope":"integration","status":"ready","message":"Google Search Console OAuth credentials and callback URI are configured."},{"key":"kg_lookup","scope":"integration","status":"warning","message":"KG lookup is disabled; LLM-supplied KG IDs will still be normalized/persisted."}],"missingRequiredEnv":[],"warnings":["kg_lookup"]}}