FA-71991 / Error-correcting codes / Open access
RS syndromes evaluate the polynomial reversed · case 01
Error-free codewords report nonzero syndromes.
ROOT CAUSE
Horner evaluation walks the coefficients lowest degree first.
VERIFIED REPAIR
Walk msg in its stored order (highest degree first).
Unsuccessful approach: Multiplying after adding evaluates x * msg(x), which is nonzero at alpha^0 for clean words.
Case contract
Reed-Solomon syndromes over GF(2^8) (0x11D, alpha = 2, first consecutive root alpha^0). msg lists coefficients from the highest degree down. S_j = msg(alpha^j) for j = 0..nsym-1 by Horner evaluation. Return [syndromes, whether any syndrome is nonzero].
Why this case matters
Storage and broadcast decoders start every Reed-Solomon block with a syndrome check.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(msg, nsym):
EXP, LOG = [0] * 512, [0] * 256
x = 1
for i in range(255):
EXP[i] = EXP[i + 255] = x
LOG[x] = i
x <<= 1
if x & 0x100:
x ^= 0x11D
def mul(a, b):
return 0 if a == 0 or b == 0 else EXP[LOG[a] + LOG[b]]
synd = []
for j in range(nsym):
root = EXP[j]
v = 0
for coef in reversed(msg):
v = mul(v, root) ^ coef
synd.append(v)
return [synd, any(synd)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression [[23, 252, 61, 84, 130], 2]', [[23, 252, 61, 84, 130], 2], [[0, 0], False]], ['regression [[23, 252, 61, 64, 130], 2]', [[23, 252, 61, 64, 130], 2], [[20, 40], True]], ['partial-repair [[23, 252, 61, 64, 130], 4]', [[23, 252, 61, 64, 130], 4], [[20, 40, 7, 141], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[176, 102, 222, 44, 125, 89], 2]', [[176, 102, 222, 44, 125, 89], 2], [[0, 0], False]], ['control [[176, 102, 222, 61, 125, 89], 2]', [[176, 102, 222, 61, 125, 89], 2], [[17, 68], True]], ['control [[176, 102, 222, 61, 125, 89], 4]', [[176, 102, 222, 61, 125, 89], 4], [[17, 68, 169, 244], True]]], [['regression [[176, 102, 222, 44, 125, 89], 2]', [[176, 102, 222, 44, 125, 89], 2], [[0, 0], False]], ['regression [[176, 102, 222, 61, 125, 89], 2]', [[176, 102, 222, 61, 125, 89], 2], [[17, 68], True]], ['partial-repair [[176, 102, 222, 61, 125, 89], 4]', [[176, 102, 222, 61, 125, 89], 4], [[17, 68, 169, 244], True]], ['partial-repair [[123, 214, 103, 174, 192, 161, 31], 2]', [[123, 214, 103, 174, 192, 161, 31], 2], [[26, 52], True]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[123, 214, 103, 174, 192, 161, 31], 4]', [[123, 214, 103, 174, 192, 161, 31], 4], [[26, 52, 69, 105], True]], ['control [[131, 154, 183, 135, 93, 251, 102, 233], 2]', [[131, 154, 183, 135, 93, 251, 102, 233], 2], [[0, 0], False]]], [['regression [[123, 214, 103, 174, 192, 187, 31], 2]', [[123, 214, 103, 174, 192, 187, 31], 2], [[0, 0], False]], ['regression [[123, 214, 103, 174, 192, 161, 31], 2]', [[123, 214, 103, 174, 192, 161, 31], 2], [[26, 52], True]], ['partial-repair [[131, 154, 183, 135, 93, 136, 102, 233], 2]', [[131, 154, 183, 135, 93, 136, 102, 233], 2], [[115, 209], True]], ['partial-repair [[131, 154, 183, 135, 93, 136, 102, 233], 4]', [[131, 154, 183, 135, 93, 136, 102, 233], 4], [[115, 209, 164, 73], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[70, 25, 237, 118, 90, 165, 35, 253, 93, 184], 2]', [[70, 25, 237, 118, 90, 165, 35, 253, 93, 184], 2], [[0, 0], False]], ['control [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 2]', [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 2], [[133, 184], True]]], [['regression [[131, 154, 183, 135, 93, 251, 102, 233], 2]', [[131, 154, 183, 135, 93, 251, 102, 233], 2], [[0, 0], False]], ['regression [[131, 154, 183, 135, 93, 136, 102, 233], 2]', [[131, 154, 183, 135, 93, 136, 102, 233], 2], [[115, 209], True]], ['partial-repair [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 4]', [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 4], [[133, 184, 215, 167], True]], ['partial-repair [[178, 65, 204, 132, 27, 119, 170, 156, 109, 21, 94, 12], 2]', [[178, 65, 204, 132, 27, 119, 170, 156, 109, 21, 94, 12], 2], [[203, 88], True]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[178, 65, 204, 132, 27, 119, 170, 156, 109, 21, 94, 12], 4]', [[178, 65, 204, 132, 27, 119, 170, 156, 109, 21, 94, 12], 4], [[203, 88, 8, 229], True]], ['control [[1, 5, 4], 3]', [[1, 5, 4], 3], [[0, 10, 0], True]]], [['regression [[70, 25, 237, 118, 90, 165, 35, 253, 93, 184], 2]', [[70, 25, 237, 118, 90, 165, 35, 253, 93, 184], 2], [[0, 0], False]], ['regression [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 2]', [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 2], [[133, 184], True]], ['partial-repair [[1, 5, 4], 3]', [[1, 5, 4], 3], [[0, 10, 0], True]], ['partial-repair [[2, 10, 8], 3]', [[2, 10, 8], 3], [[0, 20, 0], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[1, 2, 3], 3]', [[1, 2, 3], 3], [[0, 3, 27], True]], ['control [[0, 0, 7], 2]', [[0, 0, 7], 2], [[7, 7], True]]]]
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 [[23, 252, 61, 84, 130], 2] | [[0, 84], True] | [[0, 0], False] | Failed |
| regression [[23, 252, 61, 64, 130], 2] | [[20, 244], True] | [[20, 40], True] | Failed |
| partial-repair [[23, 252, 61, 64, 130], 4] | [[20, 244, 230, 164], True] | [[20, 40, 7, 141], True] | Failed |
| control [[0, 0, 0, 0], 2] | [[0, 0], False] | [[0, 0], False] | Passed |
| control [[5], 1] | [[5], True] | [[5], True] | Passed |
| control [[176, 102, 222, 44, 125, 89], 2] | [[0, 50], True] | [[0, 0], False] | Failed |
| control [[176, 102, 222, 61, 125, 89], 2] | [[17, 186], True] | [[17, 68], True] | Failed |
| control [[176, 102, 222, 61, 125, 89], 4] | [[17, 186, 219, 144], True] | [[17, 68, 169, 244], True] | Failed |
SHA-256 / 51cc57c6b2a3ca9b8c4bab75b412ccef23134aba17b98c5916c8661245821a3c
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(msg, nsym):
EXP, LOG = [0] * 512, [0] * 256
x = 1
for i in range(255):
EXP[i] = EXP[i + 255] = x
LOG[x] = i
x <<= 1
if x & 0x100:
x ^= 0x11D
def mul(a, b):
return 0 if a == 0 or b == 0 else EXP[LOG[a] + LOG[b]]
synd = []
for j in range(nsym):
root = EXP[j]
v = 0
for coef in msg:
v = mul(v ^ coef, root)
synd.append(v)
return [synd, any(synd)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression [[23, 252, 61, 84, 130], 2]', [[23, 252, 61, 84, 130], 2], [[0, 0], False]], ['regression [[23, 252, 61, 64, 130], 2]', [[23, 252, 61, 64, 130], 2], [[20, 40], True]], ['partial-repair [[23, 252, 61, 64, 130], 4]', [[23, 252, 61, 64, 130], 4], [[20, 40, 7, 141], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[176, 102, 222, 44, 125, 89], 2]', [[176, 102, 222, 44, 125, 89], 2], [[0, 0], False]], ['control [[176, 102, 222, 61, 125, 89], 2]', [[176, 102, 222, 61, 125, 89], 2], [[17, 68], True]], ['control [[176, 102, 222, 61, 125, 89], 4]', [[176, 102, 222, 61, 125, 89], 4], [[17, 68, 169, 244], True]]], [['regression [[176, 102, 222, 44, 125, 89], 2]', [[176, 102, 222, 44, 125, 89], 2], [[0, 0], False]], ['regression [[176, 102, 222, 61, 125, 89], 2]', [[176, 102, 222, 61, 125, 89], 2], [[17, 68], True]], ['partial-repair [[176, 102, 222, 61, 125, 89], 4]', [[176, 102, 222, 61, 125, 89], 4], [[17, 68, 169, 244], True]], ['partial-repair [[123, 214, 103, 174, 192, 161, 31], 2]', [[123, 214, 103, 174, 192, 161, 31], 2], [[26, 52], True]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[123, 214, 103, 174, 192, 161, 31], 4]', [[123, 214, 103, 174, 192, 161, 31], 4], [[26, 52, 69, 105], True]], ['control [[131, 154, 183, 135, 93, 251, 102, 233], 2]', [[131, 154, 183, 135, 93, 251, 102, 233], 2], [[0, 0], False]]], [['regression [[123, 214, 103, 174, 192, 187, 31], 2]', [[123, 214, 103, 174, 192, 187, 31], 2], [[0, 0], False]], ['regression [[123, 214, 103, 174, 192, 161, 31], 2]', [[123, 214, 103, 174, 192, 161, 31], 2], [[26, 52], True]], ['partial-repair [[131, 154, 183, 135, 93, 136, 102, 233], 2]', [[131, 154, 183, 135, 93, 136, 102, 233], 2], [[115, 209], True]], ['partial-repair [[131, 154, 183, 135, 93, 136, 102, 233], 4]', [[131, 154, 183, 135, 93, 136, 102, 233], 4], [[115, 209, 164, 73], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[70, 25, 237, 118, 90, 165, 35, 253, 93, 184], 2]', [[70, 25, 237, 118, 90, 165, 35, 253, 93, 184], 2], [[0, 0], False]], ['control [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 2]', [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 2], [[133, 184], True]]], [['regression [[131, 154, 183, 135, 93, 251, 102, 233], 2]', [[131, 154, 183, 135, 93, 251, 102, 233], 2], [[0, 0], False]], ['regression [[131, 154, 183, 135, 93, 136, 102, 233], 2]', [[131, 154, 183, 135, 93, 136, 102, 233], 2], [[115, 209], True]], ['partial-repair [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 4]', [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 4], [[133, 184, 215, 167], True]], ['partial-repair [[178, 65, 204, 132, 27, 119, 170, 156, 109, 21, 94, 12], 2]', [[178, 65, 204, 132, 27, 119, 170, 156, 109, 21, 94, 12], 2], [[203, 88], True]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[178, 65, 204, 132, 27, 119, 170, 156, 109, 21, 94, 12], 4]', [[178, 65, 204, 132, 27, 119, 170, 156, 109, 21, 94, 12], 4], [[203, 88, 8, 229], True]], ['control [[1, 5, 4], 3]', [[1, 5, 4], 3], [[0, 10, 0], True]]], [['regression [[70, 25, 237, 118, 90, 165, 35, 253, 93, 184], 2]', [[70, 25, 237, 118, 90, 165, 35, 253, 93, 184], 2], [[0, 0], False]], ['regression [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 2]', [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 2], [[133, 184], True]], ['partial-repair [[1, 5, 4], 3]', [[1, 5, 4], 3], [[0, 10, 0], True]], ['partial-repair [[2, 10, 8], 3]', [[2, 10, 8], 3], [[0, 20, 0], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[1, 2, 3], 3]', [[1, 2, 3], 3], [[0, 3, 27], True]], ['control [[0, 0, 7], 2]', [[0, 0, 7], 2], [[7, 7], True]]]]
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 [[23, 252, 61, 84, 130], 2] | [[0, 0], False] | [[0, 0], False] | Passed |
| regression [[23, 252, 61, 64, 130], 2] | [[20, 80], True] | [[20, 40], True] | Failed |
| partial-repair [[23, 252, 61, 64, 130], 4] | [[20, 80, 28, 28], True] | [[20, 40, 7, 141], True] | Failed |
| control [[0, 0, 0, 0], 2] | [[0, 0], False] | [[0, 0], False] | Passed |
| control [[5], 1] | [[5], True] | [[5], True] | Passed |
| control [[176, 102, 222, 44, 125, 89], 2] | [[0, 0], False] | [[0, 0], False] | Passed |
| control [[176, 102, 222, 61, 125, 89], 2] | [[17, 136], True] | [[17, 68], True] | Failed |
| control [[176, 102, 222, 61, 125, 89], 4] | [[17, 136, 158, 243], True] | [[17, 68, 169, 244], True] | Failed |
SHA-256 / 479cf6cf78338eda0c712fdef689c9004fdcb54c0277160c9a0d0d5c1fc1a8dd
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(msg, nsym):
EXP, LOG = [0] * 512, [0] * 256
x = 1
for i in range(255):
EXP[i] = EXP[i + 255] = x
LOG[x] = i
x <<= 1
if x & 0x100:
x ^= 0x11D
def mul(a, b):
return 0 if a == 0 or b == 0 else EXP[LOG[a] + LOG[b]]
synd = []
for j in range(nsym):
root = EXP[j]
v = 0
for coef in msg:
v = mul(v, root) ^ coef
synd.append(v)
return [synd, any(synd)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression [[23, 252, 61, 84, 130], 2]', [[23, 252, 61, 84, 130], 2], [[0, 0], False]], ['regression [[23, 252, 61, 64, 130], 2]', [[23, 252, 61, 64, 130], 2], [[20, 40], True]], ['partial-repair [[23, 252, 61, 64, 130], 4]', [[23, 252, 61, 64, 130], 4], [[20, 40, 7, 141], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[176, 102, 222, 44, 125, 89], 2]', [[176, 102, 222, 44, 125, 89], 2], [[0, 0], False]], ['control [[176, 102, 222, 61, 125, 89], 2]', [[176, 102, 222, 61, 125, 89], 2], [[17, 68], True]], ['control [[176, 102, 222, 61, 125, 89], 4]', [[176, 102, 222, 61, 125, 89], 4], [[17, 68, 169, 244], True]]], [['regression [[176, 102, 222, 44, 125, 89], 2]', [[176, 102, 222, 44, 125, 89], 2], [[0, 0], False]], ['regression [[176, 102, 222, 61, 125, 89], 2]', [[176, 102, 222, 61, 125, 89], 2], [[17, 68], True]], ['partial-repair [[176, 102, 222, 61, 125, 89], 4]', [[176, 102, 222, 61, 125, 89], 4], [[17, 68, 169, 244], True]], ['partial-repair [[123, 214, 103, 174, 192, 161, 31], 2]', [[123, 214, 103, 174, 192, 161, 31], 2], [[26, 52], True]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[123, 214, 103, 174, 192, 161, 31], 4]', [[123, 214, 103, 174, 192, 161, 31], 4], [[26, 52, 69, 105], True]], ['control [[131, 154, 183, 135, 93, 251, 102, 233], 2]', [[131, 154, 183, 135, 93, 251, 102, 233], 2], [[0, 0], False]]], [['regression [[123, 214, 103, 174, 192, 187, 31], 2]', [[123, 214, 103, 174, 192, 187, 31], 2], [[0, 0], False]], ['regression [[123, 214, 103, 174, 192, 161, 31], 2]', [[123, 214, 103, 174, 192, 161, 31], 2], [[26, 52], True]], ['partial-repair [[131, 154, 183, 135, 93, 136, 102, 233], 2]', [[131, 154, 183, 135, 93, 136, 102, 233], 2], [[115, 209], True]], ['partial-repair [[131, 154, 183, 135, 93, 136, 102, 233], 4]', [[131, 154, 183, 135, 93, 136, 102, 233], 4], [[115, 209, 164, 73], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[70, 25, 237, 118, 90, 165, 35, 253, 93, 184], 2]', [[70, 25, 237, 118, 90, 165, 35, 253, 93, 184], 2], [[0, 0], False]], ['control [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 2]', [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 2], [[133, 184], True]]], [['regression [[131, 154, 183, 135, 93, 251, 102, 233], 2]', [[131, 154, 183, 135, 93, 251, 102, 233], 2], [[0, 0], False]], ['regression [[131, 154, 183, 135, 93, 136, 102, 233], 2]', [[131, 154, 183, 135, 93, 136, 102, 233], 2], [[115, 209], True]], ['partial-repair [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 4]', [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 4], [[133, 184, 215, 167], True]], ['partial-repair [[178, 65, 204, 132, 27, 119, 170, 156, 109, 21, 94, 12], 2]', [[178, 65, 204, 132, 27, 119, 170, 156, 109, 21, 94, 12], 2], [[203, 88], True]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[178, 65, 204, 132, 27, 119, 170, 156, 109, 21, 94, 12], 4]', [[178, 65, 204, 132, 27, 119, 170, 156, 109, 21, 94, 12], 4], [[203, 88, 8, 229], True]], ['control [[1, 5, 4], 3]', [[1, 5, 4], 3], [[0, 10, 0], True]]], [['regression [[70, 25, 237, 118, 90, 165, 35, 253, 93, 184], 2]', [[70, 25, 237, 118, 90, 165, 35, 253, 93, 184], 2], [[0, 0], False]], ['regression [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 2]', [[70, 25, 237, 118, 90, 32, 35, 253, 93, 184], 2], [[133, 184], True]], ['partial-repair [[1, 5, 4], 3]', [[1, 5, 4], 3], [[0, 10, 0], True]], ['partial-repair [[2, 10, 8], 3]', [[2, 10, 8], 3], [[0, 20, 0], True]], ['control [[0, 0, 0, 0], 2]', [[0, 0, 0, 0], 2], [[0, 0], False]], ['control [[5], 1]', [[5], 1], [[5], True]], ['control [[1, 2, 3], 3]', [[1, 2, 3], 3], [[0, 3, 27], True]], ['control [[0, 0, 7], 2]', [[0, 0, 7], 2], [[7, 7], True]]]]
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 [[23, 252, 61, 84, 130], 2] | [[0, 0], False] | [[0, 0], False] | Passed |
| regression [[23, 252, 61, 64, 130], 2] | [[20, 40], True] | [[20, 40], True] | Passed |
| partial-repair [[23, 252, 61, 64, 130], 4] | [[20, 40, 7, 141], True] | [[20, 40, 7, 141], True] | Passed |
| control [[0, 0, 0, 0], 2] | [[0, 0], False] | [[0, 0], False] | Passed |
| control [[5], 1] | [[5], True] | [[5], True] | Passed |
| control [[176, 102, 222, 44, 125, 89], 2] | [[0, 0], False] | [[0, 0], False] | Passed |
| control [[176, 102, 222, 61, 125, 89], 2] | [[17, 68], True] | [[17, 68], True] | Passed |
| control [[176, 102, 222, 61, 125, 89], 4] | [[17, 68, 169, 244], True] | [[17, 68, 169, 244], True] | Passed |
SHA-256 / 978815099db6e26400fc86442e5070209fd6fc3bdf1860c7f42c6c7e15bbeca2
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:34.598398+00:00.
Case digest / fc70c4ea89e07c28c250e76d72f78e7b1be6f6e7df1d85bf7138060c9382e534