{
  "slug": "one-sentence-to-game",
  "skill": "one-sentence-to-game",
  "upstream": "GameSkill original (onsite/<slug>/original)",
  "sourceHash": "f37ff6419a29d7e8837f0288d3ba3e61069da6992a6ec7dc7401761888504d0a",
  "date": "2026-10-28",
  "engine": "Node 20 + Chrome 156 headless (any model writes the game)",
  "env": [
    "Node v20.19.2",
    "tools/check-core.mjs: node:zlib only",
    "puppeteer-core 24 from package-lock.json",
    "Google Chrome 156 headless"
  ],
  "trigger": "static",
  "passed": 26,
  "total": 26,
  "commands": [
    "(cd ../original && sh -c npm ci --silent --no-audit --no-fund && node --test --test-reporter=tap test/logic.test.mjs)",
    "(cd ../original && node test/browser.test.mjs)",
    "(cd . && cp ../original/shots/check-good.png screenshot.png)"
  ],
  "checks": [
    {
      "criterion": "trigger",
      "name": "SKILL.md description says when to use it",
      "pass": true,
      "detail": "Turn a one-sentence game idea into a small, finished browser game with any coding model, and keep improving it without b"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"Make me a browser game about a moth collecting lanterns from one sentence\"",
      "pass": true,
      "detail": "rank 1/118, overlap 4"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"I want to one-shot a game with GPT, what prompt should I use and how do I check it works\"",
      "pass": true,
      "detail": "rank 1/118, overlap 6"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"My AI-generated game breaks more every time I ask for a fix, how should I iterate\"",
      "pass": true,
      "detail": "rank 2/118, overlap 2"
    },
    {
      "criterion": "trigger",
      "name": "does not trigger on: \"Tune recoil for my FPS\"",
      "pass": true,
      "detail": "rank 5/118, overlap 0"
    },
    {
      "criterion": "trigger",
      "name": "does not trigger on: \"Model a low poly building in Blender\"",
      "pass": true,
      "detail": "rank 6/118, overlap 1"
    },
    {
      "criterion": "runs",
      "name": "checker core tests (PNG decode with all filters, blank detection, frame diff, key script, verdict): decodePng: RGB and RGBA with all five row filters",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "checker core tests (PNG decode with all filters, blank detection, frame diff, key script, verdict): pixelStats: a solid or nearly solid frame is blank, a game frame is not",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "checker core tests (PNG decode with all filters, blank detection, frame diff, key script, verdict): diffRatio: identical 0, fully different 1, small change small",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "checker core tests (PNG decode with all filters, blank detection, frame diff, key script, verdict): parseKeys and parseArgs",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "checker core tests (PNG decode with all filters, blank detection, frame diff, key script, verdict): verdict: errors, blank frames and dead input fail; warnings never fail",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "checker core tests (PNG decode with all filters, blank detection, frame diff, key script, verdict): a missing favicon is a warning, not a failure",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "checker core tests (PNG decode with all filters, blank detection, frame diff, key script, verdict): exits 0 with no script errors",
      "pass": true,
      "detail": "exit 0"
    },
    {
      "criterion": "runs",
      "name": "check-game.mjs against good, broken and frozen fixtures in headless Chrome: good fixture: PASS (exit 0) with four screenshots and a JSON report (input changed 5.3% vs idle 1.9%)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "check-game.mjs against good, broken and frozen fixtures in headless Chrome: good fixture on a phone viewport: PASS",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "check-game.mjs against good, broken and frozen fixtures in headless Chrome: broken fixture: FAIL on the missing asset and the script error (6 console/network error(s): http 404: http://localhost:43229/assets/ship.png)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "check-game.mjs against good, broken and frozen fixtures in headless Chrome: frozen fixture: FAIL because nothing reacts to input (and no false error for the favicon)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "check-game.mjs against good, broken and frozen fixtures in headless Chrome: --no-input-check lets a static page pass if it has no errors",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "check-game.mjs against good, broken and frozen fixtures in headless Chrome: an unreachable URL exits 2 (could not run) instead of pretending",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "check-game.mjs against good, broken and frozen fixtures in headless Chrome: 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: getting from a one-sentence idea to a small working browser game with any model, and iterating safely (prompt templates, one change per round, creation log, reusable spec) with a headless checker that says PASS or FAIL."
    },
    {
      "criterion": "bilingual",
      "name": "English SKILL.md",
      "pass": true
    },
    {
      "criterion": "bilingual",
      "name": "Chinese SKILL.zh.md shipped next to SKILL.md",
      "pass": true,
      "detail": "2787 chars"
    },
    {
      "criterion": "bilingual",
      "name": "Chinese guide written",
      "pass": true,
      "detail": "1067 chars"
    }
  ]
}
