FA-97786 / Knitting and sewing pattern grading / Open access
Top-down raglan setup: negative round clamp · case 01
A neck wider than the body gets negative increase rounds.
ROOT CAUSE
The increase round count is not clamped at zero.
VERIFIED REPAIR
Clamp increase rounds at zero.
Unsuccessful approach: Clamping at one forces an increase round that is not needed.
Case contract
neck_sts < 16 -> "error: neck too small". Reserve 4 raglan seam stitches; rem = neck-4; front = rem//3; sleeves share rem - 2*front, each sleeve half of that, and an odd leftover goes to the back (back = front + leftover%2). Each increase round adds 2 to front (and back); rounds = max(0, ceiling((underarm_body_sts//2 - front)/2)). yoke_total = neck + 8*rounds.
Why this case matters
Top-down raglan sweaters split the neck cast-on among front, back, sleeves and seam stitches.
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(neck_sts, underarm_body_sts):
if neck_sts < 16:
return 'error: neck too small'
rem = neck_sts - 4
front = rem // 3
sleeves_total = rem - 2 * front
sleeve = sleeves_total // 2
back = front + sleeves_total % 2
target = underarm_body_sts // 2
incs = (math.ceil(Fraction(target - front, 2)))
return {'front': front, 'back': back, 'sleeve': sleeve, 'raglan': 4, 'increase_rounds': incs,
'yoke_total': neck_sts + 8 * incs}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['standard neck', [100, 200],
{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
['odd leftover', [101, 180],
{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],
['tiny neck', [12, 100], 'error: neck too small'],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['repair check: negative round clamp', [96, 60],
{'back': 30, 'front': 30, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 96}],
['generated control 1', [101, 201],
{'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
['generated control 2', [16, 201],
{'back': 4, 'front': 4, 'increase_rounds': 48, 'raglan': 4, 'sleeve': 2, 'yoke_total': 400}],
['generated control 3', [80, 220],
{'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424}]],
[['odd leftover', [101, 180],
{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],
['tiny neck', [12, 100], 'error: neck too small'],
['already wide', [120, 60],
{'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['generated control 1', [120, 220],
{'back': 38, 'front': 38, 'increase_rounds': 36, 'raglan': 4, 'sleeve': 20, 'yoke_total': 408}],
['generated control 2', [88, 80],
{'back': 28, 'front': 28, 'increase_rounds': 6, 'raglan': 4, 'sleeve': 14, 'yoke_total': 136}],
['generated control 3', [100, 160],
{'back': 32, 'front': 32, 'increase_rounds': 24, 'raglan': 4, 'sleeve': 16, 'yoke_total': 292}],
['generated control 4', [80, 200],
{'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}]],
[['tiny neck', [12, 100], 'error: neck too small'],
['already wide', [120, 60],
{'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],
['standard neck', [100, 200],
{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['repair check: negative round clamp', [96, 60],
{'back': 30, 'front': 30, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 96}],
['generated control 1', [96, 180],
{'back': 30, 'front': 30, 'increase_rounds': 30, 'raglan': 4, 'sleeve': 16, 'yoke_total': 336}],
['generated control 2', [12, 200], 'error: neck too small'],
['generated control 3', [110, 80],
{'back': 35, 'front': 35, 'increase_rounds': 3, 'raglan': 4, 'sleeve': 18, 'yoke_total': 134}]],
[['already wide', [120, 60],
{'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],
['standard neck', [100, 200],
{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
['odd leftover', [101, 180],
{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['generated control 1', [120, 80],
{'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}],
['generated control 2', [16, 220],
{'back': 4, 'front': 4, 'increase_rounds': 53, 'raglan': 4, 'sleeve': 2, 'yoke_total': 440}],
['generated control 3', [101, 201],
{'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
['generated control 4', [88, 80],
{'back': 28, 'front': 28, 'increase_rounds': 6, 'raglan': 4, 'sleeve': 14, 'yoke_total': 136}]],
[['standard neck', [100, 200],
{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
['odd leftover', [101, 180],
{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],
['tiny neck', [12, 100], 'error: neck too small'],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['repair check: negative round clamp', [96, 60],
{'back': 30, 'front': 30, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 96}],
['generated control 1', [88, 80],
{'back': 28, 'front': 28, 'increase_rounds': 6, 'raglan': 4, 'sleeve': 14, 'yoke_total': 136}],
['generated control 2', [16, 180],
{'back': 4, 'front': 4, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 2, 'yoke_total': 360}],
['generated control 3', [120, 80],
{'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}]]]
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 |
|---|---|---|---|
| standard neck | {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372} | {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372} | Passed |
| odd leftover | {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333} | {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333} | Passed |
| tiny neck | error: neck too small | error: neck too small | Passed |
| regression: negative round clamp | {'back': 32, 'front': 32, 'increase_rounds': -1, 'raglan': 4, 'sleeve': 16, 'yoke_total': 92} | {'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100} | Failed |
| repair check: negative round clamp | {'back': 30, 'front': 30, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 96} | {'back': 30, 'front': 30, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 96} | Passed |
| generated control 1 | {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373} | {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373} | Passed |
| generated control 2 | {'back': 4, 'front': 4, 'increase_rounds': 48, 'raglan': 4, 'sleeve': 2, 'yoke_total': 400} | {'back': 4, 'front': 4, 'increase_rounds': 48, 'raglan': 4, 'sleeve': 2, 'yoke_total': 400} | Passed |
| generated control 3 | {'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424} | {'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424} | Passed |
SHA-256 / 7b18d325876306b489839d0bd57f6dc2e63dba2de546099817b6d03af3e13e80
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(neck_sts, underarm_body_sts):
if neck_sts < 16:
return 'error: neck too small'
rem = neck_sts - 4
front = rem // 3
sleeves_total = rem - 2 * front
sleeve = sleeves_total // 2
back = front + sleeves_total % 2
target = underarm_body_sts // 2
incs = max(1, math.ceil(Fraction(target - front, 2)))
return {'front': front, 'back': back, 'sleeve': sleeve, 'raglan': 4, 'increase_rounds': incs,
'yoke_total': neck_sts + 8 * incs}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['standard neck', [100, 200],
{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
['odd leftover', [101, 180],
{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],
['tiny neck', [12, 100], 'error: neck too small'],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['repair check: negative round clamp', [96, 60],
{'back': 30, 'front': 30, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 96}],
['generated control 1', [101, 201],
{'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
['generated control 2', [16, 201],
{'back': 4, 'front': 4, 'increase_rounds': 48, 'raglan': 4, 'sleeve': 2, 'yoke_total': 400}],
['generated control 3', [80, 220],
{'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424}]],
[['odd leftover', [101, 180],
{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],
['tiny neck', [12, 100], 'error: neck too small'],
['already wide', [120, 60],
{'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['generated control 1', [120, 220],
{'back': 38, 'front': 38, 'increase_rounds': 36, 'raglan': 4, 'sleeve': 20, 'yoke_total': 408}],
['generated control 2', [88, 80],
{'back': 28, 'front': 28, 'increase_rounds': 6, 'raglan': 4, 'sleeve': 14, 'yoke_total': 136}],
['generated control 3', [100, 160],
{'back': 32, 'front': 32, 'increase_rounds': 24, 'raglan': 4, 'sleeve': 16, 'yoke_total': 292}],
['generated control 4', [80, 200],
{'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}]],
[['tiny neck', [12, 100], 'error: neck too small'],
['already wide', [120, 60],
{'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],
['standard neck', [100, 200],
{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['repair check: negative round clamp', [96, 60],
{'back': 30, 'front': 30, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 96}],
['generated control 1', [96, 180],
{'back': 30, 'front': 30, 'increase_rounds': 30, 'raglan': 4, 'sleeve': 16, 'yoke_total': 336}],
['generated control 2', [12, 200], 'error: neck too small'],
['generated control 3', [110, 80],
{'back': 35, 'front': 35, 'increase_rounds': 3, 'raglan': 4, 'sleeve': 18, 'yoke_total': 134}]],
[['already wide', [120, 60],
{'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],
['standard neck', [100, 200],
{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
['odd leftover', [101, 180],
{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['generated control 1', [120, 80],
{'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}],
['generated control 2', [16, 220],
{'back': 4, 'front': 4, 'increase_rounds': 53, 'raglan': 4, 'sleeve': 2, 'yoke_total': 440}],
['generated control 3', [101, 201],
{'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
['generated control 4', [88, 80],
{'back': 28, 'front': 28, 'increase_rounds': 6, 'raglan': 4, 'sleeve': 14, 'yoke_total': 136}]],
[['standard neck', [100, 200],
{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
['odd leftover', [101, 180],
{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],
['tiny neck', [12, 100], 'error: neck too small'],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['repair check: negative round clamp', [96, 60],
{'back': 30, 'front': 30, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 96}],
['generated control 1', [88, 80],
{'back': 28, 'front': 28, 'increase_rounds': 6, 'raglan': 4, 'sleeve': 14, 'yoke_total': 136}],
['generated control 2', [16, 180],
{'back': 4, 'front': 4, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 2, 'yoke_total': 360}],
['generated control 3', [120, 80],
{'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}]]]
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 |
|---|---|---|---|
| standard neck | {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372} | {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372} | Passed |
| odd leftover | {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333} | {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333} | Passed |
| tiny neck | error: neck too small | error: neck too small | Passed |
| regression: negative round clamp | {'back': 32, 'front': 32, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 16, 'yoke_total': 108} | {'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100} | Failed |
| repair check: negative round clamp | {'back': 30, 'front': 30, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 16, 'yoke_total': 104} | {'back': 30, 'front': 30, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 96} | Failed |
| generated control 1 | {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373} | {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373} | Passed |
| generated control 2 | {'back': 4, 'front': 4, 'increase_rounds': 48, 'raglan': 4, 'sleeve': 2, 'yoke_total': 400} | {'back': 4, 'front': 4, 'increase_rounds': 48, 'raglan': 4, 'sleeve': 2, 'yoke_total': 400} | Passed |
| generated control 3 | {'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424} | {'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424} | Passed |
SHA-256 / 0889eafb347ed2b54dc892e40e647ca21e640fedaa136ecb15926c583801c751
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(neck_sts, underarm_body_sts):
if neck_sts < 16:
return 'error: neck too small'
rem = neck_sts - 4
front = rem // 3
sleeves_total = rem - 2 * front
sleeve = sleeves_total // 2
back = front + sleeves_total % 2
target = underarm_body_sts // 2
incs = max(0, math.ceil(Fraction(target - front, 2)))
return {'front': front, 'back': back, 'sleeve': sleeve, 'raglan': 4, 'increase_rounds': incs,
'yoke_total': neck_sts + 8 * incs}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['standard neck', [100, 200],
{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
['odd leftover', [101, 180],
{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],
['tiny neck', [12, 100], 'error: neck too small'],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['repair check: negative round clamp', [96, 60],
{'back': 30, 'front': 30, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 96}],
['generated control 1', [101, 201],
{'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
['generated control 2', [16, 201],
{'back': 4, 'front': 4, 'increase_rounds': 48, 'raglan': 4, 'sleeve': 2, 'yoke_total': 400}],
['generated control 3', [80, 220],
{'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424}]],
[['odd leftover', [101, 180],
{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],
['tiny neck', [12, 100], 'error: neck too small'],
['already wide', [120, 60],
{'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['generated control 1', [120, 220],
{'back': 38, 'front': 38, 'increase_rounds': 36, 'raglan': 4, 'sleeve': 20, 'yoke_total': 408}],
['generated control 2', [88, 80],
{'back': 28, 'front': 28, 'increase_rounds': 6, 'raglan': 4, 'sleeve': 14, 'yoke_total': 136}],
['generated control 3', [100, 160],
{'back': 32, 'front': 32, 'increase_rounds': 24, 'raglan': 4, 'sleeve': 16, 'yoke_total': 292}],
['generated control 4', [80, 200],
{'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}]],
[['tiny neck', [12, 100], 'error: neck too small'],
['already wide', [120, 60],
{'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],
['standard neck', [100, 200],
{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['repair check: negative round clamp', [96, 60],
{'back': 30, 'front': 30, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 96}],
['generated control 1', [96, 180],
{'back': 30, 'front': 30, 'increase_rounds': 30, 'raglan': 4, 'sleeve': 16, 'yoke_total': 336}],
['generated control 2', [12, 200], 'error: neck too small'],
['generated control 3', [110, 80],
{'back': 35, 'front': 35, 'increase_rounds': 3, 'raglan': 4, 'sleeve': 18, 'yoke_total': 134}]],
[['already wide', [120, 60],
{'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],
['standard neck', [100, 200],
{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
['odd leftover', [101, 180],
{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['generated control 1', [120, 80],
{'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}],
['generated control 2', [16, 220],
{'back': 4, 'front': 4, 'increase_rounds': 53, 'raglan': 4, 'sleeve': 2, 'yoke_total': 440}],
['generated control 3', [101, 201],
{'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
['generated control 4', [88, 80],
{'back': 28, 'front': 28, 'increase_rounds': 6, 'raglan': 4, 'sleeve': 14, 'yoke_total': 136}]],
[['standard neck', [100, 200],
{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
['odd leftover', [101, 180],
{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],
['tiny neck', [12, 100], 'error: neck too small'],
['regression: negative round clamp', [100, 60],
{'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
['repair check: negative round clamp', [96, 60],
{'back': 30, 'front': 30, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 96}],
['generated control 1', [88, 80],
{'back': 28, 'front': 28, 'increase_rounds': 6, 'raglan': 4, 'sleeve': 14, 'yoke_total': 136}],
['generated control 2', [16, 180],
{'back': 4, 'front': 4, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 2, 'yoke_total': 360}],
['generated control 3', [120, 80],
{'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}]]]
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 |
|---|---|---|---|
| standard neck | {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372} | {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372} | Passed |
| odd leftover | {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333} | {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333} | Passed |
| tiny neck | error: neck too small | error: neck too small | Passed |
| regression: negative round clamp | {'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100} | {'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100} | Passed |
| repair check: negative round clamp | {'back': 30, 'front': 30, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 96} | {'back': 30, 'front': 30, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 96} | Passed |
| generated control 1 | {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373} | {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373} | Passed |
| generated control 2 | {'back': 4, 'front': 4, 'increase_rounds': 48, 'raglan': 4, 'sleeve': 2, 'yoke_total': 400} | {'back': 4, 'front': 4, 'increase_rounds': 48, 'raglan': 4, 'sleeve': 2, 'yoke_total': 400} | Passed |
| generated control 3 | {'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424} | {'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424} | Passed |
SHA-256 / 858bc096844a55ca8bc4e54e4c813ea6507f61637ff95fd6195f430149aa8649
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:35.556841+00:00.
Case digest / e5d3fbd257db670d494c4bd4a7c2fb811a10eba4642c147aa1e1f6419e15d290