FA-72161 / Error-correcting codes / Open access
QR format encoder omits the 0x5412 mask · case 01
Format words disagree with printed symbols; decoding finds nothing within distance 3.
ROOT CAUSE
The BCH codeword is returned without XORing the fixed mask 0x5412.
VERIFIED REPAIR
XOR the complete 15-bit BCH codeword with 0x5412.
Unsuccessful approach: Masking only the five data bits before computing the remainder yields a different codeword.
Case contract
QR code format information, a BCH(15,5) code. "encode" takes [level, mask] with level bits L=01, M=00, Q=11, H=10 and mask 0..7 (else None): data = level<<3 | mask, append the 10-bit remainder of data*x^10 modulo 0x537, then XOR 0x5412. "decode" takes a 15-bit integer and returns [level, mask, distance] for the unique format word within Hamming distance 3, else None.
Why this case matters
QR readers must recover the error-correction level and mask pattern before decoding any data module.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(op, x):
EC = {'L': 1, 'M': 0, 'Q': 3, 'H': 2}
def enc(level, mask):
data = (EC[level] << 3) | mask
rem = data << 10
for i in range(14, 9, -1):
if rem & (1 << i):
rem ^= 0x537 << (i - 10)
return (data << 10) | rem
if op == 'encode':
level, mask = x
if level not in EC or not 0 <= mask <= 7:
return None
return enc(level, mask)
best = None
for level in 'LMQH':
for mask in range(8):
dist = bin(enc(level, mask) ^ x).count('1')
if dist <= 3 and (best is None or dist < best[2]):
best = [level, mask, dist]
return best
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression ["encode", ["L", 0]]', ['encode', ['L', 0]], 30660], ['regression ["encode", ["L", 3]]', ['encode', ['L', 3]], 30877], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["encode", ["L", 7]]', ['encode', ['L', 7]], 26998], ['control ["encode", ["M", 0]]', ['encode', ['M', 0]], 21522], ['control ["encode", ["M", 3]]', ['encode', ['M', 3]], 23371]], [['regression ["encode", ["L", 7]]', ['encode', ['L', 7]], 26998], ['regression ["encode", ["M", 0]]', ['encode', ['M', 0]], 21522], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["encode", ["Q", 0]]', ['encode', ['Q', 0]], 13663], ['control ["encode", ["Q", 3]]', ['encode', ['Q', 3]], 14854], ['control ["encode", ["Q", 5]]', ['encode', ['Q', 5]], 8579]], [['regression ["encode", ["M", 5]]', ['encode', ['M', 5]], 16590], ['regression ["encode", ["M", 7]]', ['encode', ['M', 7]], 19104], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["H", 3]]', ['encode', ['H', 3]], 6608], ['control ["encode", ["H", 5]]', ['encode', ['H', 5]], 597], ['control ["encode", ["H", 7]]', ['encode', ['H', 7]], 2107]], [['regression ["encode", ["Q", 3]]', ['encode', ['Q', 3]], 14854], ['regression ["encode", ["Q", 5]]', ['encode', ['Q', 5]], 8579], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["decode", 19724]', ['decode', 19724], ['H', 6, 1]], ['control ["decode", 6616]', ['decode', 6616], ['H', 3, 1]], ['control ["decode", 20345]', ['decode', 20345], ['M', 4, 3]]], [['regression ["encode", ["H", 0]]', ['encode', ['H', 0]], 5769], ['regression ["encode", ["H", 3]]', ['encode', ['H', 3]], 6608], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["decode", 2309]', ['decode', 2309], ['H', 6, 3]], ['control ["decode", 2099]', ['decode', 2099], ['H', 7, 1]], ['control ["decode", 27094]', ['decode', 27094], ['L', 7, 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 ["encode", ["L", 0]] | 9174 | 30660 | Failed |
| regression ["encode", ["L", 3]] | 11407 | 30877 | Failed |
| control ["encode", ["X", 1]] | None | None | Passed |
| control ["encode", ["L", 8]] | None | None | Passed |
| control ["decode", 21533] | None | None | Passed |
| control ["encode", ["L", 7]] | 15716 | 26998 | Failed |
| control ["encode", ["M", 0]] | 0 | 21522 | Failed |
| control ["encode", ["M", 3]] | 3929 | 23371 | Failed |
SHA-256 / c371a5c11e56894ef2df6bce33b07dc575286a86e48de2e3361cbd0a52966f42
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(op, x):
EC = {'L': 1, 'M': 0, 'Q': 3, 'H': 2}
def enc(level, mask):
data = ((EC[level] << 3) | mask) ^ 0b10101
rem = data << 10
for i in range(14, 9, -1):
if rem & (1 << i):
rem ^= 0x537 << (i - 10)
return (data << 10) | rem
if op == 'encode':
level, mask = x
if level not in EC or not 0 <= mask <= 7:
return None
return enc(level, mask)
best = None
for level in 'LMQH':
for mask in range(8):
dist = bin(enc(level, mask) ^ x).count('1')
if dist <= 3 and (best is None or dist < best[2]):
best = [level, mask, dist]
return best
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression ["encode", ["L", 0]]', ['encode', ['L', 0]], 30660], ['regression ["encode", ["L", 3]]', ['encode', ['L', 3]], 30877], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["encode", ["L", 7]]', ['encode', ['L', 7]], 26998], ['control ["encode", ["M", 0]]', ['encode', ['M', 0]], 21522], ['control ["encode", ["M", 3]]', ['encode', ['M', 3]], 23371]], [['regression ["encode", ["L", 7]]', ['encode', ['L', 7]], 26998], ['regression ["encode", ["M", 0]]', ['encode', ['M', 0]], 21522], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["encode", ["Q", 0]]', ['encode', ['Q', 0]], 13663], ['control ["encode", ["Q", 3]]', ['encode', ['Q', 3]], 14854], ['control ["encode", ["Q", 5]]', ['encode', ['Q', 5]], 8579]], [['regression ["encode", ["M", 5]]', ['encode', ['M', 5]], 16590], ['regression ["encode", ["M", 7]]', ['encode', ['M', 7]], 19104], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["H", 3]]', ['encode', ['H', 3]], 6608], ['control ["encode", ["H", 5]]', ['encode', ['H', 5]], 597], ['control ["encode", ["H", 7]]', ['encode', ['H', 7]], 2107]], [['regression ["encode", ["Q", 3]]', ['encode', ['Q', 3]], 14854], ['regression ["encode", ["Q", 5]]', ['encode', ['Q', 5]], 8579], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["decode", 19724]', ['decode', 19724], ['H', 6, 1]], ['control ["decode", 6616]', ['decode', 6616], ['H', 3, 1]], ['control ["decode", 20345]', ['decode', 20345], ['M', 4, 3]]], [['regression ["encode", ["H", 0]]', ['encode', ['H', 0]], 5769], ['regression ["encode", ["H", 3]]', ['encode', ['H', 3]], 6608], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["decode", 2309]', ['decode', 2309], ['H', 6, 3]], ['control ["decode", 2099]', ['decode', 2099], ['H', 7, 1]], ['control ["decode", 27094]', ['decode', 27094], ['L', 7, 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 ["encode", ["L", 0]] | 30097 | 30660 | Failed |
| regression ["encode", ["L", 3]] | 31432 | 30877 | Failed |
| control ["encode", ["X", 1]] | None | None | Passed |
| control ["encode", ["L", 8]] | None | None | Passed |
| control ["decode", 21533] | None | None | Passed |
| control ["encode", ["L", 7]] | 27427 | 26998 | Failed |
| control ["encode", ["M", 0]] | 22087 | 21522 | Failed |
| control ["encode", ["M", 3]] | 22814 | 23371 | Failed |
SHA-256 / 8aa8d052019da3e2dc93cd2616bbc9e58337301f77703177086d5d1b24c0a9c0
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(op, x):
EC = {'L': 1, 'M': 0, 'Q': 3, 'H': 2}
def enc(level, mask):
data = (EC[level] << 3) | mask
rem = data << 10
for i in range(14, 9, -1):
if rem & (1 << i):
rem ^= 0x537 << (i - 10)
return ((data << 10) | rem) ^ 0x5412
if op == 'encode':
level, mask = x
if level not in EC or not 0 <= mask <= 7:
return None
return enc(level, mask)
best = None
for level in 'LMQH':
for mask in range(8):
dist = bin(enc(level, mask) ^ x).count('1')
if dist <= 3 and (best is None or dist < best[2]):
best = [level, mask, dist]
return best
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression ["encode", ["L", 0]]', ['encode', ['L', 0]], 30660], ['regression ["encode", ["L", 3]]', ['encode', ['L', 3]], 30877], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["encode", ["L", 7]]', ['encode', ['L', 7]], 26998], ['control ["encode", ["M", 0]]', ['encode', ['M', 0]], 21522], ['control ["encode", ["M", 3]]', ['encode', ['M', 3]], 23371]], [['regression ["encode", ["L", 7]]', ['encode', ['L', 7]], 26998], ['regression ["encode", ["M", 0]]', ['encode', ['M', 0]], 21522], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["encode", ["Q", 0]]', ['encode', ['Q', 0]], 13663], ['control ["encode", ["Q", 3]]', ['encode', ['Q', 3]], 14854], ['control ["encode", ["Q", 5]]', ['encode', ['Q', 5]], 8579]], [['regression ["encode", ["M", 5]]', ['encode', ['M', 5]], 16590], ['regression ["encode", ["M", 7]]', ['encode', ['M', 7]], 19104], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["H", 3]]', ['encode', ['H', 3]], 6608], ['control ["encode", ["H", 5]]', ['encode', ['H', 5]], 597], ['control ["encode", ["H", 7]]', ['encode', ['H', 7]], 2107]], [['regression ["encode", ["Q", 3]]', ['encode', ['Q', 3]], 14854], ['regression ["encode", ["Q", 5]]', ['encode', ['Q', 5]], 8579], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["decode", 19724]', ['decode', 19724], ['H', 6, 1]], ['control ["decode", 6616]', ['decode', 6616], ['H', 3, 1]], ['control ["decode", 20345]', ['decode', 20345], ['M', 4, 3]]], [['regression ["encode", ["H", 0]]', ['encode', ['H', 0]], 5769], ['regression ["encode", ["H", 3]]', ['encode', ['H', 3]], 6608], ['control ["decode", 21533]', ['decode', 21533], None], ['control ["encode", ["X", 1]]', ['encode', ['X', 1]], None], ['control ["encode", ["L", 8]]', ['encode', ['L', 8]], None], ['control ["decode", 2309]', ['decode', 2309], ['H', 6, 3]], ['control ["decode", 2099]', ['decode', 2099], ['H', 7, 1]], ['control ["decode", 27094]', ['decode', 27094], ['L', 7, 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 ["encode", ["L", 0]] | 30660 | 30660 | Passed |
| regression ["encode", ["L", 3]] | 30877 | 30877 | Passed |
| control ["encode", ["X", 1]] | None | None | Passed |
| control ["encode", ["L", 8]] | None | None | Passed |
| control ["decode", 21533] | None | None | Passed |
| control ["encode", ["L", 7]] | 26998 | 26998 | Passed |
| control ["encode", ["M", 0]] | 21522 | 21522 | Passed |
| control ["encode", ["M", 3]] | 23371 | 23371 | Passed |
SHA-256 / 2b4f96ced5bf8bf726ff3b0d8764ecab9df778db5e70e6d6dcd2b7db2230bb18
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:36.037070+00:00.
Case digest / f3525a07389ce6b56904bd72a9bc7317f5603a545520bed8b5e52485c88e9341