FAILURE MAP
← Case archive

FA-83656 / Card game rule engines / Open access

Four tricks are scored as a march · case 01

Makers with four tricks get 2 points.

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

ROOT CAUSE

The march test uses >= 4.

VERIFIED REPAIR

Only all five tricks is a march.

Unsuccessful approach: Excluding lone hands from the march branch scores a lone march as 1.

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 >= 4:
            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]], [[4, False, False], ['makers', 1]], [[5, True, False], ['makers', 4]]], [[[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]], [[5, True, True], ['makers', 4]]], [[[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, True, False], ['makers', 1]], [[5, True, False], ['makers', 4]], [[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]], [[4, False, True], ['makers', 1]], [[5, True, True], ['makers', 4]]], [[[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, True, False], ['makers', 4]]]]
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', 4]['makers', 4]Passed

SHA-256 / 4a485ef71928dde13304eeb1484e767f12edb5ded8b7321f6696837e8c4c97b6

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 and not alone:
            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]], [[4, False, False], ['makers', 1]], [[5, True, False], ['makers', 4]]], [[[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]], [[5, True, True], ['makers', 4]]], [[[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, True, False], ['makers', 1]], [[5, True, False], ['makers', 4]], [[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]], [[4, False, True], ['makers', 1]], [[5, True, True], ['makers', 4]]], [[[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, True, False], ['makers', 4]]]]
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', 4]Failed

SHA-256 / 4f13bf640beffe5ccec15b32cc4a94712d55931d9153afc3279d975dd7f4af27

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]], [[4, False, False], ['makers', 1]], [[5, True, False], ['makers', 4]]], [[[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]], [[5, True, True], ['makers', 4]]], [[[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, True, False], ['makers', 1]], [[5, True, False], ['makers', 4]], [[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]], [[4, False, True], ['makers', 1]], [[5, True, True], ['makers', 4]]], [[[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, True, False], ['makers', 4]]]]
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', 4]['makers', 4]Passed

SHA-256 / fe95673455055f6d50ae8048fa557d2a66ee82e4def7c4a035b457d39655690a

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.625987+00:00.

Case digest / 22ba9000fdda8aa471e4c9bef30d56ceb9efa362390fccfee350c09e051384bc