{"abstract":"A player leading 40-15 is shown as having won the game one point early.","category":"Sports scoring and tiebreakers","checks":9,"contract":"points is a string of rally winners, each character A or B. A game ends at the first point where a player has at least 4 points and leads by at least 2; characters after that point are ignored. Return \"game A\"/\"game B\" when finished; otherwise \"deuce\" when both have at least 3 points and are level, \"advantage A\"/\"advantage B\" when both have at least 3 points and differ by one, else \"S-R\" using the labels 0, 15, 30, 40 in A-B order. A character other than A or B that is reached before the game ends returns \"invalid point <c>\".","evaluation_group":"w2-sports-scoring-tennis-game-display","failed_approach":"Using the combined point count (a + b >= 4) still ends a 40-15 game early.","family":"w2-sports-scoring-tennis-game-display-game-point-minimum","id":"FA-83846","implementations":{"attempt":{"sha256":"278fd3747f259a38dc61df66f2dcf94118fb9aac8a93ba5087f49d6151a8270a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(points):\n    names = ['0', '15', '30', '40']\n    a = b = 0\n    for p in points:\n        if p == 'A':\n            a += 1\n        elif p == 'B':\n            b += 1\n        else:\n            return 'invalid point ' + p\n        if (a + b >= 4) and abs(a - b) >= 2:\n            return 'game A' if a > b else 'game B'\n    if a >= 3 and b >= 3:\n        if a == b:\n            return 'deuce'\n        return 'advantage A' if a > b else 'advantage B'\n    return names[a] + '-' + names[b]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ndef run(args):\n    try:\n        return solve(*args)\n    except Exception as exc:\n        return 'raised ' + type(exc).__name__\ncases = [[('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('BBBAAC',), 'invalid point C'),\n  ('variant scenario 1', ('',), '0-0'),\n  ('variant scenario 2', ('AABBB',), '30-40')],\n [('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('BBBA',), '15-40'),\n  ('variant scenario 1', ('B',), '0-15'),\n  ('variant scenario 2', ('AABAABBAAB',), 'game A')],\n [('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('BABBAAA',), 'advantage A'),\n  ('variant scenario 1', ('AB',), '15-15'),\n  ('variant scenario 2', ('ABBAAABBBABC',), 'game A')],\n [('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('AAABB',), '40-30'),\n  ('variant scenario 1', ('BABABBAx',), 'game B'),\n  ('variant scenario 2', ('AAAABBAAABAABA',), 'game A')],\n [('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('BAAABBABBABA',), 'deuce'),\n  ('variant scenario 1', ('ABABBAABBBBABBB',), 'game B'),\n  ('variant scenario 2', ('B',), '0-15')]]\nfor label, args, expected in cases[N - 1]:\n    check(label, run(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":"fe375ed5b170b05bbff9ffd2eb9fceda44cc61a2a8183d056fc1d78083e3606b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(points):\n    names = ['0', '15', '30', '40']\n    a = b = 0\n    for p in points:\n        if p == 'A':\n            a += 1\n        elif p == 'B':\n            b += 1\n        else:\n            return 'invalid point ' + p\n        if (a >= 3 or b >= 3) and abs(a - b) >= 2:\n            return 'game A' if a > b else 'game B'\n    if a >= 3 and b >= 3:\n        if a == b:\n            return 'deuce'\n        return 'advantage A' if a > b else 'advantage B'\n    return names[a] + '-' + names[b]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ndef run(args):\n    try:\n        return solve(*args)\n    except Exception as exc:\n        return 'raised ' + type(exc).__name__\ncases = [[('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('BBBAAC',), 'invalid point C'),\n  ('variant scenario 1', ('',), '0-0'),\n  ('variant scenario 2', ('AABBB',), '30-40')],\n [('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('BBBA',), '15-40'),\n  ('variant scenario 1', ('B',), '0-15'),\n  ('variant scenario 2', ('AABAABBAAB',), 'game A')],\n [('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('BABBAAA',), 'advantage A'),\n  ('variant scenario 1', ('AB',), '15-15'),\n  ('variant scenario 2', ('ABBAAABBBABC',), 'game A')],\n [('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('AAABB',), '40-30'),\n  ('variant scenario 1', ('BABABBAx',), 'game B'),\n  ('variant scenario 2', ('AAAABBAAABAABA',), 'game A')],\n [('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('BAAABBABBABA',), 'deuce'),\n  ('variant scenario 1', ('ABABBAABBBBABBB',), 'game B'),\n  ('variant scenario 2', ('B',), '0-15')]]\nfor label, args, expected in cases[N - 1]:\n    check(label, run(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":"08e73274ebc6bcd0d033619b1171de07c1f58479e538143cbe1c21650a5ebcfb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(points):\n    names = ['0', '15', '30', '40']\n    a = b = 0\n    for p in points:\n        if p == 'A':\n            a += 1\n        elif p == 'B':\n            b += 1\n        else:\n            return 'invalid point ' + p\n        if (a >= 4 or b >= 4) and abs(a - b) >= 2:\n            return 'game A' if a > b else 'game B'\n    if a >= 3 and b >= 3:\n        if a == b:\n            return 'deuce'\n        return 'advantage A' if a > b else 'advantage B'\n    return names[a] + '-' + names[b]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ndef run(args):\n    try:\n        return solve(*args)\n    except Exception as exc:\n        return 'raised ' + type(exc).__name__\ncases = [[('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('BBBAAC',), 'invalid point C'),\n  ('variant scenario 1', ('',), '0-0'),\n  ('variant scenario 2', ('AABBB',), '30-40')],\n [('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('BBBA',), '15-40'),\n  ('variant scenario 1', ('B',), '0-15'),\n  ('variant scenario 2', ('AABAABBAAB',), 'game A')],\n [('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('BABBAAA',), 'advantage A'),\n  ('variant scenario 1', ('AB',), '15-15'),\n  ('variant scenario 2', ('ABBAAABBBABC',), 'game A')],\n [('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('AAABB',), '40-30'),\n  ('variant scenario 1', ('BABABBAx',), 'game B'),\n  ('variant scenario 2', ('AAAABBAAABAABA',), 'game A')],\n [('control love-thirty', ('BB',), '0-30'),\n  ('boundary first deuce', ('AABBAB',), 'deuce'),\n  ('boundary advantage after deuce', ('AAABBBB',), 'advantage B'),\n  ('control straight game', ('AAAA',), 'game A'),\n  ('boundary win from advantage', ('ABABABAA',), 'game A'),\n  ('control empty log', ('',), '0-0'),\n  ('regression: game point minimum', ('BAAABBABBABA',), 'deuce'),\n  ('variant scenario 1', ('ABABBAABBBBABBB',), 'game B'),\n  ('variant scenario 2', ('B',), '0-15')]]\nfor label, args, expected in cases[N - 1]:\n    check(label, run(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 toy contract stated in the contract field; not a claim of conformance with any governing body rulebook or operator house 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-sports-scoring-tennis-game-display-game-point-minimum","generated_at":"2026-09-29T14:50:25.295456+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Live scoreboards and umpire tablets derive the displayed tennis game score from a raw rally log.","repair":"Only close the game once a player has at least four points and leads by two.","root_cause":"The game-end test uses a three-point minimum, treating reaching 40 as winning.","sha256":"1c05fd95cee486fb048bac367e7d4f56366057a29a369889e49bd4a5640d3102","title":"Tennis game awarded at forty with a two-point lead · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.015,"exit_code":1,"observations":[{"actual":"0-30","check":"control love-thirty","expected":"0-30","passed":true},{"actual":"deuce","check":"boundary first deuce","expected":"deuce","passed":true},{"actual":"game A","check":"boundary advantage after deuce","expected":"advantage B","passed":false},{"actual":"game A","check":"control straight game","expected":"game A","passed":true},{"actual":"game A","check":"boundary win from advantage","expected":"game A","passed":true},{"actual":"0-0","check":"control empty log","expected":"0-0","passed":true},{"actual":"game B","check":"regression: game point minimum","expected":"invalid point C","passed":false},{"actual":"0-0","check":"variant scenario 1","expected":"0-0","passed":true},{"actual":"30-40","check":"variant scenario 2","expected":"30-40","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control love-thirty\", \"actual\": \"0-30\", \"expected\": \"0-30\", \"passed\": true}, {\"check\": \"boundary first deuce\", \"actual\": \"deuce\", \"expected\": \"deuce\", \"passed\": true}, {\"check\": \"boundary advantage after deuce\", \"actual\": \"game A\", \"expected\": \"advantage B\", \"passed\": false}, {\"check\": \"control straight game\", \"actual\": \"game A\", \"expected\": \"game A\", \"passed\": true}, {\"check\": \"boundary win from advantage\", \"actual\": \"game A\", \"expected\": \"game A\", \"passed\": true}, {\"check\": \"control empty log\", \"actual\": \"0-0\", \"expected\": \"0-0\", \"passed\": true}, {\"check\": \"regression: game point minimum\", \"actual\": \"game B\", \"expected\": \"invalid point C\", \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": \"0-0\", \"expected\": \"0-0\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"30-40\", \"expected\": \"30-40\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.236,"exit_code":1,"observations":[{"actual":"0-30","check":"control love-thirty","expected":"0-30","passed":true},{"actual":"deuce","check":"boundary first deuce","expected":"deuce","passed":true},{"actual":"game A","check":"boundary advantage after deuce","expected":"advantage B","passed":false},{"actual":"game A","check":"control straight game","expected":"game A","passed":true},{"actual":"game A","check":"boundary win from advantage","expected":"game A","passed":true},{"actual":"0-0","check":"control empty log","expected":"0-0","passed":true},{"actual":"game B","check":"regression: game point minimum","expected":"invalid point C","passed":false},{"actual":"0-0","check":"variant scenario 1","expected":"0-0","passed":true},{"actual":"30-40","check":"variant scenario 2","expected":"30-40","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control love-thirty\", \"actual\": \"0-30\", \"expected\": \"0-30\", \"passed\": true}, {\"check\": \"boundary first deuce\", \"actual\": \"deuce\", \"expected\": \"deuce\", \"passed\": true}, {\"check\": \"boundary advantage after deuce\", \"actual\": \"game A\", \"expected\": \"advantage B\", \"passed\": false}, {\"check\": \"control straight game\", \"actual\": \"game A\", \"expected\": \"game A\", \"passed\": true}, {\"check\": \"boundary win from advantage\", \"actual\": \"game A\", \"expected\": \"game A\", \"passed\": true}, {\"check\": \"control empty log\", \"actual\": \"0-0\", \"expected\": \"0-0\", \"passed\": true}, {\"check\": \"regression: game point minimum\", \"actual\": \"game B\", \"expected\": \"invalid point C\", \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": \"0-0\", \"expected\": \"0-0\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"30-40\", \"expected\": \"30-40\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.461,"exit_code":0,"observations":[{"actual":"0-30","check":"control love-thirty","expected":"0-30","passed":true},{"actual":"deuce","check":"boundary first deuce","expected":"deuce","passed":true},{"actual":"advantage B","check":"boundary advantage after deuce","expected":"advantage B","passed":true},{"actual":"game A","check":"control straight game","expected":"game A","passed":true},{"actual":"game A","check":"boundary win from advantage","expected":"game A","passed":true},{"actual":"0-0","check":"control empty log","expected":"0-0","passed":true},{"actual":"invalid point C","check":"regression: game point minimum","expected":"invalid point C","passed":true},{"actual":"0-0","check":"variant scenario 1","expected":"0-0","passed":true},{"actual":"30-40","check":"variant scenario 2","expected":"30-40","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control love-thirty\", \"actual\": \"0-30\", \"expected\": \"0-30\", \"passed\": true}, {\"check\": \"boundary first deuce\", \"actual\": \"deuce\", \"expected\": \"deuce\", \"passed\": true}, {\"check\": \"boundary advantage after deuce\", \"actual\": \"advantage B\", \"expected\": \"advantage B\", \"passed\": true}, {\"check\": \"control straight game\", \"actual\": \"game A\", \"expected\": \"game A\", \"passed\": true}, {\"check\": \"boundary win from advantage\", \"actual\": \"game A\", \"expected\": \"game A\", \"passed\": true}, {\"check\": \"control empty log\", \"actual\": \"0-0\", \"expected\": \"0-0\", \"passed\": true}, {\"check\": \"regression: game point minimum\", \"actual\": \"invalid point C\", \"expected\": \"invalid point C\", \"passed\": true}, {\"check\": \"variant scenario 1\", \"actual\": \"0-0\", \"expected\": \"0-0\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"30-40\", \"expected\": \"30-40\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}