FAILURE MAP
← Case archive

FA-83661 / Card game rule engines / Open access

A lone hand taking three or four tricks scores 2 · case 01

Partial lone hands are over-rewarded.

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

ROOT CAUSE

The partial branch applies a lone bonus.

VERIFIED REPAIR

Partial makes score 1 regardless of going alone.

Unsuccessful approach: Scoring four-trick hands as 2 still over-rewards partial makes.

Case contract

Input [makers_tricks, maker_alone, defender_alone]. Makers with 3-4 tricks score 1; all 5 score 2, or 4 when alone. Makers with fewer than 3 are euchred: defenders score 2, or 4 when a defender played alone. Return [team, points].

Why this case matters

Card-game engines, scoring apps and online tables apply this rule automatically on every hand.

1 / The failure

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

N = 1
observations = []
def solve(x):
    tricks, alone, def_alone = x
    if tricks >= 3:
        if tricks == 5:
            return ['makers', 4 if alone else 2]
        return ['makers', 2 if alone else 1]
    return ['defenders', 4 if def_alone else 2]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[1, True, True], ['defenders', 4]], [[2, False, False], ['defenders', 2]], [[2, False, True], ['defenders', 4]], [[2, True, False], ['defenders', 2]], [[2, True, True], ['defenders', 4]], [[3, False, False], ['makers', 1]], [[3, True, False], ['makers', 1]], [[4, True, False], ['makers', 1]]], [[[3, True, False], ['makers', 1]], [[3, True, True], ['makers', 1]], [[4, False, False], ['makers', 1]], [[4, False, True], ['makers', 1]], [[4, True, False], ['makers', 1]], [[4, True, True], ['makers', 1]], [[4, True, True], ['makers', 1]], [[5, False, False], ['makers', 2]]], [[[0, False, False], ['defenders', 2]], [[0, False, True], ['defenders', 4]], [[0, True, False], ['defenders', 2]], [[0, True, True], ['defenders', 4]], [[1, False, False], ['defenders', 2]], [[4, False, False], ['makers', 1]], [[4, True, False], ['makers', 1]], [[5, True, True], ['makers', 4]]], [[[1, True, False], ['defenders', 2]], [[1, True, True], ['defenders', 4]], [[2, False, False], ['defenders', 2]], [[2, False, True], ['defenders', 4]], [[2, True, False], ['defenders', 2]], [[2, True, True], ['defenders', 4]], [[3, True, True], ['makers', 1]], [[4, False, True], ['makers', 1]]], [[[3, False, True], ['makers', 1]], [[3, True, False], ['makers', 1]], [[3, True, True], ['makers', 1]], [[4, False, False], ['makers', 1]], [[4, False, True], ['makers', 1]], [[4, True, False], ['makers', 1]], [[4, True, True], ['makers', 1]], [[5, False, False], ['makers', 2]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("hand points case %d" % i, solve(args), expected)
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
hand points case 0['defenders', 4]['defenders', 4]Passed
hand points case 1['defenders', 2]['defenders', 2]Passed
hand points case 2['defenders', 4]['defenders', 4]Passed
hand points case 3['defenders', 2]['defenders', 2]Passed
hand points case 4['defenders', 4]['defenders', 4]Passed
hand points case 5['makers', 1]['makers', 1]Passed
hand points case 6['makers', 2]['makers', 1]Failed
hand points case 7['makers', 2]['makers', 1]Failed

SHA-256 / 3cc36e03575f4e43d5cd59ae603d8b849cf3c897d4223e98a1e706962ca2c034

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(x):
    tricks, alone, def_alone = x
    if tricks >= 3:
        if tricks == 5:
            return ['makers', 4 if alone else 2]
        return ['makers', 1 if tricks == 3 else 2]
    return ['defenders', 4 if def_alone else 2]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[1, True, True], ['defenders', 4]], [[2, False, False], ['defenders', 2]], [[2, False, True], ['defenders', 4]], [[2, True, False], ['defenders', 2]], [[2, True, True], ['defenders', 4]], [[3, False, False], ['makers', 1]], [[3, True, False], ['makers', 1]], [[4, True, False], ['makers', 1]]], [[[3, True, False], ['makers', 1]], [[3, True, True], ['makers', 1]], [[4, False, False], ['makers', 1]], [[4, False, True], ['makers', 1]], [[4, True, False], ['makers', 1]], [[4, True, True], ['makers', 1]], [[4, True, True], ['makers', 1]], [[5, False, False], ['makers', 2]]], [[[0, False, False], ['defenders', 2]], [[0, False, True], ['defenders', 4]], [[0, True, False], ['defenders', 2]], [[0, True, True], ['defenders', 4]], [[1, False, False], ['defenders', 2]], [[4, False, False], ['makers', 1]], [[4, True, False], ['makers', 1]], [[5, True, True], ['makers', 4]]], [[[1, True, False], ['defenders', 2]], [[1, True, True], ['defenders', 4]], [[2, False, False], ['defenders', 2]], [[2, False, True], ['defenders', 4]], [[2, True, False], ['defenders', 2]], [[2, True, True], ['defenders', 4]], [[3, True, True], ['makers', 1]], [[4, False, True], ['makers', 1]]], [[[3, False, True], ['makers', 1]], [[3, True, False], ['makers', 1]], [[3, True, True], ['makers', 1]], [[4, False, False], ['makers', 1]], [[4, False, True], ['makers', 1]], [[4, True, False], ['makers', 1]], [[4, True, True], ['makers', 1]], [[5, False, False], ['makers', 2]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("hand points case %d" % i, solve(args), expected)
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
hand points case 0['defenders', 4]['defenders', 4]Passed
hand points case 1['defenders', 2]['defenders', 2]Passed
hand points case 2['defenders', 4]['defenders', 4]Passed
hand points case 3['defenders', 2]['defenders', 2]Passed
hand points case 4['defenders', 4]['defenders', 4]Passed
hand points case 5['makers', 1]['makers', 1]Passed
hand points case 6['makers', 1]['makers', 1]Passed
hand points case 7['makers', 2]['makers', 1]Failed

SHA-256 / 3a1e7ebfbb79c4ec25b828b73f9ddafb086608ef8fd9165ca33856f0cd9e8328

3 / The verified repair

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

N = 1
observations = []
def solve(x):
    tricks, alone, def_alone = x
    if tricks >= 3:
        if tricks == 5:
            return ['makers', 4 if alone else 2]
        return ['makers', 1]
    return ['defenders', 4 if def_alone else 2]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[1, True, True], ['defenders', 4]], [[2, False, False], ['defenders', 2]], [[2, False, True], ['defenders', 4]], [[2, True, False], ['defenders', 2]], [[2, True, True], ['defenders', 4]], [[3, False, False], ['makers', 1]], [[3, True, False], ['makers', 1]], [[4, True, False], ['makers', 1]]], [[[3, True, False], ['makers', 1]], [[3, True, True], ['makers', 1]], [[4, False, False], ['makers', 1]], [[4, False, True], ['makers', 1]], [[4, True, False], ['makers', 1]], [[4, True, True], ['makers', 1]], [[4, True, True], ['makers', 1]], [[5, False, False], ['makers', 2]]], [[[0, False, False], ['defenders', 2]], [[0, False, True], ['defenders', 4]], [[0, True, False], ['defenders', 2]], [[0, True, True], ['defenders', 4]], [[1, False, False], ['defenders', 2]], [[4, False, False], ['makers', 1]], [[4, True, False], ['makers', 1]], [[5, True, True], ['makers', 4]]], [[[1, True, False], ['defenders', 2]], [[1, True, True], ['defenders', 4]], [[2, False, False], ['defenders', 2]], [[2, False, True], ['defenders', 4]], [[2, True, False], ['defenders', 2]], [[2, True, True], ['defenders', 4]], [[3, True, True], ['makers', 1]], [[4, False, True], ['makers', 1]]], [[[3, False, True], ['makers', 1]], [[3, True, False], ['makers', 1]], [[3, True, True], ['makers', 1]], [[4, False, False], ['makers', 1]], [[4, False, True], ['makers', 1]], [[4, True, False], ['makers', 1]], [[4, True, True], ['makers', 1]], [[5, False, False], ['makers', 2]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("hand points case %d" % i, solve(args), expected)
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
hand points case 0['defenders', 4]['defenders', 4]Passed
hand points case 1['defenders', 2]['defenders', 2]Passed
hand points case 2['defenders', 4]['defenders', 4]Passed
hand points case 3['defenders', 2]['defenders', 2]Passed
hand points case 4['defenders', 4]['defenders', 4]Passed
hand points case 5['makers', 1]['makers', 1]Passed
hand points case 6['makers', 1]['makers', 1]Passed
hand points case 7['makers', 1]['makers', 1]Passed

SHA-256 / 0cc48b96229635dab690f9a616b1891807b26623e01361c8c9e83d3de27ea497

Verification & scope

A bounded toy rule contract stated explicitly in the contract field; cards are two-character codes (rank, suit). Not a complete implementation of any published rulebook or casino table 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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:50:23.769263+00:00.

Case digest / 474ad42fc5b636b1f42cfdaa64e12506ea3f90f539ac67e6c96e4c25d8ca98c7