{
  "slug": "roblox-simulator-economy",
  "skill": "roblox-simulator-economy",
  "upstream": "gamedev-skills/awesome-gamedev-agent-skills@19d93f97c9c1ea0f8b306e77aa81e0d3e352d3e9",
  "upstreamSha": "19d93f97c9c1ea0f8b306e77aa81e0d3e352d3e9",
  "date": "2026-11-03",
  "engine": "Lune 0.11.0 (Luau, outside Roblox Studio)",
  "env": [
    "Node v22.23.4",
    "Lune 0.11.0 linux x86_64 (the version the skill names)",
    "Python 3 test driver, stdlib only; Pillow for the result card",
    "Roblox Studio not run: the Studio server scripts in references/ are untested here",
    "the screenshot is a card of the check output, not a game frame"
  ],
  "trigger": "static",
  "passed": 26,
  "total": 26,
  "commands": [
    "(cd examples && sh -c LUNE=${LUNE:-/home/box/tools/lune/lune} python3 tests/run_tests.py)",
    "(cd examples && sh -c LUNE=${LUNE:-/home/box/tools/lune/lune} python3 tests/card.py 'roblox-simulator-economy checks (Lune 0.11.0)' ../screenshot.png -- python3 tests/run_tests.py)"
  ],
  "checks": [
    {
      "criterion": "trigger",
      "name": "SKILL.md description says when to use it",
      "pass": true,
      "detail": "Design, balance, and implement the economy of a Roblox simulator, tycoon, clicker, or idle game in Luau: upgrade cost cu"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"Balance the rebirth and upgrade costs of my Roblox simulator game\"",
      "pass": true,
      "detail": "rank 1/123, overlap 6"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"My Roblox tycoon shows 1000K and players get currency they did not earn\"",
      "pass": true,
      "detail": "rank 1/123, overlap 8"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"How much should offline earnings pay in my idle game in Luau?\"",
      "pass": true,
      "detail": "rank 1/123, overlap 6"
    },
    {
      "criterion": "trigger",
      "name": "does not trigger on: \"Make a pixel art sprite for a coin\"",
      "pass": true,
      "detail": "rank 28/123, overlap 0"
    },
    {
      "criterion": "trigger",
      "name": "does not trigger on: \"Export my Godot project to Android\"",
      "pass": true,
      "detail": "rank 35/123, overlap 0"
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: the skill's own economy_math tests pass (13 tests)",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: balance.luau --help exits 0 and lists the fields",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: default numbers are flagged by the skill's own target",
      "pass": true,
      "detail": "rebirth waits grow x2.0+ (rebirth 8 takes months)"
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: balance.luau exits 1 on a missing file, invalid JSON and an out-of-range field",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: Lantern Orchard tuned",
      "pass": true,
      "detail": "every rebirth takes x1.0-x1.5 the last (x1.07, x1.20, x1.28, x1.33, x1.37, x1.40, x1.42)"
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: Lantern Orchard",
      "pass": true,
      "detail": "the first 10 upgrades take 3-10 s each"
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: Lantern Orchard",
      "pass": true,
      "detail": "offline is capped at 10 h at 35% efficiency"
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: 2000 buys with hostile input",
      "pass": true,
      "detail": "wallet never negative, never changes on a refused buy"
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: trySpend refuses negative, NaN and infinite costs and leaves the wallet alone",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: buy max on 500 random wallets",
      "pass": true,
      "detail": "never overspends, never leaves an affordable level"
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: tampered levels repair",
      "pass": true,
      "detail": "negative, NaN, inf, strings to 0; fractions floored; capped at max"
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: crate odds add up to 100% and an even sweep of rolls lands exactly 70/25/5",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: formatNumber",
      "pass": true,
      "detail": "999, 1.5K, 999.9K, 1.0M (never 1000.0K), 2.5Qa"
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: offline earns 35% of online, capped at 10 h, and a clock set backwards pays nothing",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "skill tests, pacing calculator, Lantern Orchard config and economy_math property checks: 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: the numbers and code of a simulator/tycoon economy. Saving, networking and UI are handed to roblox-datastores, roblox-networking and roblox-ui."
    },
    {
      "criterion": "bilingual",
      "name": "English SKILL.md from upstream",
      "pass": true
    },
    {
      "criterion": "bilingual",
      "name": "Chinese guide written",
      "pass": true,
      "detail": "1096 chars"
    }
  ]
}
