{
  "$schema": "Prompt evaluation corpus — each entry maps a natural prompt to expected skill slugs",
  "corpus": [
    {
      "id": 1,
      "prompt": "I want to add AI-powered text generation to my app",
      "expectedSkills": ["ai-sdk"],
      "tags": ["paraphrase"],
      "note": "Natural wording — no literal 'ai sdk' or 'vercel ai' phrase"
    },
    {
      "id": 2,
      "prompt": "set up the Vercel AI SDK for streaming completions",
      "expectedSkills": ["ai-sdk"],
      "tags": ["exact"]
    },
    {
      "id": 3,
      "prompt": "build a chat interface that streams messages in real time",
      "expectedSkills": ["ai-elements"],
      "tags": ["paraphrase"],
      "note": "Describes chat UI without saying 'ai elements' or 'chat components'"
    },
    {
      "id": 4,
      "prompt": "add ai elements to render the conversation",
      "expectedSkills": ["ai-elements"],
      "tags": ["exact"]
    },
    {
      "id": 5,
      "prompt": "create a Next.js app with the app router",
      "expectedSkills": ["nextjs"],
      "tags": ["exact"]
    },
    {
      "id": 6,
      "prompt": "add a server action to handle the form submission",
      "expectedSkills": ["nextjs"],
      "tags": ["exact"]
    },
    {
      "id": 7,
      "prompt": "use SWR for client-side data fetching with caching",
      "expectedSkills": ["swr"],
      "tags": ["exact"]
    },
    {
      "id": 8,
      "prompt": "hook up stale-while-revalidate for the user list",
      "expectedSkills": ["swr"],
      "tags": ["exact"]
    },
    {
      "id": 9,
      "prompt": "check the deployment status on Vercel",
      "expectedSkills": ["vercel-cli"],
      "tags": ["exact"]
    },
    {
      "id": 10,
      "prompt": "my deploy failed, show me the logs",
      "expectedSkills": ["vercel-cli"],
      "tags": ["exact"]
    },
    {
      "id": 11,
      "prompt": "build a Slack bot that responds to mentions",
      "expectedSkills": ["chat-sdk"],
      "tags": ["exact"]
    },
    {
      "id": 12,
      "prompt": "create a cross-platform chatbot for Telegram and Discord",
      "expectedSkills": ["chat-sdk"],
      "tags": ["exact"]
    },
    {
      "id": 13,
      "prompt": "add rate limiting to my API endpoints",
      "expectedSkills": ["vercel-firewall"],
      "tags": ["exact"]
    },
    {
      "id": 15,
      "prompt": "set up OpenTelemetry instrumentation for my app",
      "expectedSkills": ["observability"],
      "tags": ["exact"]
    },
    {
      "id": 16,
      "prompt": "add logging and error tracking with Sentry",
      "expectedSkills": ["observability"],
      "tags": ["exact"]
    },
    {
      "id": 17,
      "prompt": "create a durable workflow that retries on failure",
      "expectedSkills": ["workflow"],
      "tags": ["exact"]
    },
    {
      "id": 18,
      "prompt": "build a multi-step pipeline that streams progress to the client",
      "expectedSkills": ["workflow"],
      "tags": ["exact"]
    },
    {
      "id": 19,
      "prompt": "set up next-forge monorepo with Clerk and Stripe",
      "expectedSkills": ["next-forge"],
      "tags": ["exact"]
    },
    {
      "id": 20,
      "prompt": "run untrusted student code safely in an isolated environment",
      "expectedSkills": ["vercel-sandbox"],
      "tags": ["paraphrase"],
      "note": "Describes sandbox use case without literal 'sandbox' phrase"
    },
    {
      "id": 21,
      "prompt": "I need to execute user-submitted code without risking the server",
      "expectedSkills": ["vercel-sandbox"],
      "tags": ["paraphrase"],
      "note": "Natural sandbox intent without any direct keyword"
    },
    {
      "id": 22,
      "prompt": "verify the whole flow works end to end",
      "expectedSkills": ["verification"],
      "tags": ["exact"]
    },
    {
      "id": 23,
      "prompt": "it keeps timing out and I can't figure out why",
      "expectedSkills": ["investigation-mode"],
      "tags": ["exact"]
    },
    {
      "id": 24,
      "prompt": "the page is just a white screen, nothing renders",
      "expectedSkills": ["agent-browser-verify"],
      "tags": ["exact"]
    },
    {
      "id": 25,
      "prompt": "save the AI-generated chat history so users can share conversations",
      "expectedSkills": ["ai-generation-persistence"],
      "tags": ["exact"]
    },
    {
      "id": 26,
      "prompt": "use v0 to generate the landing page components",
      "expectedSkills": ["v0-dev"],
      "tags": ["exact"]
    },
    {
      "id": 27,
      "prompt": "I want the LLM to produce structured JSON output from the prompt",
      "expectedSkills": ["ai-sdk"],
      "tags": ["paraphrase"],
      "note": "Uses 'structured output' allOf pair without mentioning 'ai sdk'"
    },
    {
      "id": 28,
      "prompt": "add a message component that shows each turn in the conversation",
      "expectedSkills": ["ai-elements"],
      "tags": ["paraphrase"],
      "note": "Triggers allOf [message, component] and [conversation, component]"
    },
    {
      "id": 29,
      "prompt": "my workflow run is stuck and the step keeps failing",
      "expectedSkills": ["workflow"],
      "tags": ["exact"]
    },
    {
      "id": 30,
      "prompt": "how do I add middleware to my Next app for auth?",
      "expectedSkills": ["nextjs"],
      "tags": ["paraphrase"],
      "note": "allOf [middleware, next] without saying 'nextjs' or 'next.js'"
    },
    {
      "id": 31,
      "prompt": "refactor the database migration script to use transactions",
      "expectedSkills": [],
      "tags": ["negative"],
      "note": "Generic DB task — should not match any skill"
    },
    {
      "id": 32,
      "prompt": "fix the CSS grid layout on the homepage",
      "expectedSkills": [],
      "tags": ["negative"],
      "note": "Pure CSS task — no Vercel skill relevant"
    },
    {
      "id": 33,
      "prompt": "set up a Kubernetes cluster for the backend services",
      "expectedSkills": [],
      "tags": ["negative"],
      "note": "Infrastructure task outside Vercel ecosystem"
    },
    {
      "id": 34,
      "prompt": "write unit tests for the user authentication service",
      "expectedSkills": [],
      "tags": ["negative"],
      "note": "Generic testing task"
    },
    {
      "id": 35,
      "prompt": "deploy to Heroku with environment variables",
      "expectedSkills": [],
      "tags": ["negative"],
      "note": "Heroku suppresses vercel-cli via noneOf"
    },
    {
      "id": 36,
      "prompt": "build a Vue chat interface with real-time updates",
      "expectedSkills": [],
      "tags": ["negative"],
      "note": "Vue suppresses ai-elements via noneOf"
    },
    {
      "id": 37,
      "prompt": "help me hook up streaming text generation with tool calling support",
      "expectedSkills": ["ai-sdk"],
      "tags": ["paraphrase"],
      "note": "allOf [streaming, generation] + anyOf 'tool calling' — natural wording"
    },
    {
      "id": 38,
      "prompt": "the application keeps crashing and I have no idea what is going on",
      "expectedSkills": ["investigation-mode"],
      "tags": ["paraphrase"],
      "note": "Frustration-style prompt about something broken"
    },
    {
      "id": 39,
      "prompt": "add a code execution playground where users can try snippets",
      "expectedSkills": ["vercel-sandbox"],
      "tags": ["paraphrase"],
      "note": "allOf [code, playground] without saying 'sandbox'"
    },
    {
      "id": 40,
      "prompt": "configure speed insights and web analytics on Vercel",
      "expectedSkills": ["observability"],
      "tags": ["exact"]
    },
    {
      "id": 41,
      "prompt": "stream AI responses in my app",
      "expectedSkills": ["ai-sdk"],
      "tags": ["paraphrase", "retrieval"],
      "note": "Acceptance criteria: natural wording matching ai-sdk via retrieval intents"
    },
    {
      "id": 42,
      "prompt": "I need to call an LLM and get back a response as a stream",
      "expectedSkills": ["ai-sdk"],
      "tags": ["paraphrase", "retrieval"],
      "note": "Natural language about LLM streaming without any exact ai-sdk phrases"
    },
    {
      "id": 43,
      "prompt": "how do I run an agent loop that calls tools automatically",
      "expectedSkills": ["ai-sdk"],
      "tags": ["paraphrase", "retrieval"],
      "note": "Matches retrieval intent about agent loops and tool calling"
    },
    {
      "id": 44,
      "prompt": "generate a typed object from the model's response",
      "expectedSkills": ["ai-sdk"],
      "tags": ["paraphrase", "retrieval"],
      "note": "Matches retrieval intent about structured JSON output"
    },
    {
      "id": 45,
      "prompt": "set up server rendering for my React pages",
      "expectedSkills": ["nextjs"],
      "tags": ["paraphrase", "retrieval"],
      "note": "Acceptance criteria: natural wording matching nextjs via retrieval"
    },
    {
      "id": 46,
      "prompt": "should I make this a server component or a client component",
      "expectedSkills": ["nextjs"],
      "tags": ["paraphrase", "retrieval"],
      "note": "Matches retrieval intent about server vs client components"
    },
    {
      "id": 47,
      "prompt": "configure caching for my data fetching layer",
      "expectedSkills": ["nextjs"],
      "tags": ["paraphrase", "retrieval"],
      "note": "Matches retrieval intent about data fetching/caching in App Router"
    },
    {
      "id": 48,
      "prompt": "add a new page with a dynamic route segment",
      "expectedSkills": ["nextjs"],
      "tags": ["paraphrase", "retrieval"],
      "note": "Matches retrieval example about dynamic routing"
    },
    {
      "id": 49,
      "prompt": "fetch data client side with caching",
      "expectedSkills": ["swr"],
      "tags": ["paraphrase", "retrieval"],
      "note": "Acceptance criteria: natural wording matching swr via retrieval"
    },
    {
      "id": 50,
      "prompt": "keep the UI in sync with the server automatically after changes",
      "expectedSkills": ["swr"],
      "tags": ["paraphrase", "retrieval"],
      "note": "Matches retrieval intent about keeping UI in sync with server"
    },
    {
      "id": 51,
      "prompt": "add infinite scrolling to load more items as the user scrolls down",
      "expectedSkills": ["swr"],
      "tags": ["paraphrase", "retrieval"],
      "note": "Matches retrieval intent about infinite scroll / paginated loading"
    },
    {
      "id": 52,
      "prompt": "refresh the cached data after updating a record",
      "expectedSkills": ["swr"],
      "tags": ["paraphrase", "retrieval"],
      "note": "Matches retrieval intent about refreshing stale cache after mutation"
    }
  ]
}
