{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "name": "token-selection-routing-corpus",
  "version": "2.1.0",
  "purpose": "Routing floor for the token-selection knowledge pack: 'which color token/role' asks reach it; composition, palette-design, and value-verification asks route past it.",
  "scoring_notes": "Heuristic TF-IDF proxy (scripts/skills/run-skill-evals.mjs); the real harness routes on descriptions. Treat misroutes as description-tightening signals.",
  "license": "internal",
  "scope": "adia-ui-factory plugin, consumer-side. In the framework monorepo the operator's private design-systems plugin carries a broader Material-tokens skill \u2014 overlap there is inherent and acceptable; this pack exists for consumer installs without it.",
  "phrases": [
    {
      "id": "tokens-role-01",
      "phrase": "which token should this card background use",
      "expected": "token-selection",
      "expected_shape": "which-role",
      "rationale": "The pack's flagship ask \u2014 role for a surface."
    },
    {
      "id": "tokens-role-02",
      "phrase": "what color role for the text on this danger badge",
      "expected": "token-selection",
      "expected_shape": "which-role",
      "rationale": "Pairing-law territory: ink on an intent fill."
    },
    {
      "id": "tokens-role-03",
      "phrase": "which --md-sys-color role for a subtle divider",
      "expected": "token-selection",
      "expected_shape": "which-role",
      "rationale": "Outline-family lookup by need."
    },
    {
      "id": "tokens-role-04",
      "phrase": "what token for a toast that must read as a warning",
      "expected": "token-selection",
      "expected_shape": "which-role",
      "rationale": "Intent palette selection + container family."
    },
    {
      "id": "tokens-state-01",
      "phrase": "add hover and disabled colors to this button",
      "expected": "token-selection",
      "expected_shape": "state-family",
      "rationale": "Law 2 \u2014 baked state families, never synthesized."
    },
    {
      "id": "tokens-state-02",
      "phrase": "how do I dim this control when it's disabled",
      "expected": "token-selection",
      "expected_shape": "state-family",
      "rationale": "The opacity anti-pattern's replacement."
    },
    {
      "id": "tokens-layer-01",
      "phrase": "should I use --a-primary or --md-sys-color-primary here",
      "expected": "token-selection",
      "expected_shape": "layer-choice",
      "rationale": "The two-layer question the pack owns."
    },
    {
      "id": "tokens-alias-01",
      "phrase": "what does --a-canvas-well actually resolve to",
      "expected": "token-selection",
      "expected_shape": "alias-resolution",
      "rationale": "The generated alias table's row lookup."
    },
    {
      "id": "tokens-dark-01",
      "phrase": "make this panel's colors work in dark mode",
      "expected": "token-selection",
      "expected_shape": "dark-mode",
      "rationale": "Law 3 \u2014 scheme baked in; check color-scheme, not tokens."
    },
    {
      "id": "tokens-elev-01",
      "phrase": "which surface tier makes this card read as raised",
      "expected": "token-selection",
      "expected_shape": "which-role",
      "rationale": "Law 4 \u2014 the elevation ladder."
    },
    {
      "id": "tokens-contrast-01",
      "phrase": "the white text on our warning button looks low contrast \u2014 which token fixes it",
      "expected": "token-selection",
      "expected_shape": "contrast-complaint",
      "rationale": "Law 5 \u2014 the answer is the ruling (by design, don't patch), which only this pack carries consumer-side."
    },
    {
      "id": "tokens-chart-01",
      "phrase": "which tokens color the chart series vs the error state",
      "expected": "token-selection",
      "expected_shape": "which-role",
      "rationale": "Law 6 \u2014 identity vs state token classes."
    },
    {
      "id": "tokens-adv-01",
      "phrase": "build the settings screen with proper tokens",
      "expected": "screen-composition",
      "rationale": "Adversarial \u2014 composition consumes the answer; the ask is a build.",
      "expected_alternative_raw": "screen-composition (adia-ui-factory)"
    },
    {
      "id": "tokens-adv-02",
      "phrase": "design a new color ramp from our brand blue",
      "expected": null,
      "rationale": "Adversarial \u2014 palette DESIGN is upstream; this pack answers consumption.",
      "expected_alternative_raw": "framework-side palette design (not this plugin)"
    },
    {
      "id": "tokens-adv-03",
      "phrase": "check the contrast ratio of this text on this background",
      "expected": null,
      "rationale": "Adversarial \u2014 value verification, not role choice.",
      "expected_alternative_raw": "framework verify:contrast / operator tooling"
    },
    {
      "id": "tokens-adv-04",
      "phrase": "the page renders blank after my token change",
      "expected": "surface-qa",
      "rationale": "Adversarial \u2014 a broken render is the browser gate's territory.",
      "expected_alternative_raw": "surface-qa (adia-ui-factory)"
    },
    {
      "id": "tokens-adv-05",
      "phrase": "add a new token to the framework's core.css",
      "expected": "primitive-authoring",
      "rationale": "Adversarial \u2014 framework token AUTHORING is forge-side.",
      "expected_alternative_raw": "primitive-authoring (adia-ui-forge)"
    }
  ],
  "minimums_per_spec": {
    "trigger_phrases": 12,
    "adversarial_phrases": 5,
    "task_shapes_covered": "which-role, state-family, layer-choice, alias-resolution, dark-mode, contrast-complaint",
    "adversarial_fraction": "29%"
  },
  "evaluator_notes": {
    "known_limitations": "In the framework monorepo, the operator's private design-systems:material-design-color-tokens skill legitimately overlaps every positive here \u2014 the fence is install-context, not phrasing; do not tune descriptions to separate them.",
    "promotion_criteria": "F1 >= 0.85 across 3+ runs",
    "review_cadence": "on any description edit; on /eval-run findings"
  }
}
