{"abstract":"A best-of-five match is declared over while a player has only two sets.","category":"Sports scoring and tiebreakers","checks":10,"contract":"games is a string of game winners (A/B); best_of is 3 or 5. A set is won by the first player to 6 games with a lead of two, or at 7 games (7-5, or 7-6 after the tiebreak game played at 6-6). The match ends when a player has won best_of // 2 + 1 sets; later games are ignored. Return [set scores as \"a-b\" strings in A-B order, match winner or None]; an unfinished set with at least one game is appended as its current score.","contract_signature":"games, best_of","evaluation_group":"w2-sports-scoring-tennis-set-and-match","failed_approach":"Using best_of - 1 is right for best-of-three but requires four sets in best-of-five.","family":"w2-sports-scoring-tennis-set-and-match-sets-needed","id":"FA-83891","implementations":{"attempt":{"sha256":"d1f939836417cc7645e8ad999a8fb8eab1addaec82cdd2211b80b249403807ff","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(games, best_of):\n    sets = []\n    a = b = 0\n    won = {'A': 0, 'B': 0}\n    need = best_of - 1\n    for g in games:\n        if g == 'A':\n            a += 1\n        else:\n            b += 1\n        if (max(a, b) >= 6 and abs(a - b) >= 2) or max(a, b) == 7:\n            w = 'A' if a > b else 'B'\n            won[w] += 1\n            sets.append('%d-%d' % (a, b))\n            a = b = 0\n            if won[w] == need:\n                return [sets, w]\n    if a or b:\n        sets.append('%d-%d' % (a, b))\n    return [sets, None]\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 bagel set', ('AAAAAA', 3), [['6-0'], None]),\n  ('boundary seven-five', ('AAAAABBBBBAA', 3), [['7-5'], None]),\n  ('boundary tiebreak set', ('AAAAABBBBBABB', 3), [['6-7'], None]),\n  ('control straight sets', ('AAAAAAAAAAAA', 3), [['6-0', '6-0'], 'A']),\n  ('control in-progress set', ('AAAAAAB', 3), [['6-0', '0-1'], None]),\n  ('control empty', ('', 5), [[], None]),\n  ('regression: sets needed', ('BAAABBAAABBA', 3), [['6-3', '1-2'], None]),\n  ('regression: sets needed', ('AAAAAABBBABAAAAABAABBAAAABBB', 5), [['6-0', '6-4', '6-3'], 'A']),\n  ('variant scenario 1', ('AABBBABBA', 3), [['4-5'], None]),\n  ('variant scenario 2', ('AAABAAAABBBABBB', 5), [['6-1', '2-6'], None])],\n [('control bagel set', ('AAAAAA', 3), [['6-0'], None]),\n  ('boundary seven-five', ('AAAAABBBBBAA', 3), [['7-5'], None]),\n  ('boundary tiebreak set', ('AAAAABBBBBABB', 3), [['6-7'], None]),\n  ('control straight sets', ('AAAAAAAAAAAA', 3), [['6-0', '6-0'], 'A']),\n  ('control in-progress set', ('AAAAAAB', 3), [['6-0', '0-1'], None]),\n  ('control empty', ('', 5), [[], None]),\n  ('regression: sets needed', ('AAAAABAABBBAAAAAAABBBAAABBBAA', 3), [['6-1', '6-3'], 'A']),\n  ('regression: sets needed', ('BBAABAAAAABBAAABBAAAAAAAA', 5), [['6-3', '6-4', '6-0'], 'A']),\n  ('variant scenario 1', ('ABBAABAABBAABABB', 3), [['7-5', '1-3'], None]),\n  ('variant scenario 2', ('AABAAAAABAABBABAABABBAAAABA', 3), [['6-1', '6-4'], 'A'])],\n [('control bagel set', ('AAAAAA', 3), [['6-0'], None]),\n  ('boundary seven-five', ('AAAAABBBBBAA', 3), [['7-5'], None]),\n  ('boundary tiebreak set', ('AAAAABBBBBABB', 3), [['6-7'], None]),\n  ('control straight sets', ('AAAAAAAAAAAA', 3), [['6-0', '6-0'], 'A']),\n  ('control in-progress set', ('AAAAAAB', 3), [['6-0', '0-1'], None]),\n  ('control empty', ('', 5), [[], None]),\n  ('regression: sets needed', ('BBABBBBBBABAABBBBAAABBBABBABBAB', 5), [['1-6', '3-6', '4-6'], 'B']),\n  ('variant scenario 1', ('AAABAA', 5), [['5-1'], None]),\n  ('variant scenario 2', ('AABAABBBAABAAAABBAAABAAB', 5), [['6-4', '6-3', '3-2'], None])],\n [('control bagel set', ('AAAAAA', 3), [['6-0'], None]),\n  ('boundary seven-five', ('AAAAABBBBBAA', 3), [['7-5'], None]),\n  ('boundary tiebreak set', ('AAAAABBBBBABB', 3), [['6-7'], None]),\n  ('control straight sets', ('AAAAAAAAAAAA', 3), [['6-0', '6-0'], 'A']),\n  ('control in-progress set', ('AAAAAAB', 3), [['6-0', '0-1'], None]),\n  ('control empty', ('', 5), [[], None]),\n  ('regression: sets needed', ('ABBABBAABBABABA', 3), [['4-6', '3-2'], None]),\n  ('regression: sets needed',\n   ('AAAAAAAAABABBBAAABAABAAABABAAAABABBB', 5),\n   [['6-0', '6-4', '6-2'], 'A']),\n  ('variant scenario 1', ('BABAA', 3), [['3-2'], None]),\n  ('variant scenario 2',\n   ('BAABABBBAAAAABBBAABBABBABAAABBAAAABBBABAABAABABBA', 3),\n   [['7-5', '4-6', '6-4'], 'A'])],\n [('control bagel set', ('AAAAAA', 3), [['6-0'], None]),\n  ('boundary seven-five', ('AAAAABBBBBAA', 3), [['7-5'], None]),\n  ('boundary tiebreak set', ('AAAAABBBBBABB', 3), [['6-7'], None]),\n  ('control straight sets', ('AAAAAAAAAAAA', 3), [['6-0', '6-0'], 'A']),\n  ('control in-progress set', ('AAAAAAB', 3), [['6-0', '0-1'], None]),\n  ('control empty', ('', 5), [[], None]),\n  ('regression: sets needed', ('BABAAABBAAAABAAABAABBABBBBAAA', 3), [['6-4', '6-2'], 'A']),\n  ('regression: sets needed',\n   ('AAAAAAAABAAAAAAABAAAABAABBAAAAAABAABBAAABA', 5),\n   [['6-0', '6-1', '6-1'], 'A']),\n  ('variant scenario 1',\n   ('BBBABBBAAABAAAAAAAAABABAAABAAAAAABABA', 3),\n   [['1-6', '6-1', '6-0'], 'A']),\n  ('variant scenario 2', ('BBAAAAAABABBABBABAAAAAAAAABAABBA', 3), [['6-2', '3-6', '6-0'], 'A'])]]\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":"9a2c29352e2f8e63c7a16d7d6690298c21c429d5cd8e6735a7a204939b55577f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(games, best_of):\n    sets = []\n    a = b = 0\n    won = {'A': 0, 'B': 0}\n    need = best_of // 2\n    for g in games:\n        if g == 'A':\n            a += 1\n        else:\n            b += 1\n        if (max(a, b) >= 6 and abs(a - b) >= 2) or max(a, b) == 7:\n            w = 'A' if a > b else 'B'\n            won[w] += 1\n            sets.append('%d-%d' % (a, b))\n            a = b = 0\n            if won[w] == need:\n                return [sets, w]\n    if a or b:\n        sets.append('%d-%d' % (a, b))\n    return [sets, None]\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 bagel set', ('AAAAAA', 3), [['6-0'], None]),\n  ('boundary seven-five', ('AAAAABBBBBAA', 3), [['7-5'], None]),\n  ('boundary tiebreak set', ('AAAAABBBBBABB', 3), [['6-7'], None]),\n  ('control straight sets', ('AAAAAAAAAAAA', 3), [['6-0', '6-0'], 'A']),\n  ('control in-progress set', ('AAAAAAB', 3), [['6-0', '0-1'], None]),\n  ('control empty', ('', 5), [[], None]),\n  ('regression: sets needed', ('BAAABBAAABBA', 3), [['6-3', '1-2'], None]),\n  ('regression: sets needed', ('AAAAAABBBABAAAAABAABBAAAABBB', 5), [['6-0', '6-4', '6-3'], 'A']),\n  ('variant scenario 1', ('AABBBABBA', 3), [['4-5'], None]),\n  ('variant scenario 2', ('AAABAAAABBBABBB', 5), [['6-1', '2-6'], None])],\n [('control bagel set', ('AAAAAA', 3), [['6-0'], None]),\n  ('boundary seven-five', ('AAAAABBBBBAA', 3), [['7-5'], None]),\n  ('boundary tiebreak set', ('AAAAABBBBBABB', 3), [['6-7'], None]),\n  ('control straight sets', ('AAAAAAAAAAAA', 3), [['6-0', '6-0'], 'A']),\n  ('control in-progress set', ('AAAAAAB', 3), [['6-0', '0-1'], None]),\n  ('control empty', ('', 5), [[], None]),\n  ('regression: sets needed', ('AAAAABAABBBAAAAAAABBBAAABBBAA', 3), [['6-1', '6-3'], 'A']),\n  ('regression: sets needed', ('BBAABAAAAABBAAABBAAAAAAAA', 5), [['6-3', '6-4', '6-0'], 'A']),\n  ('variant scenario 1', ('ABBAABAABBAABABB', 3), [['7-5', '1-3'], None]),\n  ('variant scenario 2', ('AABAAAAABAABBABAABABBAAAABA', 3), [['6-1', '6-4'], 'A'])],\n [('control bagel set', ('AAAAAA', 3), [['6-0'], None]),\n  ('boundary seven-five', ('AAAAABBBBBAA', 3), [['7-5'], None]),\n  ('boundary tiebreak set', ('AAAAABBBBBABB', 3), [['6-7'], None]),\n  ('control straight sets', ('AAAAAAAAAAAA', 3), [['6-0', '6-0'], 'A']),\n  ('control in-progress set', ('AAAAAAB', 3), [['6-0', '0-1'], None]),\n  ('control empty', ('', 5), [[], None]),\n  ('regression: sets needed', ('BBABBBBBBABAABBBBAAABBBABBABBAB', 5), [['1-6', '3-6', '4-6'], 'B']),\n  ('variant scenario 1', ('AAABAA', 5), [['5-1'], None]),\n  ('variant scenario 2', ('AABAABBBAABAAAABBAAABAAB', 5), [['6-4', '6-3', '3-2'], None])],\n [('control bagel set', ('AAAAAA', 3), [['6-0'], None]),\n  ('boundary seven-five', ('AAAAABBBBBAA', 3), [['7-5'], None]),\n  ('boundary tiebreak set', ('AAAAABBBBBABB', 3), [['6-7'], None]),\n  ('control straight sets', ('AAAAAAAAAAAA', 3), [['6-0', '6-0'], 'A']),\n  ('control in-progress set', ('AAAAAAB', 3), [['6-0', '0-1'], None]),\n  ('control empty', ('', 5), [[], None]),\n  ('regression: sets needed', ('ABBABBAABBABABA', 3), [['4-6', '3-2'], None]),\n  ('regression: sets needed',\n   ('AAAAAAAAABABBBAAABAABAAABABAAAABABBB', 5),\n   [['6-0', '6-4', '6-2'], 'A']),\n  ('variant scenario 1', ('BABAA', 3), [['3-2'], None]),\n  ('variant scenario 2',\n   ('BAABABBBAAAAABBBAABBABBABAAABBAAAABBBABAABAABABBA', 3),\n   [['7-5', '4-6', '6-4'], 'A'])],\n [('control bagel set', ('AAAAAA', 3), [['6-0'], None]),\n  ('boundary seven-five', ('AAAAABBBBBAA', 3), [['7-5'], None]),\n  ('boundary tiebreak set', ('AAAAABBBBBABB', 3), [['6-7'], None]),\n  ('control straight sets', ('AAAAAAAAAAAA', 3), [['6-0', '6-0'], 'A']),\n  ('control in-progress set', ('AAAAAAB', 3), [['6-0', '0-1'], None]),\n  ('control empty', ('', 5), [[], None]),\n  ('regression: sets needed', ('BABAAABBAAAABAAABAABBABBBBAAA', 3), [['6-4', '6-2'], 'A']),\n  ('regression: sets needed',\n   ('AAAAAAAABAAAAAAABAAAABAABBAAAAAABAABBAAABA', 5),\n   [['6-0', '6-1', '6-1'], 'A']),\n  ('variant scenario 1',\n   ('BBBABBBAAABAAAAAAAAABABAAABAAAAAABABA', 3),\n   [['1-6', '6-1', '6-0'], 'A']),\n  ('variant scenario 2', ('BBAAAAAABABBABBABAAAAAAAAABAABBA', 3), [['6-2', '3-6', '6-0'], 'A'])]]\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-set-and-match-sets-needed","generated_at":"2026-09-29T14:50:25.856854+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Tournament live-results feeds reconstruct set scores from game-level events.","root_cause":"The number of sets needed is computed as best_of // 2.","sha256":"dd8e2ccd7ce033fc0773b59c2ad9075841963c45662e01f2095c908259c8c458","title":"Best-of-five match decided after the wrong number of sets · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":40.07,"exit_code":1,"observations":[{"actual":[["6-0"],null],"check":"control bagel set","expected":[["6-0"],null],"passed":true},{"actual":[["7-5"],null],"check":"boundary seven-five","expected":[["7-5"],null],"passed":true},{"actual":[["6-7"],null],"check":"boundary tiebreak set","expected":[["6-7"],null],"passed":true},{"actual":[["6-0","6-0"],"A"],"check":"control straight sets","expected":[["6-0","6-0"],"A"],"passed":true},{"actual":[["6-0","0-1"],null],"check":"control in-progress set","expected":[["6-0","0-1"],null],"passed":true},{"actual":[[],null],"check":"control empty","expected":[[],null],"passed":true},{"actual":[["6-3","1-2"],null],"check":"regression: sets needed","expected":[["6-3","1-2"],null],"passed":true},{"actual":[["6-0","6-4","6-3","0-3"],null],"check":"regression: sets needed","expected":[["6-0","6-4","6-3"],"A"],"passed":false},{"actual":[["4-5"],null],"check":"variant scenario 1","expected":[["4-5"],null],"passed":true},{"actual":[["6-1","2-6"],null],"check":"variant scenario 2","expected":[["6-1","2-6"],null],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control bagel set\", \"actual\": [[\"6-0\"], null], \"expected\": [[\"6-0\"], null], \"passed\": true}, {\"check\": \"boundary seven-five\", \"actual\": [[\"7-5\"], null], \"expected\": [[\"7-5\"], null], \"passed\": true}, {\"check\": \"boundary tiebreak set\", \"actual\": [[\"6-7\"], null], \"expected\": [[\"6-7\"], null], \"passed\": true}, {\"check\": \"control straight sets\", \"actual\": [[\"6-0\", \"6-0\"], \"A\"], \"expected\": [[\"6-0\", \"6-0\"], \"A\"], \"passed\": true}, {\"check\": \"control in-progress set\", \"actual\": [[\"6-0\", \"0-1\"], null], \"expected\": [[\"6-0\", \"0-1\"], null], \"passed\": true}, {\"check\": \"control empty\", \"actual\": [[], null], \"expected\": [[], null], \"passed\": true}, {\"check\": \"regression: sets needed\", \"actual\": [[\"6-3\", \"1-2\"], null], \"expected\": [[\"6-3\", \"1-2\"], null], \"passed\": true}, {\"check\": \"regression: sets needed\", \"actual\": [[\"6-0\", \"6-4\", \"6-3\", \"0-3\"], null], \"expected\": [[\"6-0\", \"6-4\", \"6-3\"], \"A\"], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [[\"4-5\"], null], \"expected\": [[\"4-5\"], null], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [[\"6-1\", \"2-6\"], null], \"expected\": [[\"6-1\", \"2-6\"], null], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.226,"exit_code":1,"observations":[{"actual":[["6-0"],"A"],"check":"control bagel set","expected":[["6-0"],null],"passed":false},{"actual":[["7-5"],"A"],"check":"boundary seven-five","expected":[["7-5"],null],"passed":false},{"actual":[["6-7"],"B"],"check":"boundary tiebreak set","expected":[["6-7"],null],"passed":false},{"actual":[["6-0"],"A"],"check":"control straight sets","expected":[["6-0","6-0"],"A"],"passed":false},{"actual":[["6-0"],"A"],"check":"control in-progress set","expected":[["6-0","0-1"],null],"passed":false},{"actual":[[],null],"check":"control empty","expected":[[],null],"passed":true},{"actual":[["6-3"],"A"],"check":"regression: sets needed","expected":[["6-3","1-2"],null],"passed":false},{"actual":[["6-0","6-4"],"A"],"check":"regression: sets needed","expected":[["6-0","6-4","6-3"],"A"],"passed":false},{"actual":[["4-5"],null],"check":"variant scenario 1","expected":[["4-5"],null],"passed":true},{"actual":[["6-1","2-6"],null],"check":"variant scenario 2","expected":[["6-1","2-6"],null],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control bagel set\", \"actual\": [[\"6-0\"], \"A\"], \"expected\": [[\"6-0\"], null], \"passed\": false}, {\"check\": \"boundary seven-five\", \"actual\": [[\"7-5\"], \"A\"], \"expected\": [[\"7-5\"], null], \"passed\": false}, {\"check\": \"boundary tiebreak set\", \"actual\": [[\"6-7\"], \"B\"], \"expected\": [[\"6-7\"], null], \"passed\": false}, {\"check\": \"control straight sets\", \"actual\": [[\"6-0\"], \"A\"], \"expected\": [[\"6-0\", \"6-0\"], \"A\"], \"passed\": false}, {\"check\": \"control in-progress set\", \"actual\": [[\"6-0\"], \"A\"], \"expected\": [[\"6-0\", \"0-1\"], null], \"passed\": false}, {\"check\": \"control empty\", \"actual\": [[], null], \"expected\": [[], null], \"passed\": true}, {\"check\": \"regression: sets needed\", \"actual\": [[\"6-3\"], \"A\"], \"expected\": [[\"6-3\", \"1-2\"], null], \"passed\": false}, {\"check\": \"regression: sets needed\", \"actual\": [[\"6-0\", \"6-4\"], \"A\"], \"expected\": [[\"6-0\", \"6-4\", \"6-3\"], \"A\"], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [[\"4-5\"], null], \"expected\": [[\"4-5\"], null], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [[\"6-1\", \"2-6\"], null], \"expected\": [[\"6-1\", \"2-6\"], null], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}