FAILURE MAP
← Case archive

FA-72306 / Error-correcting codes / Open access

RS framing transmits the zero padding · case 01

Bandwidth estimates count padding bytes that a shortened code never sends.

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

ROOT CAUSE

Bytes sent are cw * n, as if every codeword were full length.

VERIFIED REPAIR

Send payload bytes plus n - k parity bytes per codeword.

Unsuccessful approach: Counting the parity bytes only once ignores every codeword after the first.

Case contract

Frame a payload of the given number of bytes into shortened RS(n, k) codewords: cw = ceil(payload / k) codewords, the last one carries payload - (cw - 1)*k data bytes (shortened, zero padding not transmitted), and each codeword adds n - k parity bytes. An empty payload uses no codewords. Return [cw, last data bytes, bytes sent]; invalid parameters return None.

Why this case matters

Link layers size FEC frames and transmit budgets from the payload length.

1 / The failure

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

N = 1
observations = []
def solve(payload, n, k):
    if payload < 0 or not 0 < k < n:
        return None
    cw = -(-payload // k)
    last = payload - (cw - 1) * k if cw else 0
    sent = cw * n
    return [cw, last, sent]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression [1, 255, 239]', [1, 255, 239], [1, 1, 17]], ['regression [240, 255, 239]', [240, 255, 239], [2, 1, 272]], ['partial-repair [0, 255, 239]', [0, 255, 239], [0, 0, 0]], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]], ['control [223, 255, 223]', [223, 255, 223], [1, 223, 255]], ['control [11, 15, 11]', [11, 15, 11], [1, 11, 15]], ['control [188, 204, 188]', [188, 204, 188], [1, 188, 204]], ['control [-1, 15, 11]', [-1, 15, 11], None]], [['regression [5, 15, 11]', [5, 15, 11], [1, 5, 9]], ['regression [12, 15, 11]', [12, 15, 11], [2, 1, 20]], ['partial-repair [1000, 255, 223]', [1000, 255, 223], [5, 108, 1160]], ['control [5, 11, 11]', [5, 11, 11], None], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]], ['control [223, 255, 223]', [223, 255, 223], [1, 223, 255]], ['control [11, 15, 11]', [11, 15, 11], [1, 11, 15]], ['control [188, 204, 188]', [188, 204, 188], [1, 188, 204]]], [['regression [22, 7, 4]', [22, 7, 4], [6, 2, 40]], ['regression [1, 7, 4]', [1, 7, 4], [1, 1, 4]], ['partial-repair [376, 204, 188]', [376, 204, 188], [2, 188, 408]], ['control [-1, 15, 11]', [-1, 15, 11], None], ['control [5, 11, 11]', [5, 11, 11], None], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]], ['control [223, 255, 223]', [223, 255, 223], [1, 223, 255]], ['control [11, 15, 11]', [11, 15, 11], [1, 11, 15]]], [['regression [240, 255, 239]', [240, 255, 239], [2, 1, 272]], ['regression [1000, 255, 223]', [1000, 255, 223], [5, 108, 1160]], ['partial-repair [478, 255, 239]', [478, 255, 239], [2, 239, 510]], ['control [188, 204, 188]', [188, 204, 188], [1, 188, 204]], ['control [-1, 15, 11]', [-1, 15, 11], None], ['control [5, 11, 11]', [5, 11, 11], None], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]], ['control [223, 255, 223]', [223, 255, 223], [1, 223, 255]]], [['regression [12, 15, 11]', [12, 15, 11], [2, 1, 20]], ['regression [100, 204, 188]', [100, 204, 188], [1, 100, 116]], ['partial-repair [33, 15, 11]', [33, 15, 11], [3, 11, 45]], ['control [11, 15, 11]', [11, 15, 11], [1, 11, 15]], ['control [188, 204, 188]', [188, 204, 188], [1, 188, 204]], ['control [-1, 15, 11]', [-1, 15, 11], None], ['control [5, 11, 11]', [5, 11, 11], None], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]]]]
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, 255, 239][1, 1, 255][1, 1, 17]Failed
regression [240, 255, 239][2, 1, 510][2, 1, 272]Failed
partial-repair [0, 255, 239][0, 0, 0][0, 0, 0]Passed
control [239, 255, 239][1, 239, 255][1, 239, 255]Passed
control [223, 255, 223][1, 223, 255][1, 223, 255]Passed
control [11, 15, 11][1, 11, 15][1, 11, 15]Passed
control [188, 204, 188][1, 188, 204][1, 188, 204]Passed
control [-1, 15, 11]NoneNonePassed

SHA-256 / 4c80c26251f3ee0e2cc1132086c2ca24064ab4feed67515e337dc1e80b92f4f0

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(payload, n, k):
    if payload < 0 or not 0 < k < n:
        return None
    cw = -(-payload // k)
    last = payload - (cw - 1) * k if cw else 0
    sent = payload + (n - k)
    return [cw, last, sent]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression [1, 255, 239]', [1, 255, 239], [1, 1, 17]], ['regression [240, 255, 239]', [240, 255, 239], [2, 1, 272]], ['partial-repair [0, 255, 239]', [0, 255, 239], [0, 0, 0]], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]], ['control [223, 255, 223]', [223, 255, 223], [1, 223, 255]], ['control [11, 15, 11]', [11, 15, 11], [1, 11, 15]], ['control [188, 204, 188]', [188, 204, 188], [1, 188, 204]], ['control [-1, 15, 11]', [-1, 15, 11], None]], [['regression [5, 15, 11]', [5, 15, 11], [1, 5, 9]], ['regression [12, 15, 11]', [12, 15, 11], [2, 1, 20]], ['partial-repair [1000, 255, 223]', [1000, 255, 223], [5, 108, 1160]], ['control [5, 11, 11]', [5, 11, 11], None], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]], ['control [223, 255, 223]', [223, 255, 223], [1, 223, 255]], ['control [11, 15, 11]', [11, 15, 11], [1, 11, 15]], ['control [188, 204, 188]', [188, 204, 188], [1, 188, 204]]], [['regression [22, 7, 4]', [22, 7, 4], [6, 2, 40]], ['regression [1, 7, 4]', [1, 7, 4], [1, 1, 4]], ['partial-repair [376, 204, 188]', [376, 204, 188], [2, 188, 408]], ['control [-1, 15, 11]', [-1, 15, 11], None], ['control [5, 11, 11]', [5, 11, 11], None], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]], ['control [223, 255, 223]', [223, 255, 223], [1, 223, 255]], ['control [11, 15, 11]', [11, 15, 11], [1, 11, 15]]], [['regression [240, 255, 239]', [240, 255, 239], [2, 1, 272]], ['regression [1000, 255, 223]', [1000, 255, 223], [5, 108, 1160]], ['partial-repair [478, 255, 239]', [478, 255, 239], [2, 239, 510]], ['control [188, 204, 188]', [188, 204, 188], [1, 188, 204]], ['control [-1, 15, 11]', [-1, 15, 11], None], ['control [5, 11, 11]', [5, 11, 11], None], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]], ['control [223, 255, 223]', [223, 255, 223], [1, 223, 255]]], [['regression [12, 15, 11]', [12, 15, 11], [2, 1, 20]], ['regression [100, 204, 188]', [100, 204, 188], [1, 100, 116]], ['partial-repair [33, 15, 11]', [33, 15, 11], [3, 11, 45]], ['control [11, 15, 11]', [11, 15, 11], [1, 11, 15]], ['control [188, 204, 188]', [188, 204, 188], [1, 188, 204]], ['control [-1, 15, 11]', [-1, 15, 11], None], ['control [5, 11, 11]', [5, 11, 11], None], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]]]]
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, 255, 239][1, 1, 17][1, 1, 17]Passed
regression [240, 255, 239][2, 1, 256][2, 1, 272]Failed
partial-repair [0, 255, 239][0, 0, 16][0, 0, 0]Failed
control [239, 255, 239][1, 239, 255][1, 239, 255]Passed
control [223, 255, 223][1, 223, 255][1, 223, 255]Passed
control [11, 15, 11][1, 11, 15][1, 11, 15]Passed
control [188, 204, 188][1, 188, 204][1, 188, 204]Passed
control [-1, 15, 11]NoneNonePassed

SHA-256 / 508ea841d1c79a0a38a0546546c5dcec2b21bd909807855c50af9ec5b21d71a2

3 / The verified repair

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

N = 1
observations = []
def solve(payload, n, k):
    if payload < 0 or not 0 < k < n:
        return None
    cw = -(-payload // k)
    last = payload - (cw - 1) * k if cw else 0
    sent = payload + cw * (n - k)
    return [cw, last, sent]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression [1, 255, 239]', [1, 255, 239], [1, 1, 17]], ['regression [240, 255, 239]', [240, 255, 239], [2, 1, 272]], ['partial-repair [0, 255, 239]', [0, 255, 239], [0, 0, 0]], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]], ['control [223, 255, 223]', [223, 255, 223], [1, 223, 255]], ['control [11, 15, 11]', [11, 15, 11], [1, 11, 15]], ['control [188, 204, 188]', [188, 204, 188], [1, 188, 204]], ['control [-1, 15, 11]', [-1, 15, 11], None]], [['regression [5, 15, 11]', [5, 15, 11], [1, 5, 9]], ['regression [12, 15, 11]', [12, 15, 11], [2, 1, 20]], ['partial-repair [1000, 255, 223]', [1000, 255, 223], [5, 108, 1160]], ['control [5, 11, 11]', [5, 11, 11], None], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]], ['control [223, 255, 223]', [223, 255, 223], [1, 223, 255]], ['control [11, 15, 11]', [11, 15, 11], [1, 11, 15]], ['control [188, 204, 188]', [188, 204, 188], [1, 188, 204]]], [['regression [22, 7, 4]', [22, 7, 4], [6, 2, 40]], ['regression [1, 7, 4]', [1, 7, 4], [1, 1, 4]], ['partial-repair [376, 204, 188]', [376, 204, 188], [2, 188, 408]], ['control [-1, 15, 11]', [-1, 15, 11], None], ['control [5, 11, 11]', [5, 11, 11], None], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]], ['control [223, 255, 223]', [223, 255, 223], [1, 223, 255]], ['control [11, 15, 11]', [11, 15, 11], [1, 11, 15]]], [['regression [240, 255, 239]', [240, 255, 239], [2, 1, 272]], ['regression [1000, 255, 223]', [1000, 255, 223], [5, 108, 1160]], ['partial-repair [478, 255, 239]', [478, 255, 239], [2, 239, 510]], ['control [188, 204, 188]', [188, 204, 188], [1, 188, 204]], ['control [-1, 15, 11]', [-1, 15, 11], None], ['control [5, 11, 11]', [5, 11, 11], None], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]], ['control [223, 255, 223]', [223, 255, 223], [1, 223, 255]]], [['regression [12, 15, 11]', [12, 15, 11], [2, 1, 20]], ['regression [100, 204, 188]', [100, 204, 188], [1, 100, 116]], ['partial-repair [33, 15, 11]', [33, 15, 11], [3, 11, 45]], ['control [11, 15, 11]', [11, 15, 11], [1, 11, 15]], ['control [188, 204, 188]', [188, 204, 188], [1, 188, 204]], ['control [-1, 15, 11]', [-1, 15, 11], None], ['control [5, 11, 11]', [5, 11, 11], None], ['control [239, 255, 239]', [239, 255, 239], [1, 239, 255]]]]
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, 255, 239][1, 1, 17][1, 1, 17]Passed
regression [240, 255, 239][2, 1, 272][2, 1, 272]Passed
partial-repair [0, 255, 239][0, 0, 0][0, 0, 0]Passed
control [239, 255, 239][1, 239, 255][1, 239, 255]Passed
control [223, 255, 223][1, 223, 255][1, 223, 255]Passed
control [11, 15, 11][1, 11, 15][1, 11, 15]Passed
control [188, 204, 188][1, 188, 204][1, 188, 204]Passed
control [-1, 15, 11]NoneNonePassed

SHA-256 / 369d3a285c7d58c12d6dcdfb4ee2b36b5cbc92875091b014e03e840a3be57b69

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

Case digest / bba3377b415d754742368496cf37728f8d9ec3d652aae3640215ba0521ad7c51