FA-97371 / Knitting and sewing pattern grading / Open access
Evenly spaced increase row: symmetric remainder · case 01
Leftover stitches pile up on the right edge of a flat row, making the increases lopsided.
ROOT CAUSE
Remainder stitches go to the first segments instead of alternating from both edges.
VERIFIED REPAIR
Hand out remainder stitches in the outside-in order.
Unsuccessful approach: Taking the tail of the order gives the extra stitches to the centre segments.
Case contract
Distribute increases (m1) evenly over stitches. Flat rows use increases+1 segments with no increase at the edges; rounds use `increases` segments each followed by m1. Segment length is stitches // segments; the remainder adds one stitch to segments in order: rounds from the start, flat rows alternating from the outside in (first, last, second, second-last...). Segments must hold at least one stitch, else "error: too many increases". 0 increases -> "k<n>"; negative counts or no stitches -> "error: counts". Output "k4, m1, k5, ...".
Why this case matters
Yoke, cuff-to-body and hem transitions ask knitters to increase evenly across a row.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(stitches, increases, flat):
if stitches <= 0 or increases < 0:
return 'error: counts'
if increases == 0:
return 'k%d' % stitches
segs = increases + 1 if flat else increases
if segs > stitches:
return 'error: too many increases'
base, extra = divmod(stitches, segs)
lens = [base] * segs
if flat:
order = []
i, j = 0, segs - 1
while i <= j:
order.append(i)
if i != j:
order.append(j)
i += 1
j -= 1
else:
order = list(range(segs))
for idx in range(extra):
lens[idx] += 1
parts = []
for n in lens:
parts.append('k%d' % n)
parts.append('m1')
if flat:
parts.pop()
return ', '.join(parts)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['round even split', [40, 8, False], 'k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1'],
['flat with remainder', [23, 3, True], 'k6, m1, k6, m1, k5, m1, k6'],
['no increases', [17, 0, True], 'k17'],
['regression: symmetric remainder', [72, 9, True],
'k8, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k8'],
['repair check: symmetric remainder', [61, 4, False], 'k16, m1, k15, m1, k15, m1, k15, m1'],
['generated control 1', [9, 9, False],
'k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1'],
['generated control 2', [17, 1, False], 'k17, m1'],
['generated control 3', [40, 7, True], 'k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5']],
[['flat with remainder', [23, 3, True], 'k6, m1, k6, m1, k5, m1, k6'],
['no increases', [17, 0, True], 'k17'],
['flat maximum', [10, 9, True],
'k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1'],
['regression: symmetric remainder', [10, 7, True],
'k2, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k2'],
['repair check: symmetric remainder', [23, 1, True], 'k12, m1, k11'],
['generated control 1', [17, 1, False], 'k17, m1'],
['generated control 2', [40, 10, True],
'k4, m1, k4, m1, k4, m1, k4, m1, k3, m1, k3, m1, k3, m1, k3, m1, k4, m1, k4, m1, k4'],
['generated control 3', [61, 8, False], 'k8, m1, k8, m1, k8, m1, k8, m1, k8, m1, k7, m1, k7, m1, k7, m1']],
[['no increases', [17, 0, True], 'k17'],
['flat maximum', [10, 9, True],
'k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1'],
['flat over maximum', [10, 10, True], 'error: too many increases'],
['regression: symmetric remainder', [48, 8, True],
'k6, m1, k6, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k6'],
['repair check: symmetric remainder', [17, 7, True],
'k3, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2'],
['generated control 1', [17, 10, False],
'k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k1, m1, k1, m1, k1, m1'],
['generated control 2', [72, 7, True], 'k9, m1, k9, m1, k9, m1, k9, m1, k9, m1, k9, m1, k9, m1, k9'],
['generated control 3', [48, 0, True], 'k48']],
[['flat maximum', [10, 9, True],
'k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1'],
['flat over maximum', [10, 10, True], 'error: too many increases'],
['round even split', [40, 8, False], 'k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1'],
['regression: symmetric remainder', [9, 4, True], 'k2, m1, k2, m1, k1, m1, k2, m1, k2'],
['repair check: symmetric remainder', [9, 8, False],
'k2, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1'],
['generated control 1', [6, 1, False], 'k6, m1'],
['generated control 2', [10, 3, True], 'k3, m1, k2, m1, k2, m1, k3'],
['generated control 3', [23, 2, True], 'k8, m1, k7, m1, k8']],
[['flat over maximum', [10, 10, True], 'error: too many increases'],
['round even split', [40, 8, False], 'k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1'],
['flat with remainder', [23, 3, True], 'k6, m1, k6, m1, k5, m1, k6'],
['regression: symmetric remainder', [48, 4, True], 'k10, m1, k10, m1, k9, m1, k9, m1, k10'],
['repair check: symmetric remainder', [9, 7, False],
'k2, m1, k2, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1'],
['generated control 1', [9, 1, False], 'k9, m1'], ['generated control 2', [40, 0, True], 'k40'],
['generated control 3', [40, 7, False], 'k6, m1, k6, m1, k6, m1, k6, m1, k6, m1, k5, m1, k5, m1']]]
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 |
|---|---|---|---|
| round even split | k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1 | k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1 | Passed |
| flat with remainder | k6, m1, k6, m1, k6, m1, k5 | k6, m1, k6, m1, k5, m1, k6 | Failed |
| no increases | k17 | k17 | Passed |
| regression: symmetric remainder | k8, m1, k8, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7 | k8, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k8 | Failed |
| repair check: symmetric remainder | k16, m1, k15, m1, k15, m1, k15, m1 | k16, m1, k15, m1, k15, m1, k15, m1 | Passed |
| generated control 1 | k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1 | k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1 | Passed |
| generated control 2 | k17, m1 | k17, m1 | Passed |
| generated control 3 | k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5 | k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5 | Passed |
SHA-256 / 3795b2506542f5207d3ca3042e936ea4b7871519a31e6e18f63e9f0e25c43820
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(stitches, increases, flat):
if stitches <= 0 or increases < 0:
return 'error: counts'
if increases == 0:
return 'k%d' % stitches
segs = increases + 1 if flat else increases
if segs > stitches:
return 'error: too many increases'
base, extra = divmod(stitches, segs)
lens = [base] * segs
if flat:
order = []
i, j = 0, segs - 1
while i <= j:
order.append(i)
if i != j:
order.append(j)
i += 1
j -= 1
else:
order = list(range(segs))
for idx in order[len(order) - extra:]:
lens[idx] += 1
parts = []
for n in lens:
parts.append('k%d' % n)
parts.append('m1')
if flat:
parts.pop()
return ', '.join(parts)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['round even split', [40, 8, False], 'k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1'],
['flat with remainder', [23, 3, True], 'k6, m1, k6, m1, k5, m1, k6'],
['no increases', [17, 0, True], 'k17'],
['regression: symmetric remainder', [72, 9, True],
'k8, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k8'],
['repair check: symmetric remainder', [61, 4, False], 'k16, m1, k15, m1, k15, m1, k15, m1'],
['generated control 1', [9, 9, False],
'k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1'],
['generated control 2', [17, 1, False], 'k17, m1'],
['generated control 3', [40, 7, True], 'k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5']],
[['flat with remainder', [23, 3, True], 'k6, m1, k6, m1, k5, m1, k6'],
['no increases', [17, 0, True], 'k17'],
['flat maximum', [10, 9, True],
'k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1'],
['regression: symmetric remainder', [10, 7, True],
'k2, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k2'],
['repair check: symmetric remainder', [23, 1, True], 'k12, m1, k11'],
['generated control 1', [17, 1, False], 'k17, m1'],
['generated control 2', [40, 10, True],
'k4, m1, k4, m1, k4, m1, k4, m1, k3, m1, k3, m1, k3, m1, k3, m1, k4, m1, k4, m1, k4'],
['generated control 3', [61, 8, False], 'k8, m1, k8, m1, k8, m1, k8, m1, k8, m1, k7, m1, k7, m1, k7, m1']],
[['no increases', [17, 0, True], 'k17'],
['flat maximum', [10, 9, True],
'k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1'],
['flat over maximum', [10, 10, True], 'error: too many increases'],
['regression: symmetric remainder', [48, 8, True],
'k6, m1, k6, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k6'],
['repair check: symmetric remainder', [17, 7, True],
'k3, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2'],
['generated control 1', [17, 10, False],
'k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k1, m1, k1, m1, k1, m1'],
['generated control 2', [72, 7, True], 'k9, m1, k9, m1, k9, m1, k9, m1, k9, m1, k9, m1, k9, m1, k9'],
['generated control 3', [48, 0, True], 'k48']],
[['flat maximum', [10, 9, True],
'k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1'],
['flat over maximum', [10, 10, True], 'error: too many increases'],
['round even split', [40, 8, False], 'k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1'],
['regression: symmetric remainder', [9, 4, True], 'k2, m1, k2, m1, k1, m1, k2, m1, k2'],
['repair check: symmetric remainder', [9, 8, False],
'k2, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1'],
['generated control 1', [6, 1, False], 'k6, m1'],
['generated control 2', [10, 3, True], 'k3, m1, k2, m1, k2, m1, k3'],
['generated control 3', [23, 2, True], 'k8, m1, k7, m1, k8']],
[['flat over maximum', [10, 10, True], 'error: too many increases'],
['round even split', [40, 8, False], 'k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1'],
['flat with remainder', [23, 3, True], 'k6, m1, k6, m1, k5, m1, k6'],
['regression: symmetric remainder', [48, 4, True], 'k10, m1, k10, m1, k9, m1, k9, m1, k10'],
['repair check: symmetric remainder', [9, 7, False],
'k2, m1, k2, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1'],
['generated control 1', [9, 1, False], 'k9, m1'], ['generated control 2', [40, 0, True], 'k40'],
['generated control 3', [40, 7, False], 'k6, m1, k6, m1, k6, m1, k6, m1, k6, m1, k5, m1, k5, m1']]]
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 |
|---|---|---|---|
| round even split | k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1 | k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1 | Passed |
| flat with remainder | k5, m1, k6, m1, k6, m1, k6 | k6, m1, k6, m1, k5, m1, k6 | Failed |
| no increases | k17 | k17 | Passed |
| regression: symmetric remainder | k7, m1, k7, m1, k7, m1, k7, m1, k8, m1, k8, m1, k7, m1, k7, m1, k7, m1, k7 | k8, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k8 | Failed |
| repair check: symmetric remainder | k15, m1, k15, m1, k15, m1, k16, m1 | k16, m1, k15, m1, k15, m1, k15, m1 | Failed |
| generated control 1 | k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1 | k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1 | Passed |
| generated control 2 | k17, m1 | k17, m1 | Passed |
| generated control 3 | k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5 | k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5 | Passed |
SHA-256 / 79c2c6c56e26ae8c2bf49c9fea66412cacf67b83e9fd80ef273f1dc15e07990b
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(stitches, increases, flat):
if stitches <= 0 or increases < 0:
return 'error: counts'
if increases == 0:
return 'k%d' % stitches
segs = increases + 1 if flat else increases
if segs > stitches:
return 'error: too many increases'
base, extra = divmod(stitches, segs)
lens = [base] * segs
if flat:
order = []
i, j = 0, segs - 1
while i <= j:
order.append(i)
if i != j:
order.append(j)
i += 1
j -= 1
else:
order = list(range(segs))
for idx in order[:extra]:
lens[idx] += 1
parts = []
for n in lens:
parts.append('k%d' % n)
parts.append('m1')
if flat:
parts.pop()
return ', '.join(parts)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['round even split', [40, 8, False], 'k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1'],
['flat with remainder', [23, 3, True], 'k6, m1, k6, m1, k5, m1, k6'],
['no increases', [17, 0, True], 'k17'],
['regression: symmetric remainder', [72, 9, True],
'k8, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k8'],
['repair check: symmetric remainder', [61, 4, False], 'k16, m1, k15, m1, k15, m1, k15, m1'],
['generated control 1', [9, 9, False],
'k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1'],
['generated control 2', [17, 1, False], 'k17, m1'],
['generated control 3', [40, 7, True], 'k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5']],
[['flat with remainder', [23, 3, True], 'k6, m1, k6, m1, k5, m1, k6'],
['no increases', [17, 0, True], 'k17'],
['flat maximum', [10, 9, True],
'k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1'],
['regression: symmetric remainder', [10, 7, True],
'k2, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k2'],
['repair check: symmetric remainder', [23, 1, True], 'k12, m1, k11'],
['generated control 1', [17, 1, False], 'k17, m1'],
['generated control 2', [40, 10, True],
'k4, m1, k4, m1, k4, m1, k4, m1, k3, m1, k3, m1, k3, m1, k3, m1, k4, m1, k4, m1, k4'],
['generated control 3', [61, 8, False], 'k8, m1, k8, m1, k8, m1, k8, m1, k8, m1, k7, m1, k7, m1, k7, m1']],
[['no increases', [17, 0, True], 'k17'],
['flat maximum', [10, 9, True],
'k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1'],
['flat over maximum', [10, 10, True], 'error: too many increases'],
['regression: symmetric remainder', [48, 8, True],
'k6, m1, k6, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k6'],
['repair check: symmetric remainder', [17, 7, True],
'k3, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2'],
['generated control 1', [17, 10, False],
'k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k2, m1, k1, m1, k1, m1, k1, m1'],
['generated control 2', [72, 7, True], 'k9, m1, k9, m1, k9, m1, k9, m1, k9, m1, k9, m1, k9, m1, k9'],
['generated control 3', [48, 0, True], 'k48']],
[['flat maximum', [10, 9, True],
'k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1'],
['flat over maximum', [10, 10, True], 'error: too many increases'],
['round even split', [40, 8, False], 'k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1'],
['regression: symmetric remainder', [9, 4, True], 'k2, m1, k2, m1, k1, m1, k2, m1, k2'],
['repair check: symmetric remainder', [9, 8, False],
'k2, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1'],
['generated control 1', [6, 1, False], 'k6, m1'],
['generated control 2', [10, 3, True], 'k3, m1, k2, m1, k2, m1, k3'],
['generated control 3', [23, 2, True], 'k8, m1, k7, m1, k8']],
[['flat over maximum', [10, 10, True], 'error: too many increases'],
['round even split', [40, 8, False], 'k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1'],
['flat with remainder', [23, 3, True], 'k6, m1, k6, m1, k5, m1, k6'],
['regression: symmetric remainder', [48, 4, True], 'k10, m1, k10, m1, k9, m1, k9, m1, k10'],
['repair check: symmetric remainder', [9, 7, False],
'k2, m1, k2, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1'],
['generated control 1', [9, 1, False], 'k9, m1'], ['generated control 2', [40, 0, True], 'k40'],
['generated control 3', [40, 7, False], 'k6, m1, k6, m1, k6, m1, k6, m1, k6, m1, k5, m1, k5, m1']]]
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 |
|---|---|---|---|
| round even split | k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1 | k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1 | Passed |
| flat with remainder | k6, m1, k6, m1, k5, m1, k6 | k6, m1, k6, m1, k5, m1, k6 | Passed |
| no increases | k17 | k17 | Passed |
| regression: symmetric remainder | k8, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k8 | k8, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k7, m1, k8 | Passed |
| repair check: symmetric remainder | k16, m1, k15, m1, k15, m1, k15, m1 | k16, m1, k15, m1, k15, m1, k15, m1 | Passed |
| generated control 1 | k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1 | k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1, k1, m1 | Passed |
| generated control 2 | k17, m1 | k17, m1 | Passed |
| generated control 3 | k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5 | k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5, m1, k5 | Passed |
SHA-256 / d7929c5bc90d4a49fb8b7b82b46fc13d36acea8f8c249591e63965d8fb10215a
Verification & scope
A deterministic toy contract stated in full here; it is a bounded teaching model, not an authoritative reference or standards implementation. 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:52:31.601728+00:00.
Case digest / 263b5b3b2410b24fd9d3d1598efc46ca21cbea59ad8e24093b531580638786fb