FA-12836 / Tournament pairing rules / Open access
Disqualification shifts a bracket replacement into the wrong slot · case 01
Disqualification shifts a bracket replacement into the wrong slot.
ROOT CAUSE
Filtering disqualified qualifiers compacts the array and changes subsequent bracket paths.
VERIFIED REPAIR
Slots contain distinct qualified player ids in fixed bracket positions. Keep eligible occupants at their original index and replace every ineligible occupant with None; eligibility alone grants no new slot.
Unsuccessful approach: Replacing a vacant slot with the first eligible player duplicates entrants and invents qualification rights.
Case contract
Synthetic model: Slots contain distinct qualified player ids in fixed bracket positions. Keep eligible occupants at their original index and replace every ineligible occupant with None; eligibility alone grants no new slot.
Why this case matters
Makes the stated pairing or standings policy executable without assuming any real federation rulebook.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(slots, eligible):
return [p for p in slots if p in eligible]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('left vacancy', solve([N,N+1], [N+1]), [None,N+1])
check('right vacancy', solve([N,N+1], [N]), [N,None])
check('both vacant', solve([N,N+1], []), [None,None])
check('both eligible', solve([N,N+1], [N,N+1]), [N,N+1])
check('outsider never fills slot', solve([N,N+1], [N+2]), [None,None])
check('empty bracket', solve([], [N]), [])
check('nonadjacent vacancies', solve([N,N+1,N+2,N+3], [N+1,N+3]), [None,N+1,None,N+3])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| left vacancy | [2] | [None, 2] | Failed |
| right vacancy | [1] | [1, None] | Failed |
| both vacant | [] | [None, None] | Failed |
| both eligible | [1, 2] | [1, 2] | Passed |
| outsider never fills slot | [] | [None, None] | Failed |
| empty bracket | [] | [] | Passed |
| nonadjacent vacancies | [2, 4] | [None, 2, None, 4] | Failed |
SHA-256 / b067fa9e3b64bfb35633067e40c71fe33d7c9f32c5c97bd951d793e8af72218d
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(slots, eligible):
return [p if p in eligible else next(iter(sorted(eligible)), None) for p in slots]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('left vacancy', solve([N,N+1], [N+1]), [None,N+1])
check('right vacancy', solve([N,N+1], [N]), [N,None])
check('both vacant', solve([N,N+1], []), [None,None])
check('both eligible', solve([N,N+1], [N,N+1]), [N,N+1])
check('outsider never fills slot', solve([N,N+1], [N+2]), [None,None])
check('empty bracket', solve([], [N]), [])
check('nonadjacent vacancies', solve([N,N+1,N+2,N+3], [N+1,N+3]), [None,N+1,None,N+3])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| left vacancy | [2, 2] | [None, 2] | Failed |
| right vacancy | [1, 1] | [1, None] | Failed |
| both vacant | [None, None] | [None, None] | Passed |
| both eligible | [1, 2] | [1, 2] | Passed |
| outsider never fills slot | [3, 3] | [None, None] | Failed |
| empty bracket | [] | [] | Passed |
| nonadjacent vacancies | [2, 2, 2, 4] | [None, 2, None, 4] | Failed |
SHA-256 / 366b1667e8516155ca9634a9ca1bff401bdee1b4fe9072cf3a70048dd0ae656a
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(slots, eligible):
return [p if p in eligible else None for p in slots]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('left vacancy', solve([N,N+1], [N+1]), [None,N+1])
check('right vacancy', solve([N,N+1], [N]), [N,None])
check('both vacant', solve([N,N+1], []), [None,None])
check('both eligible', solve([N,N+1], [N,N+1]), [N,N+1])
check('outsider never fills slot', solve([N,N+1], [N+2]), [None,None])
check('empty bracket', solve([], [N]), [])
check('nonadjacent vacancies', solve([N,N+1,N+2,N+3], [N+1,N+3]), [None,N+1,None,N+3])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| left vacancy | [None, 2] | [None, 2] | Passed |
| right vacancy | [1, None] | [1, None] | Passed |
| both vacant | [None, None] | [None, None] | Passed |
| both eligible | [1, 2] | [1, 2] | Passed |
| outsider never fills slot | [None, None] | [None, None] | Passed |
| empty bracket | [] | [] | Passed |
| nonadjacent vacancies | [None, 2, None, 4] | [None, 2, None, 4] | Passed |
SHA-256 / b9f82cd0f3c6ceda63de26bf81985c5340a989f4741fb12515d177c1d127dc40
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:39:00.737664+00:00.
Case digest / 3c3a6c7572995b902d4b8556afb7e4a4575757c7614986e29dfedc30e3a4b1ef