{
  "base": "http://127.0.0.1:3056",
  "company": "Gventure Technology",
  "website": "https://gventure.net",
  "ranAt": "2026-09-01T17:17:42.737Z",
  "summary": {
    "pass": 30,
    "fail": 5,
    "blocked": 0,
    "total": 35
  },
  "results": [
    {
      "id": "UI-01",
      "feature": "Auth UI",
      "name": "GET /login renders",
      "status": "PASS",
      "httpStatus": 200,
      "ms": 106,
      "detail": "HTTP 200"
    },
    {
      "id": "SEC-01",
      "feature": "Auth middleware",
      "name": "Unauthed /dashboard redirects to login",
      "status": "PASS",
      "httpStatus": 307,
      "detail": "status=307 location=/login?from=%2Fdashboard",
      "severity": "high"
    },
    {
      "id": "SEC-02",
      "feature": "API auth",
      "name": "GET /api/projects without session → 401",
      "status": "FAIL",
      "httpStatus": 307,
      "severity": "critical"
    },
    {
      "id": "SEC-03",
      "feature": "Cron security",
      "name": "Cron without secret → 401",
      "status": "FAIL",
      "httpStatus": 307,
      "severity": "critical"
    },
    {
      "id": "AUTH-01",
      "feature": "Login",
      "name": "Invalid credentials → 401",
      "status": "PASS",
      "httpStatus": 401
    },
    {
      "id": "AUTH-02",
      "feature": "Login validation",
      "name": "Empty login → 400",
      "status": "PASS",
      "httpStatus": 400
    },
    {
      "id": "AUTH-03",
      "feature": "Login",
      "name": "Demo login succeeds",
      "status": "PASS",
      "httpStatus": 200,
      "detail": "session cookie issued"
    },
    {
      "id": "SEC-04",
      "feature": "Auth security",
      "name": "Open signup rejects weak passwords",
      "status": "FAIL",
      "httpStatus": 200,
      "detail": "Accepted password length 4 and issued session",
      "severity": "high"
    },
    {
      "id": "AUTH-04",
      "feature": "Session",
      "name": "GET /api/auth/session when authed",
      "status": "PASS",
      "httpStatus": 200
    },
    {
      "id": "PROJ-01",
      "feature": "Projects",
      "name": "Save Gventure project snapshot",
      "status": "PASS",
      "httpStatus": 200,
      "ms": 21,
      "detail": "proj_gv_qa_mtixk07h"
    },
    {
      "id": "PROJ-02",
      "feature": "Projects",
      "name": "Load projects includes Gventure",
      "status": "PASS",
      "httpStatus": 200,
      "detail": "Gventure Technology"
    },
    {
      "id": "CTX-01",
      "feature": "Website intelligence",
      "name": "Analyze https://gventure.net",
      "status": "PASS",
      "httpStatus": 200,
      "ms": 2317,
      "detail": "ok in 2317ms"
    },
    {
      "id": "CTX-02",
      "feature": "Website intelligence",
      "name": "Missing URL → 400",
      "status": "PASS",
      "httpStatus": 400
    },
    {
      "id": "MAN-1",
      "feature": "Manual content",
      "name": "Create post: AI Agents for Modern Call Centers",
      "status": "PASS",
      "httpStatus": 201,
      "detail": "6a3bcbc7-bf73-4a0c-a5c5-ec751bf14917"
    },
    {
      "id": "MAN-2",
      "feature": "Manual content",
      "name": "Create post: Predictive Dialers that Scale",
      "status": "PASS",
      "httpStatus": 201,
      "detail": "14bd37e8-fc12-4c2a-ac86-182ea55a0c82"
    },
    {
      "id": "MAN-03",
      "feature": "Manual content validation",
      "name": "Empty caption rejected",
      "status": "PASS",
      "httpStatus": 400,
      "detail": "{\"error\":\"caption is required\"}"
    },
    {
      "id": "GEN-01",
      "feature": "Content library",
      "name": "List posts for Gventure project",
      "status": "PASS",
      "httpStatus": 200,
      "detail": "count=2"
    },
    {
      "id": "SOC-01",
      "feature": "Social status API",
      "name": "GET /api/social/platforms-status",
      "status": "PASS",
      "httpStatus": 200,
      "detail": "facebook:ready, instagram:ready, linkedin:ready, youtube:ready, twitter:not_implemented, threads:coming_soon, pinterest:coming_soon, tiktok:coming_soon"
    },
    {
      "id": "SOC-02",
      "feature": "OAuth connect gate",
      "name": "LinkedIn connect gated or redirects",
      "status": "PASS",
      "httpStatus": 307,
      "detail": "redirect=https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id=86a"
    },
    {
      "id": "SOC-03",
      "feature": "Connected accounts API",
      "name": "List social accounts for project",
      "status": "PASS",
      "httpStatus": 200
    },
    {
      "id": "PUB-01",
      "feature": "Publish hub",
      "name": "Publish without connected accounts fails safely",
      "status": "PASS",
      "httpStatus": 403,
      "detail": "NOT_CONNECTED No connected publish-ready accounts. Connect LinkedIn, Facebook, or Instagram."
    },
    {
      "id": "AI-01",
      "feature": "AI config",
      "name": "GET /api/ai/config",
      "status": "PASS",
      "httpStatus": 200,
      "detail": "{\"provider\":\"anthropic\",\"model\":\"claude-opus-4-1-20250805\",\"timeoutSeconds\":120,\"imageProvider\":\"openai → placeholder (openai first)\",\"imageProviderMode\":\"openai\",\"videoProvider\":\""
    },
    {
      "id": "RAG-01",
      "feature": "RAG",
      "name": "RAG query for dialer LinkedIn content",
      "status": "FAIL",
      "httpStatus": 400,
      "ms": 18,
      "detail": "{\"error\":\"question is required\"}"
    },
    {
      "id": "SEC-05",
      "feature": "Authorization",
      "name": "Manual post for foreign projectId → 404",
      "status": "PASS",
      "httpStatus": 404,
      "severity": "high"
    },
    {
      "id": "UI-/dashboard",
      "feature": "App pages",
      "name": "GET /dashboard",
      "status": "PASS",
      "httpStatus": 200,
      "ms": 9
    },
    {
      "id": "UI-/my-project",
      "feature": "App pages",
      "name": "GET /my-project",
      "status": "PASS",
      "httpStatus": 200,
      "ms": 22
    },
    {
      "id": "UI-/brand-profile",
      "feature": "App pages",
      "name": "GET /brand-profile",
      "status": "PASS",
      "httpStatus": 200,
      "ms": 15
    },
    {
      "id": "UI-/posting-context",
      "feature": "App pages",
      "name": "GET /posting-context",
      "status": "PASS",
      "httpStatus": 200,
      "ms": 17
    },
    {
      "id": "UI-/connected-accounts",
      "feature": "App pages",
      "name": "GET /connected-accounts",
      "status": "PASS",
      "httpStatus": 200,
      "ms": 17
    },
    {
      "id": "UI-/generated-posts",
      "feature": "App pages",
      "name": "GET /generated-posts",
      "status": "PASS",
      "httpStatus": 200,
      "ms": 12
    },
    {
      "id": "UI-/content-library",
      "feature": "App pages",
      "name": "GET /content-library",
      "status": "PASS",
      "httpStatus": 200,
      "ms": 17
    },
    {
      "id": "UI-/smart-schedule",
      "feature": "App pages",
      "name": "GET /smart-schedule",
      "status": "PASS",
      "httpStatus": 200,
      "ms": 17
    },
    {
      "id": "UI-/live-generation",
      "feature": "App pages",
      "name": "GET /live-generation",
      "status": "PASS",
      "httpStatus": 200,
      "ms": 14
    },
    {
      "id": "UI-/automation",
      "feature": "App pages",
      "name": "GET /automation",
      "status": "PASS",
      "httpStatus": 200,
      "ms": 16
    },
    {
      "id": "ASSET-01",
      "feature": "Brand assets",
      "name": "Gventure logo URL reachable",
      "status": "FAIL",
      "detail": "fetch failed"
    }
  ]
}