{"abstract":"Players farm five extra half-reward completions.","category":"Game economy crafting balance","checks":8,"contract":"Completion k (0-based across the day, starting at done_today) pays tier 100% for k < 5, 50% for 5 <= k < 10, 0 after. Gap = player_level - quest_level: >= 5 pays 20%, >= 3 pays 60%, otherwise 100% (higher level quests are never penalized). Each reward = floor(base*tier*gap/10000). Returns the list of the next count rewards.","evaluation_group":"w2-game-economy-crafting-balance-quest-diminish","failed_approach":"An inclusive bound still pays one extra half reward.","family":"w2-game-economy-crafting-balance-quest-diminish-half-tier-boundary","id":"FA-86146","implementations":{"attempt":{"sha256":"6350ad7667fc7eb05114c2f141f262fbe5bfed40190798dc8eb2d7b66ced54aa","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(done_today, count, base, player_level, quest_level):\n    if player_level - quest_level >= 5:\n        gap = 20\n    elif player_level - quest_level >= 3:\n        gap = 60\n    else:\n        gap = 100\n    out = []\n    for k in range(done_today, done_today + count):\n        if k < 5:\n            tier = 100\n        elif k <= 10:\n            tier = 50\n        else:\n            tier = 0\n        out.append(base * tier * gap // 10000)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('regression half tier boundary #1', [6, 6, 215, 11, 12], [107, 107, 107, 107, 0, 0]),\n  ('regression half tier boundary #2', [9, 4, 3, 24, 23], [1, 0, 0, 0]),\n  ('regression half tier boundary #3', [8, 6, 99, 11, 18], [49, 49, 0, 0, 0, 0]),\n  ('regression half tier boundary #4', [8, 4, 99, 8, 6], [49, 49, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [3, 4, 101, 31, 28], [60, 60, 30, 30])],\n [('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('regression half tier boundary #1', [9, 4, 3, 24, 23], [1, 0, 0, 0]),\n  ('regression half tier boundary #2', [8, 6, 99, 11, 18], [49, 49, 0, 0, 0, 0]),\n  ('regression half tier boundary #3', [8, 4, 99, 8, 6], [49, 49, 0, 0]),\n  ('regression half tier boundary #4', [8, 4, 99, 29, 33], [49, 49, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [3, 4, 101, 31, 28], [60, 60, 30, 30])],\n [('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('fault site half tier boundary #1', [12, 2, 107, 5, -1], [0, 0]),\n  ('regression half tier boundary #1', [8, 4, 99, 8, 6], [49, 49, 0, 0]),\n  ('regression half tier boundary #2', [8, 4, 99, 29, 33], [49, 49, 0, 0]),\n  ('regression half tier boundary #3', [9, 5, 101, 15, 10], [10, 0, 0, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [3, 4, 101, 31, 28], [60, 60, 30, 30])],\n [('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('regression half tier boundary #1', [8, 4, 99, 29, 33], [49, 49, 0, 0]),\n  ('regression half tier boundary #2', [9, 5, 101, 15, 10], [10, 0, 0, 0, 0]),\n  ('regression half tier boundary #3', [10, 2, 7, 12, 14], [0, 0]),\n  ('regression half tier boundary #4', [10, 5, 467, 9, 16], [0, 0, 0, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [8, 2, 1, 33, 25], [0, 0])],\n [('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('regression half tier boundary #1', [10, 2, 7, 12, 14], [0, 0]),\n  ('fault site half tier boundary #1', [12, 5, 7, 23, 22], [0, 0, 0, 0, 0]),\n  ('regression half tier boundary #2', [10, 5, 467, 9, 16], [0, 0, 0, 0, 0]),\n  ('regression half tier boundary #3', [9, 4, 132, 55, 59], [66, 0, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [3, 6, 99, 59, 64], [99, 99, 49, 49, 49, 49])]]\nfor label, args, expected in cases[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"bb0a73bf76211d1710c2bd65087fb28f0ab892c80cbcfc09f345e63e4e012098","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(done_today, count, base, player_level, quest_level):\n    if player_level - quest_level >= 5:\n        gap = 20\n    elif player_level - quest_level >= 3:\n        gap = 60\n    else:\n        gap = 100\n    out = []\n    for k in range(done_today, done_today + count):\n        if k < 5:\n            tier = 100\n        elif k < 15:\n            tier = 50\n        else:\n            tier = 0\n        out.append(base * tier * gap // 10000)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('regression half tier boundary #1', [6, 6, 215, 11, 12], [107, 107, 107, 107, 0, 0]),\n  ('regression half tier boundary #2', [9, 4, 3, 24, 23], [1, 0, 0, 0]),\n  ('regression half tier boundary #3', [8, 6, 99, 11, 18], [49, 49, 0, 0, 0, 0]),\n  ('regression half tier boundary #4', [8, 4, 99, 8, 6], [49, 49, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [3, 4, 101, 31, 28], [60, 60, 30, 30])],\n [('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('regression half tier boundary #1', [9, 4, 3, 24, 23], [1, 0, 0, 0]),\n  ('regression half tier boundary #2', [8, 6, 99, 11, 18], [49, 49, 0, 0, 0, 0]),\n  ('regression half tier boundary #3', [8, 4, 99, 8, 6], [49, 49, 0, 0]),\n  ('regression half tier boundary #4', [8, 4, 99, 29, 33], [49, 49, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [3, 4, 101, 31, 28], [60, 60, 30, 30])],\n [('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('fault site half tier boundary #1', [12, 2, 107, 5, -1], [0, 0]),\n  ('regression half tier boundary #1', [8, 4, 99, 8, 6], [49, 49, 0, 0]),\n  ('regression half tier boundary #2', [8, 4, 99, 29, 33], [49, 49, 0, 0]),\n  ('regression half tier boundary #3', [9, 5, 101, 15, 10], [10, 0, 0, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [3, 4, 101, 31, 28], [60, 60, 30, 30])],\n [('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('regression half tier boundary #1', [8, 4, 99, 29, 33], [49, 49, 0, 0]),\n  ('regression half tier boundary #2', [9, 5, 101, 15, 10], [10, 0, 0, 0, 0]),\n  ('regression half tier boundary #3', [10, 2, 7, 12, 14], [0, 0]),\n  ('regression half tier boundary #4', [10, 5, 467, 9, 16], [0, 0, 0, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [8, 2, 1, 33, 25], [0, 0])],\n [('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('regression half tier boundary #1', [10, 2, 7, 12, 14], [0, 0]),\n  ('fault site half tier boundary #1', [12, 5, 7, 23, 22], [0, 0, 0, 0, 0]),\n  ('regression half tier boundary #2', [10, 5, 467, 9, 16], [0, 0, 0, 0, 0]),\n  ('regression half tier boundary #3', [9, 4, 132, 55, 59], [66, 0, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [3, 6, 99, 59, 64], [99, 99, 49, 49, 49, 49])]]\nfor label, args, expected in cases[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"2e4008557bb422847aa263367fc49d9902070a9d0ffcccbe41c49d3cc66964e4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(done_today, count, base, player_level, quest_level):\n    if player_level - quest_level >= 5:\n        gap = 20\n    elif player_level - quest_level >= 3:\n        gap = 60\n    else:\n        gap = 100\n    out = []\n    for k in range(done_today, done_today + count):\n        if k < 5:\n            tier = 100\n        elif k < 10:\n            tier = 50\n        else:\n            tier = 0\n        out.append(base * tier * gap // 10000)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('regression half tier boundary #1', [6, 6, 215, 11, 12], [107, 107, 107, 107, 0, 0]),\n  ('regression half tier boundary #2', [9, 4, 3, 24, 23], [1, 0, 0, 0]),\n  ('regression half tier boundary #3', [8, 6, 99, 11, 18], [49, 49, 0, 0, 0, 0]),\n  ('regression half tier boundary #4', [8, 4, 99, 8, 6], [49, 49, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [3, 4, 101, 31, 28], [60, 60, 30, 30])],\n [('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('regression half tier boundary #1', [9, 4, 3, 24, 23], [1, 0, 0, 0]),\n  ('regression half tier boundary #2', [8, 6, 99, 11, 18], [49, 49, 0, 0, 0, 0]),\n  ('regression half tier boundary #3', [8, 4, 99, 8, 6], [49, 49, 0, 0]),\n  ('regression half tier boundary #4', [8, 4, 99, 29, 33], [49, 49, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [3, 4, 101, 31, 28], [60, 60, 30, 30])],\n [('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('fault site half tier boundary #1', [12, 2, 107, 5, -1], [0, 0]),\n  ('regression half tier boundary #1', [8, 4, 99, 8, 6], [49, 49, 0, 0]),\n  ('regression half tier boundary #2', [8, 4, 99, 29, 33], [49, 49, 0, 0]),\n  ('regression half tier boundary #3', [9, 5, 101, 15, 10], [10, 0, 0, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [3, 4, 101, 31, 28], [60, 60, 30, 30])],\n [('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('regression half tier boundary #1', [8, 4, 99, 29, 33], [49, 49, 0, 0]),\n  ('regression half tier boundary #2', [9, 5, 101, 15, 10], [10, 0, 0, 0, 0]),\n  ('regression half tier boundary #3', [10, 2, 7, 12, 14], [0, 0]),\n  ('regression half tier boundary #4', [10, 5, 467, 9, 16], [0, 0, 0, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [8, 2, 1, 33, 25], [0, 0])],\n [('harder quest no penalty #1', [8, 3, 50, 10, 18], [25, 25, 0]),\n  ('regression half tier boundary #1', [10, 2, 7, 12, 14], [0, 0]),\n  ('fault site half tier boundary #1', [12, 5, 7, 23, 22], [0, 0, 0, 0, 0]),\n  ('regression half tier boundary #2', [10, 5, 467, 9, 16], [0, 0, 0, 0, 0]),\n  ('regression half tier boundary #3', [9, 4, 132, 55, 59], [66, 0, 0, 0]),\n  ('crossing into half tier #1', [3, 4, 101, 20, 20], [101, 101, 50, 50]),\n  ('gray quest #1', [0, 2, 99, 30, 25], [19, 19]),\n  ('control #1', [3, 6, 99, 59, 64], [99, 99, 49, 49, 49, 49])]]\nfor label, args, expected in cases[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-game-economy-crafting-balance-quest-diminish-half-tier-boundary","generated_at":"2026-09-29T14:50:46.950202+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"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.","repair":"Restore `elif k < 10:` at the half tier boundary step.","root_cause":"The half-reward window is measured as ten completions after the full tier.","sha256":"94831df9a5afd45788a6a9f3cd9d86aa893034550854e6c59e3f06135a7ef7bf","title":"Repeatable quest rewards: Half tier spans ten completions · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.667,"exit_code":1,"observations":[{"actual":[25,25,25],"check":"harder quest no penalty #1","expected":[25,25,0],"passed":false},{"actual":[107,107,107,107,107,0],"check":"regression half tier boundary #1","expected":[107,107,107,107,0,0],"passed":false},{"actual":[1,1,0,0],"check":"regression half tier boundary #2","expected":[1,0,0,0],"passed":false},{"actual":[49,49,49,0,0,0],"check":"regression half tier boundary #3","expected":[49,49,0,0,0,0],"passed":false},{"actual":[49,49,49,0],"check":"regression half tier boundary #4","expected":[49,49,0,0],"passed":false},{"actual":[101,101,50,50],"check":"crossing into half tier #1","expected":[101,101,50,50],"passed":true},{"actual":[19,19],"check":"gray quest #1","expected":[19,19],"passed":true},{"actual":[60,60,30,30],"check":"control #1","expected":[60,60,30,30],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"harder quest no penalty #1\", \"actual\": [25, 25, 25], \"expected\": [25, 25, 0], \"passed\": false}, {\"check\": \"regression half tier boundary #1\", \"actual\": [107, 107, 107, 107, 107, 0], \"expected\": [107, 107, 107, 107, 0, 0], \"passed\": false}, {\"check\": \"regression half tier boundary #2\", \"actual\": [1, 1, 0, 0], \"expected\": [1, 0, 0, 0], \"passed\": false}, {\"check\": \"regression half tier boundary #3\", \"actual\": [49, 49, 49, 0, 0, 0], \"expected\": [49, 49, 0, 0, 0, 0], \"passed\": false}, {\"check\": \"regression half tier boundary #4\", \"actual\": [49, 49, 49, 0], \"expected\": [49, 49, 0, 0], \"passed\": false}, {\"check\": \"crossing into half tier #1\", \"actual\": [101, 101, 50, 50], \"expected\": [101, 101, 50, 50], \"passed\": true}, {\"check\": \"gray quest #1\", \"actual\": [19, 19], \"expected\": [19, 19], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [60, 60, 30, 30], \"expected\": [60, 60, 30, 30], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":47.17,"exit_code":1,"observations":[{"actual":[25,25,25],"check":"harder quest no penalty #1","expected":[25,25,0],"passed":false},{"actual":[107,107,107,107,107,107],"check":"regression half tier boundary #1","expected":[107,107,107,107,0,0],"passed":false},{"actual":[1,1,1,1],"check":"regression half tier boundary #2","expected":[1,0,0,0],"passed":false},{"actual":[49,49,49,49,49,49],"check":"regression half tier boundary #3","expected":[49,49,0,0,0,0],"passed":false},{"actual":[49,49,49,49],"check":"regression half tier boundary #4","expected":[49,49,0,0],"passed":false},{"actual":[101,101,50,50],"check":"crossing into half tier #1","expected":[101,101,50,50],"passed":true},{"actual":[19,19],"check":"gray quest #1","expected":[19,19],"passed":true},{"actual":[60,60,30,30],"check":"control #1","expected":[60,60,30,30],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"harder quest no penalty #1\", \"actual\": [25, 25, 25], \"expected\": [25, 25, 0], \"passed\": false}, {\"check\": \"regression half tier boundary #1\", \"actual\": [107, 107, 107, 107, 107, 107], \"expected\": [107, 107, 107, 107, 0, 0], \"passed\": false}, {\"check\": \"regression half tier boundary #2\", \"actual\": [1, 1, 1, 1], \"expected\": [1, 0, 0, 0], \"passed\": false}, {\"check\": \"regression half tier boundary #3\", \"actual\": [49, 49, 49, 49, 49, 49], \"expected\": [49, 49, 0, 0, 0, 0], \"passed\": false}, {\"check\": \"regression half tier boundary #4\", \"actual\": [49, 49, 49, 49], \"expected\": [49, 49, 0, 0], \"passed\": false}, {\"check\": \"crossing into half tier #1\", \"actual\": [101, 101, 50, 50], \"expected\": [101, 101, 50, 50], \"passed\": true}, {\"check\": \"gray quest #1\", \"actual\": [19, 19], \"expected\": [19, 19], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [60, 60, 30, 30], \"expected\": [60, 60, 30, 30], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":46.413,"exit_code":0,"observations":[{"actual":[25,25,0],"check":"harder quest no penalty #1","expected":[25,25,0],"passed":true},{"actual":[107,107,107,107,0,0],"check":"regression half tier boundary #1","expected":[107,107,107,107,0,0],"passed":true},{"actual":[1,0,0,0],"check":"regression half tier boundary #2","expected":[1,0,0,0],"passed":true},{"actual":[49,49,0,0,0,0],"check":"regression half tier boundary #3","expected":[49,49,0,0,0,0],"passed":true},{"actual":[49,49,0,0],"check":"regression half tier boundary #4","expected":[49,49,0,0],"passed":true},{"actual":[101,101,50,50],"check":"crossing into half tier #1","expected":[101,101,50,50],"passed":true},{"actual":[19,19],"check":"gray quest #1","expected":[19,19],"passed":true},{"actual":[60,60,30,30],"check":"control #1","expected":[60,60,30,30],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"harder quest no penalty #1\", \"actual\": [25, 25, 0], \"expected\": [25, 25, 0], \"passed\": true}, {\"check\": \"regression half tier boundary #1\", \"actual\": [107, 107, 107, 107, 0, 0], \"expected\": [107, 107, 107, 107, 0, 0], \"passed\": true}, {\"check\": \"regression half tier boundary #2\", \"actual\": [1, 0, 0, 0], \"expected\": [1, 0, 0, 0], \"passed\": true}, {\"check\": \"regression half tier boundary #3\", \"actual\": [49, 49, 0, 0, 0, 0], \"expected\": [49, 49, 0, 0, 0, 0], \"passed\": true}, {\"check\": \"regression half tier boundary #4\", \"actual\": [49, 49, 0, 0], \"expected\": [49, 49, 0, 0], \"passed\": true}, {\"check\": \"crossing into half tier #1\", \"actual\": [101, 101, 50, 50], \"expected\": [101, 101, 50, 50], \"passed\": true}, {\"check\": \"gray quest #1\", \"actual\": [19, 19], \"expected\": [19, 19], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [60, 60, 30, 30], \"expected\": [60, 60, 30, 30], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}