{"abstract":"Greedy pairing strands the final entrants.","category":"Tournament pairing rules","checks":6,"contract":"Synthetic model: Distinct players are sorted ids; forbidden pairs are sorted lists. Return the first complete legal pairing in ascending opponent search order, or None.","contract_signature":"players, forbidden","evaluation_group":"model-4d67a5d109b746b1","failed_approach":"Choosing the last opponent instead still lacks search and violates canonical ordering.","family":"z-tournament_pairing-matching-backtrack","id":"FA-12796","implementations":{"attempt":{"sha256":"0ac28665af17c92d643c4f3f255f25bb494716e9a9994b25287242584ae1b710","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(players, forbidden):\n    remaining=list(players)\n    pairs=[]\n    while remaining:\n        a=remaining.pop(0)\n        choices=[b for b in remaining if sorted([a,b]) not in forbidden]\n        if not choices: return None\n        b=choices[-1]; remaining.remove(b); pairs.append([a,b])\n    return pairs\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('greedy dead end', solve([N,N+1,N+2,N+3], [[N+2,N+3]]), [[N,N+2],[N+1,N+3]])\ncheck('canonical matching', solve([N,N+1,N+2,N+3], []), [[N,N+1],[N+2,N+3]])\ncheck('empty', solve([], []), [])\ncheck('odd count', solve([N], []), None)\ncheck('forbidden pair', solve([N,N+1], [[N,N+1]]), None)\ncheck('single pair', solve([N,N+1], []), [[N,N+1]])\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":"1837fc65267b81fdc5d93deb586135349c6692f11d59aec3f1f9d287088666a9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(players, forbidden):\n    remaining=list(players)\n    pairs=[]\n    while remaining:\n        a=remaining.pop(0)\n        choices=[b for b in remaining if sorted([a,b]) not in forbidden]\n        if not choices: return None\n        b=choices[0]; remaining.remove(b); pairs.append([a,b])\n    return pairs\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('greedy dead end', solve([N,N+1,N+2,N+3], [[N+2,N+3]]), [[N,N+2],[N+1,N+3]])\ncheck('canonical matching', solve([N,N+1,N+2,N+3], []), [[N,N+1],[N+2,N+3]])\ncheck('empty', solve([], []), [])\ncheck('odd count', solve([N], []), None)\ncheck('forbidden pair', solve([N,N+1], [[N,N+1]]), None)\ncheck('single pair', solve([N,N+1], []), [[N,N+1]])\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":"Controlled synthetic policy; does not implement an entire tournament system. 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":"z-tournament_pairing-matching-backtrack","generated_at":"2026-09-29T14:39:00.127107+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Makes the stated pairing or standings policy executable without assuming any real federation rulebook.","root_cause":"A locally legal first opponent is committed before checking completion.","sha256":"648aa39d34112eabef2862fc652ec90c3a40344e18e966469aea92dff35e95ff","title":"Greedy pairing strands the final entrants · 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":41.744,"exit_code":1,"observations":[{"actual":[[1,4],[2,3]],"check":"greedy dead end","expected":[[1,3],[2,4]],"passed":false},{"actual":[[1,4],[2,3]],"check":"canonical matching","expected":[[1,2],[3,4]],"passed":false},{"actual":[],"check":"empty","expected":[],"passed":true},{"actual":null,"check":"odd count","expected":null,"passed":true},{"actual":null,"check":"forbidden pair","expected":null,"passed":true},{"actual":[[1,2]],"check":"single pair","expected":[[1,2]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"greedy dead end\", \"actual\": [[1, 4], [2, 3]], \"expected\": [[1, 3], [2, 4]], \"passed\": false}, {\"check\": \"canonical matching\", \"actual\": [[1, 4], [2, 3]], \"expected\": [[1, 2], [3, 4]], \"passed\": false}, {\"check\": \"empty\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"odd count\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"forbidden pair\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"single pair\", \"actual\": [[1, 2]], \"expected\": [[1, 2]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.892,"exit_code":1,"observations":[{"actual":null,"check":"greedy dead end","expected":[[1,3],[2,4]],"passed":false},{"actual":[[1,2],[3,4]],"check":"canonical matching","expected":[[1,2],[3,4]],"passed":true},{"actual":[],"check":"empty","expected":[],"passed":true},{"actual":null,"check":"odd count","expected":null,"passed":true},{"actual":null,"check":"forbidden pair","expected":null,"passed":true},{"actual":[[1,2]],"check":"single pair","expected":[[1,2]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"greedy dead end\", \"actual\": null, \"expected\": [[1, 3], [2, 4]], \"passed\": false}, {\"check\": \"canonical matching\", \"actual\": [[1, 2], [3, 4]], \"expected\": [[1, 2], [3, 4]], \"passed\": true}, {\"check\": \"empty\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"odd count\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"forbidden pair\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"single pair\", \"actual\": [[1, 2]], \"expected\": [[1, 2]], \"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."}}