FAILURE MAP
← Case archive

FA-97791 / Knitting and sewing pattern grading / Open access

Top-down raglan setup: yoke total growth · case 01

The underarm stitch total is half the increases short.

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

ROOT CAUSE

Each round is counted as 4 increases instead of 8.

VERIFIED REPAIR

Add 8 stitches per increase round.

Unsuccessful approach: Adding the seam stitches again double counts them.

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 = max(0, math.ceil(Fraction(target - front, 2)))
    return {'front': front, 'back': back, 'sleeve': sleeve, 'raglan': 4, 'increase_rounds': incs,
            'yoke_total': neck_sts + 4 * 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: yoke total growth', [120, 201],
   {'back': 38, 'front': 38, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 20, 'yoke_total': 368}],
  ['repair check: yoke total growth', [80, 201],
   {'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}],
  ['generated control 1', [120, 80],
   {'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}],
  ['generated control 2', [80, 80],
   {'back': 25, 'front': 25, 'increase_rounds': 8, 'raglan': 4, 'sleeve': 13, 'yoke_total': 144}],
  ['generated control 3', [110, 220],
   {'back': 35, 'front': 35, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 18, 'yoke_total': 414}]],
 [['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: yoke total growth', [100, 201],
   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
  ['repair check: yoke total growth', [96, 201],
   {'back': 30, 'front': 30, 'increase_rounds': 35, 'raglan': 4, 'sleeve': 16, 'yoke_total': 376}],
  ['generated control 1', [88, 180],
   {'back': 28, 'front': 28, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 14, 'yoke_total': 336}],
  ['generated control 2', [100, 60],
   {'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
  ['generated control 3', [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: yoke total growth', [100, 220],
   {'back': 32, 'front': 32, 'increase_rounds': 39, 'raglan': 4, 'sleeve': 16, 'yoke_total': 412}],
  ['repair check: yoke total growth', [101, 200],
   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
  ['generated control 1', [12, 201], 'error: neck too small'],
  ['generated control 2', [96, 180],
   {'back': 30, 'front': 30, 'increase_rounds': 30, 'raglan': 4, 'sleeve': 16, 'yoke_total': 336}],
  ['generated control 3', [96, 201],
   {'back': 30, 'front': 30, 'increase_rounds': 35, 'raglan': 4, 'sleeve': 16, 'yoke_total': 376}]],
 [['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: yoke total growth', [100, 160],
   {'back': 32, 'front': 32, 'increase_rounds': 24, 'raglan': 4, 'sleeve': 16, 'yoke_total': 292}],
  ['repair check: yoke total growth', [80, 220],
   {'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424}],
  ['generated control 1', [96, 220],
   {'back': 30, 'front': 30, 'increase_rounds': 40, 'raglan': 4, 'sleeve': 16, 'yoke_total': 416}],
  ['generated control 2', [101, 200],
   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
  ['generated control 3', [120, 160],
   {'back': 38, 'front': 38, 'increase_rounds': 21, 'raglan': 4, 'sleeve': 20, 'yoke_total': 288}]],
 [['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: yoke total growth', [120, 180],
   {'back': 38, 'front': 38, 'increase_rounds': 26, 'raglan': 4, 'sleeve': 20, 'yoke_total': 328}],
  ['repair check: yoke total growth', [101, 200],
   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
  ['generated control 1', [16, 220],
   {'back': 4, 'front': 4, 'increase_rounds': 53, 'raglan': 4, 'sleeve': 2, 'yoke_total': 440}],
  ['generated control 2', [12, 200], 'error: neck too small'],
  ['generated control 3', [16, 160],
   {'back': 4, 'front': 4, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 2, 'yoke_total': 320}]]]
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
standard neck{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 236}{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}Failed
odd leftover{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 217}{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}Failed
tiny neckerror: neck too smallerror: neck too smallPassed
regression: yoke total growth{'back': 38, 'front': 38, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 20, 'yoke_total': 244}{'back': 38, 'front': 38, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 20, 'yoke_total': 368}Failed
repair check: yoke total growth{'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 232}{'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}Failed
generated control 1{'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 124}{'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}Failed
generated control 2{'back': 25, 'front': 25, 'increase_rounds': 8, 'raglan': 4, 'sleeve': 13, 'yoke_total': 112}{'back': 25, 'front': 25, 'increase_rounds': 8, 'raglan': 4, 'sleeve': 13, 'yoke_total': 144}Failed
generated control 3{'back': 35, 'front': 35, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 18, 'yoke_total': 262}{'back': 35, 'front': 35, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 18, 'yoke_total': 414}Failed

SHA-256 / c4186ca52a8b7588526ae7ab9f6b687e3b4fc5683d1d2f4c6f47485f9640f112

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(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 + 4}
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: yoke total growth', [120, 201],
   {'back': 38, 'front': 38, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 20, 'yoke_total': 368}],
  ['repair check: yoke total growth', [80, 201],
   {'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}],
  ['generated control 1', [120, 80],
   {'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}],
  ['generated control 2', [80, 80],
   {'back': 25, 'front': 25, 'increase_rounds': 8, 'raglan': 4, 'sleeve': 13, 'yoke_total': 144}],
  ['generated control 3', [110, 220],
   {'back': 35, 'front': 35, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 18, 'yoke_total': 414}]],
 [['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: yoke total growth', [100, 201],
   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
  ['repair check: yoke total growth', [96, 201],
   {'back': 30, 'front': 30, 'increase_rounds': 35, 'raglan': 4, 'sleeve': 16, 'yoke_total': 376}],
  ['generated control 1', [88, 180],
   {'back': 28, 'front': 28, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 14, 'yoke_total': 336}],
  ['generated control 2', [100, 60],
   {'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
  ['generated control 3', [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: yoke total growth', [100, 220],
   {'back': 32, 'front': 32, 'increase_rounds': 39, 'raglan': 4, 'sleeve': 16, 'yoke_total': 412}],
  ['repair check: yoke total growth', [101, 200],
   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
  ['generated control 1', [12, 201], 'error: neck too small'],
  ['generated control 2', [96, 180],
   {'back': 30, 'front': 30, 'increase_rounds': 30, 'raglan': 4, 'sleeve': 16, 'yoke_total': 336}],
  ['generated control 3', [96, 201],
   {'back': 30, 'front': 30, 'increase_rounds': 35, 'raglan': 4, 'sleeve': 16, 'yoke_total': 376}]],
 [['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: yoke total growth', [100, 160],
   {'back': 32, 'front': 32, 'increase_rounds': 24, 'raglan': 4, 'sleeve': 16, 'yoke_total': 292}],
  ['repair check: yoke total growth', [80, 220],
   {'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424}],
  ['generated control 1', [96, 220],
   {'back': 30, 'front': 30, 'increase_rounds': 40, 'raglan': 4, 'sleeve': 16, 'yoke_total': 416}],
  ['generated control 2', [101, 200],
   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
  ['generated control 3', [120, 160],
   {'back': 38, 'front': 38, 'increase_rounds': 21, 'raglan': 4, 'sleeve': 20, 'yoke_total': 288}]],
 [['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: yoke total growth', [120, 180],
   {'back': 38, 'front': 38, 'increase_rounds': 26, 'raglan': 4, 'sleeve': 20, 'yoke_total': 328}],
  ['repair check: yoke total growth', [101, 200],
   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
  ['generated control 1', [16, 220],
   {'back': 4, 'front': 4, 'increase_rounds': 53, 'raglan': 4, 'sleeve': 2, 'yoke_total': 440}],
  ['generated control 2', [12, 200], 'error: neck too small'],
  ['generated control 3', [16, 160],
   {'back': 4, 'front': 4, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 2, 'yoke_total': 320}]]]
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
standard neck{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 376}{'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}Failed
odd leftover{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 337}{'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}Failed
tiny neckerror: neck too smallerror: neck too smallPassed
regression: yoke total growth{'back': 38, 'front': 38, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 20, 'yoke_total': 372}{'back': 38, 'front': 38, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 20, 'yoke_total': 368}Failed
repair check: yoke total growth{'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 388}{'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}Failed
generated control 1{'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 132}{'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}Failed
generated control 2{'back': 25, 'front': 25, 'increase_rounds': 8, 'raglan': 4, 'sleeve': 13, 'yoke_total': 148}{'back': 25, 'front': 25, 'increase_rounds': 8, 'raglan': 4, 'sleeve': 13, 'yoke_total': 144}Failed
generated control 3{'back': 35, 'front': 35, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 18, 'yoke_total': 418}{'back': 35, 'front': 35, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 18, 'yoke_total': 414}Failed

SHA-256 / 825d0e21c33bd9e43796126d0d64d03f13daa03709f7d077bdaec37d16424394

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: yoke total growth', [120, 201],
   {'back': 38, 'front': 38, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 20, 'yoke_total': 368}],
  ['repair check: yoke total growth', [80, 201],
   {'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}],
  ['generated control 1', [120, 80],
   {'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}],
  ['generated control 2', [80, 80],
   {'back': 25, 'front': 25, 'increase_rounds': 8, 'raglan': 4, 'sleeve': 13, 'yoke_total': 144}],
  ['generated control 3', [110, 220],
   {'back': 35, 'front': 35, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 18, 'yoke_total': 414}]],
 [['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: yoke total growth', [100, 201],
   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],
  ['repair check: yoke total growth', [96, 201],
   {'back': 30, 'front': 30, 'increase_rounds': 35, 'raglan': 4, 'sleeve': 16, 'yoke_total': 376}],
  ['generated control 1', [88, 180],
   {'back': 28, 'front': 28, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 14, 'yoke_total': 336}],
  ['generated control 2', [100, 60],
   {'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],
  ['generated control 3', [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: yoke total growth', [100, 220],
   {'back': 32, 'front': 32, 'increase_rounds': 39, 'raglan': 4, 'sleeve': 16, 'yoke_total': 412}],
  ['repair check: yoke total growth', [101, 200],
   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
  ['generated control 1', [12, 201], 'error: neck too small'],
  ['generated control 2', [96, 180],
   {'back': 30, 'front': 30, 'increase_rounds': 30, 'raglan': 4, 'sleeve': 16, 'yoke_total': 336}],
  ['generated control 3', [96, 201],
   {'back': 30, 'front': 30, 'increase_rounds': 35, 'raglan': 4, 'sleeve': 16, 'yoke_total': 376}]],
 [['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: yoke total growth', [100, 160],
   {'back': 32, 'front': 32, 'increase_rounds': 24, 'raglan': 4, 'sleeve': 16, 'yoke_total': 292}],
  ['repair check: yoke total growth', [80, 220],
   {'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424}],
  ['generated control 1', [96, 220],
   {'back': 30, 'front': 30, 'increase_rounds': 40, 'raglan': 4, 'sleeve': 16, 'yoke_total': 416}],
  ['generated control 2', [101, 200],
   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
  ['generated control 3', [120, 160],
   {'back': 38, 'front': 38, 'increase_rounds': 21, 'raglan': 4, 'sleeve': 20, 'yoke_total': 288}]],
 [['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: yoke total growth', [120, 180],
   {'back': 38, 'front': 38, 'increase_rounds': 26, 'raglan': 4, 'sleeve': 20, 'yoke_total': 328}],
  ['repair check: yoke total growth', [101, 200],
   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],
  ['generated control 1', [16, 220],
   {'back': 4, 'front': 4, 'increase_rounds': 53, 'raglan': 4, 'sleeve': 2, 'yoke_total': 440}],
  ['generated control 2', [12, 200], 'error: neck too small'],
  ['generated control 3', [16, 160],
   {'back': 4, 'front': 4, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 2, 'yoke_total': 320}]]]
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
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 neckerror: neck too smallerror: neck too smallPassed
regression: yoke total growth{'back': 38, 'front': 38, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 20, 'yoke_total': 368}{'back': 38, 'front': 38, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 20, 'yoke_total': 368}Passed
repair check: yoke total growth{'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}{'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}Passed
generated control 1{'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}{'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}Passed
generated control 2{'back': 25, 'front': 25, 'increase_rounds': 8, 'raglan': 4, 'sleeve': 13, 'yoke_total': 144}{'back': 25, 'front': 25, 'increase_rounds': 8, 'raglan': 4, 'sleeve': 13, 'yoke_total': 144}Passed
generated control 3{'back': 35, 'front': 35, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 18, 'yoke_total': 414}{'back': 35, 'front': 35, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 18, 'yoke_total': 414}Passed

SHA-256 / 29d1e0fefd5b71c82f9c0b5bbdca2aed5c3ac515d359d30c50c22204f8f64c93

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

Case digest / 42c2a2ef56c42dfd0637392200827eb1846f4b180523d289e9397864a4944be6