FAILURE MAP
← Case archive

FA-11661 / Game simulation rules / Open access

A queued bonus turn schedules an eliminated player · case 01

A queued bonus turn schedules an eliminated player.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Bonus-turn priority bypasses eligibility checks.

VERIFIED REPAIR

Give the current player a bonus only if alive; otherwise scan the circular order for the next alive player.

Unsuccessful approach: Ignoring all bonus turns fixes elimination but loses valid earned turns.

Case contract

Alive is a nonempty bool list, current a valid index, bonus bool. Return current for an eligible bonus, otherwise next alive index circularly, or None if no survivors.

Why this case matters

A deterministic game-rule model isolates this rule interaction for regression testing.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(alive, current, bonus):
    return current if bonus else next((i for i in [(current+d)%len(alive) for d in range(1,len(alive)+1)] if alive[i]),None)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('dead bonus owner',solve([False]+[True]*N,0,True),1)
check('live bonus owner',solve([True,True],0,True),0)
check('normal next',solve([True,True],0,False),1)
check('skip dead players',solve([True]+[False]*N+[True],0,False),N+1)
check('wrap',solve([True,False,True],2,False),0)
check('no survivors',solve([False]*N,0,True),None)
check('sole survivor',solve([True],0,False),0)
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 fixtureActualExpectedOutcome
dead bonus owner01Failed
live bonus owner00Passed
normal next11Passed
skip dead players22Passed
wrap00Passed
no survivors0NoneFailed
sole survivor00Passed

SHA-256 / 0587a4902b97cd0d9b5edd5ab79ea55ead93765edf27c98e917d56628632c84f

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(alive, current, bonus):
    return next((i for i in [(current+d)%len(alive) for d in range(1,len(alive)+1)] if alive[i]),None)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('dead bonus owner',solve([False]+[True]*N,0,True),1)
check('live bonus owner',solve([True,True],0,True),0)
check('normal next',solve([True,True],0,False),1)
check('skip dead players',solve([True]+[False]*N+[True],0,False),N+1)
check('wrap',solve([True,False,True],2,False),0)
check('no survivors',solve([False]*N,0,True),None)
check('sole survivor',solve([True],0,False),0)
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 fixtureActualExpectedOutcome
dead bonus owner11Passed
live bonus owner10Failed
normal next11Passed
skip dead players22Passed
wrap00Passed
no survivorsNoneNonePassed
sole survivor00Passed

SHA-256 / b2848bbc813094889adfbc5fa24424459198bb42bb87f901ddd16f6cce68483a

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(alive, current, bonus):
    return current if bonus and alive[current] else next((i for i in [(current+d)%len(alive) for d in range(1,len(alive)+1)] if alive[i]),None)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('dead bonus owner',solve([False]+[True]*N,0,True),1)
check('live bonus owner',solve([True,True],0,True),0)
check('normal next',solve([True,True],0,False),1)
check('skip dead players',solve([True]+[False]*N+[True],0,False),N+1)
check('wrap',solve([True,False,True],2,False),0)
check('no survivors',solve([False]*N,0,True),None)
check('sole survivor',solve([True],0,False),0)
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 fixtureActualExpectedOutcome
dead bonus owner11Passed
live bonus owner00Passed
normal next11Passed
skip dead players22Passed
wrap00Passed
no survivorsNoneNonePassed
sole survivor00Passed

SHA-256 / 77c98e55fe4bc1c0b2f0ddbed56ffa3bc3d00685bc181a3559e8d5e2f40565ae

Verification & scope

Controlled rules-only simulation; not a complete game engine. 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:38:49.906998+00:00.

Case digest / fdf0340910399325dcea2ad329bf370c888ce9ca75bd22c7d2c2596a0d968f35