FA-86236 / Game economy crafting balance / Open access
Profession skill-up colors: Skill passes the hard cap · case 01
Crafting at 300 raises skill to 301.
ROOT CAUSE
The cap check is strict.
VERIFIED REPAIR
Restore `if skill >= 300:` at the skill cap step.
Unsuccessful approach: Adding ups double-counts gains already folded into skill.
Case contract
recipe_levels = [learn, yellow, green, gray]. Skill below learn cannot craft (error "too low"). Per roll (0..99), while skill < 300: chance 100 below yellow (orange), 75 below green, 25 below gray, else 0; the skill goes up when roll < chance and the color is re-evaluated each craft.
Why this case matters
Game economies leak or destroy currency when one crafting or pricing rule is off by one boundary, rounding stage or state update; the defect is observable in exact integer outcomes.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(skill, recipe_levels, rolls):
learn, yellow, green, gray = recipe_levels
if skill < learn:
return {'skill': skill, 'ups': 0, 'error': 'too low'}
ups = 0
for r in rolls:
if skill > 300:
break
if skill < yellow:
chance = 100
elif skill < green:
chance = 75
elif skill < gray:
chance = 25
else:
chance = 0
if r < chance:
skill += 1
ups += 1
return {'skill': skill, 'ups': ups}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('fault site skill cap #1',
[299, [277, 291, 302, 311], [74, 74, 74, 75, 14, 25, 25, 99]],
{'skill': 300, 'ups': 1}),
('regression skill cap #1',
[291, [288, 328, 330, 340], [50, 50, 0, 0, 0, 50, 0, 1, 50, 0, 50]],
{'skill': 300, 'ups': 9}),
('regression skill cap #2',
[291, [289, 309, 330, 340], [0, 0, 1, 1, 1, 50, 0, 1, 1, 1]],
{'skill': 300, 'ups': 9}),
('partial repair boundary #1',
[278, [271, 282, 330, 340], [0, 0, 50, 50, 50, 1, 0, 50, 1, 1, 50, 1]],
{'skill': 290, 'ups': 12}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [23, [8, 14, 23, 38], [75]], {'skill': 23, 'ups': 0})],
[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('regression skill cap #1',
[291, [288, 328, 330, 340], [50, 50, 0, 0, 0, 50, 0, 1, 50, 0, 50]],
{'skill': 300, 'ups': 9}),
('regression skill cap #2',
[291, [289, 309, 330, 340], [0, 0, 1, 1, 1, 50, 0, 1, 1, 1]],
{'skill': 300, 'ups': 9}),
('partial repair boundary #1',
[278, [271, 282, 330, 340], [0, 0, 50, 50, 50, 1, 0, 50, 1, 1, 50, 1]],
{'skill': 290, 'ups': 12}),
('regression skill cap #3',
[296, [288, 306, 330, 340], [50, 1, 50, 1, 0, 50, 1]],
{'skill': 300, 'ups': 4}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [23, [8, 14, 23, 38], [75]], {'skill': 23, 'ups': 0})],
[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('regression skill cap #1',
[296, [288, 306, 330, 340], [50, 1, 50, 1, 0, 50, 1]],
{'skill': 300, 'ups': 4}),
('regression skill cap #2',
[293, [292, 315, 330, 340], [0, 50, 1, 50, 50, 50, 1, 0, 50]],
{'skill': 300, 'ups': 7}),
('partial repair boundary #1',
[283, [277, 302, 330, 340], [1, 1, 1, 50, 0, 0, 0, 50, 1, 1]],
{'skill': 293, 'ups': 10}),
('regression skill cap #3',
[295, [291, 301, 330, 340], [50, 50, 1, 1, 1, 0, 50, 1, 0, 1, 0]],
{'skill': 300, 'ups': 5}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [23, [8, 14, 23, 38], [75]], {'skill': 23, 'ups': 0})],
[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('regression skill cap #1',
[295, [291, 301, 330, 340], [50, 50, 1, 1, 1, 0, 50, 1, 0, 1, 0]],
{'skill': 300, 'ups': 5}),
('fault site skill cap #1',
[299, [292, 308, 330, 340], [50, 1, 1, 0, 1, 0, 1, 1]],
{'skill': 300, 'ups': 1}),
('partial repair boundary #1',
[287, [281, 296, 330, 340], [1, 1, 50, 0, 0, 0, 50, 1, 1, 50, 0]],
{'skill': 298, 'ups': 11}),
('partial repair boundary #2',
[293, [288, 298, 330, 340], [50, 0, 50, 0, 0, 50]],
{'skill': 299, 'ups': 6}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [84, [64, 70, 80, 85], [0, 99, 75, 25, 25, 99, 75, 0]], {'skill': 85, 'ups': 1})],
[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('regression skill cap #1',
[292, [286, 325, 330, 340], [50, 1, 50, 0, 50, 0, 0, 50, 1]],
{'skill': 300, 'ups': 8}),
('fault site skill cap #1',
[299, [270, 285, 297, 302], [24, 24, 74, 24, 47, 0, 99]],
{'skill': 300, 'ups': 1}),
('partial repair boundary #1',
[293, [288, 298, 330, 340], [50, 0, 50, 0, 0, 50]],
{'skill': 299, 'ups': 6}),
('partial repair boundary #2',
[286, [281, 305, 330, 340], [50, 1, 1, 0, 50, 0, 50, 0, 0]],
{'skill': 295, 'ups': 9}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [289, [288, 314, 330, 340], [50, 0, 50, 0, 0]], {'skill': 294, 'ups': 5})]]
for label, args, expected in cases[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| at cap #1 | {'skill': 301, 'ups': 2} | {'skill': 300, 'ups': 1} | Failed |
| fault site skill cap #1 | {'skill': 301, 'ups': 2} | {'skill': 300, 'ups': 1} | Failed |
| regression skill cap #1 | {'skill': 301, 'ups': 10} | {'skill': 300, 'ups': 9} | Failed |
| regression skill cap #2 | {'skill': 301, 'ups': 10} | {'skill': 300, 'ups': 9} | Failed |
| partial repair boundary #1 | {'skill': 290, 'ups': 12} | {'skill': 290, 'ups': 12} | Passed |
| exactly at learn level #1 | {'skill': 51, 'ups': 1} | {'skill': 51, 'ups': 1} | Passed |
| gray recipe roll zero #1 | {'skill': 90, 'ups': 0} | {'skill': 90, 'ups': 0} | Passed |
| control #1 | {'skill': 23, 'ups': 0} | {'skill': 23, 'ups': 0} | Passed |
SHA-256 / f97f057dfd83687c78b5687006316833cb6c656cdcd78caa1f7d2ea9c95db6e0
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(skill, recipe_levels, rolls):
learn, yellow, green, gray = recipe_levels
if skill < learn:
return {'skill': skill, 'ups': 0, 'error': 'too low'}
ups = 0
for r in rolls:
if skill + ups >= 300:
break
if skill < yellow:
chance = 100
elif skill < green:
chance = 75
elif skill < gray:
chance = 25
else:
chance = 0
if r < chance:
skill += 1
ups += 1
return {'skill': skill, 'ups': ups}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('fault site skill cap #1',
[299, [277, 291, 302, 311], [74, 74, 74, 75, 14, 25, 25, 99]],
{'skill': 300, 'ups': 1}),
('regression skill cap #1',
[291, [288, 328, 330, 340], [50, 50, 0, 0, 0, 50, 0, 1, 50, 0, 50]],
{'skill': 300, 'ups': 9}),
('regression skill cap #2',
[291, [289, 309, 330, 340], [0, 0, 1, 1, 1, 50, 0, 1, 1, 1]],
{'skill': 300, 'ups': 9}),
('partial repair boundary #1',
[278, [271, 282, 330, 340], [0, 0, 50, 50, 50, 1, 0, 50, 1, 1, 50, 1]],
{'skill': 290, 'ups': 12}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [23, [8, 14, 23, 38], [75]], {'skill': 23, 'ups': 0})],
[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('regression skill cap #1',
[291, [288, 328, 330, 340], [50, 50, 0, 0, 0, 50, 0, 1, 50, 0, 50]],
{'skill': 300, 'ups': 9}),
('regression skill cap #2',
[291, [289, 309, 330, 340], [0, 0, 1, 1, 1, 50, 0, 1, 1, 1]],
{'skill': 300, 'ups': 9}),
('partial repair boundary #1',
[278, [271, 282, 330, 340], [0, 0, 50, 50, 50, 1, 0, 50, 1, 1, 50, 1]],
{'skill': 290, 'ups': 12}),
('regression skill cap #3',
[296, [288, 306, 330, 340], [50, 1, 50, 1, 0, 50, 1]],
{'skill': 300, 'ups': 4}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [23, [8, 14, 23, 38], [75]], {'skill': 23, 'ups': 0})],
[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('regression skill cap #1',
[296, [288, 306, 330, 340], [50, 1, 50, 1, 0, 50, 1]],
{'skill': 300, 'ups': 4}),
('regression skill cap #2',
[293, [292, 315, 330, 340], [0, 50, 1, 50, 50, 50, 1, 0, 50]],
{'skill': 300, 'ups': 7}),
('partial repair boundary #1',
[283, [277, 302, 330, 340], [1, 1, 1, 50, 0, 0, 0, 50, 1, 1]],
{'skill': 293, 'ups': 10}),
('regression skill cap #3',
[295, [291, 301, 330, 340], [50, 50, 1, 1, 1, 0, 50, 1, 0, 1, 0]],
{'skill': 300, 'ups': 5}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [23, [8, 14, 23, 38], [75]], {'skill': 23, 'ups': 0})],
[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('regression skill cap #1',
[295, [291, 301, 330, 340], [50, 50, 1, 1, 1, 0, 50, 1, 0, 1, 0]],
{'skill': 300, 'ups': 5}),
('fault site skill cap #1',
[299, [292, 308, 330, 340], [50, 1, 1, 0, 1, 0, 1, 1]],
{'skill': 300, 'ups': 1}),
('partial repair boundary #1',
[287, [281, 296, 330, 340], [1, 1, 50, 0, 0, 0, 50, 1, 1, 50, 0]],
{'skill': 298, 'ups': 11}),
('partial repair boundary #2',
[293, [288, 298, 330, 340], [50, 0, 50, 0, 0, 50]],
{'skill': 299, 'ups': 6}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [84, [64, 70, 80, 85], [0, 99, 75, 25, 25, 99, 75, 0]], {'skill': 85, 'ups': 1})],
[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('regression skill cap #1',
[292, [286, 325, 330, 340], [50, 1, 50, 0, 50, 0, 0, 50, 1]],
{'skill': 300, 'ups': 8}),
('fault site skill cap #1',
[299, [270, 285, 297, 302], [24, 24, 74, 24, 47, 0, 99]],
{'skill': 300, 'ups': 1}),
('partial repair boundary #1',
[293, [288, 298, 330, 340], [50, 0, 50, 0, 0, 50]],
{'skill': 299, 'ups': 6}),
('partial repair boundary #2',
[286, [281, 305, 330, 340], [50, 1, 1, 0, 50, 0, 50, 0, 0]],
{'skill': 295, 'ups': 9}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [289, [288, 314, 330, 340], [50, 0, 50, 0, 0]], {'skill': 294, 'ups': 5})]]
for label, args, expected in cases[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| at cap #1 | {'skill': 300, 'ups': 1} | {'skill': 300, 'ups': 1} | Passed |
| fault site skill cap #1 | {'skill': 300, 'ups': 1} | {'skill': 300, 'ups': 1} | Passed |
| regression skill cap #1 | {'skill': 296, 'ups': 5} | {'skill': 300, 'ups': 9} | Failed |
| regression skill cap #2 | {'skill': 296, 'ups': 5} | {'skill': 300, 'ups': 9} | Failed |
| partial repair boundary #1 | {'skill': 289, 'ups': 11} | {'skill': 290, 'ups': 12} | Failed |
| exactly at learn level #1 | {'skill': 51, 'ups': 1} | {'skill': 51, 'ups': 1} | Passed |
| gray recipe roll zero #1 | {'skill': 90, 'ups': 0} | {'skill': 90, 'ups': 0} | Passed |
| control #1 | {'skill': 23, 'ups': 0} | {'skill': 23, 'ups': 0} | Passed |
SHA-256 / ada66968ca0b5087e5c5ecf6d3549b33ba0dfd7e83b79b11112ab04a8cfdb791
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(skill, recipe_levels, rolls):
learn, yellow, green, gray = recipe_levels
if skill < learn:
return {'skill': skill, 'ups': 0, 'error': 'too low'}
ups = 0
for r in rolls:
if skill >= 300:
break
if skill < yellow:
chance = 100
elif skill < green:
chance = 75
elif skill < gray:
chance = 25
else:
chance = 0
if r < chance:
skill += 1
ups += 1
return {'skill': skill, 'ups': ups}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('fault site skill cap #1',
[299, [277, 291, 302, 311], [74, 74, 74, 75, 14, 25, 25, 99]],
{'skill': 300, 'ups': 1}),
('regression skill cap #1',
[291, [288, 328, 330, 340], [50, 50, 0, 0, 0, 50, 0, 1, 50, 0, 50]],
{'skill': 300, 'ups': 9}),
('regression skill cap #2',
[291, [289, 309, 330, 340], [0, 0, 1, 1, 1, 50, 0, 1, 1, 1]],
{'skill': 300, 'ups': 9}),
('partial repair boundary #1',
[278, [271, 282, 330, 340], [0, 0, 50, 50, 50, 1, 0, 50, 1, 1, 50, 1]],
{'skill': 290, 'ups': 12}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [23, [8, 14, 23, 38], [75]], {'skill': 23, 'ups': 0})],
[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('regression skill cap #1',
[291, [288, 328, 330, 340], [50, 50, 0, 0, 0, 50, 0, 1, 50, 0, 50]],
{'skill': 300, 'ups': 9}),
('regression skill cap #2',
[291, [289, 309, 330, 340], [0, 0, 1, 1, 1, 50, 0, 1, 1, 1]],
{'skill': 300, 'ups': 9}),
('partial repair boundary #1',
[278, [271, 282, 330, 340], [0, 0, 50, 50, 50, 1, 0, 50, 1, 1, 50, 1]],
{'skill': 290, 'ups': 12}),
('regression skill cap #3',
[296, [288, 306, 330, 340], [50, 1, 50, 1, 0, 50, 1]],
{'skill': 300, 'ups': 4}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [23, [8, 14, 23, 38], [75]], {'skill': 23, 'ups': 0})],
[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('regression skill cap #1',
[296, [288, 306, 330, 340], [50, 1, 50, 1, 0, 50, 1]],
{'skill': 300, 'ups': 4}),
('regression skill cap #2',
[293, [292, 315, 330, 340], [0, 50, 1, 50, 50, 50, 1, 0, 50]],
{'skill': 300, 'ups': 7}),
('partial repair boundary #1',
[283, [277, 302, 330, 340], [1, 1, 1, 50, 0, 0, 0, 50, 1, 1]],
{'skill': 293, 'ups': 10}),
('regression skill cap #3',
[295, [291, 301, 330, 340], [50, 50, 1, 1, 1, 0, 50, 1, 0, 1, 0]],
{'skill': 300, 'ups': 5}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [23, [8, 14, 23, 38], [75]], {'skill': 23, 'ups': 0})],
[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('regression skill cap #1',
[295, [291, 301, 330, 340], [50, 50, 1, 1, 1, 0, 50, 1, 0, 1, 0]],
{'skill': 300, 'ups': 5}),
('fault site skill cap #1',
[299, [292, 308, 330, 340], [50, 1, 1, 0, 1, 0, 1, 1]],
{'skill': 300, 'ups': 1}),
('partial repair boundary #1',
[287, [281, 296, 330, 340], [1, 1, 50, 0, 0, 0, 50, 1, 1, 50, 0]],
{'skill': 298, 'ups': 11}),
('partial repair boundary #2',
[293, [288, 298, 330, 340], [50, 0, 50, 0, 0, 50]],
{'skill': 299, 'ups': 6}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [84, [64, 70, 80, 85], [0, 99, 75, 25, 25, 99, 75, 0]], {'skill': 85, 'ups': 1})],
[('at cap #1', [299, [200, 250, 275, 320], [0, 0]], {'skill': 300, 'ups': 1}),
('regression skill cap #1',
[292, [286, 325, 330, 340], [50, 1, 50, 0, 50, 0, 0, 50, 1]],
{'skill': 300, 'ups': 8}),
('fault site skill cap #1',
[299, [270, 285, 297, 302], [24, 24, 74, 24, 47, 0, 99]],
{'skill': 300, 'ups': 1}),
('partial repair boundary #1',
[293, [288, 298, 330, 340], [50, 0, 50, 0, 0, 50]],
{'skill': 299, 'ups': 6}),
('partial repair boundary #2',
[286, [281, 305, 330, 340], [50, 1, 1, 0, 50, 0, 50, 0, 0]],
{'skill': 295, 'ups': 9}),
('exactly at learn level #1', [50, [50, 60, 70, 80], [0]], {'skill': 51, 'ups': 1}),
('gray recipe roll zero #1', [90, [50, 60, 70, 80], [0, 0]], {'skill': 90, 'ups': 0}),
('control #1', [289, [288, 314, 330, 340], [50, 0, 50, 0, 0]], {'skill': 294, 'ups': 5})]]
for label, args, expected in cases[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| at cap #1 | {'skill': 300, 'ups': 1} | {'skill': 300, 'ups': 1} | Passed |
| fault site skill cap #1 | {'skill': 300, 'ups': 1} | {'skill': 300, 'ups': 1} | Passed |
| regression skill cap #1 | {'skill': 300, 'ups': 9} | {'skill': 300, 'ups': 9} | Passed |
| regression skill cap #2 | {'skill': 300, 'ups': 9} | {'skill': 300, 'ups': 9} | Passed |
| partial repair boundary #1 | {'skill': 290, 'ups': 12} | {'skill': 290, 'ups': 12} | Passed |
| exactly at learn level #1 | {'skill': 51, 'ups': 1} | {'skill': 51, 'ups': 1} | Passed |
| gray recipe roll zero #1 | {'skill': 90, 'ups': 0} | {'skill': 90, 'ups': 0} | Passed |
| control #1 | {'skill': 23, 'ups': 0} | {'skill': 23, 'ups': 0} | Passed |
SHA-256 / 8a7d36d2a8811cc6ba05c68d69e0135c391bf213fb96cce305a8841736ec8409
Verification & scope
Deterministic toy contract stipulated for this model; integer or exact arithmetic only, not a reproduction of any specific game engine. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:50:47.635223+00:00.
Case digest / 0fb7a414c978a6f838bb1d4a7fdf06e30b042b880aa04e1654d66415249806b9