{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "name": "llm-client-maintenance routing accuracy corpus",
  "version": "2.1.0",
  "purpose": "Routing-eval corpus for llm-client-maintenance. Each phrase declares the skill (expected), a forbidden skill (expected_not, for phrases the source data only ever asserted as \"not this skill\"), or neither. Scored by scripts/skills/run-skill-evals.mjs (TF-IDF token overlap over per-skill description+triggers).",
  "scoring_notes": "Heuristic signal, not ground truth. Treat misroutes as a prompt to tighten the skill description, never as a reason to keyword-stuff it. Real harness routing is LLM-driven.",
  "scope": "llm-client-maintenance routing, does this phrase activate llm-client-maintenance?",
  "phrases": [
    {
      "id": "llm-client-maintenance-pos-01",
      "phrase": "the gemini adapter is dropping usage tokens on streamed responses",
      "expected": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-pos-02",
      "phrase": "stopReason from openai never reaches the client as MAX_TOKENS",
      "expected": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-pos-03",
      "phrase": "the SSE parser chokes when a chunk splits mid-line",
      "expected": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-pos-04",
      "phrase": "the passthrough proxy is returning 401 for anthropic requests in production",
      "expected": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-pos-05",
      "phrase": "add a new model to the MODELS registry and set it as DEFAULT_MODEL",
      "expected": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-pos-06",
      "phrase": "createAdapter() is leaking a real API key to the browser on a production host",
      "expected": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-pos-07",
      "phrase": "add support for a new OpenAI-compatible gateway provider adapter",
      "expected": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-pos-08",
      "phrase": "streamChat() never emits a terminal done chunk",
      "expected": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-pos-09",
      "phrase": "detectProvider isn't resolving the new model id to the right adapter",
      "expected": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-pos-10",
      "phrase": "the anthropic adapter's buildRequest() diverges from the passthrough proxy path",
      "expected": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-pos-11",
      "phrase": "the StreamChunk union is missing a variant for tool_use deltas",
      "expected": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-pos-12",
      "phrase": "the stub LLM adapter isn't returning parseable A2UI JSON in dev mode",
      "expected": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-neg-01",
      "phrase": "wire the chat client into our admin app's chat-shell",
      "expected_not": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-neg-02",
      "phrase": "why did the composer emit composition-synthesized instead of composition-match",
      "expected_not": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-neg-03",
      "phrase": "cut a release and bump @adia-ai/llm's version with the rest of the lockstep packages",
      "expected_not": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-neg-04",
      "phrase": "add a new prop to the chat-input-ui primitive",
      "expected_not": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-neg-05",
      "phrase": "explain how Server-Sent Events work in general",
      "expected_not": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-neg-06",
      "phrase": "add a chat box to the admin app",
      "expected_not": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-neg-07",
      "phrase": "the chat-shell message list isn't rendering streamed replies",
      "expected_not": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-neg-08",
      "phrase": "tune STRONG_MATCH and lift the eval fails in the compose strategies",
      "expected_not": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-neg-09",
      "phrase": "deploy the ui-kit dist to exe.dev and restart the service",
      "expected_not": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-neg-10",
      "phrase": "run a dogfood sweep to find broken demos",
      "expected_not": "llm-client-maintenance"
    },
    {
      "id": "llm-client-maintenance-neg-11",
      "phrase": "score the gen-ui gallery outputs against the exit gate",
      "expected_not": "llm-client-maintenance"
    }
  ],
  "_measured_historical": {
    "as_of": "2026-07-18",
    "scorer": "routing_eval.py (nonoun-plugins/forge)",
    "f1": 0.857,
    "precision": 1.0,
    "recall": 0.75,
    "exit_code": 0,
    "note": "measured by the external routing_eval.py (nonoun-plugins/forge) against the pre-conversion positives/negatives shape; historical record only, not regenerated by run-skill-evals.mjs."
  }
}
