FAILURE MAP
← Case archive

FA-71901 / Error-correcting codes / Open access

Repetition decoder counts erasures as corrections · case 01

The corrected-symbol statistic is inflated by erasures.

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

ROOT CAUSE

fixed_count adds n - max(ones, zeros), which includes erased symbols.

VERIFIED REPAIR

Count only the outvoted non-erased symbols: min(ones, zeros).

Unsuccessful approach: Adding the vote margin measures confidence, not corrections.

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 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 += n - max(ones, zeros)
    return [out, fixed_count]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['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]], ['control [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]], ['control [[0, null, 1], 3]', [[0, None, 1], 3], [[None], 0]], ['control [[1, null, 0], 3]', [[1, None, 0], 3], [[None], 0]], ['control [[null, null, null], 3]', [[None, None, None], 3], [[None], 0]], ['control [[1, 0, 0, 1, 1, 0], 3]', [[1, 0, 0, 1, 1, 0], 3], [[0, 1], 2]], ['control [[1, 1], 3]', [[1, 1], 3], None]], [['regression [[0, 0, null, null], 4]', [[0, 0, None, None], 4], [[0], 0]], ['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 [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[1, 0], 2]', [[1, 0], 2], [[None], 0]], ['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]], ['control [[null, 0, 1, 0, null, 1], 3]', [[None, 0, 1, 0, None, 1], 3], [[None, None], 0]]], [['regression [[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 [[0, 1, 1, 1, 0, 0, null, 1], 4]', [[0, 1, 1, 1, 0, 0, None, 1], 4], [[1, 0], 2]], ['control [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]], ['control [[0, null, 1], 3]', [[0, None, 1], 3], [[None], 0]], ['control [[1, null, 0], 3]', [[1, None, 0], 3], [[None], 0]], ['control [[null, null, null], 3]', [[None, None, None], 3], [[None], 0]], ['control [[1, 0, 0, 1, 1, 0], 3]', [[1, 0, 0, 1, 1, 0], 3], [[0, 1], 2]], ['control [[1, 1], 3]', [[1, 1], 3], None]], [['regression [[0, null, 1, 1, 1], 5]', [[0, None, 1, 1, 1], 5], [[1], 1]], ['regression [[1, 1, null], 3]', [[1, 1, None], 3], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[1, 0], 2]', [[1, 0], 2], [[None], 0]], ['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]], ['control [[null, 0, 1, 0, null, 1], 3]', [[None, 0, 1, 0, None, 1], 3], [[None, None], 0]], ['control [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]]], [['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 [[0, 0, null, null], 4]', [[0, 0, None, None], 4], [[0], 0]], ['partial-repair [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]], ['control [[0, null, 1], 3]', [[0, None, 1], 3], [[None], 0]], ['control [[1, null, 0], 3]', [[1, None, 0], 3], [[None], 0]], ['control [[null, null, null], 3]', [[None, None, None], 3], [[None], 0]], ['control [[1, 0, 0, 1, 1, 0], 3]', [[1, 0, 0, 1, 1, 0], 3], [[0, 1], 2]]]]
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 [[1, 1, null], 3][[1], 1][[1], 0]Failed
regression [[1, 1, 0, null, 0, null, 0, 0, 0, 1], 5][[None, 0], 2][[None, 0], 1]Failed
control [[1, 1, 0], 3][[1], 1][[1], 1]Passed
control [[0, null, 1], 3][[None], 0][[None], 0]Passed
control [[1, null, 0], 3][[None], 0][[None], 0]Passed
control [[null, null, null], 3][[None], 0][[None], 0]Passed
control [[1, 0, 0, 1, 1, 0], 3][[0, 1], 2][[0, 1], 2]Passed
control [[1, 1], 3]NoneNonePassed

SHA-256 / c8a9f5ea4eda463db3c8c1087039ce9bea86f5cd9ec6fda835a9b34de957a525

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 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 += abs(ones - zeros)
    return [out, fixed_count]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['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]], ['control [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]], ['control [[0, null, 1], 3]', [[0, None, 1], 3], [[None], 0]], ['control [[1, null, 0], 3]', [[1, None, 0], 3], [[None], 0]], ['control [[null, null, null], 3]', [[None, None, None], 3], [[None], 0]], ['control [[1, 0, 0, 1, 1, 0], 3]', [[1, 0, 0, 1, 1, 0], 3], [[0, 1], 2]], ['control [[1, 1], 3]', [[1, 1], 3], None]], [['regression [[0, 0, null, null], 4]', [[0, 0, None, None], 4], [[0], 0]], ['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 [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[1, 0], 2]', [[1, 0], 2], [[None], 0]], ['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]], ['control [[null, 0, 1, 0, null, 1], 3]', [[None, 0, 1, 0, None, 1], 3], [[None, None], 0]]], [['regression [[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 [[0, 1, 1, 1, 0, 0, null, 1], 4]', [[0, 1, 1, 1, 0, 0, None, 1], 4], [[1, 0], 2]], ['control [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]], ['control [[0, null, 1], 3]', [[0, None, 1], 3], [[None], 0]], ['control [[1, null, 0], 3]', [[1, None, 0], 3], [[None], 0]], ['control [[null, null, null], 3]', [[None, None, None], 3], [[None], 0]], ['control [[1, 0, 0, 1, 1, 0], 3]', [[1, 0, 0, 1, 1, 0], 3], [[0, 1], 2]], ['control [[1, 1], 3]', [[1, 1], 3], None]], [['regression [[0, null, 1, 1, 1], 5]', [[0, None, 1, 1, 1], 5], [[1], 1]], ['regression [[1, 1, null], 3]', [[1, 1, None], 3], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[1, 0], 2]', [[1, 0], 2], [[None], 0]], ['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]], ['control [[null, 0, 1, 0, null, 1], 3]', [[None, 0, 1, 0, None, 1], 3], [[None, None], 0]], ['control [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]]], [['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 [[0, 0, null, null], 4]', [[0, 0, None, None], 4], [[0], 0]], ['partial-repair [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]], ['control [[0, null, 1], 3]', [[0, None, 1], 3], [[None], 0]], ['control [[1, null, 0], 3]', [[1, None, 0], 3], [[None], 0]], ['control [[null, null, null], 3]', [[None, None, None], 3], [[None], 0]], ['control [[1, 0, 0, 1, 1, 0], 3]', [[1, 0, 0, 1, 1, 0], 3], [[0, 1], 2]]]]
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 [[1, 1, null], 3][[1], 2][[1], 0]Failed
regression [[1, 1, 0, null, 0, null, 0, 0, 0, 1], 5][[None, 0], 2][[None, 0], 1]Failed
control [[1, 1, 0], 3][[1], 1][[1], 1]Passed
control [[0, null, 1], 3][[None], 0][[None], 0]Passed
control [[1, null, 0], 3][[None], 0][[None], 0]Passed
control [[null, null, null], 3][[None], 0][[None], 0]Passed
control [[1, 0, 0, 1, 1, 0], 3][[0, 1], 2][[0, 1], 2]Passed
control [[1, 1], 3]NoneNonePassed

SHA-256 / e5e76e5fddc065c69f049e3b0b2bebe002b609e065b1a108852000bce5bd88f1

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 [[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]], ['control [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]], ['control [[0, null, 1], 3]', [[0, None, 1], 3], [[None], 0]], ['control [[1, null, 0], 3]', [[1, None, 0], 3], [[None], 0]], ['control [[null, null, null], 3]', [[None, None, None], 3], [[None], 0]], ['control [[1, 0, 0, 1, 1, 0], 3]', [[1, 0, 0, 1, 1, 0], 3], [[0, 1], 2]], ['control [[1, 1], 3]', [[1, 1], 3], None]], [['regression [[0, 0, null, null], 4]', [[0, 0, None, None], 4], [[0], 0]], ['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 [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[1, 0], 2]', [[1, 0], 2], [[None], 0]], ['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]], ['control [[null, 0, 1, 0, null, 1], 3]', [[None, 0, 1, 0, None, 1], 3], [[None, None], 0]]], [['regression [[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 [[0, 1, 1, 1, 0, 0, null, 1], 4]', [[0, 1, 1, 1, 0, 0, None, 1], 4], [[1, 0], 2]], ['control [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]], ['control [[0, null, 1], 3]', [[0, None, 1], 3], [[None], 0]], ['control [[1, null, 0], 3]', [[1, None, 0], 3], [[None], 0]], ['control [[null, null, null], 3]', [[None, None, None], 3], [[None], 0]], ['control [[1, 0, 0, 1, 1, 0], 3]', [[1, 0, 0, 1, 1, 0], 3], [[0, 1], 2]], ['control [[1, 1], 3]', [[1, 1], 3], None]], [['regression [[0, null, 1, 1, 1], 5]', [[0, None, 1, 1, 1], 5], [[1], 1]], ['regression [[1, 1, null], 3]', [[1, 1, None], 3], [[1], 0]], ['control [[1, 1], 3]', [[1, 1], 3], None], ['control [[1, 0], 2]', [[1, 0], 2], [[None], 0]], ['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]], ['control [[null, 0, 1, 0, null, 1], 3]', [[None, 0, 1, 0, None, 1], 3], [[None, None], 0]], ['control [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]]], [['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 [[0, 0, null, null], 4]', [[0, 0, None, None], 4], [[0], 0]], ['partial-repair [[1], 1]', [[1], 1], [[1], 0]], ['control [[1, 1, 0], 3]', [[1, 1, 0], 3], [[1], 1]], ['control [[0, null, 1], 3]', [[0, None, 1], 3], [[None], 0]], ['control [[1, null, 0], 3]', [[1, None, 0], 3], [[None], 0]], ['control [[null, null, null], 3]', [[None, None, None], 3], [[None], 0]], ['control [[1, 0, 0, 1, 1, 0], 3]', [[1, 0, 0, 1, 1, 0], 3], [[0, 1], 2]]]]
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 [[1, 1, null], 3][[1], 0][[1], 0]Passed
regression [[1, 1, 0, null, 0, null, 0, 0, 0, 1], 5][[None, 0], 1][[None, 0], 1]Passed
control [[1, 1, 0], 3][[1], 1][[1], 1]Passed
control [[0, null, 1], 3][[None], 0][[None], 0]Passed
control [[1, null, 0], 3][[None], 0][[None], 0]Passed
control [[null, null, null], 3][[None], 0][[None], 0]Passed
control [[1, 0, 0, 1, 1, 0], 3][[0, 1], 2][[0, 1], 2]Passed
control [[1, 1], 3]NoneNonePassed

SHA-256 / a20b7c1291d5c6bcca2ada7f6c0229a1f2dc9f871c069117cd31aaab0ea9ed97

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

Case digest / ab36d814104c90df080758762204ec9d44c4ae07c9523c668d91a0465ef977a3