{"abstract":"The underarm stitch total is half the increases short.","category":"Knitting and sewing pattern grading","checks":8,"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.","evaluation_group":"w2-knitting_and_sewing_pattern_grading-raglan-yoke","failed_approach":"Adding the seam stitches again double counts them.","family":"w2-knitting_and_sewing_pattern_grading-raglan-yoke-yoke-total-growth","id":"FA-97791","implementations":{"attempt":{"sha256":"825d0e21c33bd9e43796126d0d64d03f13daa03709f7d077bdaec37d16424394","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(neck_sts, underarm_body_sts):\n    if neck_sts < 16:\n        return 'error: neck too small'\n    rem = neck_sts - 4\n    front = rem // 3\n    sleeves_total = rem - 2 * front\n    sleeve = sleeves_total // 2\n    back = front + sleeves_total % 2\n    target = underarm_body_sts // 2\n    incs = max(0, math.ceil(Fraction(target - front, 2)))\n    return {'front': front, 'back': back, 'sleeve': sleeve, 'raglan': 4, 'increase_rounds': incs,\n            'yoke_total': neck_sts + 8 * incs + 4}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['standard neck', [100, 200],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['odd leftover', [101, 180],\n   {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],\n  ['tiny neck', [12, 100], 'error: neck too small'],\n  ['regression: yoke total growth', [120, 201],\n   {'back': 38, 'front': 38, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 20, 'yoke_total': 368}],\n  ['repair check: yoke total growth', [80, 201],\n   {'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}],\n  ['generated control 1', [120, 80],\n   {'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}],\n  ['generated control 2', [80, 80],\n   {'back': 25, 'front': 25, 'increase_rounds': 8, 'raglan': 4, 'sleeve': 13, 'yoke_total': 144}],\n  ['generated control 3', [110, 220],\n   {'back': 35, 'front': 35, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 18, 'yoke_total': 414}]],\n [['odd leftover', [101, 180],\n   {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],\n  ['tiny neck', [12, 100], 'error: neck too small'],\n  ['already wide', [120, 60],\n   {'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],\n  ['regression: yoke total growth', [100, 201],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['repair check: yoke total growth', [96, 201],\n   {'back': 30, 'front': 30, 'increase_rounds': 35, 'raglan': 4, 'sleeve': 16, 'yoke_total': 376}],\n  ['generated control 1', [88, 180],\n   {'back': 28, 'front': 28, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 14, 'yoke_total': 336}],\n  ['generated control 2', [100, 60],\n   {'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],\n  ['generated control 3', [80, 200],\n   {'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}]],\n [['tiny neck', [12, 100], 'error: neck too small'],\n  ['already wide', [120, 60],\n   {'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],\n  ['standard neck', [100, 200],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['regression: yoke total growth', [100, 220],\n   {'back': 32, 'front': 32, 'increase_rounds': 39, 'raglan': 4, 'sleeve': 16, 'yoke_total': 412}],\n  ['repair check: yoke total growth', [101, 200],\n   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],\n  ['generated control 1', [12, 201], 'error: neck too small'],\n  ['generated control 2', [96, 180],\n   {'back': 30, 'front': 30, 'increase_rounds': 30, 'raglan': 4, 'sleeve': 16, 'yoke_total': 336}],\n  ['generated control 3', [96, 201],\n   {'back': 30, 'front': 30, 'increase_rounds': 35, 'raglan': 4, 'sleeve': 16, 'yoke_total': 376}]],\n [['already wide', [120, 60],\n   {'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],\n  ['standard neck', [100, 200],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['odd leftover', [101, 180],\n   {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],\n  ['regression: yoke total growth', [100, 160],\n   {'back': 32, 'front': 32, 'increase_rounds': 24, 'raglan': 4, 'sleeve': 16, 'yoke_total': 292}],\n  ['repair check: yoke total growth', [80, 220],\n   {'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424}],\n  ['generated control 1', [96, 220],\n   {'back': 30, 'front': 30, 'increase_rounds': 40, 'raglan': 4, 'sleeve': 16, 'yoke_total': 416}],\n  ['generated control 2', [101, 200],\n   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],\n  ['generated control 3', [120, 160],\n   {'back': 38, 'front': 38, 'increase_rounds': 21, 'raglan': 4, 'sleeve': 20, 'yoke_total': 288}]],\n [['standard neck', [100, 200],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['odd leftover', [101, 180],\n   {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],\n  ['tiny neck', [12, 100], 'error: neck too small'],\n  ['regression: yoke total growth', [120, 180],\n   {'back': 38, 'front': 38, 'increase_rounds': 26, 'raglan': 4, 'sleeve': 20, 'yoke_total': 328}],\n  ['repair check: yoke total growth', [101, 200],\n   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],\n  ['generated control 1', [16, 220],\n   {'back': 4, 'front': 4, 'increase_rounds': 53, 'raglan': 4, 'sleeve': 2, 'yoke_total': 440}],\n  ['generated control 2', [12, 200], 'error: neck too small'],\n  ['generated control 3', [16, 160],\n   {'back': 4, 'front': 4, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 2, 'yoke_total': 320}]]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"c4186ca52a8b7588526ae7ab9f6b687e3b4fc5683d1d2f4c6f47485f9640f112","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(neck_sts, underarm_body_sts):\n    if neck_sts < 16:\n        return 'error: neck too small'\n    rem = neck_sts - 4\n    front = rem // 3\n    sleeves_total = rem - 2 * front\n    sleeve = sleeves_total // 2\n    back = front + sleeves_total % 2\n    target = underarm_body_sts // 2\n    incs = max(0, math.ceil(Fraction(target - front, 2)))\n    return {'front': front, 'back': back, 'sleeve': sleeve, 'raglan': 4, 'increase_rounds': incs,\n            'yoke_total': neck_sts + 4 * incs}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['standard neck', [100, 200],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['odd leftover', [101, 180],\n   {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],\n  ['tiny neck', [12, 100], 'error: neck too small'],\n  ['regression: yoke total growth', [120, 201],\n   {'back': 38, 'front': 38, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 20, 'yoke_total': 368}],\n  ['repair check: yoke total growth', [80, 201],\n   {'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}],\n  ['generated control 1', [120, 80],\n   {'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}],\n  ['generated control 2', [80, 80],\n   {'back': 25, 'front': 25, 'increase_rounds': 8, 'raglan': 4, 'sleeve': 13, 'yoke_total': 144}],\n  ['generated control 3', [110, 220],\n   {'back': 35, 'front': 35, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 18, 'yoke_total': 414}]],\n [['odd leftover', [101, 180],\n   {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],\n  ['tiny neck', [12, 100], 'error: neck too small'],\n  ['already wide', [120, 60],\n   {'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],\n  ['regression: yoke total growth', [100, 201],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['repair check: yoke total growth', [96, 201],\n   {'back': 30, 'front': 30, 'increase_rounds': 35, 'raglan': 4, 'sleeve': 16, 'yoke_total': 376}],\n  ['generated control 1', [88, 180],\n   {'back': 28, 'front': 28, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 14, 'yoke_total': 336}],\n  ['generated control 2', [100, 60],\n   {'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],\n  ['generated control 3', [80, 200],\n   {'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}]],\n [['tiny neck', [12, 100], 'error: neck too small'],\n  ['already wide', [120, 60],\n   {'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],\n  ['standard neck', [100, 200],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['regression: yoke total growth', [100, 220],\n   {'back': 32, 'front': 32, 'increase_rounds': 39, 'raglan': 4, 'sleeve': 16, 'yoke_total': 412}],\n  ['repair check: yoke total growth', [101, 200],\n   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],\n  ['generated control 1', [12, 201], 'error: neck too small'],\n  ['generated control 2', [96, 180],\n   {'back': 30, 'front': 30, 'increase_rounds': 30, 'raglan': 4, 'sleeve': 16, 'yoke_total': 336}],\n  ['generated control 3', [96, 201],\n   {'back': 30, 'front': 30, 'increase_rounds': 35, 'raglan': 4, 'sleeve': 16, 'yoke_total': 376}]],\n [['already wide', [120, 60],\n   {'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],\n  ['standard neck', [100, 200],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['odd leftover', [101, 180],\n   {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],\n  ['regression: yoke total growth', [100, 160],\n   {'back': 32, 'front': 32, 'increase_rounds': 24, 'raglan': 4, 'sleeve': 16, 'yoke_total': 292}],\n  ['repair check: yoke total growth', [80, 220],\n   {'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424}],\n  ['generated control 1', [96, 220],\n   {'back': 30, 'front': 30, 'increase_rounds': 40, 'raglan': 4, 'sleeve': 16, 'yoke_total': 416}],\n  ['generated control 2', [101, 200],\n   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],\n  ['generated control 3', [120, 160],\n   {'back': 38, 'front': 38, 'increase_rounds': 21, 'raglan': 4, 'sleeve': 20, 'yoke_total': 288}]],\n [['standard neck', [100, 200],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['odd leftover', [101, 180],\n   {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],\n  ['tiny neck', [12, 100], 'error: neck too small'],\n  ['regression: yoke total growth', [120, 180],\n   {'back': 38, 'front': 38, 'increase_rounds': 26, 'raglan': 4, 'sleeve': 20, 'yoke_total': 328}],\n  ['repair check: yoke total growth', [101, 200],\n   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],\n  ['generated control 1', [16, 220],\n   {'back': 4, 'front': 4, 'increase_rounds': 53, 'raglan': 4, 'sleeve': 2, 'yoke_total': 440}],\n  ['generated control 2', [12, 200], 'error: neck too small'],\n  ['generated control 3', [16, 160],\n   {'back': 4, 'front': 4, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 2, 'yoke_total': 320}]]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"29d1e0fefd5b71c82f9c0b5bbdca2aed5c3ac515d359d30c50c22204f8f64c93","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(neck_sts, underarm_body_sts):\n    if neck_sts < 16:\n        return 'error: neck too small'\n    rem = neck_sts - 4\n    front = rem // 3\n    sleeves_total = rem - 2 * front\n    sleeve = sleeves_total // 2\n    back = front + sleeves_total % 2\n    target = underarm_body_sts // 2\n    incs = max(0, math.ceil(Fraction(target - front, 2)))\n    return {'front': front, 'back': back, 'sleeve': sleeve, 'raglan': 4, 'increase_rounds': incs,\n            'yoke_total': neck_sts + 8 * incs}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['standard neck', [100, 200],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['odd leftover', [101, 180],\n   {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],\n  ['tiny neck', [12, 100], 'error: neck too small'],\n  ['regression: yoke total growth', [120, 201],\n   {'back': 38, 'front': 38, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 20, 'yoke_total': 368}],\n  ['repair check: yoke total growth', [80, 201],\n   {'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}],\n  ['generated control 1', [120, 80],\n   {'back': 38, 'front': 38, 'increase_rounds': 1, 'raglan': 4, 'sleeve': 20, 'yoke_total': 128}],\n  ['generated control 2', [80, 80],\n   {'back': 25, 'front': 25, 'increase_rounds': 8, 'raglan': 4, 'sleeve': 13, 'yoke_total': 144}],\n  ['generated control 3', [110, 220],\n   {'back': 35, 'front': 35, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 18, 'yoke_total': 414}]],\n [['odd leftover', [101, 180],\n   {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],\n  ['tiny neck', [12, 100], 'error: neck too small'],\n  ['already wide', [120, 60],\n   {'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],\n  ['regression: yoke total growth', [100, 201],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['repair check: yoke total growth', [96, 201],\n   {'back': 30, 'front': 30, 'increase_rounds': 35, 'raglan': 4, 'sleeve': 16, 'yoke_total': 376}],\n  ['generated control 1', [88, 180],\n   {'back': 28, 'front': 28, 'increase_rounds': 31, 'raglan': 4, 'sleeve': 14, 'yoke_total': 336}],\n  ['generated control 2', [100, 60],\n   {'back': 32, 'front': 32, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 16, 'yoke_total': 100}],\n  ['generated control 3', [80, 200],\n   {'back': 25, 'front': 25, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 13, 'yoke_total': 384}]],\n [['tiny neck', [12, 100], 'error: neck too small'],\n  ['already wide', [120, 60],\n   {'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],\n  ['standard neck', [100, 200],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['regression: yoke total growth', [100, 220],\n   {'back': 32, 'front': 32, 'increase_rounds': 39, 'raglan': 4, 'sleeve': 16, 'yoke_total': 412}],\n  ['repair check: yoke total growth', [101, 200],\n   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],\n  ['generated control 1', [12, 201], 'error: neck too small'],\n  ['generated control 2', [96, 180],\n   {'back': 30, 'front': 30, 'increase_rounds': 30, 'raglan': 4, 'sleeve': 16, 'yoke_total': 336}],\n  ['generated control 3', [96, 201],\n   {'back': 30, 'front': 30, 'increase_rounds': 35, 'raglan': 4, 'sleeve': 16, 'yoke_total': 376}]],\n [['already wide', [120, 60],\n   {'back': 38, 'front': 38, 'increase_rounds': 0, 'raglan': 4, 'sleeve': 20, 'yoke_total': 120}],\n  ['standard neck', [100, 200],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['odd leftover', [101, 180],\n   {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],\n  ['regression: yoke total growth', [100, 160],\n   {'back': 32, 'front': 32, 'increase_rounds': 24, 'raglan': 4, 'sleeve': 16, 'yoke_total': 292}],\n  ['repair check: yoke total growth', [80, 220],\n   {'back': 25, 'front': 25, 'increase_rounds': 43, 'raglan': 4, 'sleeve': 13, 'yoke_total': 424}],\n  ['generated control 1', [96, 220],\n   {'back': 30, 'front': 30, 'increase_rounds': 40, 'raglan': 4, 'sleeve': 16, 'yoke_total': 416}],\n  ['generated control 2', [101, 200],\n   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],\n  ['generated control 3', [120, 160],\n   {'back': 38, 'front': 38, 'increase_rounds': 21, 'raglan': 4, 'sleeve': 20, 'yoke_total': 288}]],\n [['standard neck', [100, 200],\n   {'back': 32, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 372}],\n  ['odd leftover', [101, 180],\n   {'back': 33, 'front': 32, 'increase_rounds': 29, 'raglan': 4, 'sleeve': 16, 'yoke_total': 333}],\n  ['tiny neck', [12, 100], 'error: neck too small'],\n  ['regression: yoke total growth', [120, 180],\n   {'back': 38, 'front': 38, 'increase_rounds': 26, 'raglan': 4, 'sleeve': 20, 'yoke_total': 328}],\n  ['repair check: yoke total growth', [101, 200],\n   {'back': 33, 'front': 32, 'increase_rounds': 34, 'raglan': 4, 'sleeve': 16, 'yoke_total': 373}],\n  ['generated control 1', [16, 220],\n   {'back': 4, 'front': 4, 'increase_rounds': 53, 'raglan': 4, 'sleeve': 2, 'yoke_total': 440}],\n  ['generated control 2', [12, 200], 'error: neck too small'],\n  ['generated control 3', [16, 160],\n   {'back': 4, 'front': 4, 'increase_rounds': 38, 'raglan': 4, 'sleeve': 2, 'yoke_total': 320}]]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-knitting_and_sewing_pattern_grading-raglan-yoke-yoke-total-growth","generated_at":"2026-09-29T14:52:35.652807+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Top-down raglan sweaters split the neck cast-on among front, back, sleeves and seam stitches.","repair":"Add 8 stitches per increase round.","root_cause":"Each round is counted as 4 increases instead of 8.","sha256":"42c2a2ef56c42dfd0637392200827eb1846f4b180523d289e9397864a4944be6","title":"Top-down raglan setup: yoke total growth · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.401,"exit_code":1,"observations":[{"actual":{"back":32,"front":32,"increase_rounds":34,"raglan":4,"sleeve":16,"yoke_total":376},"check":"standard neck","expected":{"back":32,"front":32,"increase_rounds":34,"raglan":4,"sleeve":16,"yoke_total":372},"passed":false},{"actual":{"back":33,"front":32,"increase_rounds":29,"raglan":4,"sleeve":16,"yoke_total":337},"check":"odd leftover","expected":{"back":33,"front":32,"increase_rounds":29,"raglan":4,"sleeve":16,"yoke_total":333},"passed":false},{"actual":"error: neck too small","check":"tiny neck","expected":"error: neck too small","passed":true},{"actual":{"back":38,"front":38,"increase_rounds":31,"raglan":4,"sleeve":20,"yoke_total":372},"check":"regression: yoke total growth","expected":{"back":38,"front":38,"increase_rounds":31,"raglan":4,"sleeve":20,"yoke_total":368},"passed":false},{"actual":{"back":25,"front":25,"increase_rounds":38,"raglan":4,"sleeve":13,"yoke_total":388},"check":"repair check: yoke total growth","expected":{"back":25,"front":25,"increase_rounds":38,"raglan":4,"sleeve":13,"yoke_total":384},"passed":false},{"actual":{"back":38,"front":38,"increase_rounds":1,"raglan":4,"sleeve":20,"yoke_total":132},"check":"generated control 1","expected":{"back":38,"front":38,"increase_rounds":1,"raglan":4,"sleeve":20,"yoke_total":128},"passed":false},{"actual":{"back":25,"front":25,"increase_rounds":8,"raglan":4,"sleeve":13,"yoke_total":148},"check":"generated control 2","expected":{"back":25,"front":25,"increase_rounds":8,"raglan":4,"sleeve":13,"yoke_total":144},"passed":false},{"actual":{"back":35,"front":35,"increase_rounds":38,"raglan":4,"sleeve":18,"yoke_total":418},"check":"generated control 3","expected":{"back":35,"front":35,"increase_rounds":38,"raglan":4,"sleeve":18,"yoke_total":414},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"standard neck\", \"actual\": {\"front\": 32, \"back\": 32, \"sleeve\": 16, \"raglan\": 4, \"increase_rounds\": 34, \"yoke_total\": 376}, \"expected\": {\"back\": 32, \"front\": 32, \"increase_rounds\": 34, \"raglan\": 4, \"sleeve\": 16, \"yoke_total\": 372}, \"passed\": false}, {\"check\": \"odd leftover\", \"actual\": {\"front\": 32, \"back\": 33, \"sleeve\": 16, \"raglan\": 4, \"increase_rounds\": 29, \"yoke_total\": 337}, \"expected\": {\"back\": 33, \"front\": 32, \"increase_rounds\": 29, \"raglan\": 4, \"sleeve\": 16, \"yoke_total\": 333}, \"passed\": false}, {\"check\": \"tiny neck\", \"actual\": \"error: neck too small\", \"expected\": \"error: neck too small\", \"passed\": true}, {\"check\": \"regression: yoke total growth\", \"actual\": {\"front\": 38, \"back\": 38, \"sleeve\": 20, \"raglan\": 4, \"increase_rounds\": 31, \"yoke_total\": 372}, \"expected\": {\"back\": 38, \"front\": 38, \"increase_rounds\": 31, \"raglan\": 4, \"sleeve\": 20, \"yoke_total\": 368}, \"passed\": false}, {\"check\": \"repair check: yoke total growth\", \"actual\": {\"front\": 25, \"back\": 25, \"sleeve\": 13, \"raglan\": 4, \"increase_rounds\": 38, \"yoke_total\": 388}, \"expected\": {\"back\": 25, \"front\": 25, \"increase_rounds\": 38, \"raglan\": 4, \"sleeve\": 13, \"yoke_total\": 384}, \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": {\"front\": 38, \"back\": 38, \"sleeve\": 20, \"raglan\": 4, \"increase_rounds\": 1, \"yoke_total\": 132}, \"expected\": {\"back\": 38, \"front\": 38, \"increase_rounds\": 1, \"raglan\": 4, \"sleeve\": 20, \"yoke_total\": 128}, \"passed\": false}, {\"check\": \"generated control 2\", \"actual\": {\"front\": 25, \"back\": 25, \"sleeve\": 13, \"raglan\": 4, \"increase_rounds\": 8, \"yoke_total\": 148}, \"expected\": {\"back\": 25, \"front\": 25, \"increase_rounds\": 8, \"raglan\": 4, \"sleeve\": 13, \"yoke_total\": 144}, \"passed\": false}, {\"check\": \"generated control 3\", \"actual\": {\"front\": 35, \"back\": 35, \"sleeve\": 18, \"raglan\": 4, \"increase_rounds\": 38, \"yoke_total\": 418}, \"expected\": {\"back\": 35, \"front\": 35, \"increase_rounds\": 38, \"raglan\": 4, \"sleeve\": 18, \"yoke_total\": 414}, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.334,"exit_code":1,"observations":[{"actual":{"back":32,"front":32,"increase_rounds":34,"raglan":4,"sleeve":16,"yoke_total":236},"check":"standard neck","expected":{"back":32,"front":32,"increase_rounds":34,"raglan":4,"sleeve":16,"yoke_total":372},"passed":false},{"actual":{"back":33,"front":32,"increase_rounds":29,"raglan":4,"sleeve":16,"yoke_total":217},"check":"odd leftover","expected":{"back":33,"front":32,"increase_rounds":29,"raglan":4,"sleeve":16,"yoke_total":333},"passed":false},{"actual":"error: neck too small","check":"tiny neck","expected":"error: neck too small","passed":true},{"actual":{"back":38,"front":38,"increase_rounds":31,"raglan":4,"sleeve":20,"yoke_total":244},"check":"regression: yoke total growth","expected":{"back":38,"front":38,"increase_rounds":31,"raglan":4,"sleeve":20,"yoke_total":368},"passed":false},{"actual":{"back":25,"front":25,"increase_rounds":38,"raglan":4,"sleeve":13,"yoke_total":232},"check":"repair check: yoke total growth","expected":{"back":25,"front":25,"increase_rounds":38,"raglan":4,"sleeve":13,"yoke_total":384},"passed":false},{"actual":{"back":38,"front":38,"increase_rounds":1,"raglan":4,"sleeve":20,"yoke_total":124},"check":"generated control 1","expected":{"back":38,"front":38,"increase_rounds":1,"raglan":4,"sleeve":20,"yoke_total":128},"passed":false},{"actual":{"back":25,"front":25,"increase_rounds":8,"raglan":4,"sleeve":13,"yoke_total":112},"check":"generated control 2","expected":{"back":25,"front":25,"increase_rounds":8,"raglan":4,"sleeve":13,"yoke_total":144},"passed":false},{"actual":{"back":35,"front":35,"increase_rounds":38,"raglan":4,"sleeve":18,"yoke_total":262},"check":"generated control 3","expected":{"back":35,"front":35,"increase_rounds":38,"raglan":4,"sleeve":18,"yoke_total":414},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"standard neck\", \"actual\": {\"front\": 32, \"back\": 32, \"sleeve\": 16, \"raglan\": 4, \"increase_rounds\": 34, \"yoke_total\": 236}, \"expected\": {\"back\": 32, \"front\": 32, \"increase_rounds\": 34, \"raglan\": 4, \"sleeve\": 16, \"yoke_total\": 372}, \"passed\": false}, {\"check\": \"odd leftover\", \"actual\": {\"front\": 32, \"back\": 33, \"sleeve\": 16, \"raglan\": 4, \"increase_rounds\": 29, \"yoke_total\": 217}, \"expected\": {\"back\": 33, \"front\": 32, \"increase_rounds\": 29, \"raglan\": 4, \"sleeve\": 16, \"yoke_total\": 333}, \"passed\": false}, {\"check\": \"tiny neck\", \"actual\": \"error: neck too small\", \"expected\": \"error: neck too small\", \"passed\": true}, {\"check\": \"regression: yoke total growth\", \"actual\": {\"front\": 38, \"back\": 38, \"sleeve\": 20, \"raglan\": 4, \"increase_rounds\": 31, \"yoke_total\": 244}, \"expected\": {\"back\": 38, \"front\": 38, \"increase_rounds\": 31, \"raglan\": 4, \"sleeve\": 20, \"yoke_total\": 368}, \"passed\": false}, {\"check\": \"repair check: yoke total growth\", \"actual\": {\"front\": 25, \"back\": 25, \"sleeve\": 13, \"raglan\": 4, \"increase_rounds\": 38, \"yoke_total\": 232}, \"expected\": {\"back\": 25, \"front\": 25, \"increase_rounds\": 38, \"raglan\": 4, \"sleeve\": 13, \"yoke_total\": 384}, \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": {\"front\": 38, \"back\": 38, \"sleeve\": 20, \"raglan\": 4, \"increase_rounds\": 1, \"yoke_total\": 124}, \"expected\": {\"back\": 38, \"front\": 38, \"increase_rounds\": 1, \"raglan\": 4, \"sleeve\": 20, \"yoke_total\": 128}, \"passed\": false}, {\"check\": \"generated control 2\", \"actual\": {\"front\": 25, \"back\": 25, \"sleeve\": 13, \"raglan\": 4, \"increase_rounds\": 8, \"yoke_total\": 112}, \"expected\": {\"back\": 25, \"front\": 25, \"increase_rounds\": 8, \"raglan\": 4, \"sleeve\": 13, \"yoke_total\": 144}, \"passed\": false}, {\"check\": \"generated control 3\", \"actual\": {\"front\": 35, \"back\": 35, \"sleeve\": 18, \"raglan\": 4, \"increase_rounds\": 38, \"yoke_total\": 262}, \"expected\": {\"back\": 35, \"front\": 35, \"increase_rounds\": 38, \"raglan\": 4, \"sleeve\": 18, \"yoke_total\": 414}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":45.467,"exit_code":0,"observations":[{"actual":{"back":32,"front":32,"increase_rounds":34,"raglan":4,"sleeve":16,"yoke_total":372},"check":"standard neck","expected":{"back":32,"front":32,"increase_rounds":34,"raglan":4,"sleeve":16,"yoke_total":372},"passed":true},{"actual":{"back":33,"front":32,"increase_rounds":29,"raglan":4,"sleeve":16,"yoke_total":333},"check":"odd leftover","expected":{"back":33,"front":32,"increase_rounds":29,"raglan":4,"sleeve":16,"yoke_total":333},"passed":true},{"actual":"error: neck too small","check":"tiny neck","expected":"error: neck too small","passed":true},{"actual":{"back":38,"front":38,"increase_rounds":31,"raglan":4,"sleeve":20,"yoke_total":368},"check":"regression: yoke total growth","expected":{"back":38,"front":38,"increase_rounds":31,"raglan":4,"sleeve":20,"yoke_total":368},"passed":true},{"actual":{"back":25,"front":25,"increase_rounds":38,"raglan":4,"sleeve":13,"yoke_total":384},"check":"repair check: yoke total growth","expected":{"back":25,"front":25,"increase_rounds":38,"raglan":4,"sleeve":13,"yoke_total":384},"passed":true},{"actual":{"back":38,"front":38,"increase_rounds":1,"raglan":4,"sleeve":20,"yoke_total":128},"check":"generated control 1","expected":{"back":38,"front":38,"increase_rounds":1,"raglan":4,"sleeve":20,"yoke_total":128},"passed":true},{"actual":{"back":25,"front":25,"increase_rounds":8,"raglan":4,"sleeve":13,"yoke_total":144},"check":"generated control 2","expected":{"back":25,"front":25,"increase_rounds":8,"raglan":4,"sleeve":13,"yoke_total":144},"passed":true},{"actual":{"back":35,"front":35,"increase_rounds":38,"raglan":4,"sleeve":18,"yoke_total":414},"check":"generated control 3","expected":{"back":35,"front":35,"increase_rounds":38,"raglan":4,"sleeve":18,"yoke_total":414},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"standard neck\", \"actual\": {\"front\": 32, \"back\": 32, \"sleeve\": 16, \"raglan\": 4, \"increase_rounds\": 34, \"yoke_total\": 372}, \"expected\": {\"back\": 32, \"front\": 32, \"increase_rounds\": 34, \"raglan\": 4, \"sleeve\": 16, \"yoke_total\": 372}, \"passed\": true}, {\"check\": \"odd leftover\", \"actual\": {\"front\": 32, \"back\": 33, \"sleeve\": 16, \"raglan\": 4, \"increase_rounds\": 29, \"yoke_total\": 333}, \"expected\": {\"back\": 33, \"front\": 32, \"increase_rounds\": 29, \"raglan\": 4, \"sleeve\": 16, \"yoke_total\": 333}, \"passed\": true}, {\"check\": \"tiny neck\", \"actual\": \"error: neck too small\", \"expected\": \"error: neck too small\", \"passed\": true}, {\"check\": \"regression: yoke total growth\", \"actual\": {\"front\": 38, \"back\": 38, \"sleeve\": 20, \"raglan\": 4, \"increase_rounds\": 31, \"yoke_total\": 368}, \"expected\": {\"back\": 38, \"front\": 38, \"increase_rounds\": 31, \"raglan\": 4, \"sleeve\": 20, \"yoke_total\": 368}, \"passed\": true}, {\"check\": \"repair check: yoke total growth\", \"actual\": {\"front\": 25, \"back\": 25, \"sleeve\": 13, \"raglan\": 4, \"increase_rounds\": 38, \"yoke_total\": 384}, \"expected\": {\"back\": 25, \"front\": 25, \"increase_rounds\": 38, \"raglan\": 4, \"sleeve\": 13, \"yoke_total\": 384}, \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": {\"front\": 38, \"back\": 38, \"sleeve\": 20, \"raglan\": 4, \"increase_rounds\": 1, \"yoke_total\": 128}, \"expected\": {\"back\": 38, \"front\": 38, \"increase_rounds\": 1, \"raglan\": 4, \"sleeve\": 20, \"yoke_total\": 128}, \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": {\"front\": 25, \"back\": 25, \"sleeve\": 13, \"raglan\": 4, \"increase_rounds\": 8, \"yoke_total\": 144}, \"expected\": {\"back\": 25, \"front\": 25, \"increase_rounds\": 8, \"raglan\": 4, \"sleeve\": 13, \"yoke_total\": 144}, \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": {\"front\": 35, \"back\": 35, \"sleeve\": 18, \"raglan\": 4, \"increase_rounds\": 38, \"yoke_total\": 414}, \"expected\": {\"back\": 35, \"front\": 35, \"increase_rounds\": 38, \"raglan\": 4, \"sleeve\": 18, \"yoke_total\": 414}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}