{"abstract":"Vendors pay fractional coins upward, leaking currency.","category":"Game economy crafting balance","checks":8,"contract":"Selling qty units after `sales` units already sold today. Daily cap 20 units total; excess is returned. Per unit, with done = units sold today before it: saturation = min(60, 5*done) percent; unit = floor(base*(100-sat)/100), then floor(unit*(100+bonus)/100) with bonus neutral 0, friendly 5, honored 10; each unit pays at least 1.","evaluation_group":"w2-game-economy-crafting-balance-vendor-saturation","failed_approach":"Round-to-nearest still pays up whenever the fraction is one half or more.","family":"w2-game-economy-crafting-balance-vendor-saturation-saturation-rounding","id":"FA-85961","implementations":{"attempt":{"sha256":"4ad779cbc1a5751e119a4bcedddd24205861e7fe7eb1ac4fb30c4ed87908e235","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(base_price, sales, qty, reputation):\n    bonus = {'neutral': 0, 'friendly': 5, 'honored': 10}[reputation]\n    gold = 0\n    sold = 0\n    for i in range(qty):\n        done = sales + sold\n        if done >= 20:\n            break\n        sat = min(60, 5 * done)\n        unit = round(base_price * (100 - sat) / 100)\n        unit = unit * (100 + bonus) // 100\n        gold += max(1, unit)\n        sold += 1\n    return {'gold': gold, 'sold': sold, 'returned': qty - sold}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('fault site saturation rounding #1', [99, 5, 3, 'neutral'], {'gold': 207, 'sold': 3, 'returned': 0}),\n  ('regression saturation rounding #1', [3, 1, 11, 'neutral'], {'gold': 17, 'sold': 11, 'returned': 0}),\n  ('regression saturation rounding #2', [10, 0, 7, 'friendly'], {'gold': 58, 'sold': 7, 'returned': 0}),\n  ('regression saturation rounding #3', [10, 5, 10, 'friendly'], {'gold': 52, 'sold': 10, 'returned': 0}),\n  ('cap reached mid batch #1', [40, 18, 5, 'honored'], {'gold': 34, 'sold': 2, 'returned': 3}),\n  ('fresh day single sale #1', [9, 0, 1, 'friendly'], {'gold': 9, 'sold': 1, 'returned': 0}),\n  ('cheap junk at saturation #1', [1, 12, 3, 'neutral'], {'gold': 3, 'sold': 3, 'returned': 0}),\n  ('control #1', [2, 22, 2, 'friendly'], {'gold': 0, 'sold': 0, 'returned': 2})],\n [('regression saturation rounding #1', [10, 0, 7, 'friendly'], {'gold': 58, 'sold': 7, 'returned': 0}),\n  ('regression saturation rounding #2', [10, 5, 10, 'friendly'], {'gold': 52, 'sold': 10, 'returned': 0}),\n  ('regression saturation rounding #3', [25, 1, 4, 'neutral'], {'gold': 86, 'sold': 4, 'returned': 0}),\n  ('regression saturation rounding #4', [10, 1, 9, 'friendly'], {'gold': 65, 'sold': 9, 'returned': 0}),\n  ('cheap junk at saturation #1', [1, 12, 3, 'neutral'], {'gold': 3, 'sold': 3, 'returned': 0}),\n  ('cap reached mid batch #1', [40, 18, 5, 'honored'], {'gold': 34, 'sold': 2, 'returned': 3}),\n  ('control #1', [2, 22, 2, 'friendly'], {'gold': 0, 'sold': 0, 'returned': 2}),\n  ('control #2', [190, 12, 7, 'neutral'], {'gold': 532, 'sold': 7, 'returned': 0})],\n [('regression saturation rounding #1', [25, 1, 4, 'neutral'], {'gold': 86, 'sold': 4, 'returned': 0}),\n  ('fault site saturation rounding #1', [3, 12, 4, 'honored'], {'gold': 4, 'sold': 4, 'returned': 0}),\n  ('regression saturation rounding #2', [10, 1, 9, 'friendly'], {'gold': 65, 'sold': 9, 'returned': 0}),\n  ('regression saturation rounding #3', [7, 12, 6, 'neutral'], {'gold': 12, 'sold': 6, 'returned': 0}),\n  ('fresh day single sale #1', [9, 0, 1, 'friendly'], {'gold': 9, 'sold': 1, 'returned': 0}),\n  ('cheap junk at saturation #1', [1, 12, 3, 'neutral'], {'gold': 3, 'sold': 3, 'returned': 0}),\n  ('control #1', [190, 12, 7, 'neutral'], {'gold': 532, 'sold': 7, 'returned': 0}),\n  ('control #2', [2, 15, 10, 'neutral'], {'gold': 5, 'sold': 5, 'returned': 5})],\n [('regression saturation rounding #1', [10, 1, 9, 'friendly'], {'gold': 65, 'sold': 9, 'returned': 0}),\n  ('fault site saturation rounding #1', [7, 11, 1, 'honored'], {'gold': 3, 'sold': 1, 'returned': 0}),\n  ('regression saturation rounding #2', [99, 11, 5, 'neutral'], {'gold': 200, 'sold': 5, 'returned': 0}),\n  ('regression saturation rounding #3', [2, 1, 5, 'honored'], {'gold': 5, 'sold': 5, 'returned': 0}),\n  ('cap reached mid batch #1', [40, 18, 5, 'honored'], {'gold': 34, 'sold': 2, 'returned': 3}),\n  ('fresh day single sale #1', [9, 0, 1, 'friendly'], {'gold': 9, 'sold': 1, 'returned': 0}),\n  ('control #1', [3, 20, 3, 'honored'], {'gold': 0, 'sold': 0, 'returned': 3}),\n  ('control #2', [3, 22, 4, 'honored'], {'gold': 0, 'sold': 0, 'returned': 4})],\n [('regression saturation rounding #1', [7, 12, 6, 'neutral'], {'gold': 12, 'sold': 6, 'returned': 0}),\n  ('regression saturation rounding #2', [99, 11, 5, 'neutral'], {'gold': 200, 'sold': 5, 'returned': 0}),\n  ('regression saturation rounding #3', [99, 12, 4, 'friendly'], {'gold': 160, 'sold': 4, 'returned': 0}),\n  ('regression saturation rounding #4', [3, 1, 12, 'honored'], {'gold': 18, 'sold': 12, 'returned': 0}),\n  ('cheap junk at saturation #1', [1, 12, 3, 'neutral'], {'gold': 3, 'sold': 3, 'returned': 0}),\n  ('cap reached mid batch #1', [40, 18, 5, 'honored'], {'gold': 34, 'sold': 2, 'returned': 3}),\n  ('control #1', [10, 22, 10, 'neutral'], {'gold': 0, 'sold': 0, 'returned': 10}),\n  ('control #2', [25, 12, 12, 'neutral'], {'gold': 80, 'sold': 8, 'returned': 4})]]\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":"4cdbaba2d282311fa23aa2dbc7a9018b5d030cb7fdd9a740a630bdc7ee974053","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(base_price, sales, qty, reputation):\n    bonus = {'neutral': 0, 'friendly': 5, 'honored': 10}[reputation]\n    gold = 0\n    sold = 0\n    for i in range(qty):\n        done = sales + sold\n        if done >= 20:\n            break\n        sat = min(60, 5 * done)\n        unit = -(-base_price * (100 - sat) // 100)\n        unit = unit * (100 + bonus) // 100\n        gold += max(1, unit)\n        sold += 1\n    return {'gold': gold, 'sold': sold, 'returned': qty - sold}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('fault site saturation rounding #1', [99, 5, 3, 'neutral'], {'gold': 207, 'sold': 3, 'returned': 0}),\n  ('regression saturation rounding #1', [3, 1, 11, 'neutral'], {'gold': 17, 'sold': 11, 'returned': 0}),\n  ('regression saturation rounding #2', [10, 0, 7, 'friendly'], {'gold': 58, 'sold': 7, 'returned': 0}),\n  ('regression saturation rounding #3', [10, 5, 10, 'friendly'], {'gold': 52, 'sold': 10, 'returned': 0}),\n  ('cap reached mid batch #1', [40, 18, 5, 'honored'], {'gold': 34, 'sold': 2, 'returned': 3}),\n  ('fresh day single sale #1', [9, 0, 1, 'friendly'], {'gold': 9, 'sold': 1, 'returned': 0}),\n  ('cheap junk at saturation #1', [1, 12, 3, 'neutral'], {'gold': 3, 'sold': 3, 'returned': 0}),\n  ('control #1', [2, 22, 2, 'friendly'], {'gold': 0, 'sold': 0, 'returned': 2})],\n [('regression saturation rounding #1', [10, 0, 7, 'friendly'], {'gold': 58, 'sold': 7, 'returned': 0}),\n  ('regression saturation rounding #2', [10, 5, 10, 'friendly'], {'gold': 52, 'sold': 10, 'returned': 0}),\n  ('regression saturation rounding #3', [25, 1, 4, 'neutral'], {'gold': 86, 'sold': 4, 'returned': 0}),\n  ('regression saturation rounding #4', [10, 1, 9, 'friendly'], {'gold': 65, 'sold': 9, 'returned': 0}),\n  ('cheap junk at saturation #1', [1, 12, 3, 'neutral'], {'gold': 3, 'sold': 3, 'returned': 0}),\n  ('cap reached mid batch #1', [40, 18, 5, 'honored'], {'gold': 34, 'sold': 2, 'returned': 3}),\n  ('control #1', [2, 22, 2, 'friendly'], {'gold': 0, 'sold': 0, 'returned': 2}),\n  ('control #2', [190, 12, 7, 'neutral'], {'gold': 532, 'sold': 7, 'returned': 0})],\n [('regression saturation rounding #1', [25, 1, 4, 'neutral'], {'gold': 86, 'sold': 4, 'returned': 0}),\n  ('fault site saturation rounding #1', [3, 12, 4, 'honored'], {'gold': 4, 'sold': 4, 'returned': 0}),\n  ('regression saturation rounding #2', [10, 1, 9, 'friendly'], {'gold': 65, 'sold': 9, 'returned': 0}),\n  ('regression saturation rounding #3', [7, 12, 6, 'neutral'], {'gold': 12, 'sold': 6, 'returned': 0}),\n  ('fresh day single sale #1', [9, 0, 1, 'friendly'], {'gold': 9, 'sold': 1, 'returned': 0}),\n  ('cheap junk at saturation #1', [1, 12, 3, 'neutral'], {'gold': 3, 'sold': 3, 'returned': 0}),\n  ('control #1', [190, 12, 7, 'neutral'], {'gold': 532, 'sold': 7, 'returned': 0}),\n  ('control #2', [2, 15, 10, 'neutral'], {'gold': 5, 'sold': 5, 'returned': 5})],\n [('regression saturation rounding #1', [10, 1, 9, 'friendly'], {'gold': 65, 'sold': 9, 'returned': 0}),\n  ('fault site saturation rounding #1', [7, 11, 1, 'honored'], {'gold': 3, 'sold': 1, 'returned': 0}),\n  ('regression saturation rounding #2', [99, 11, 5, 'neutral'], {'gold': 200, 'sold': 5, 'returned': 0}),\n  ('regression saturation rounding #3', [2, 1, 5, 'honored'], {'gold': 5, 'sold': 5, 'returned': 0}),\n  ('cap reached mid batch #1', [40, 18, 5, 'honored'], {'gold': 34, 'sold': 2, 'returned': 3}),\n  ('fresh day single sale #1', [9, 0, 1, 'friendly'], {'gold': 9, 'sold': 1, 'returned': 0}),\n  ('control #1', [3, 20, 3, 'honored'], {'gold': 0, 'sold': 0, 'returned': 3}),\n  ('control #2', [3, 22, 4, 'honored'], {'gold': 0, 'sold': 0, 'returned': 4})],\n [('regression saturation rounding #1', [7, 12, 6, 'neutral'], {'gold': 12, 'sold': 6, 'returned': 0}),\n  ('regression saturation rounding #2', [99, 11, 5, 'neutral'], {'gold': 200, 'sold': 5, 'returned': 0}),\n  ('regression saturation rounding #3', [99, 12, 4, 'friendly'], {'gold': 160, 'sold': 4, 'returned': 0}),\n  ('regression saturation rounding #4', [3, 1, 12, 'honored'], {'gold': 18, 'sold': 12, 'returned': 0}),\n  ('cheap junk at saturation #1', [1, 12, 3, 'neutral'], {'gold': 3, 'sold': 3, 'returned': 0}),\n  ('cap reached mid batch #1', [40, 18, 5, 'honored'], {'gold': 34, 'sold': 2, 'returned': 3}),\n  ('control #1', [10, 22, 10, 'neutral'], {'gold': 0, 'sold': 0, 'returned': 10}),\n  ('control #2', [25, 12, 12, 'neutral'], {'gold': 80, 'sold': 8, 'returned': 4})]]\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":"59cf493395405a0bfd011a4d6381432f7e484edfd5677ed87d6db186b2f003d0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(base_price, sales, qty, reputation):\n    bonus = {'neutral': 0, 'friendly': 5, 'honored': 10}[reputation]\n    gold = 0\n    sold = 0\n    for i in range(qty):\n        done = sales + sold\n        if done >= 20:\n            break\n        sat = min(60, 5 * done)\n        unit = base_price * (100 - sat) // 100\n        unit = unit * (100 + bonus) // 100\n        gold += max(1, unit)\n        sold += 1\n    return {'gold': gold, 'sold': sold, 'returned': qty - sold}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('fault site saturation rounding #1', [99, 5, 3, 'neutral'], {'gold': 207, 'sold': 3, 'returned': 0}),\n  ('regression saturation rounding #1', [3, 1, 11, 'neutral'], {'gold': 17, 'sold': 11, 'returned': 0}),\n  ('regression saturation rounding #2', [10, 0, 7, 'friendly'], {'gold': 58, 'sold': 7, 'returned': 0}),\n  ('regression saturation rounding #3', [10, 5, 10, 'friendly'], {'gold': 52, 'sold': 10, 'returned': 0}),\n  ('cap reached mid batch #1', [40, 18, 5, 'honored'], {'gold': 34, 'sold': 2, 'returned': 3}),\n  ('fresh day single sale #1', [9, 0, 1, 'friendly'], {'gold': 9, 'sold': 1, 'returned': 0}),\n  ('cheap junk at saturation #1', [1, 12, 3, 'neutral'], {'gold': 3, 'sold': 3, 'returned': 0}),\n  ('control #1', [2, 22, 2, 'friendly'], {'gold': 0, 'sold': 0, 'returned': 2})],\n [('regression saturation rounding #1', [10, 0, 7, 'friendly'], {'gold': 58, 'sold': 7, 'returned': 0}),\n  ('regression saturation rounding #2', [10, 5, 10, 'friendly'], {'gold': 52, 'sold': 10, 'returned': 0}),\n  ('regression saturation rounding #3', [25, 1, 4, 'neutral'], {'gold': 86, 'sold': 4, 'returned': 0}),\n  ('regression saturation rounding #4', [10, 1, 9, 'friendly'], {'gold': 65, 'sold': 9, 'returned': 0}),\n  ('cheap junk at saturation #1', [1, 12, 3, 'neutral'], {'gold': 3, 'sold': 3, 'returned': 0}),\n  ('cap reached mid batch #1', [40, 18, 5, 'honored'], {'gold': 34, 'sold': 2, 'returned': 3}),\n  ('control #1', [2, 22, 2, 'friendly'], {'gold': 0, 'sold': 0, 'returned': 2}),\n  ('control #2', [190, 12, 7, 'neutral'], {'gold': 532, 'sold': 7, 'returned': 0})],\n [('regression saturation rounding #1', [25, 1, 4, 'neutral'], {'gold': 86, 'sold': 4, 'returned': 0}),\n  ('fault site saturation rounding #1', [3, 12, 4, 'honored'], {'gold': 4, 'sold': 4, 'returned': 0}),\n  ('regression saturation rounding #2', [10, 1, 9, 'friendly'], {'gold': 65, 'sold': 9, 'returned': 0}),\n  ('regression saturation rounding #3', [7, 12, 6, 'neutral'], {'gold': 12, 'sold': 6, 'returned': 0}),\n  ('fresh day single sale #1', [9, 0, 1, 'friendly'], {'gold': 9, 'sold': 1, 'returned': 0}),\n  ('cheap junk at saturation #1', [1, 12, 3, 'neutral'], {'gold': 3, 'sold': 3, 'returned': 0}),\n  ('control #1', [190, 12, 7, 'neutral'], {'gold': 532, 'sold': 7, 'returned': 0}),\n  ('control #2', [2, 15, 10, 'neutral'], {'gold': 5, 'sold': 5, 'returned': 5})],\n [('regression saturation rounding #1', [10, 1, 9, 'friendly'], {'gold': 65, 'sold': 9, 'returned': 0}),\n  ('fault site saturation rounding #1', [7, 11, 1, 'honored'], {'gold': 3, 'sold': 1, 'returned': 0}),\n  ('regression saturation rounding #2', [99, 11, 5, 'neutral'], {'gold': 200, 'sold': 5, 'returned': 0}),\n  ('regression saturation rounding #3', [2, 1, 5, 'honored'], {'gold': 5, 'sold': 5, 'returned': 0}),\n  ('cap reached mid batch #1', [40, 18, 5, 'honored'], {'gold': 34, 'sold': 2, 'returned': 3}),\n  ('fresh day single sale #1', [9, 0, 1, 'friendly'], {'gold': 9, 'sold': 1, 'returned': 0}),\n  ('control #1', [3, 20, 3, 'honored'], {'gold': 0, 'sold': 0, 'returned': 3}),\n  ('control #2', [3, 22, 4, 'honored'], {'gold': 0, 'sold': 0, 'returned': 4})],\n [('regression saturation rounding #1', [7, 12, 6, 'neutral'], {'gold': 12, 'sold': 6, 'returned': 0}),\n  ('regression saturation rounding #2', [99, 11, 5, 'neutral'], {'gold': 200, 'sold': 5, 'returned': 0}),\n  ('regression saturation rounding #3', [99, 12, 4, 'friendly'], {'gold': 160, 'sold': 4, 'returned': 0}),\n  ('regression saturation rounding #4', [3, 1, 12, 'honored'], {'gold': 18, 'sold': 12, 'returned': 0}),\n  ('cheap junk at saturation #1', [1, 12, 3, 'neutral'], {'gold': 3, 'sold': 3, 'returned': 0}),\n  ('cap reached mid batch #1', [40, 18, 5, 'honored'], {'gold': 34, 'sold': 2, 'returned': 3}),\n  ('control #1', [10, 22, 10, 'neutral'], {'gold': 0, 'sold': 0, 'returned': 10}),\n  ('control #2', [25, 12, 12, 'neutral'], {'gold': 80, 'sold': 8, 'returned': 4})]]\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-vendor-saturation-saturation-rounding","generated_at":"2026-09-29T14:50:45.122838+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 `unit = base_price * (100 - sat) // 100` at the saturation rounding step.","root_cause":"The saturated price is rounded up rather than floored.","sha256":"9a0c8b7c701851ed20d1773baecbfb1970a7cc2e9586df294420f87a3e466e26","title":"Vendor sell saturation: Saturated price rounds in the player favor · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.357,"exit_code":1,"observations":[{"actual":{"gold":207,"returned":0,"sold":3},"check":"fault site saturation rounding #1","expected":{"gold":207,"returned":0,"sold":3},"passed":true},{"actual":{"gold":24,"returned":0,"sold":11},"check":"regression saturation rounding #1","expected":{"gold":17,"returned":0,"sold":11},"passed":false},{"actual":{"gold":60,"returned":0,"sold":7},"check":"regression saturation rounding #2","expected":{"gold":58,"returned":0,"sold":7},"passed":false},{"actual":{"gold":54,"returned":0,"sold":10},"check":"regression saturation rounding #3","expected":{"gold":52,"returned":0,"sold":10},"passed":false},{"actual":{"gold":34,"returned":3,"sold":2},"check":"cap reached mid batch #1","expected":{"gold":34,"returned":3,"sold":2},"passed":true},{"actual":{"gold":9,"returned":0,"sold":1},"check":"fresh day single sale #1","expected":{"gold":9,"returned":0,"sold":1},"passed":true},{"actual":{"gold":3,"returned":0,"sold":3},"check":"cheap junk at saturation #1","expected":{"gold":3,"returned":0,"sold":3},"passed":true},{"actual":{"gold":0,"returned":2,"sold":0},"check":"control #1","expected":{"gold":0,"returned":2,"sold":0},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fault site saturation rounding #1\", \"actual\": {\"gold\": 207, \"sold\": 3, \"returned\": 0}, \"expected\": {\"gold\": 207, \"sold\": 3, \"returned\": 0}, \"passed\": true}, {\"check\": \"regression saturation rounding #1\", \"actual\": {\"gold\": 24, \"sold\": 11, \"returned\": 0}, \"expected\": {\"gold\": 17, \"sold\": 11, \"returned\": 0}, \"passed\": false}, {\"check\": \"regression saturation rounding #2\", \"actual\": {\"gold\": 60, \"sold\": 7, \"returned\": 0}, \"expected\": {\"gold\": 58, \"sold\": 7, \"returned\": 0}, \"passed\": false}, {\"check\": \"regression saturation rounding #3\", \"actual\": {\"gold\": 54, \"sold\": 10, \"returned\": 0}, \"expected\": {\"gold\": 52, \"sold\": 10, \"returned\": 0}, \"passed\": false}, {\"check\": \"cap reached mid batch #1\", \"actual\": {\"gold\": 34, \"sold\": 2, \"returned\": 3}, \"expected\": {\"gold\": 34, \"sold\": 2, \"returned\": 3}, \"passed\": true}, {\"check\": \"fresh day single sale #1\", \"actual\": {\"gold\": 9, \"sold\": 1, \"returned\": 0}, \"expected\": {\"gold\": 9, \"sold\": 1, \"returned\": 0}, \"passed\": true}, {\"check\": \"cheap junk at saturation #1\", \"actual\": {\"gold\": 3, \"sold\": 3, \"returned\": 0}, \"expected\": {\"gold\": 3, \"sold\": 3, \"returned\": 0}, \"passed\": true}, {\"check\": \"control #1\", \"actual\": {\"gold\": 0, \"sold\": 0, \"returned\": 2}, \"expected\": {\"gold\": 0, \"sold\": 0, \"returned\": 2}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.662,"exit_code":1,"observations":[{"actual":{"gold":210,"returned":0,"sold":3},"check":"fault site saturation rounding #1","expected":{"gold":207,"returned":0,"sold":3},"passed":false},{"actual":{"gold":28,"returned":0,"sold":11},"check":"regression saturation rounding #1","expected":{"gold":17,"returned":0,"sold":11},"passed":false},{"actual":{"gold":61,"returned":0,"sold":7},"check":"regression saturation rounding #2","expected":{"gold":58,"returned":0,"sold":7},"passed":false},{"actual":{"gold":56,"returned":0,"sold":10},"check":"regression saturation rounding #3","expected":{"gold":52,"returned":0,"sold":10},"passed":false},{"actual":{"gold":34,"returned":3,"sold":2},"check":"cap reached mid batch #1","expected":{"gold":34,"returned":3,"sold":2},"passed":true},{"actual":{"gold":9,"returned":0,"sold":1},"check":"fresh day single sale #1","expected":{"gold":9,"returned":0,"sold":1},"passed":true},{"actual":{"gold":3,"returned":0,"sold":3},"check":"cheap junk at saturation #1","expected":{"gold":3,"returned":0,"sold":3},"passed":true},{"actual":{"gold":0,"returned":2,"sold":0},"check":"control #1","expected":{"gold":0,"returned":2,"sold":0},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fault site saturation rounding #1\", \"actual\": {\"gold\": 210, \"sold\": 3, \"returned\": 0}, \"expected\": {\"gold\": 207, \"sold\": 3, \"returned\": 0}, \"passed\": false}, {\"check\": \"regression saturation rounding #1\", \"actual\": {\"gold\": 28, \"sold\": 11, \"returned\": 0}, \"expected\": {\"gold\": 17, \"sold\": 11, \"returned\": 0}, \"passed\": false}, {\"check\": \"regression saturation rounding #2\", \"actual\": {\"gold\": 61, \"sold\": 7, \"returned\": 0}, \"expected\": {\"gold\": 58, \"sold\": 7, \"returned\": 0}, \"passed\": false}, {\"check\": \"regression saturation rounding #3\", \"actual\": {\"gold\": 56, \"sold\": 10, \"returned\": 0}, \"expected\": {\"gold\": 52, \"sold\": 10, \"returned\": 0}, \"passed\": false}, {\"check\": \"cap reached mid batch #1\", \"actual\": {\"gold\": 34, \"sold\": 2, \"returned\": 3}, \"expected\": {\"gold\": 34, \"sold\": 2, \"returned\": 3}, \"passed\": true}, {\"check\": \"fresh day single sale #1\", \"actual\": {\"gold\": 9, \"sold\": 1, \"returned\": 0}, \"expected\": {\"gold\": 9, \"sold\": 1, \"returned\": 0}, \"passed\": true}, {\"check\": \"cheap junk at saturation #1\", \"actual\": {\"gold\": 3, \"sold\": 3, \"returned\": 0}, \"expected\": {\"gold\": 3, \"sold\": 3, \"returned\": 0}, \"passed\": true}, {\"check\": \"control #1\", \"actual\": {\"gold\": 0, \"sold\": 0, \"returned\": 2}, \"expected\": {\"gold\": 0, \"sold\": 0, \"returned\": 2}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.107,"exit_code":0,"observations":[{"actual":{"gold":207,"returned":0,"sold":3},"check":"fault site saturation rounding #1","expected":{"gold":207,"returned":0,"sold":3},"passed":true},{"actual":{"gold":17,"returned":0,"sold":11},"check":"regression saturation rounding #1","expected":{"gold":17,"returned":0,"sold":11},"passed":true},{"actual":{"gold":58,"returned":0,"sold":7},"check":"regression saturation rounding #2","expected":{"gold":58,"returned":0,"sold":7},"passed":true},{"actual":{"gold":52,"returned":0,"sold":10},"check":"regression saturation rounding #3","expected":{"gold":52,"returned":0,"sold":10},"passed":true},{"actual":{"gold":34,"returned":3,"sold":2},"check":"cap reached mid batch #1","expected":{"gold":34,"returned":3,"sold":2},"passed":true},{"actual":{"gold":9,"returned":0,"sold":1},"check":"fresh day single sale #1","expected":{"gold":9,"returned":0,"sold":1},"passed":true},{"actual":{"gold":3,"returned":0,"sold":3},"check":"cheap junk at saturation #1","expected":{"gold":3,"returned":0,"sold":3},"passed":true},{"actual":{"gold":0,"returned":2,"sold":0},"check":"control #1","expected":{"gold":0,"returned":2,"sold":0},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fault site saturation rounding #1\", \"actual\": {\"gold\": 207, \"sold\": 3, \"returned\": 0}, \"expected\": {\"gold\": 207, \"sold\": 3, \"returned\": 0}, \"passed\": true}, {\"check\": \"regression saturation rounding #1\", \"actual\": {\"gold\": 17, \"sold\": 11, \"returned\": 0}, \"expected\": {\"gold\": 17, \"sold\": 11, \"returned\": 0}, \"passed\": true}, {\"check\": \"regression saturation rounding #2\", \"actual\": {\"gold\": 58, \"sold\": 7, \"returned\": 0}, \"expected\": {\"gold\": 58, \"sold\": 7, \"returned\": 0}, \"passed\": true}, {\"check\": \"regression saturation rounding #3\", \"actual\": {\"gold\": 52, \"sold\": 10, \"returned\": 0}, \"expected\": {\"gold\": 52, \"sold\": 10, \"returned\": 0}, \"passed\": true}, {\"check\": \"cap reached mid batch #1\", \"actual\": {\"gold\": 34, \"sold\": 2, \"returned\": 3}, \"expected\": {\"gold\": 34, \"sold\": 2, \"returned\": 3}, \"passed\": true}, {\"check\": \"fresh day single sale #1\", \"actual\": {\"gold\": 9, \"sold\": 1, \"returned\": 0}, \"expected\": {\"gold\": 9, \"sold\": 1, \"returned\": 0}, \"passed\": true}, {\"check\": \"cheap junk at saturation #1\", \"actual\": {\"gold\": 3, \"sold\": 3, \"returned\": 0}, \"expected\": {\"gold\": 3, \"sold\": 3, \"returned\": 0}, \"passed\": true}, {\"check\": \"control #1\", \"actual\": {\"gold\": 0, \"sold\": 0, \"returned\": 2}, \"expected\": {\"gold\": 0, \"sold\": 0, \"returned\": 2}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}