{"abstract":"Only a tenth of the allowed points are applied.","category":"Loyalty points ledgers","checks":6,"contract":"Input {price, balance, cpp10 (point value in tenths of a cent), min_cash}. Points may cover at most price - min_cash (never negative): max points = floor((price - min_cash)*10/cpp10), limited by balance. Credit = floor(points*cpp10/10); cash = price - credit. Return {points, cash}.","evaluation_group":"w2-loyalty-points-ledgers-points-plus-cash","failed_approach":"Scaling by 100 applies ten times too many points.","family":"w2-loyalty-points-ledgers-points-plus-cash-tenths-of-cent-scaling","id":"FA-60771","implementations":{"attempt":{"sha256":"f8f3aba15a13785218f8a20a1a50ed2aa9d11c8361fa082ee6c6dff1946e67b1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    room = x['price'] - x['min_cash']\n    maxp = max(0, room * 100 // x['cpp10'])\n    pts = min(x['balance'], maxp)\n    credit = pts * x['cpp10'] // 10\n    return {'points': pts, 'cash': x['price'] - credit}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 501}, {'points': 7915, 'cash': 502}], ['balance limits', {'price': 10000, 'balance': 3001, 'cpp10': 10, 'min_cash': 100}, {'points': 3001, 'cash': 6999}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 2}, {'points': 7138, 'cash': 3}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 401}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 990}, {'points': 4, 'cash': 990}], ['odd credit', {'price': 2503, 'balance': 1238, 'cpp10': 13, 'min_cash': 3}, {'points': 1238, 'cash': 894}]], [['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 502}, {'points': 7915, 'cash': 502}], ['balance limits', {'price': 10000, 'balance': 3002, 'cpp10': 10, 'min_cash': 100}, {'points': 3002, 'cash': 6998}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 3}, {'points': 7137, 'cash': 4}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 402}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 980}, {'points': 8, 'cash': 980}], ['odd credit', {'price': 2503, 'balance': 1239, 'cpp10': 13, 'min_cash': 3}, {'points': 1239, 'cash': 893}]], [['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 503}, {'points': 7914, 'cash': 504}], ['balance limits', {'price': 10000, 'balance': 3003, 'cpp10': 10, 'min_cash': 100}, {'points': 3003, 'cash': 6997}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 4}, {'points': 7135, 'cash': 5}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 403}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 970}, {'points': 12, 'cash': 970}], ['odd credit', {'price': 2503, 'balance': 1240, 'cpp10': 13, 'min_cash': 3}, {'points': 1240, 'cash': 891}]], [['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 504}, {'points': 7913, 'cash': 505}], ['balance limits', {'price': 10000, 'balance': 3004, 'cpp10': 10, 'min_cash': 100}, {'points': 3004, 'cash': 6996}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 5}, {'points': 7134, 'cash': 6}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 404}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 960}, {'points': 16, 'cash': 960}], ['odd credit', {'price': 2503, 'balance': 1241, 'cpp10': 13, 'min_cash': 3}, {'points': 1241, 'cash': 890}]], [['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 505}, {'points': 7912, 'cash': 506}], ['balance limits', {'price': 10000, 'balance': 3005, 'cpp10': 10, 'min_cash': 100}, {'points': 3005, 'cash': 6995}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 6}, {'points': 7132, 'cash': 7}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 405}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 950}, {'points': 20, 'cash': 950}], ['odd credit', {'price': 2503, 'balance': 1242, 'cpp10': 13, 'min_cash': 3}, {'points': 1242, 'cash': 889}]]]\nfor label, args, expected in fixtures[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":"e5205e33e304fd9a99da5dedf427283cbdf3e7ef2ef85ec37cc300c08004e9e0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    room = x['price'] - x['min_cash']\n    maxp = max(0, room // x['cpp10'])\n    pts = min(x['balance'], maxp)\n    credit = pts * x['cpp10'] // 10\n    return {'points': pts, 'cash': x['price'] - credit}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 501}, {'points': 7915, 'cash': 502}], ['balance limits', {'price': 10000, 'balance': 3001, 'cpp10': 10, 'min_cash': 100}, {'points': 3001, 'cash': 6999}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 2}, {'points': 7138, 'cash': 3}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 401}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 990}, {'points': 4, 'cash': 990}], ['odd credit', {'price': 2503, 'balance': 1238, 'cpp10': 13, 'min_cash': 3}, {'points': 1238, 'cash': 894}]], [['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 502}, {'points': 7915, 'cash': 502}], ['balance limits', {'price': 10000, 'balance': 3002, 'cpp10': 10, 'min_cash': 100}, {'points': 3002, 'cash': 6998}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 3}, {'points': 7137, 'cash': 4}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 402}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 980}, {'points': 8, 'cash': 980}], ['odd credit', {'price': 2503, 'balance': 1239, 'cpp10': 13, 'min_cash': 3}, {'points': 1239, 'cash': 893}]], [['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 503}, {'points': 7914, 'cash': 504}], ['balance limits', {'price': 10000, 'balance': 3003, 'cpp10': 10, 'min_cash': 100}, {'points': 3003, 'cash': 6997}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 4}, {'points': 7135, 'cash': 5}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 403}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 970}, {'points': 12, 'cash': 970}], ['odd credit', {'price': 2503, 'balance': 1240, 'cpp10': 13, 'min_cash': 3}, {'points': 1240, 'cash': 891}]], [['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 504}, {'points': 7913, 'cash': 505}], ['balance limits', {'price': 10000, 'balance': 3004, 'cpp10': 10, 'min_cash': 100}, {'points': 3004, 'cash': 6996}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 5}, {'points': 7134, 'cash': 6}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 404}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 960}, {'points': 16, 'cash': 960}], ['odd credit', {'price': 2503, 'balance': 1241, 'cpp10': 13, 'min_cash': 3}, {'points': 1241, 'cash': 890}]], [['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 505}, {'points': 7912, 'cash': 506}], ['balance limits', {'price': 10000, 'balance': 3005, 'cpp10': 10, 'min_cash': 100}, {'points': 3005, 'cash': 6995}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 6}, {'points': 7132, 'cash': 7}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 405}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 950}, {'points': 20, 'cash': 950}], ['odd credit', {'price': 2503, 'balance': 1242, 'cpp10': 13, 'min_cash': 3}, {'points': 1242, 'cash': 889}]]]\nfor label, args, expected in fixtures[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":"6a3a096f75629960c941299f5b1f3aa96e6ad7e702b531f61a3cf1fcd888a4e7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    room = x['price'] - x['min_cash']\n    maxp = max(0, room * 10 // x['cpp10'])\n    pts = min(x['balance'], maxp)\n    credit = pts * x['cpp10'] // 10\n    return {'points': pts, 'cash': x['price'] - credit}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 501}, {'points': 7915, 'cash': 502}], ['balance limits', {'price': 10000, 'balance': 3001, 'cpp10': 10, 'min_cash': 100}, {'points': 3001, 'cash': 6999}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 2}, {'points': 7138, 'cash': 3}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 401}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 990}, {'points': 4, 'cash': 990}], ['odd credit', {'price': 2503, 'balance': 1238, 'cpp10': 13, 'min_cash': 3}, {'points': 1238, 'cash': 894}]], [['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 502}, {'points': 7915, 'cash': 502}], ['balance limits', {'price': 10000, 'balance': 3002, 'cpp10': 10, 'min_cash': 100}, {'points': 3002, 'cash': 6998}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 3}, {'points': 7137, 'cash': 4}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 402}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 980}, {'points': 8, 'cash': 980}], ['odd credit', {'price': 2503, 'balance': 1239, 'cpp10': 13, 'min_cash': 3}, {'points': 1239, 'cash': 893}]], [['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 503}, {'points': 7914, 'cash': 504}], ['balance limits', {'price': 10000, 'balance': 3003, 'cpp10': 10, 'min_cash': 100}, {'points': 3003, 'cash': 6997}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 4}, {'points': 7135, 'cash': 5}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 403}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 970}, {'points': 12, 'cash': 970}], ['odd credit', {'price': 2503, 'balance': 1240, 'cpp10': 13, 'min_cash': 3}, {'points': 1240, 'cash': 891}]], [['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 504}, {'points': 7913, 'cash': 505}], ['balance limits', {'price': 10000, 'balance': 3004, 'cpp10': 10, 'min_cash': 100}, {'points': 3004, 'cash': 6996}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 5}, {'points': 7134, 'cash': 6}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 404}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 960}, {'points': 16, 'cash': 960}], ['odd credit', {'price': 2503, 'balance': 1241, 'cpp10': 13, 'min_cash': 3}, {'points': 1241, 'cash': 890}]], [['points cover most', {'price': 10000, 'balance': 50000, 'cpp10': 12, 'min_cash': 505}, {'points': 7912, 'cash': 506}], ['balance limits', {'price': 10000, 'balance': 3005, 'cpp10': 10, 'min_cash': 100}, {'points': 3005, 'cash': 6995}], ['fractional value', {'price': 4999, 'balance': 99999, 'cpp10': 7, 'min_cash': 6}, {'points': 7132, 'cash': 7}], ['price below minimum cash', {'price': 300, 'balance': 1000, 'cpp10': 10, 'min_cash': 405}, {'points': 0, 'cash': 300}], ['exact minimum', {'price': 1000, 'balance': 100000, 'cpp10': 25, 'min_cash': 950}, {'points': 20, 'cash': 950}], ['odd credit', {'price': 2503, 'balance': 1242, 'cpp10': 13, 'min_cash': 3}, {'points': 1242, 'cash': 889}]]]\nfor label, args, expected in fixtures[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":"Stipulated bounded loyalty-program model with explicit toy rules; not any real program terms. 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-loyalty-points-ledgers-points-plus-cash-tenths-of-cent-scaling","generated_at":"2026-09-29T14:46:48.677743+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Member point balances, statements and the program liability depend on this ledger rule.","repair":"Multiply the room by 10 before dividing by cpp10.","root_cause":"The room in cents is divided by the point value in tenths without scaling by 10.","sha256":"8e514e1c07e829b9c09d14b3b6846adced3d5819cf9d9acf5ea57161f337d522","title":"Points plus cash split: tenths-of-cent scaling · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.082,"exit_code":1,"observations":[{"actual":{"cash":-50000,"points":50000},"check":"points cover most","expected":{"cash":502,"points":7915},"passed":false},{"actual":{"cash":6999,"points":3001},"check":"balance limits","expected":{"cash":6999,"points":3001},"passed":true},{"actual":{"cash":-44970,"points":71385},"check":"fractional value","expected":{"cash":3,"points":7138},"passed":false},{"actual":{"cash":300,"points":0},"check":"price below minimum cash","expected":{"cash":300,"points":0},"passed":true},{"actual":{"cash":900,"points":40},"check":"exact minimum","expected":{"cash":990,"points":4},"passed":false},{"actual":{"cash":894,"points":1238},"check":"odd credit","expected":{"cash":894,"points":1238},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"points cover most\", \"actual\": {\"points\": 50000, \"cash\": -50000}, \"expected\": {\"points\": 7915, \"cash\": 502}, \"passed\": false}, {\"check\": \"balance limits\", \"actual\": {\"points\": 3001, \"cash\": 6999}, \"expected\": {\"points\": 3001, \"cash\": 6999}, \"passed\": true}, {\"check\": \"fractional value\", \"actual\": {\"points\": 71385, \"cash\": -44970}, \"expected\": {\"points\": 7138, \"cash\": 3}, \"passed\": false}, {\"check\": \"price below minimum cash\", \"actual\": {\"points\": 0, \"cash\": 300}, \"expected\": {\"points\": 0, \"cash\": 300}, \"passed\": true}, {\"check\": \"exact minimum\", \"actual\": {\"points\": 40, \"cash\": 900}, \"expected\": {\"points\": 4, \"cash\": 990}, \"passed\": false}, {\"check\": \"odd credit\", \"actual\": {\"points\": 1238, \"cash\": 894}, \"expected\": {\"points\": 1238, \"cash\": 894}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.429,"exit_code":1,"observations":[{"actual":{"cash":9051,"points":791},"check":"points cover most","expected":{"cash":502,"points":7915},"passed":false},{"actual":{"cash":9010,"points":990},"check":"balance limits","expected":{"cash":6999,"points":3001},"passed":false},{"actual":{"cash":4500,"points":713},"check":"fractional value","expected":{"cash":3,"points":7138},"passed":false},{"actual":{"cash":300,"points":0},"check":"price below minimum cash","expected":{"cash":300,"points":0},"passed":true},{"actual":{"cash":1000,"points":0},"check":"exact minimum","expected":{"cash":990,"points":4},"passed":false},{"actual":{"cash":2254,"points":192},"check":"odd credit","expected":{"cash":894,"points":1238},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"points cover most\", \"actual\": {\"points\": 791, \"cash\": 9051}, \"expected\": {\"points\": 7915, \"cash\": 502}, \"passed\": false}, {\"check\": \"balance limits\", \"actual\": {\"points\": 990, \"cash\": 9010}, \"expected\": {\"points\": 3001, \"cash\": 6999}, \"passed\": false}, {\"check\": \"fractional value\", \"actual\": {\"points\": 713, \"cash\": 4500}, \"expected\": {\"points\": 7138, \"cash\": 3}, \"passed\": false}, {\"check\": \"price below minimum cash\", \"actual\": {\"points\": 0, \"cash\": 300}, \"expected\": {\"points\": 0, \"cash\": 300}, \"passed\": true}, {\"check\": \"exact minimum\", \"actual\": {\"points\": 0, \"cash\": 1000}, \"expected\": {\"points\": 4, \"cash\": 990}, \"passed\": false}, {\"check\": \"odd credit\", \"actual\": {\"points\": 192, \"cash\": 2254}, \"expected\": {\"points\": 1238, \"cash\": 894}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.85,"exit_code":0,"observations":[{"actual":{"cash":502,"points":7915},"check":"points cover most","expected":{"cash":502,"points":7915},"passed":true},{"actual":{"cash":6999,"points":3001},"check":"balance limits","expected":{"cash":6999,"points":3001},"passed":true},{"actual":{"cash":3,"points":7138},"check":"fractional value","expected":{"cash":3,"points":7138},"passed":true},{"actual":{"cash":300,"points":0},"check":"price below minimum cash","expected":{"cash":300,"points":0},"passed":true},{"actual":{"cash":990,"points":4},"check":"exact minimum","expected":{"cash":990,"points":4},"passed":true},{"actual":{"cash":894,"points":1238},"check":"odd credit","expected":{"cash":894,"points":1238},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"points cover most\", \"actual\": {\"points\": 7915, \"cash\": 502}, \"expected\": {\"points\": 7915, \"cash\": 502}, \"passed\": true}, {\"check\": \"balance limits\", \"actual\": {\"points\": 3001, \"cash\": 6999}, \"expected\": {\"points\": 3001, \"cash\": 6999}, \"passed\": true}, {\"check\": \"fractional value\", \"actual\": {\"points\": 7138, \"cash\": 3}, \"expected\": {\"points\": 7138, \"cash\": 3}, \"passed\": true}, {\"check\": \"price below minimum cash\", \"actual\": {\"points\": 0, \"cash\": 300}, \"expected\": {\"points\": 0, \"cash\": 300}, \"passed\": true}, {\"check\": \"exact minimum\", \"actual\": {\"points\": 4, \"cash\": 990}, \"expected\": {\"points\": 4, \"cash\": 990}, \"passed\": true}, {\"check\": \"odd credit\", \"actual\": {\"points\": 1238, \"cash\": 894}, \"expected\": {\"points\": 1238, \"cash\": 894}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}