FAILURE MAP
← Case archive

FA-71886 / Error-correcting codes / Open access

Repetition decoder counts erasures as zeros · case 01

Blocks with erasures are biased towards 0.

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

ROOT CAUSE

Erased symbols are converted to 0 before voting.

VERIFIED REPAIR

Drop erasures from the vote entirely.

Unsuccessful approach: Keeping only truthy symbols removes zeros as well as erasures.

Case contract

Decode an n-fold repetition code sent in contiguous blocks of n symbols; each received symbol is 0, 1 or None (erasure). Erasures do not vote. The bit is the majority of non-erased symbols; a tie (including an all-erased block) yields None. fixed_count counts non-erased symbols outvoted in decided blocks. A length that is not a multiple of n, or n < 1, returns None. Return [bits, fixed_count].

Why this case matters

Robust control channels repeat critical flags and must treat erased symbols differently from zeros.

1 / The failure

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

N = 1
observations = []
def solve(r, n):
    if n < 1 or len(r) % n:
        return None
    out, fixed_count = [], 0
    for g in range(0, len(r), n):
        grp = [x or 0 for x in r[g:g + n]]
        ones = sum(grp)
        zeros = len(grp) - ones
        if ones == zeros:
            out.append(None)
            continue
        b = 1 if ones > zeros else 0
        out.append(b)
        fixed_count += min(ones, zeros)
    return [out, fixed_count]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression [[0, null, 1], 3]', [[0, None, 1], 3], [[None], 0]], ['regression [[1, 1, null], 3]', [[1, 1, None], 3], [[1], 0]], ['partial-repair [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1, 1, 0, null, 0, null, 0, 0, 0, 1], 5]', [[1, 1, 0, None, 0, None, 0, 0, 0, 1], 5], [[None, 0], 1]], ['control [[0, 1, 0, 1, 0, null, 1, 0, 1, 1], 5]', [[0, 1, 0, 1, 0, None, 1, 0, 1, 1], 5], [[0, 1], 3]]], [['regression [[0, 1, 0, 1, 0, null, 1, 0, 1, 1], 5]', [[0, 1, 0, 1, 0, None, 1, 0, 1, 1], 5], [[0, 1], 3]], ['regression [[1, 1, null, 0, 1, null, 0, null], 2]', [[1, 1, None, 0, 1, None, 0, None], 2], [[1, 0, 1, 0], 0]], ['partial-repair [[0, 0, null, null], 4]', [[0, 0, None, None], 4], [[0], 0]], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[1, 0, null, null, 1, 1], 3]', [[1, 0, None, None, 1, 1], 3], [[None, 1], 0]], ['control [[0, 1, null, 0, 0, 1, 0, 0, 0, 0], 5]', [[0, 1, None, 0, 0, 1, 0, 0, 0, 0], 5], [[0, 0], 2]]], [['regression [[1, null, 0], 3]', [[1, None, 0], 3], [[None], 0]], ['regression [[null, null, null], 3]', [[None, None, None], 3], [[None], 0]], ['partial-repair [[1, 0, null, null, 1, 1], 3]', [[1, 0, None, None, 1, 1], 3], [[None, 1], 0]], ['partial-repair [[0, 1, null, 0, 0, 1, 0, 0, 0, 0], 5]', [[0, 1, None, 0, 0, 1, 0, 0, 0, 0], 5], [[0, 0], 2]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[0, 1, 1, 1, 0, 0, null, 1], 4]', [[0, 1, 1, 1, 0, 0, None, 1], 4], [[1, 0], 2]]], [['regression [[0, null, 1, 1, 1], 5]', [[0, None, 1, 1, 1], 5], [[1], 1]], ['regression [[null, 0, 1, 0, null, 1], 3]', [[None, 0, 1, 0, None, 1], 3], [[None, None], 0]], ['partial-repair [[1, 0, 0, 1, 1, 0], 3]', [[1, 0, 0, 1, 1, 0], 3], [[0, 1], 2]], ['partial-repair [[0, 1, 1, 1, 0, 0, null, 1], 4]', [[0, 1, 1, 1, 0, 0, None, 1], 4], [[1, 0], 2]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1, 1, 0, 0, 0, 1, 1, 1, 0], 3]', [[1, 1, 0, 0, 0, 1, 1, 1, 0], 3], [[1, 0, 1], 3]]], [['regression [[1, 1, null], 3]', [[1, 1, None], 3], [[1], 0]], ['regression [[1, 1, 0, null, 0, null, 0, 0, 0, 1], 5]', [[1, 1, 0, None, 0, None, 0, 0, 0, 1], 5], [[None, 0], 1]], ['partial-repair [[1, 0], 2]', [[1, 0], 2], [[None], 0]], ['partial-repair [[1, 1, 0, 0, 0, 1, 1, 1, 0], 3]', [[1, 1, 0, 0, 0, 1, 1, 1, 0], 3], [[1, 0, 1], 3]], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[0, 1, 0, 1, 0, null, 1, 0, 1, 1], 5]', [[0, 1, 0, 1, 0, None, 1, 0, 1, 1], 5], [[0, 1], 3]]]]
for label, args, expected in fixtures[N - 1]:
    check(label, 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
regression [[0, null, 1], 3][[0], 1][[None], 0]Failed
regression [[1, 1, null], 3][[1], 1][[1], 0]Failed
partial-repair [[1, 1, 0], 3][[1], 1][[1], 1]Passed
control [[1], 1][[1], 0][[1], 0]Passed
control [[1, 1], 3]NoneNonePassed
control [[], 3][[], 0][[], 0]Passed
control [[1, 1, 0, null, 0, null, 0, 0, 0, 1], 5][[0, 0], 3][[None, 0], 1]Failed
control [[0, 1, 0, 1, 0, null, 1, 0, 1, 1], 5][[0, 1], 4][[0, 1], 3]Failed

SHA-256 / 982a4e6fd40a82e6e4d7def36f673e244015abfe6cb21fbd581903883368a44b

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(r, n):
    if n < 1 or len(r) % n:
        return None
    out, fixed_count = [], 0
    for g in range(0, len(r), n):
        grp = [x for x in r[g:g + n] if x]
        ones = sum(grp)
        zeros = len(grp) - ones
        if ones == zeros:
            out.append(None)
            continue
        b = 1 if ones > zeros else 0
        out.append(b)
        fixed_count += min(ones, zeros)
    return [out, fixed_count]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression [[0, null, 1], 3]', [[0, None, 1], 3], [[None], 0]], ['regression [[1, 1, null], 3]', [[1, 1, None], 3], [[1], 0]], ['partial-repair [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1, 1, 0, null, 0, null, 0, 0, 0, 1], 5]', [[1, 1, 0, None, 0, None, 0, 0, 0, 1], 5], [[None, 0], 1]], ['control [[0, 1, 0, 1, 0, null, 1, 0, 1, 1], 5]', [[0, 1, 0, 1, 0, None, 1, 0, 1, 1], 5], [[0, 1], 3]]], [['regression [[0, 1, 0, 1, 0, null, 1, 0, 1, 1], 5]', [[0, 1, 0, 1, 0, None, 1, 0, 1, 1], 5], [[0, 1], 3]], ['regression [[1, 1, null, 0, 1, null, 0, null], 2]', [[1, 1, None, 0, 1, None, 0, None], 2], [[1, 0, 1, 0], 0]], ['partial-repair [[0, 0, null, null], 4]', [[0, 0, None, None], 4], [[0], 0]], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[1, 0, null, null, 1, 1], 3]', [[1, 0, None, None, 1, 1], 3], [[None, 1], 0]], ['control [[0, 1, null, 0, 0, 1, 0, 0, 0, 0], 5]', [[0, 1, None, 0, 0, 1, 0, 0, 0, 0], 5], [[0, 0], 2]]], [['regression [[1, null, 0], 3]', [[1, None, 0], 3], [[None], 0]], ['regression [[null, null, null], 3]', [[None, None, None], 3], [[None], 0]], ['partial-repair [[1, 0, null, null, 1, 1], 3]', [[1, 0, None, None, 1, 1], 3], [[None, 1], 0]], ['partial-repair [[0, 1, null, 0, 0, 1, 0, 0, 0, 0], 5]', [[0, 1, None, 0, 0, 1, 0, 0, 0, 0], 5], [[0, 0], 2]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[0, 1, 1, 1, 0, 0, null, 1], 4]', [[0, 1, 1, 1, 0, 0, None, 1], 4], [[1, 0], 2]]], [['regression [[0, null, 1, 1, 1], 5]', [[0, None, 1, 1, 1], 5], [[1], 1]], ['regression [[null, 0, 1, 0, null, 1], 3]', [[None, 0, 1, 0, None, 1], 3], [[None, None], 0]], ['partial-repair [[1, 0, 0, 1, 1, 0], 3]', [[1, 0, 0, 1, 1, 0], 3], [[0, 1], 2]], ['partial-repair [[0, 1, 1, 1, 0, 0, null, 1], 4]', [[0, 1, 1, 1, 0, 0, None, 1], 4], [[1, 0], 2]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1, 1, 0, 0, 0, 1, 1, 1, 0], 3]', [[1, 1, 0, 0, 0, 1, 1, 1, 0], 3], [[1, 0, 1], 3]]], [['regression [[1, 1, null], 3]', [[1, 1, None], 3], [[1], 0]], ['regression [[1, 1, 0, null, 0, null, 0, 0, 0, 1], 5]', [[1, 1, 0, None, 0, None, 0, 0, 0, 1], 5], [[None, 0], 1]], ['partial-repair [[1, 0], 2]', [[1, 0], 2], [[None], 0]], ['partial-repair [[1, 1, 0, 0, 0, 1, 1, 1, 0], 3]', [[1, 1, 0, 0, 0, 1, 1, 1, 0], 3], [[1, 0, 1], 3]], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[0, 1, 0, 1, 0, null, 1, 0, 1, 1], 5]', [[0, 1, 0, 1, 0, None, 1, 0, 1, 1], 5], [[0, 1], 3]]]]
for label, args, expected in fixtures[N - 1]:
    check(label, 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
regression [[0, null, 1], 3][[1], 0][[None], 0]Failed
regression [[1, 1, null], 3][[1], 0][[1], 0]Passed
partial-repair [[1, 1, 0], 3][[1], 0][[1], 1]Failed
control [[1], 1][[1], 0][[1], 0]Passed
control [[1, 1], 3]NoneNonePassed
control [[], 3][[], 0][[], 0]Passed
control [[1, 1, 0, null, 0, null, 0, 0, 0, 1], 5][[1, 1], 0][[None, 0], 1]Failed
control [[0, 1, 0, 1, 0, null, 1, 0, 1, 1], 5][[1, 1], 0][[0, 1], 3]Failed

SHA-256 / 029f2119e83c7671f571e3ca899d54e4af0fc51ad374ecbf2ade5772d614772d

3 / The verified repair

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

N = 1
observations = []
def solve(r, n):
    if n < 1 or len(r) % n:
        return None
    out, fixed_count = [], 0
    for g in range(0, len(r), n):
        grp = [x for x in r[g:g + n] if x is not None]
        ones = sum(grp)
        zeros = len(grp) - ones
        if ones == zeros:
            out.append(None)
            continue
        b = 1 if ones > zeros else 0
        out.append(b)
        fixed_count += min(ones, zeros)
    return [out, fixed_count]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression [[0, null, 1], 3]', [[0, None, 1], 3], [[None], 0]], ['regression [[1, 1, null], 3]', [[1, 1, None], 3], [[1], 0]], ['partial-repair [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1, 1, 0, null, 0, null, 0, 0, 0, 1], 5]', [[1, 1, 0, None, 0, None, 0, 0, 0, 1], 5], [[None, 0], 1]], ['control [[0, 1, 0, 1, 0, null, 1, 0, 1, 1], 5]', [[0, 1, 0, 1, 0, None, 1, 0, 1, 1], 5], [[0, 1], 3]]], [['regression [[0, 1, 0, 1, 0, null, 1, 0, 1, 1], 5]', [[0, 1, 0, 1, 0, None, 1, 0, 1, 1], 5], [[0, 1], 3]], ['regression [[1, 1, null, 0, 1, null, 0, null], 2]', [[1, 1, None, 0, 1, None, 0, None], 2], [[1, 0, 1, 0], 0]], ['partial-repair [[0, 0, null, null], 4]', [[0, 0, None, None], 4], [[0], 0]], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[1, 0, null, null, 1, 1], 3]', [[1, 0, None, None, 1, 1], 3], [[None, 1], 0]], ['control [[0, 1, null, 0, 0, 1, 0, 0, 0, 0], 5]', [[0, 1, None, 0, 0, 1, 0, 0, 0, 0], 5], [[0, 0], 2]]], [['regression [[1, null, 0], 3]', [[1, None, 0], 3], [[None], 0]], ['regression [[null, null, null], 3]', [[None, None, None], 3], [[None], 0]], ['partial-repair [[1, 0, null, null, 1, 1], 3]', [[1, 0, None, None, 1, 1], 3], [[None, 1], 0]], ['partial-repair [[0, 1, null, 0, 0, 1, 0, 0, 0, 0], 5]', [[0, 1, None, 0, 0, 1, 0, 0, 0, 0], 5], [[0, 0], 2]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[0, 1, 1, 1, 0, 0, null, 1], 4]', [[0, 1, 1, 1, 0, 0, None, 1], 4], [[1, 0], 2]]], [['regression [[0, null, 1, 1, 1], 5]', [[0, None, 1, 1, 1], 5], [[1], 1]], ['regression [[null, 0, 1, 0, null, 1], 3]', [[None, 0, 1, 0, None, 1], 3], [[None, None], 0]], ['partial-repair [[1, 0, 0, 1, 1, 0], 3]', [[1, 0, 0, 1, 1, 0], 3], [[0, 1], 2]], ['partial-repair [[0, 1, 1, 1, 0, 0, null, 1], 4]', [[0, 1, 1, 1, 0, 0, None, 1], 4], [[1, 0], 2]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1, 1, 0, 0, 0, 1, 1, 1, 0], 3]', [[1, 1, 0, 0, 0, 1, 1, 1, 0], 3], [[1, 0, 1], 3]]], [['regression [[1, 1, null], 3]', [[1, 1, None], 3], [[1], 0]], ['regression [[1, 1, 0, null, 0, null, 0, 0, 0, 1], 5]', [[1, 1, 0, None, 0, None, 0, 0, 0, 1], 5], [[None, 0], 1]], ['partial-repair [[1, 0], 2]', [[1, 0], 2], [[None], 0]], ['partial-repair [[1, 1, 0, 0, 0, 1, 1, 1, 0], 3]', [[1, 1, 0, 0, 0, 1, 1, 1, 0], 3], [[1, 0, 1], 3]], ['control [[], 3]', [[], 3], [[], 0]], ['control [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[0, 1, 0, 1, 0, null, 1, 0, 1, 1], 5]', [[0, 1, 0, 1, 0, None, 1, 0, 1, 1], 5], [[0, 1], 3]]]]
for label, args, expected in fixtures[N - 1]:
    check(label, 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
regression [[0, null, 1], 3][[None], 0][[None], 0]Passed
regression [[1, 1, null], 3][[1], 0][[1], 0]Passed
partial-repair [[1, 1, 0], 3][[1], 1][[1], 1]Passed
control [[1], 1][[1], 0][[1], 0]Passed
control [[1, 1], 3]NoneNonePassed
control [[], 3][[], 0][[], 0]Passed
control [[1, 1, 0, null, 0, null, 0, 0, 0, 1], 5][[None, 0], 1][[None, 0], 1]Passed
control [[0, 1, 0, 1, 0, null, 1, 0, 1, 1], 5][[0, 1], 3][[0, 1], 3]Passed

SHA-256 / c73e596a3282473f6630001674ff08842ed51f609d8c660a83a5567a509e1154

Verification & scope

A deterministic, bounded teaching model of the named code under the stated contract; not a production codec. 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:48:33.570817+00:00.

Case digest / ff855f5f4a9d5ae7aab1a968c17baa6c3ed7590f487dca636506985972bad75c