{"abstract":"Corrupt characters are silently skipped or trailing garbage after a finished game is reported as an error.","category":"Sports scoring and tiebreakers","checks":10,"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":"Validating the whole string before scoring rejects logs whose junk appears after the game already ended.","family":"w2-sports-scoring-tennis-game-display-input-validation-scope","id":"FA-83856","implementations":{"attempt":{"sha256":"5e94cebd82f3d16b2a1e78b912d3345324587a9bb70b44912217e7b25ff1f5a9","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 not in ('A', 'B'):\n            return 'invalid point ' + p\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: input validation scope', ('BAAABABC',), 'game A'),\n  ('regression: input validation scope', ('BAABBAx',), 'invalid point x'),\n  ('variant scenario 1', ('BBBAB',), 'game B'),\n  ('variant scenario 2', ('AAAABAAA',), '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: input validation scope', ('BAC',), 'invalid point C'),\n  ('regression: input validation scope', ('ABABAAABBC',), 'game A'),\n  ('variant scenario 1', ('BBBB',), 'game B'),\n  ('variant scenario 2', ('AABBBBBAA',), 'game B')],\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: input validation scope', ('x',), 'invalid point x'),\n  ('regression: input validation scope', ('BAABBABBBBAx',), 'game B'),\n  ('variant scenario 1', ('AAAABABAA',), 'game A'),\n  ('variant scenario 2', ('AAABABA',), '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: input validation scope', ('BBAAABBABx',), 'invalid point x'),\n  ('regression: input validation scope', ('ABBBBAAABx',), 'game B'),\n  ('variant scenario 1', ('BAAAAA',), 'game A'),\n  ('variant scenario 2', ('AB',), '15-15')],\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: input validation scope', ('BABAABBBBAAAx',), 'game B'),\n  ('regression: input validation scope', ('ABC',), 'invalid point C'),\n  ('variant scenario 1', ('BBAAAABABBABBB',), 'game A'),\n  ('variant scenario 2', ('BBBBAABABBA',), 'game B')]]\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":"d0967f249c89ea289bbfa6f20d946d4e32f7f31ead6a05870bacf642f420792e","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            continue\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: input validation scope', ('BAAABABC',), 'game A'),\n  ('regression: input validation scope', ('BAABBAx',), 'invalid point x'),\n  ('variant scenario 1', ('BBBAB',), 'game B'),\n  ('variant scenario 2', ('AAAABAAA',), '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: input validation scope', ('BAC',), 'invalid point C'),\n  ('regression: input validation scope', ('ABABAAABBC',), 'game A'),\n  ('variant scenario 1', ('BBBB',), 'game B'),\n  ('variant scenario 2', ('AABBBBBAA',), 'game B')],\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: input validation scope', ('x',), 'invalid point x'),\n  ('regression: input validation scope', ('BAABBABBBBAx',), 'game B'),\n  ('variant scenario 1', ('AAAABABAA',), 'game A'),\n  ('variant scenario 2', ('AAABABA',), '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: input validation scope', ('BBAAABBABx',), 'invalid point x'),\n  ('regression: input validation scope', ('ABBBBAAABx',), 'game B'),\n  ('variant scenario 1', ('BAAAAA',), 'game A'),\n  ('variant scenario 2', ('AB',), '15-15')],\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: input validation scope', ('BABAABBBBAAAx',), 'game B'),\n  ('regression: input validation scope', ('ABC',), 'invalid point C'),\n  ('variant scenario 1', ('BBAAAABABBABBB',), 'game A'),\n  ('variant scenario 2', ('BBBBAABABBA',), 'game B')]]\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":"ff404242d8a563bfa7e82db9010505bd621577ad0a63bd3fa7e3772dd1673563","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: input validation scope', ('BAAABABC',), 'game A'),\n  ('regression: input validation scope', ('BAABBAx',), 'invalid point x'),\n  ('variant scenario 1', ('BBBAB',), 'game B'),\n  ('variant scenario 2', ('AAAABAAA',), '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: input validation scope', ('BAC',), 'invalid point C'),\n  ('regression: input validation scope', ('ABABAAABBC',), 'game A'),\n  ('variant scenario 1', ('BBBB',), 'game B'),\n  ('variant scenario 2', ('AABBBBBAA',), 'game B')],\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: input validation scope', ('x',), 'invalid point x'),\n  ('regression: input validation scope', ('BAABBABBBBAx',), 'game B'),\n  ('variant scenario 1', ('AAAABABAA',), 'game A'),\n  ('variant scenario 2', ('AAABABA',), '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: input validation scope', ('BBAAABBABx',), 'invalid point x'),\n  ('regression: input validation scope', ('ABBBBAAABx',), 'game B'),\n  ('variant scenario 1', ('BAAAAA',), 'game A'),\n  ('variant scenario 2', ('AB',), '15-15')],\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: input validation scope', ('BABAABBBBAAAx',), 'game B'),\n  ('regression: input validation scope', ('ABC',), 'invalid point C'),\n  ('variant scenario 1', ('BBAAAABABBABBB',), 'game A'),\n  ('variant scenario 2', ('BBBBAABABBA',), 'game B')]]\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-input-validation-scope","generated_at":"2026-09-29T14:50:25.384818+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":"Report an invalid character only when it is reached before the game has ended.","root_cause":"Unknown characters are skipped instead of producing the invalid-point result when they are reached.","sha256":"87045e10a68fa43e4578419123ebf54b0d6663339ef9ceae88ffaabfc4a4b0bc","title":"Rally log validation ignores the end-of-game cutoff · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.845,"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":"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: input validation scope","expected":"game A","passed":false},{"actual":"invalid point x","check":"regression: input validation scope","expected":"invalid point x","passed":true},{"actual":"game B","check":"variant scenario 1","expected":"game B","passed":true},{"actual":"game A","check":"variant scenario 2","expected":"game A","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\": \"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: input validation scope\", \"actual\": \"invalid point C\", \"expected\": \"game A\", \"passed\": false}, {\"check\": \"regression: input validation scope\", \"actual\": \"invalid point x\", \"expected\": \"invalid point x\", \"passed\": true}, {\"check\": \"variant scenario 1\", \"actual\": \"game B\", \"expected\": \"game B\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"game A\", \"expected\": \"game A\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.087,"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":"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":"game A","check":"regression: input validation scope","expected":"game A","passed":true},{"actual":"deuce","check":"regression: input validation scope","expected":"invalid point x","passed":false},{"actual":"game B","check":"variant scenario 1","expected":"game B","passed":true},{"actual":"game A","check":"variant scenario 2","expected":"game A","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\": \"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: input validation scope\", \"actual\": \"game A\", \"expected\": \"game A\", \"passed\": true}, {\"check\": \"regression: input validation scope\", \"actual\": \"deuce\", \"expected\": \"invalid point x\", \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": \"game B\", \"expected\": \"game B\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"game A\", \"expected\": \"game A\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.892,"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":"game A","check":"regression: input validation scope","expected":"game A","passed":true},{"actual":"invalid point x","check":"regression: input validation scope","expected":"invalid point x","passed":true},{"actual":"game B","check":"variant scenario 1","expected":"game B","passed":true},{"actual":"game A","check":"variant scenario 2","expected":"game A","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: input validation scope\", \"actual\": \"game A\", \"expected\": \"game A\", \"passed\": true}, {\"check\": \"regression: input validation scope\", \"actual\": \"invalid point x\", \"expected\": \"invalid point x\", \"passed\": true}, {\"check\": \"variant scenario 1\", \"actual\": \"game B\", \"expected\": \"game B\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"game A\", \"expected\": \"game A\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}