{
  "slug": "game-ui-de-ai",
  "skill": "game-ui-de-ai",
  "upstream": "GameSkill original (onsite/<slug>/original)",
  "sourceHash": "fd575eb86abc9b3a7e9893e1a293b157a51f390cf5d4906dd99f29aaa23a804b",
  "date": "2026-11-03",
  "engine": "HTML/CSS lint in Chrome headless (computed styles, keyboard focus)",
  "env": [
    "Node v22.23.4",
    "No runtime dependencies: tools/rules.js runs inside any page",
    "puppeteer-core 24 from package-lock.json",
    "Google Chrome headless"
  ],
  "trigger": "static",
  "passed": 32,
  "total": 32,
  "commands": [
    "(cd ../original && sh -c npm ci --silent --no-audit --no-fund && node test/ui.test.mjs)",
    "(cd . && cp ../original/shots/before-after.png screenshot.png)"
  ],
  "checks": [
    {
      "criterion": "trigger",
      "name": "SKILL.md description says when to use it",
      "pass": true,
      "detail": "Make a game's menus and HUD stop looking AI-generated - no purple-blue gradients, glass panels, neon glows, emoji icons,"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"My game's main menu looks AI-generated, make it look like it belongs to the game\"",
      "pass": true,
      "detail": "rank 1/122, overlap 4"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"Review the HUD and pause menu an agent wrote and remove the generic gradient and glass look\"",
      "pass": true,
      "detail": "rank 1/122, overlap 10"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"Our game UI looks like a SaaS dashboard with emoji everywhere, fix it\"",
      "pass": true,
      "detail": "rank 1/122, overlap 4"
    },
    {
      "criterion": "trigger",
      "name": "does not trigger on: \"Rig my character in Blender\"",
      "pass": true,
      "detail": "rank 34/122, overlap 0"
    },
    {
      "criterion": "trigger",
      "name": "does not trigger on: \"Add online leaderboards to my game\"",
      "pass": true,
      "detail": "rank 1/122, overlap 0"
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: before: page loads cleanly",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: the lint runs all 12 rules",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: before: the generic menu fails at least 10 of 12 rules (11 failed: no-gradient-panels, no-glass, no-glow, no-emoji-icons, two-or-three-typefaces, no-cliche-copy, not-everything-centred, not-one-big-radius, one-primary-action, readable-contrast, visible-keyboard-focus)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: after: page loads cleanly",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: after: the rebuilt menu passes all 12 rules",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: after: same content as before (4 actions, 3 cargo lines, day, coins, hold)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: mutation: no-gradient-panels catches its tell (also readable-contrast)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: mutation: no-glass catches its tell (also readable-contrast)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: mutation: no-glow catches its tell (only this rule)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: mutation: no-emoji-icons catches its tell (only this rule)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: mutation: no-cliche-copy catches its tell (only this rule)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: mutation: one-primary-action catches its tell (only this rule)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: mutation: tabular-numbers catches its tell (only this rule)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: mutation: readable-contrast catches its tell (only this rule)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: mutation: visible-keyboard-focus catches its tell (only this rule)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: mutation: not-one-big-radius catches its tell (only this rule)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: mutation: not-everything-centred catches its tell (only this rule)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: mutation: two-or-three-typefaces catches its tell (only this rule)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: shots/before.png, after.png and before-after.png written",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "12-rule lint on the before/after pause menu and 12 single-tell mutations: exits 0 with no script errors",
      "pass": true,
      "detail": "exit 0"
    },
    {
      "criterion": "output",
      "name": "screenshot screenshot.png rendered",
      "pass": true
    },
    {
      "criterion": "output",
      "name": "self-check list has at least 3 items",
      "pass": true,
      "detail": "6 items"
    },
    {
      "criterion": "single",
      "name": "one job per skill (reviewed)",
      "pass": true,
      "detail": "One job: remove the generic AI look from game menus and HUDs and check it with a style lint. Layout systems, engine-specific UI nodes and accessibility audits beyond these 12 rules are left to UI and engine skills."
    },
    {
      "criterion": "bilingual",
      "name": "English SKILL.md",
      "pass": true
    },
    {
      "criterion": "bilingual",
      "name": "Chinese SKILL.zh.md shipped next to SKILL.md",
      "pass": true,
      "detail": "1676 chars"
    },
    {
      "criterion": "bilingual",
      "name": "Chinese guide written",
      "pass": true,
      "detail": "886 chars"
    }
  ]
}
