{"abstract":"Twelve bags reset to zero instead of two.","category":"Card game rule engines","checks":8,"contract":"Input [[bid1, bid2], [tricks1, tricks2], bags_before]. Nil (0) bids score +100 if the player took no tricks, else -100 and their tricks become bags. Other bids combine into a contract made by the non-nil players tricks: made -> 10*bid + 1 per overtrick (overtricks are bags); set -> -10*bid. Every 10 accumulated bags costs 100 and removes 10 bags. Return [score_delta, bags].","evaluation_group":"w2-card-game-rule-engines-spades-score","failed_approach":"Penalising only above ten lets a team sit at exactly ten bags.","family":"w2-card-game-rule-engines-spades-score-bag-rollover","id":"FA-83441","implementations":{"attempt":{"sha256":"5977eb90dddfec4042ca23a8b440076ae5a94abeaf7fac5b01a33458626939fc","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    bids, tricks, bags = x\n    score = 0\n    contract = 0\n    made = 0\n    for b, t in zip(bids, tricks):\n        if b == 0:\n            if t == 0:\n                score += 100\n            else:\n                score -= 100\n                bags += t\n        else:\n            contract += b\n            made += t\n    if made >= contract:\n        score += 10 * contract\n        over = made - contract\n        score += over\n        bags += over\n    else:\n        score -= 10 * contract\n    while bags > 10:\n        score -= 100\n        bags -= 10\n    return [score, bags]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[6, 1], [11, 1], 8], [-25, 3]], [[[0, 2], [12, 1], 4], [-220, 6]], [[[3, 5], [1, 12], 3], [85, 8]], [[[5, 5], [12, 1], 1], [103, 4]], [[[0, 4], [3, 10], 5], [-154, 4]], [[[3, 6], [3, 8], 9], [-8, 1]], [[[5, 5], [12, 0], 5], [102, 7]], [[[5, 1], [12, 1], 3], [-33, 0]]], [[[[0, 2], [12, 1], 4], [-220, 6]], [[[4, 0], [1, 8], 8], [-240, 6]], [[[1, 0], [9, 2], 4], [-182, 4]], [[[5, 1], [6, 7], 3], [-33, 0]], [[[1, 4], [3, 8], 0], [56, 6]], [[[1, 6], [2, 0], 5], [-70, 5]], [[[4, 5], [9, 4], 4], [94, 8]], [[[6, 0], [0, 10], 0], [-260, 0]]], [[[[4, 0], [1, 8], 8], [-240, 6]], [[[1, 5], [7, 0], 2], [61, 3]], [[[3, 4], [11, 1], 1], [75, 6]], [[[3, 1], [12, 0], 9], [-52, 7]], [[[5, 6], [7, 3], 6], [-110, 6]], [[[6, 0], [8, 3], 7], [-138, 2]], [[[2, 5], [13, 0], 1], [76, 7]], [[[1, 1], [7, 4], 1], [-71, 0]]], [[[[1, 4], [6, 4], 5], [-45, 0]], [[[6, 0], [8, 3], 7], [-138, 2]], [[[0, 4], [1, 4], 9], [-160, 0]], [[[6, 2], [3, 4], 8], [-80, 8]], [[[3, 2], [8, 2], 6], [-45, 1]], [[[3, 4], [7, 2], 9], [-28, 1]], [[[3, 5], [7, 3], 2], [82, 4]], [[[5, 3], [7, 2], 7], [81, 8]]], [[[[3, 4], [7, 2], 9], [-28, 1]], [[[2, 2], [10, 1], 9], [-53, 6]], [[[3, 5], [9, 2], 5], [83, 8]], [[[5, 3], [7, 5], 2], [84, 6]], [[[6, 2], [8, 0], 9], [80, 9]], [[[3, 0], [2, 0], 9], [70, 9]], [[[6, 4], [1, 10], 5], [101, 6]], [[[5, 1], [12, 1], 3], [-33, 0]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"team score case %d\" % i, 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":"ccf12418676c32f7c2b020b877762f76446b5dfc615b9f973f26a5a480d9bcc4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    bids, tricks, bags = x\n    score = 0\n    contract = 0\n    made = 0\n    for b, t in zip(bids, tricks):\n        if b == 0:\n            if t == 0:\n                score += 100\n            else:\n                score -= 100\n                bags += t\n        else:\n            contract += b\n            made += t\n    if made >= contract:\n        score += 10 * contract\n        over = made - contract\n        score += over\n        bags += over\n    else:\n        score -= 10 * contract\n    if bags >= 10:\n        score -= 100\n        bags = 0\n    return [score, bags]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[6, 1], [11, 1], 8], [-25, 3]], [[[0, 2], [12, 1], 4], [-220, 6]], [[[3, 5], [1, 12], 3], [85, 8]], [[[5, 5], [12, 1], 1], [103, 4]], [[[0, 4], [3, 10], 5], [-154, 4]], [[[3, 6], [3, 8], 9], [-8, 1]], [[[5, 5], [12, 0], 5], [102, 7]], [[[5, 1], [12, 1], 3], [-33, 0]]], [[[[0, 2], [12, 1], 4], [-220, 6]], [[[4, 0], [1, 8], 8], [-240, 6]], [[[1, 0], [9, 2], 4], [-182, 4]], [[[5, 1], [6, 7], 3], [-33, 0]], [[[1, 4], [3, 8], 0], [56, 6]], [[[1, 6], [2, 0], 5], [-70, 5]], [[[4, 5], [9, 4], 4], [94, 8]], [[[6, 0], [0, 10], 0], [-260, 0]]], [[[[4, 0], [1, 8], 8], [-240, 6]], [[[1, 5], [7, 0], 2], [61, 3]], [[[3, 4], [11, 1], 1], [75, 6]], [[[3, 1], [12, 0], 9], [-52, 7]], [[[5, 6], [7, 3], 6], [-110, 6]], [[[6, 0], [8, 3], 7], [-138, 2]], [[[2, 5], [13, 0], 1], [76, 7]], [[[1, 1], [7, 4], 1], [-71, 0]]], [[[[1, 4], [6, 4], 5], [-45, 0]], [[[6, 0], [8, 3], 7], [-138, 2]], [[[0, 4], [1, 4], 9], [-160, 0]], [[[6, 2], [3, 4], 8], [-80, 8]], [[[3, 2], [8, 2], 6], [-45, 1]], [[[3, 4], [7, 2], 9], [-28, 1]], [[[3, 5], [7, 3], 2], [82, 4]], [[[5, 3], [7, 2], 7], [81, 8]]], [[[[3, 4], [7, 2], 9], [-28, 1]], [[[2, 2], [10, 1], 9], [-53, 6]], [[[3, 5], [9, 2], 5], [83, 8]], [[[5, 3], [7, 5], 2], [84, 6]], [[[6, 2], [8, 0], 9], [80, 9]], [[[3, 0], [2, 0], 9], [70, 9]], [[[6, 4], [1, 10], 5], [101, 6]], [[[5, 1], [12, 1], 3], [-33, 0]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"team score case %d\" % i, 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":"43892ac272b7825df13ce4cdee6a01292a5ca72239f3a739359a5ea0de72a4e7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    bids, tricks, bags = x\n    score = 0\n    contract = 0\n    made = 0\n    for b, t in zip(bids, tricks):\n        if b == 0:\n            if t == 0:\n                score += 100\n            else:\n                score -= 100\n                bags += t\n        else:\n            contract += b\n            made += t\n    if made >= contract:\n        score += 10 * contract\n        over = made - contract\n        score += over\n        bags += over\n    else:\n        score -= 10 * contract\n    while bags >= 10:\n        score -= 100\n        bags -= 10\n    return [score, bags]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[6, 1], [11, 1], 8], [-25, 3]], [[[0, 2], [12, 1], 4], [-220, 6]], [[[3, 5], [1, 12], 3], [85, 8]], [[[5, 5], [12, 1], 1], [103, 4]], [[[0, 4], [3, 10], 5], [-154, 4]], [[[3, 6], [3, 8], 9], [-8, 1]], [[[5, 5], [12, 0], 5], [102, 7]], [[[5, 1], [12, 1], 3], [-33, 0]]], [[[[0, 2], [12, 1], 4], [-220, 6]], [[[4, 0], [1, 8], 8], [-240, 6]], [[[1, 0], [9, 2], 4], [-182, 4]], [[[5, 1], [6, 7], 3], [-33, 0]], [[[1, 4], [3, 8], 0], [56, 6]], [[[1, 6], [2, 0], 5], [-70, 5]], [[[4, 5], [9, 4], 4], [94, 8]], [[[6, 0], [0, 10], 0], [-260, 0]]], [[[[4, 0], [1, 8], 8], [-240, 6]], [[[1, 5], [7, 0], 2], [61, 3]], [[[3, 4], [11, 1], 1], [75, 6]], [[[3, 1], [12, 0], 9], [-52, 7]], [[[5, 6], [7, 3], 6], [-110, 6]], [[[6, 0], [8, 3], 7], [-138, 2]], [[[2, 5], [13, 0], 1], [76, 7]], [[[1, 1], [7, 4], 1], [-71, 0]]], [[[[1, 4], [6, 4], 5], [-45, 0]], [[[6, 0], [8, 3], 7], [-138, 2]], [[[0, 4], [1, 4], 9], [-160, 0]], [[[6, 2], [3, 4], 8], [-80, 8]], [[[3, 2], [8, 2], 6], [-45, 1]], [[[3, 4], [7, 2], 9], [-28, 1]], [[[3, 5], [7, 3], 2], [82, 4]], [[[5, 3], [7, 2], 7], [81, 8]]], [[[[3, 4], [7, 2], 9], [-28, 1]], [[[2, 2], [10, 1], 9], [-53, 6]], [[[3, 5], [9, 2], 5], [83, 8]], [[[5, 3], [7, 5], 2], [84, 6]], [[[6, 2], [8, 0], 9], [80, 9]], [[[3, 0], [2, 0], 9], [70, 9]], [[[6, 4], [1, 10], 5], [101, 6]], [[[5, 1], [12, 1], 3], [-33, 0]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"team score case %d\" % i, 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":"A bounded toy rule contract stated explicitly in the contract field; cards are two-character codes (rank, suit). Not a complete implementation of any published rulebook or casino table rules. 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-card-game-rule-engines-spades-score-bag-rollover","generated_at":"2026-09-29T14:50:21.565259+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Card-game engines, scoring apps and online tables apply this rule automatically on every hand.","repair":"Subtract ten bags per penalty and keep the remainder.","root_cause":"The penalty branch zeroes the bag count.","sha256":"bca9c09f3c829c85187b4935fa711b3e9f2717f4a61e6ca8a5834f4b52a5d8bc","title":"Bag penalty discards bags beyond ten · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.755,"exit_code":1,"observations":[{"actual":[-25,3],"check":"team score case 0","expected":[-25,3],"passed":true},{"actual":[-220,6],"check":"team score case 1","expected":[-220,6],"passed":true},{"actual":[85,8],"check":"team score case 2","expected":[85,8],"passed":true},{"actual":[103,4],"check":"team score case 3","expected":[103,4],"passed":true},{"actual":[-154,4],"check":"team score case 4","expected":[-154,4],"passed":true},{"actual":[-8,1],"check":"team score case 5","expected":[-8,1],"passed":true},{"actual":[102,7],"check":"team score case 6","expected":[102,7],"passed":true},{"actual":[67,10],"check":"team score case 7","expected":[-33,0],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"team score case 0\", \"actual\": [-25, 3], \"expected\": [-25, 3], \"passed\": true}, {\"check\": \"team score case 1\", \"actual\": [-220, 6], \"expected\": [-220, 6], \"passed\": true}, {\"check\": \"team score case 2\", \"actual\": [85, 8], \"expected\": [85, 8], \"passed\": true}, {\"check\": \"team score case 3\", \"actual\": [103, 4], \"expected\": [103, 4], \"passed\": true}, {\"check\": \"team score case 4\", \"actual\": [-154, 4], \"expected\": [-154, 4], \"passed\": true}, {\"check\": \"team score case 5\", \"actual\": [-8, 1], \"expected\": [-8, 1], \"passed\": true}, {\"check\": \"team score case 6\", \"actual\": [102, 7], \"expected\": [102, 7], \"passed\": true}, {\"check\": \"team score case 7\", \"actual\": [67, 10], \"expected\": [-33, 0], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.128,"exit_code":1,"observations":[{"actual":[-25,0],"check":"team score case 0","expected":[-25,3],"passed":false},{"actual":[-220,0],"check":"team score case 1","expected":[-220,6],"passed":false},{"actual":[85,8],"check":"team score case 2","expected":[85,8],"passed":true},{"actual":[103,4],"check":"team score case 3","expected":[103,4],"passed":true},{"actual":[-154,0],"check":"team score case 4","expected":[-154,4],"passed":false},{"actual":[-8,0],"check":"team score case 5","expected":[-8,1],"passed":false},{"actual":[102,7],"check":"team score case 6","expected":[102,7],"passed":true},{"actual":[-33,0],"check":"team score case 7","expected":[-33,0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"team score case 0\", \"actual\": [-25, 0], \"expected\": [-25, 3], \"passed\": false}, {\"check\": \"team score case 1\", \"actual\": [-220, 0], \"expected\": [-220, 6], \"passed\": false}, {\"check\": \"team score case 2\", \"actual\": [85, 8], \"expected\": [85, 8], \"passed\": true}, {\"check\": \"team score case 3\", \"actual\": [103, 4], \"expected\": [103, 4], \"passed\": true}, {\"check\": \"team score case 4\", \"actual\": [-154, 0], \"expected\": [-154, 4], \"passed\": false}, {\"check\": \"team score case 5\", \"actual\": [-8, 0], \"expected\": [-8, 1], \"passed\": false}, {\"check\": \"team score case 6\", \"actual\": [102, 7], \"expected\": [102, 7], \"passed\": true}, {\"check\": \"team score case 7\", \"actual\": [-33, 0], \"expected\": [-33, 0], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.114,"exit_code":0,"observations":[{"actual":[-25,3],"check":"team score case 0","expected":[-25,3],"passed":true},{"actual":[-220,6],"check":"team score case 1","expected":[-220,6],"passed":true},{"actual":[85,8],"check":"team score case 2","expected":[85,8],"passed":true},{"actual":[103,4],"check":"team score case 3","expected":[103,4],"passed":true},{"actual":[-154,4],"check":"team score case 4","expected":[-154,4],"passed":true},{"actual":[-8,1],"check":"team score case 5","expected":[-8,1],"passed":true},{"actual":[102,7],"check":"team score case 6","expected":[102,7],"passed":true},{"actual":[-33,0],"check":"team score case 7","expected":[-33,0],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"team score case 0\", \"actual\": [-25, 3], \"expected\": [-25, 3], \"passed\": true}, {\"check\": \"team score case 1\", \"actual\": [-220, 6], \"expected\": [-220, 6], \"passed\": true}, {\"check\": \"team score case 2\", \"actual\": [85, 8], \"expected\": [85, 8], \"passed\": true}, {\"check\": \"team score case 3\", \"actual\": [103, 4], \"expected\": [103, 4], \"passed\": true}, {\"check\": \"team score case 4\", \"actual\": [-154, 4], \"expected\": [-154, 4], \"passed\": true}, {\"check\": \"team score case 5\", \"actual\": [-8, 1], \"expected\": [-8, 1], \"passed\": true}, {\"check\": \"team score case 6\", \"actual\": [102, 7], \"expected\": [102, 7], \"passed\": true}, {\"check\": \"team score case 7\", \"actual\": [-33, 0], \"expected\": [-33, 0], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}