{"abstract":"Players accumulate multiple buttons by passing repeatedly.","category":"Go territory scoring","checks":8,"contract":"Input [area_b, area_w, passes, komi_tenths]. The first player ever to pass takes the button worth half a point. Return [black_tenths, white_tenths, winner] with winner B, W or draw.","evaluation_group":"w2-go-territory-scoring-button-go","failed_approach":"Awarding only when exactly one pass occurred drops the button in normal two-pass endings.","family":"w2-go-territory-scoring-button-go-button-uniqueness","id":"FA-83186","implementations":{"attempt":{"sha256":"b1659303ebc1e34b52bf567ce9762a6d2fd6b3a8b449735d5eb4267c8202e1a6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    ab, aw, passes, komi = x\n    sb = ab * 10\n    sw = aw * 10 + komi\n    if len(passes) == 1:\n        if passes[0] == 'B':\n            sb += 5\n        else:\n            sw += 5\n    winner = 'B' if sb > sw else 'W' if sw > sb else 'draw'\n    return [sb, sw, winner]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[186, 173, ['W', 'W'], 0], [1860, 1735, 'B']], [[171, 180, ['W', 'B', 'B'], 60], [1710, 1865, 'W']], [[186, 187, ['B', 'W'], 0], [1865, 1870, 'W']], [[187, 178, ['W'], 60], [1870, 1845, 'B']], [[178, 183, ['W', 'W', 'W'], 60], [1780, 1895, 'W']], [[179, 185, ['W'], 60], [1790, 1915, 'W']], [[174, 182, ['W', 'B', 'B'], 5], [1740, 1830, 'W']], [[187, 175, ['B'], 60], [1875, 1810, 'B']]], [[[180, 171, ['W', 'B', 'W'], 0], [1800, 1715, 'B']], [[186, 183, [], 60], [1860, 1890, 'W']], [[191, 181, ['B', 'W', 'W'], 0], [1915, 1810, 'B']], [[186, 178, ['W', 'B'], 5], [1860, 1790, 'B']], [[187, 185, ['W'], 70], [1870, 1925, 'W']], [[178, 182, ['B', 'B'], 5], [1785, 1825, 'W']], [[176, 188, ['W', 'W'], 5], [1760, 1890, 'W']], [[171, 181, ['W', 'W'], 60], [1710, 1875, 'W']]], [[[171, 180, ['W', 'B', 'B'], 60], [1710, 1865, 'W']], [[171, 190, ['W', 'W'], 0], [1710, 1905, 'W']], [[175, 191, [], 5], [1750, 1915, 'W']], [[186, 183, ['W', 'W', 'W'], 5], [1860, 1840, 'B']], [[170, 181, [], 0], [1700, 1810, 'W']], [[179, 175, ['W'], 60], [1790, 1815, 'W']], [[190, 180, ['B', 'W', 'W'], 70], [1905, 1870, 'B']], [[176, 182, ['W', 'W', 'W'], 70], [1760, 1895, 'W']]], [[[174, 182, ['W', 'B', 'B'], 5], [1740, 1830, 'W']], [[179, 189, [], 60], [1790, 1950, 'W']], [[172, 174, [], 5], [1720, 1745, 'W']], [[177, 171, ['W'], 70], [1770, 1785, 'W']], [[179, 182, ['B'], 0], [1795, 1820, 'W']], [[182, 174, ['B', 'B'], 70], [1825, 1810, 'B']], [[173, 172, [], 70], [1730, 1790, 'W']], [[179, 175, ['W', 'W', 'B'], 60], [1790, 1815, 'W']]], [[[178, 182, ['B', 'B'], 5], [1785, 1825, 'W']], [[177, 171, ['B'], 60], [1775, 1770, 'B']], [[175, 176, ['B'], 5], [1755, 1765, 'W']], [[182, 185, ['B', 'W'], 60], [1825, 1910, 'W']], [[179, 175, ['W', 'W', 'B'], 60], [1790, 1815, 'W']], [[181, 180, ['B', 'B'], 70], [1815, 1870, 'W']], [[171, 191, [], 70], [1710, 1980, 'W']], [[173, 177, ['W', 'W'], 70], [1730, 1845, 'W']]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"button 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":"4c15df22597d6cce5f228d79ef5b7073064dfbc3f469ccea56ac7d9b78c3feb0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    ab, aw, passes, komi = x\n    sb = ab * 10\n    sw = aw * 10 + komi\n    for who in passes:\n        if who == 'B':\n            sb += 5\n        else:\n            sw += 5\n    winner = 'B' if sb > sw else 'W' if sw > sb else 'draw'\n    return [sb, sw, winner]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[186, 173, ['W', 'W'], 0], [1860, 1735, 'B']], [[171, 180, ['W', 'B', 'B'], 60], [1710, 1865, 'W']], [[186, 187, ['B', 'W'], 0], [1865, 1870, 'W']], [[187, 178, ['W'], 60], [1870, 1845, 'B']], [[178, 183, ['W', 'W', 'W'], 60], [1780, 1895, 'W']], [[179, 185, ['W'], 60], [1790, 1915, 'W']], [[174, 182, ['W', 'B', 'B'], 5], [1740, 1830, 'W']], [[187, 175, ['B'], 60], [1875, 1810, 'B']]], [[[180, 171, ['W', 'B', 'W'], 0], [1800, 1715, 'B']], [[186, 183, [], 60], [1860, 1890, 'W']], [[191, 181, ['B', 'W', 'W'], 0], [1915, 1810, 'B']], [[186, 178, ['W', 'B'], 5], [1860, 1790, 'B']], [[187, 185, ['W'], 70], [1870, 1925, 'W']], [[178, 182, ['B', 'B'], 5], [1785, 1825, 'W']], [[176, 188, ['W', 'W'], 5], [1760, 1890, 'W']], [[171, 181, ['W', 'W'], 60], [1710, 1875, 'W']]], [[[171, 180, ['W', 'B', 'B'], 60], [1710, 1865, 'W']], [[171, 190, ['W', 'W'], 0], [1710, 1905, 'W']], [[175, 191, [], 5], [1750, 1915, 'W']], [[186, 183, ['W', 'W', 'W'], 5], [1860, 1840, 'B']], [[170, 181, [], 0], [1700, 1810, 'W']], [[179, 175, ['W'], 60], [1790, 1815, 'W']], [[190, 180, ['B', 'W', 'W'], 70], [1905, 1870, 'B']], [[176, 182, ['W', 'W', 'W'], 70], [1760, 1895, 'W']]], [[[174, 182, ['W', 'B', 'B'], 5], [1740, 1830, 'W']], [[179, 189, [], 60], [1790, 1950, 'W']], [[172, 174, [], 5], [1720, 1745, 'W']], [[177, 171, ['W'], 70], [1770, 1785, 'W']], [[179, 182, ['B'], 0], [1795, 1820, 'W']], [[182, 174, ['B', 'B'], 70], [1825, 1810, 'B']], [[173, 172, [], 70], [1730, 1790, 'W']], [[179, 175, ['W', 'W', 'B'], 60], [1790, 1815, 'W']]], [[[178, 182, ['B', 'B'], 5], [1785, 1825, 'W']], [[177, 171, ['B'], 60], [1775, 1770, 'B']], [[175, 176, ['B'], 5], [1755, 1765, 'W']], [[182, 185, ['B', 'W'], 60], [1825, 1910, 'W']], [[179, 175, ['W', 'W', 'B'], 60], [1790, 1815, 'W']], [[181, 180, ['B', 'B'], 70], [1815, 1870, 'W']], [[171, 191, [], 70], [1710, 1980, 'W']], [[173, 177, ['W', 'W'], 70], [1730, 1845, 'W']]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"button 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":"b714fc76df6e678ef844a274f15c027a87b453b0c78c8dcd59012b88743ac2fb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    ab, aw, passes, komi = x\n    sb = ab * 10\n    sw = aw * 10 + komi\n    if passes:\n        if passes[0] == 'B':\n            sb += 5\n        else:\n            sw += 5\n    winner = 'B' if sb > sw else 'W' if sw > sb else 'draw'\n    return [sb, sw, winner]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[186, 173, ['W', 'W'], 0], [1860, 1735, 'B']], [[171, 180, ['W', 'B', 'B'], 60], [1710, 1865, 'W']], [[186, 187, ['B', 'W'], 0], [1865, 1870, 'W']], [[187, 178, ['W'], 60], [1870, 1845, 'B']], [[178, 183, ['W', 'W', 'W'], 60], [1780, 1895, 'W']], [[179, 185, ['W'], 60], [1790, 1915, 'W']], [[174, 182, ['W', 'B', 'B'], 5], [1740, 1830, 'W']], [[187, 175, ['B'], 60], [1875, 1810, 'B']]], [[[180, 171, ['W', 'B', 'W'], 0], [1800, 1715, 'B']], [[186, 183, [], 60], [1860, 1890, 'W']], [[191, 181, ['B', 'W', 'W'], 0], [1915, 1810, 'B']], [[186, 178, ['W', 'B'], 5], [1860, 1790, 'B']], [[187, 185, ['W'], 70], [1870, 1925, 'W']], [[178, 182, ['B', 'B'], 5], [1785, 1825, 'W']], [[176, 188, ['W', 'W'], 5], [1760, 1890, 'W']], [[171, 181, ['W', 'W'], 60], [1710, 1875, 'W']]], [[[171, 180, ['W', 'B', 'B'], 60], [1710, 1865, 'W']], [[171, 190, ['W', 'W'], 0], [1710, 1905, 'W']], [[175, 191, [], 5], [1750, 1915, 'W']], [[186, 183, ['W', 'W', 'W'], 5], [1860, 1840, 'B']], [[170, 181, [], 0], [1700, 1810, 'W']], [[179, 175, ['W'], 60], [1790, 1815, 'W']], [[190, 180, ['B', 'W', 'W'], 70], [1905, 1870, 'B']], [[176, 182, ['W', 'W', 'W'], 70], [1760, 1895, 'W']]], [[[174, 182, ['W', 'B', 'B'], 5], [1740, 1830, 'W']], [[179, 189, [], 60], [1790, 1950, 'W']], [[172, 174, [], 5], [1720, 1745, 'W']], [[177, 171, ['W'], 70], [1770, 1785, 'W']], [[179, 182, ['B'], 0], [1795, 1820, 'W']], [[182, 174, ['B', 'B'], 70], [1825, 1810, 'B']], [[173, 172, [], 70], [1730, 1790, 'W']], [[179, 175, ['W', 'W', 'B'], 60], [1790, 1815, 'W']]], [[[178, 182, ['B', 'B'], 5], [1785, 1825, 'W']], [[177, 171, ['B'], 60], [1775, 1770, 'B']], [[175, 176, ['B'], 5], [1755, 1765, 'W']], [[182, 185, ['B', 'W'], 60], [1825, 1910, 'W']], [[179, 175, ['W', 'W', 'B'], 60], [1790, 1815, 'W']], [[181, 180, ['B', 'B'], 70], [1815, 1870, 'W']], [[171, 191, [], 70], [1710, 1980, 'W']], [[173, 177, ['W', 'W'], 70], [1730, 1845, 'W']]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"button 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":"Small rectangular toy boards given as strings of B, W and dot; a bounded teaching model of one scoring or bookkeeping rule, not a complete rules engine or server implementation. 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-go-territory-scoring-button-go-button-uniqueness","generated_at":"2026-09-29T14:50:19.368114+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Go servers and scoring tools compute this value automatically; a wrong answer changes a game result.","repair":"There is exactly one button, taken by the first passer.","root_cause":"The award is inside a loop over all passes.","sha256":"66e5785dec6d55e81331cbd2fc1108e10237bf637c51ec037263cb20b93098c0","title":"Every pass earns another half point · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.584,"exit_code":1,"observations":[{"actual":[1860,1730,"B"],"check":"button case 0","expected":[1860,1735,"B"],"passed":false},{"actual":[1710,1860,"W"],"check":"button case 1","expected":[1710,1865,"W"],"passed":false},{"actual":[1860,1870,"W"],"check":"button case 2","expected":[1865,1870,"W"],"passed":false},{"actual":[1870,1845,"B"],"check":"button case 3","expected":[1870,1845,"B"],"passed":true},{"actual":[1780,1890,"W"],"check":"button case 4","expected":[1780,1895,"W"],"passed":false},{"actual":[1790,1915,"W"],"check":"button case 5","expected":[1790,1915,"W"],"passed":true},{"actual":[1740,1825,"W"],"check":"button case 6","expected":[1740,1830,"W"],"passed":false},{"actual":[1875,1810,"B"],"check":"button case 7","expected":[1875,1810,"B"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"button case 0\", \"actual\": [1860, 1730, \"B\"], \"expected\": [1860, 1735, \"B\"], \"passed\": false}, {\"check\": \"button case 1\", \"actual\": [1710, 1860, \"W\"], \"expected\": [1710, 1865, \"W\"], \"passed\": false}, {\"check\": \"button case 2\", \"actual\": [1860, 1870, \"W\"], \"expected\": [1865, 1870, \"W\"], \"passed\": false}, {\"check\": \"button case 3\", \"actual\": [1870, 1845, \"B\"], \"expected\": [1870, 1845, \"B\"], \"passed\": true}, {\"check\": \"button case 4\", \"actual\": [1780, 1890, \"W\"], \"expected\": [1780, 1895, \"W\"], \"passed\": false}, {\"check\": \"button case 5\", \"actual\": [1790, 1915, \"W\"], \"expected\": [1790, 1915, \"W\"], \"passed\": true}, {\"check\": \"button case 6\", \"actual\": [1740, 1825, \"W\"], \"expected\": [1740, 1830, \"W\"], \"passed\": false}, {\"check\": \"button case 7\", \"actual\": [1875, 1810, \"B\"], \"expected\": [1875, 1810, \"B\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.612,"exit_code":1,"observations":[{"actual":[1860,1740,"B"],"check":"button case 0","expected":[1860,1735,"B"],"passed":false},{"actual":[1720,1865,"W"],"check":"button case 1","expected":[1710,1865,"W"],"passed":false},{"actual":[1865,1875,"W"],"check":"button case 2","expected":[1865,1870,"W"],"passed":false},{"actual":[1870,1845,"B"],"check":"button case 3","expected":[1870,1845,"B"],"passed":true},{"actual":[1780,1905,"W"],"check":"button case 4","expected":[1780,1895,"W"],"passed":false},{"actual":[1790,1915,"W"],"check":"button case 5","expected":[1790,1915,"W"],"passed":true},{"actual":[1750,1830,"W"],"check":"button case 6","expected":[1740,1830,"W"],"passed":false},{"actual":[1875,1810,"B"],"check":"button case 7","expected":[1875,1810,"B"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"button case 0\", \"actual\": [1860, 1740, \"B\"], \"expected\": [1860, 1735, \"B\"], \"passed\": false}, {\"check\": \"button case 1\", \"actual\": [1720, 1865, \"W\"], \"expected\": [1710, 1865, \"W\"], \"passed\": false}, {\"check\": \"button case 2\", \"actual\": [1865, 1875, \"W\"], \"expected\": [1865, 1870, \"W\"], \"passed\": false}, {\"check\": \"button case 3\", \"actual\": [1870, 1845, \"B\"], \"expected\": [1870, 1845, \"B\"], \"passed\": true}, {\"check\": \"button case 4\", \"actual\": [1780, 1905, \"W\"], \"expected\": [1780, 1895, \"W\"], \"passed\": false}, {\"check\": \"button case 5\", \"actual\": [1790, 1915, \"W\"], \"expected\": [1790, 1915, \"W\"], \"passed\": true}, {\"check\": \"button case 6\", \"actual\": [1750, 1830, \"W\"], \"expected\": [1740, 1830, \"W\"], \"passed\": false}, {\"check\": \"button case 7\", \"actual\": [1875, 1810, \"B\"], \"expected\": [1875, 1810, \"B\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.088,"exit_code":0,"observations":[{"actual":[1860,1735,"B"],"check":"button case 0","expected":[1860,1735,"B"],"passed":true},{"actual":[1710,1865,"W"],"check":"button case 1","expected":[1710,1865,"W"],"passed":true},{"actual":[1865,1870,"W"],"check":"button case 2","expected":[1865,1870,"W"],"passed":true},{"actual":[1870,1845,"B"],"check":"button case 3","expected":[1870,1845,"B"],"passed":true},{"actual":[1780,1895,"W"],"check":"button case 4","expected":[1780,1895,"W"],"passed":true},{"actual":[1790,1915,"W"],"check":"button case 5","expected":[1790,1915,"W"],"passed":true},{"actual":[1740,1830,"W"],"check":"button case 6","expected":[1740,1830,"W"],"passed":true},{"actual":[1875,1810,"B"],"check":"button case 7","expected":[1875,1810,"B"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"button case 0\", \"actual\": [1860, 1735, \"B\"], \"expected\": [1860, 1735, \"B\"], \"passed\": true}, {\"check\": \"button case 1\", \"actual\": [1710, 1865, \"W\"], \"expected\": [1710, 1865, \"W\"], \"passed\": true}, {\"check\": \"button case 2\", \"actual\": [1865, 1870, \"W\"], \"expected\": [1865, 1870, \"W\"], \"passed\": true}, {\"check\": \"button case 3\", \"actual\": [1870, 1845, \"B\"], \"expected\": [1870, 1845, \"B\"], \"passed\": true}, {\"check\": \"button case 4\", \"actual\": [1780, 1895, \"W\"], \"expected\": [1780, 1895, \"W\"], \"passed\": true}, {\"check\": \"button case 5\", \"actual\": [1790, 1915, \"W\"], \"expected\": [1790, 1915, \"W\"], \"passed\": true}, {\"check\": \"button case 6\", \"actual\": [1740, 1830, \"W\"], \"expected\": [1740, 1830, \"W\"], \"passed\": true}, {\"check\": \"button case 7\", \"actual\": [1875, 1810, \"B\"], \"expected\": [1875, 1810, \"B\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}