FA-71901 / Error-correcting codes / Open access
Repetition decoder counts erasures as corrections · case 01
The corrected-symbol statistic is inflated by erasures.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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] | None | None | Passed |
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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] | None | None | Passed |
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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] | None | None | Passed |
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