{"abstract":"A place-on-fold bodice is cut at double width.","category":"Knitting and sewing pattern grading","checks":8,"contract":"Pieces [name, finished_w, finished_h, on_fold, hemmed]. Cut width = w/2 + sa when cut on the fold (no allowance on the fold), else w + 2*sa. Cut height = h + sa (top) + (hem if hemmed else sa). Fabric area counts the unfolded piece (2*cut width for fold pieces) * cut height, summed and half-up to cm^2. A non-positive finished dimension -> \"error: piece\". Return [[name, cut_w, cut_h] floats, area].","evaluation_group":"w2-knitting_and_sewing_pattern_grading-seam-allowance","failed_approach":"Halving the allowance too leaves the side seam short.","family":"w2-knitting_and_sewing_pattern_grading-seam-allowance-fold-width","id":"FA-97551","implementations":{"attempt":{"sha256":"c11b5ab74ab14354aa0bcc3ff58e9b8932b794b9fa53bc82e0159caf9282eabf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(pieces, sa, hem):\n    S = Fraction(str(sa))\n    H = Fraction(str(hem))\n    out = []\n    area = Fraction(0)\n    for name, w, h, fold, hemmed in pieces:\n        W = Fraction(str(w))\n        Hh = Fraction(str(h))\n        if W <= 0 or Hh <= 0:\n            return 'error: piece'\n        cw = (W + S) / 2 if fold else W + 2 * S\n        ch = Hh + S + (H if hemmed else S)\n        out.append([name, float(cw), float(ch)])\n        area += (2 * cw if fold else cw) * ch\n    return [out, math.floor(area + Fraction(1, 2))]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['regression: fold width',\n   [[['facing0', 42, 62.5, True, False], ['back1', 50, 40, False, True], ['facing2', 25, 15, False, True],\n     ['front3', 42, 55, True, True]],\n    1.5, 4],\n   [[['facing0', 22.5, 65.5], ['back1', 53.0, 45.5], ['facing2', 28.0, 20.5], ['front3', 22.5, 60.5]], 8656]],\n  ['repair check: fold width',\n   [[['yoke0', 30.5, 40, True, True], ['yoke1', 42, 62.5, False, True]], 1.5, 2.5],\n   [[['yoke0', 16.75, 44.0], ['yoke1', 45.0, 66.5]], 4467]],\n  ['generated control 1',\n   [[['back0', 50, 0, False, True], ['sleeve1', 25, 62.5, False, True], ['yoke2', 25, 15, True, False]], 1,\n    2.5],\n   'error: piece'],\n  ['generated control 2',\n   [[['sleeve0', 0, 15, False, True], ['front1', 42, 62.5, False, True], ['back2', 42, 55, False, False],\n     ['front3', 25, 62.5, False, True]],\n    2, 2.5],\n   'error: piece'],\n  ['generated control 3',\n   [[['sleeve0', 0, 55, True, True], ['sleeve1', 30.5, 0, True, False], ['sleeve2', 0, 55, True, True]], 1.6,\n    4],\n   'error: piece']],\n [['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['regression: fold width', [[['yoke0', 50, 40, True, True], ['sleeve1', 42, 62.5, False, True]], 1.5, 2.5],\n   [[['yoke0', 26.5, 44.0], ['sleeve1', 45.0, 66.5]], 5325]],\n  ['repair check: fold width', [[['yoke0', 42, 15, True, False]], 1.5, 3], [[['yoke0', 22.5, 18.0]], 810]],\n  ['generated control 1', [[['front0', 20, 40, False, False], ['sleeve1', 50, 15, False, False]], 2, 3],\n   [[['front0', 24.0, 44.0], ['sleeve1', 54.0, 19.0]], 2082]],\n  ['generated control 2',\n   [[['facing0', 30.5, 0, True, True], ['back1', 42, 0, True, True], ['back2', 30.5, 55, False, False],\n     ['facing3', 30.5, 62.5, False, True]],\n    2, 2.5],\n   'error: piece'],\n  ['generated control 3',\n   [[['front0', 25, 55, False, False], ['facing1', 50, 62.5, True, True], ['facing2', 0, 55, False, True]],\n    1.5, 3],\n   'error: piece']],\n [['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['regression: fold width',\n   [[['facing0', 42, 62.5, False, True], ['back1', 50, 15, True, False], ['sleeve2', 30.5, 40, True, False]],\n    1.6, 3],\n   [[['facing0', 45.2, 67.1], ['back1', 26.6, 18.2], ['sleeve2', 16.85, 43.2]], 5457]],\n  ['repair check: fold width', [[['back0', 50, 55, True, False], ['facing1', 50, 55, False, True]], 1.6, 2.5],\n   [[['back0', 26.6, 58.2], ['facing1', 53.2, 59.1]], 6240]],\n  ['generated control 1',\n   [[['sleeve0', 30.5, 62.5, False, False], ['facing1', 25, 0, True, True],\n     ['back2', 30.5, 62.5, False, False], ['front3', 0, 62.5, False, False]],\n    1, 4],\n   'error: piece'],\n  ['generated control 2', [[['yoke0', 0, 0, True, False]], 1, 3], 'error: piece'],\n  ['generated control 3',\n   [[['front0', 30.5, 62.5, True, True], ['yoke1', 20, 40, True, True], ['sleeve2', 20, 0, False, True],\n     ['sleeve3', 50, 62.5, False, True]],\n    1.6, 3],\n   'error: piece']],\n [['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['regression: fold width', [[['front0', 20, 55, True, True]], 2, 3], [[['front0', 12.0, 60.0]], 1440]],\n  ['repair check: fold width', [[['back0', 20, 62.5, True, False]], 1.5, 2.5],\n   [[['back0', 11.5, 65.5]], 1507]],\n  ['generated control 1',\n   [[['front0', 20, 15, True, True], ['back1', 30.5, 55, False, True], ['back2', 50, 15, False, True],\n     ['yoke3', 0, 0, True, True]],\n    1, 4],\n   'error: piece'],\n  ['generated control 2',\n   [[['yoke0', 42, 0, True, False], ['front1', 0, 55, False, False], ['front2', 50, 40, False, True],\n     ['back3', 20, 40, True, True]],\n    1.5, 2.5],\n   'error: piece'],\n  ['generated control 3',\n   [[['facing0', 20, 0, True, True], ['yoke1', 20, 62.5, True, True], ['yoke2', 25, 15, False, False],\n     ['facing3', 42, 0, False, True]],\n    2, 2.5],\n   'error: piece']],\n [['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['regression: fold width', [[['sleeve0', 42, 62.5, True, True]], 2, 3], [[['sleeve0', 23.0, 67.5]], 3105]],\n  ['repair check: fold width', [[['yoke0', 42, 62.5, True, False], ['facing1', 25, 40, False, True]], 1.6, 3],\n   [[['yoke0', 22.6, 65.7], ['facing1', 28.2, 44.6]], 4227]],\n  ['generated control 1', [[['facing0', 30.5, 0, False, False]], 1.5, 3], 'error: piece'],\n  ['generated control 2',\n   [[['facing0', 25, 0, True, False], ['sleeve1', 30.5, 62.5, False, True], ['facing2', 0, 40, False, False],\n     ['sleeve3', 30.5, 55, False, False]],\n    1.5, 4],\n   'error: piece'],\n  ['generated control 3',\n   [[['sleeve0', 50, 0, False, True], ['sleeve1', 50, 15, False, False], ['yoke2', 50, 62.5, False, False]],\n    1.6, 2.5],\n   'error: piece']]]\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":"bd0119adf873d4b7f820987a8a0e2be22ed2231bee26f07389aa47b7ce17f927","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(pieces, sa, hem):\n    S = Fraction(str(sa))\n    H = Fraction(str(hem))\n    out = []\n    area = Fraction(0)\n    for name, w, h, fold, hemmed in pieces:\n        W = Fraction(str(w))\n        Hh = Fraction(str(h))\n        if W <= 0 or Hh <= 0:\n            return 'error: piece'\n        cw = W + S if fold else W + 2 * S\n        ch = Hh + S + (H if hemmed else S)\n        out.append([name, float(cw), float(ch)])\n        area += (2 * cw if fold else cw) * ch\n    return [out, math.floor(area + Fraction(1, 2))]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['regression: fold width',\n   [[['facing0', 42, 62.5, True, False], ['back1', 50, 40, False, True], ['facing2', 25, 15, False, True],\n     ['front3', 42, 55, True, True]],\n    1.5, 4],\n   [[['facing0', 22.5, 65.5], ['back1', 53.0, 45.5], ['facing2', 28.0, 20.5], ['front3', 22.5, 60.5]], 8656]],\n  ['repair check: fold width',\n   [[['yoke0', 30.5, 40, True, True], ['yoke1', 42, 62.5, False, True]], 1.5, 2.5],\n   [[['yoke0', 16.75, 44.0], ['yoke1', 45.0, 66.5]], 4467]],\n  ['generated control 1',\n   [[['back0', 50, 0, False, True], ['sleeve1', 25, 62.5, False, True], ['yoke2', 25, 15, True, False]], 1,\n    2.5],\n   'error: piece'],\n  ['generated control 2',\n   [[['sleeve0', 0, 15, False, True], ['front1', 42, 62.5, False, True], ['back2', 42, 55, False, False],\n     ['front3', 25, 62.5, False, True]],\n    2, 2.5],\n   'error: piece'],\n  ['generated control 3',\n   [[['sleeve0', 0, 55, True, True], ['sleeve1', 30.5, 0, True, False], ['sleeve2', 0, 55, True, True]], 1.6,\n    4],\n   'error: piece']],\n [['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['regression: fold width', [[['yoke0', 50, 40, True, True], ['sleeve1', 42, 62.5, False, True]], 1.5, 2.5],\n   [[['yoke0', 26.5, 44.0], ['sleeve1', 45.0, 66.5]], 5325]],\n  ['repair check: fold width', [[['yoke0', 42, 15, True, False]], 1.5, 3], [[['yoke0', 22.5, 18.0]], 810]],\n  ['generated control 1', [[['front0', 20, 40, False, False], ['sleeve1', 50, 15, False, False]], 2, 3],\n   [[['front0', 24.0, 44.0], ['sleeve1', 54.0, 19.0]], 2082]],\n  ['generated control 2',\n   [[['facing0', 30.5, 0, True, True], ['back1', 42, 0, True, True], ['back2', 30.5, 55, False, False],\n     ['facing3', 30.5, 62.5, False, True]],\n    2, 2.5],\n   'error: piece'],\n  ['generated control 3',\n   [[['front0', 25, 55, False, False], ['facing1', 50, 62.5, True, True], ['facing2', 0, 55, False, True]],\n    1.5, 3],\n   'error: piece']],\n [['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['regression: fold width',\n   [[['facing0', 42, 62.5, False, True], ['back1', 50, 15, True, False], ['sleeve2', 30.5, 40, True, False]],\n    1.6, 3],\n   [[['facing0', 45.2, 67.1], ['back1', 26.6, 18.2], ['sleeve2', 16.85, 43.2]], 5457]],\n  ['repair check: fold width', [[['back0', 50, 55, True, False], ['facing1', 50, 55, False, True]], 1.6, 2.5],\n   [[['back0', 26.6, 58.2], ['facing1', 53.2, 59.1]], 6240]],\n  ['generated control 1',\n   [[['sleeve0', 30.5, 62.5, False, False], ['facing1', 25, 0, True, True],\n     ['back2', 30.5, 62.5, False, False], ['front3', 0, 62.5, False, False]],\n    1, 4],\n   'error: piece'],\n  ['generated control 2', [[['yoke0', 0, 0, True, False]], 1, 3], 'error: piece'],\n  ['generated control 3',\n   [[['front0', 30.5, 62.5, True, True], ['yoke1', 20, 40, True, True], ['sleeve2', 20, 0, False, True],\n     ['sleeve3', 50, 62.5, False, True]],\n    1.6, 3],\n   'error: piece']],\n [['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['regression: fold width', [[['front0', 20, 55, True, True]], 2, 3], [[['front0', 12.0, 60.0]], 1440]],\n  ['repair check: fold width', [[['back0', 20, 62.5, True, False]], 1.5, 2.5],\n   [[['back0', 11.5, 65.5]], 1507]],\n  ['generated control 1',\n   [[['front0', 20, 15, True, True], ['back1', 30.5, 55, False, True], ['back2', 50, 15, False, True],\n     ['yoke3', 0, 0, True, True]],\n    1, 4],\n   'error: piece'],\n  ['generated control 2',\n   [[['yoke0', 42, 0, True, False], ['front1', 0, 55, False, False], ['front2', 50, 40, False, True],\n     ['back3', 20, 40, True, True]],\n    1.5, 2.5],\n   'error: piece'],\n  ['generated control 3',\n   [[['facing0', 20, 0, True, True], ['yoke1', 20, 62.5, True, True], ['yoke2', 25, 15, False, False],\n     ['facing3', 42, 0, False, True]],\n    2, 2.5],\n   'error: piece']],\n [['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['regression: fold width', [[['sleeve0', 42, 62.5, True, True]], 2, 3], [[['sleeve0', 23.0, 67.5]], 3105]],\n  ['repair check: fold width', [[['yoke0', 42, 62.5, True, False], ['facing1', 25, 40, False, True]], 1.6, 3],\n   [[['yoke0', 22.6, 65.7], ['facing1', 28.2, 44.6]], 4227]],\n  ['generated control 1', [[['facing0', 30.5, 0, False, False]], 1.5, 3], 'error: piece'],\n  ['generated control 2',\n   [[['facing0', 25, 0, True, False], ['sleeve1', 30.5, 62.5, False, True], ['facing2', 0, 40, False, False],\n     ['sleeve3', 30.5, 55, False, False]],\n    1.5, 4],\n   'error: piece'],\n  ['generated control 3',\n   [[['sleeve0', 50, 0, False, True], ['sleeve1', 50, 15, False, False], ['yoke2', 50, 62.5, False, False]],\n    1.6, 2.5],\n   'error: piece']]]\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":"5200cc54e9e7091dfd5df03b9516f0c32d8b668fd7c115411e99a6009ce44bf9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(pieces, sa, hem):\n    S = Fraction(str(sa))\n    H = Fraction(str(hem))\n    out = []\n    area = Fraction(0)\n    for name, w, h, fold, hemmed in pieces:\n        W = Fraction(str(w))\n        Hh = Fraction(str(h))\n        if W <= 0 or Hh <= 0:\n            return 'error: piece'\n        cw = W / 2 + S if fold else W + 2 * S\n        ch = Hh + S + (H if hemmed else S)\n        out.append([name, float(cw), float(ch)])\n        area += (2 * cw if fold else cw) * ch\n    return [out, math.floor(area + Fraction(1, 2))]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['regression: fold width',\n   [[['facing0', 42, 62.5, True, False], ['back1', 50, 40, False, True], ['facing2', 25, 15, False, True],\n     ['front3', 42, 55, True, True]],\n    1.5, 4],\n   [[['facing0', 22.5, 65.5], ['back1', 53.0, 45.5], ['facing2', 28.0, 20.5], ['front3', 22.5, 60.5]], 8656]],\n  ['repair check: fold width',\n   [[['yoke0', 30.5, 40, True, True], ['yoke1', 42, 62.5, False, True]], 1.5, 2.5],\n   [[['yoke0', 16.75, 44.0], ['yoke1', 45.0, 66.5]], 4467]],\n  ['generated control 1',\n   [[['back0', 50, 0, False, True], ['sleeve1', 25, 62.5, False, True], ['yoke2', 25, 15, True, False]], 1,\n    2.5],\n   'error: piece'],\n  ['generated control 2',\n   [[['sleeve0', 0, 15, False, True], ['front1', 42, 62.5, False, True], ['back2', 42, 55, False, False],\n     ['front3', 25, 62.5, False, True]],\n    2, 2.5],\n   'error: piece'],\n  ['generated control 3',\n   [[['sleeve0', 0, 55, True, True], ['sleeve1', 30.5, 0, True, False], ['sleeve2', 0, 55, True, True]], 1.6,\n    4],\n   'error: piece']],\n [['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['regression: fold width', [[['yoke0', 50, 40, True, True], ['sleeve1', 42, 62.5, False, True]], 1.5, 2.5],\n   [[['yoke0', 26.5, 44.0], ['sleeve1', 45.0, 66.5]], 5325]],\n  ['repair check: fold width', [[['yoke0', 42, 15, True, False]], 1.5, 3], [[['yoke0', 22.5, 18.0]], 810]],\n  ['generated control 1', [[['front0', 20, 40, False, False], ['sleeve1', 50, 15, False, False]], 2, 3],\n   [[['front0', 24.0, 44.0], ['sleeve1', 54.0, 19.0]], 2082]],\n  ['generated control 2',\n   [[['facing0', 30.5, 0, True, True], ['back1', 42, 0, True, True], ['back2', 30.5, 55, False, False],\n     ['facing3', 30.5, 62.5, False, True]],\n    2, 2.5],\n   'error: piece'],\n  ['generated control 3',\n   [[['front0', 25, 55, False, False], ['facing1', 50, 62.5, True, True], ['facing2', 0, 55, False, True]],\n    1.5, 3],\n   'error: piece']],\n [['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['regression: fold width',\n   [[['facing0', 42, 62.5, False, True], ['back1', 50, 15, True, False], ['sleeve2', 30.5, 40, True, False]],\n    1.6, 3],\n   [[['facing0', 45.2, 67.1], ['back1', 26.6, 18.2], ['sleeve2', 16.85, 43.2]], 5457]],\n  ['repair check: fold width', [[['back0', 50, 55, True, False], ['facing1', 50, 55, False, True]], 1.6, 2.5],\n   [[['back0', 26.6, 58.2], ['facing1', 53.2, 59.1]], 6240]],\n  ['generated control 1',\n   [[['sleeve0', 30.5, 62.5, False, False], ['facing1', 25, 0, True, True],\n     ['back2', 30.5, 62.5, False, False], ['front3', 0, 62.5, False, False]],\n    1, 4],\n   'error: piece'],\n  ['generated control 2', [[['yoke0', 0, 0, True, False]], 1, 3], 'error: piece'],\n  ['generated control 3',\n   [[['front0', 30.5, 62.5, True, True], ['yoke1', 20, 40, True, True], ['sleeve2', 20, 0, False, True],\n     ['sleeve3', 50, 62.5, False, True]],\n    1.6, 3],\n   'error: piece']],\n [['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['regression: fold width', [[['front0', 20, 55, True, True]], 2, 3], [[['front0', 12.0, 60.0]], 1440]],\n  ['repair check: fold width', [[['back0', 20, 62.5, True, False]], 1.5, 2.5],\n   [[['back0', 11.5, 65.5]], 1507]],\n  ['generated control 1',\n   [[['front0', 20, 15, True, True], ['back1', 30.5, 55, False, True], ['back2', 50, 15, False, True],\n     ['yoke3', 0, 0, True, True]],\n    1, 4],\n   'error: piece'],\n  ['generated control 2',\n   [[['yoke0', 42, 0, True, False], ['front1', 0, 55, False, False], ['front2', 50, 40, False, True],\n     ['back3', 20, 40, True, True]],\n    1.5, 2.5],\n   'error: piece'],\n  ['generated control 3',\n   [[['facing0', 20, 0, True, True], ['yoke1', 20, 62.5, True, True], ['yoke2', 25, 15, False, False],\n     ['facing3', 42, 0, False, True]],\n    2, 2.5],\n   'error: piece']],\n [['fold piece', [[['front', 42, 55, True, False]], 1.5, 3], [[['front', 22.5, 58.0]], 2610]],\n  ['zero width', [[['yoke', 0, 10, False, False]], 1, 2], 'error: piece'],\n  ['plain piece', [[['back', 40, 60, False, True]], 1.5, 3], [[['back', 43.0, 64.5]], 2774]],\n  ['regression: fold width', [[['sleeve0', 42, 62.5, True, True]], 2, 3], [[['sleeve0', 23.0, 67.5]], 3105]],\n  ['repair check: fold width', [[['yoke0', 42, 62.5, True, False], ['facing1', 25, 40, False, True]], 1.6, 3],\n   [[['yoke0', 22.6, 65.7], ['facing1', 28.2, 44.6]], 4227]],\n  ['generated control 1', [[['facing0', 30.5, 0, False, False]], 1.5, 3], 'error: piece'],\n  ['generated control 2',\n   [[['facing0', 25, 0, True, False], ['sleeve1', 30.5, 62.5, False, True], ['facing2', 0, 40, False, False],\n     ['sleeve3', 30.5, 55, False, False]],\n    1.5, 4],\n   'error: piece'],\n  ['generated control 3',\n   [[['sleeve0', 50, 0, False, True], ['sleeve1', 50, 15, False, False], ['yoke2', 50, 62.5, False, False]],\n    1.6, 2.5],\n   'error: piece']]]\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-seam-allowance-fold-width","generated_at":"2026-09-29T14:52:33.285120+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Pattern drafting software adds seam and hem allowances and handles place-on-fold pieces.","repair":"Cut half the finished width plus one allowance.","root_cause":"The fold piece is cut at the full finished width plus one allowance.","sha256":"5ed7ef57eb29e2c8c281caa61597f37a91b0808878f7b49bb0a8842af5ccf372","title":"Seam and hem allowance cutter: fold width · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.724,"exit_code":1,"observations":[{"actual":[[["back",43.0,64.5]],2774],"check":"plain piece","expected":[[["back",43.0,64.5]],2774],"passed":true},{"actual":[[["front",21.75,58.0]],2523],"check":"fold piece","expected":[[["front",22.5,58.0]],2610],"passed":false},{"actual":"error: piece","check":"zero width","expected":"error: piece","passed":true},{"actual":[[["facing0",21.75,65.5],["back1",53.0,45.5],["facing2",28.0,20.5],["front3",21.75,60.5]],8467],"check":"regression: fold width","expected":[[["facing0",22.5,65.5],["back1",53.0,45.5],["facing2",28.0,20.5],["front3",22.5,60.5]],8656],"passed":false},{"actual":[[["yoke0",16.0,44.0],["yoke1",45.0,66.5]],4401],"check":"repair check: fold width","expected":[[["yoke0",16.75,44.0],["yoke1",45.0,66.5]],4467],"passed":false},{"actual":"error: piece","check":"generated control 1","expected":"error: piece","passed":true},{"actual":"error: piece","check":"generated control 2","expected":"error: piece","passed":true},{"actual":"error: piece","check":"generated control 3","expected":"error: piece","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"plain piece\", \"actual\": [[[\"back\", 43.0, 64.5]], 2774], \"expected\": [[[\"back\", 43.0, 64.5]], 2774], \"passed\": true}, {\"check\": \"fold piece\", \"actual\": [[[\"front\", 21.75, 58.0]], 2523], \"expected\": [[[\"front\", 22.5, 58.0]], 2610], \"passed\": false}, {\"check\": \"zero width\", \"actual\": \"error: piece\", \"expected\": \"error: piece\", \"passed\": true}, {\"check\": \"regression: fold width\", \"actual\": [[[\"facing0\", 21.75, 65.5], [\"back1\", 53.0, 45.5], [\"facing2\", 28.0, 20.5], [\"front3\", 21.75, 60.5]], 8467], \"expected\": [[[\"facing0\", 22.5, 65.5], [\"back1\", 53.0, 45.5], [\"facing2\", 28.0, 20.5], [\"front3\", 22.5, 60.5]], 8656], \"passed\": false}, {\"check\": \"repair check: fold width\", \"actual\": [[[\"yoke0\", 16.0, 44.0], [\"yoke1\", 45.0, 66.5]], 4401], \"expected\": [[[\"yoke0\", 16.75, 44.0], [\"yoke1\", 45.0, 66.5]], 4467], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"error: piece\", \"expected\": \"error: piece\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"error: piece\", \"expected\": \"error: piece\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"error: piece\", \"expected\": \"error: piece\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.096,"exit_code":1,"observations":[{"actual":[[["back",43.0,64.5]],2774],"check":"plain piece","expected":[[["back",43.0,64.5]],2774],"passed":true},{"actual":[[["front",43.5,58.0]],5046],"check":"fold piece","expected":[[["front",22.5,58.0]],2610],"passed":false},{"actual":"error: piece","check":"zero width","expected":"error: piece","passed":true},{"actual":[[["facing0",43.5,65.5],["back1",53.0,45.5],["facing2",28.0,20.5],["front3",43.5,60.5]],13948],"check":"regression: fold width","expected":[[["facing0",22.5,65.5],["back1",53.0,45.5],["facing2",28.0,20.5],["front3",22.5,60.5]],8656],"passed":false},{"actual":[[["yoke0",32.0,44.0],["yoke1",45.0,66.5]],5809],"check":"repair check: fold width","expected":[[["yoke0",16.75,44.0],["yoke1",45.0,66.5]],4467],"passed":false},{"actual":"error: piece","check":"generated control 1","expected":"error: piece","passed":true},{"actual":"error: piece","check":"generated control 2","expected":"error: piece","passed":true},{"actual":"error: piece","check":"generated control 3","expected":"error: piece","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"plain piece\", \"actual\": [[[\"back\", 43.0, 64.5]], 2774], \"expected\": [[[\"back\", 43.0, 64.5]], 2774], \"passed\": true}, {\"check\": \"fold piece\", \"actual\": [[[\"front\", 43.5, 58.0]], 5046], \"expected\": [[[\"front\", 22.5, 58.0]], 2610], \"passed\": false}, {\"check\": \"zero width\", \"actual\": \"error: piece\", \"expected\": \"error: piece\", \"passed\": true}, {\"check\": \"regression: fold width\", \"actual\": [[[\"facing0\", 43.5, 65.5], [\"back1\", 53.0, 45.5], [\"facing2\", 28.0, 20.5], [\"front3\", 43.5, 60.5]], 13948], \"expected\": [[[\"facing0\", 22.5, 65.5], [\"back1\", 53.0, 45.5], [\"facing2\", 28.0, 20.5], [\"front3\", 22.5, 60.5]], 8656], \"passed\": false}, {\"check\": \"repair check: fold width\", \"actual\": [[[\"yoke0\", 32.0, 44.0], [\"yoke1\", 45.0, 66.5]], 5809], \"expected\": [[[\"yoke0\", 16.75, 44.0], [\"yoke1\", 45.0, 66.5]], 4467], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"error: piece\", \"expected\": \"error: piece\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"error: piece\", \"expected\": \"error: piece\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"error: piece\", \"expected\": \"error: piece\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.211,"exit_code":0,"observations":[{"actual":[[["back",43.0,64.5]],2774],"check":"plain piece","expected":[[["back",43.0,64.5]],2774],"passed":true},{"actual":[[["front",22.5,58.0]],2610],"check":"fold piece","expected":[[["front",22.5,58.0]],2610],"passed":true},{"actual":"error: piece","check":"zero width","expected":"error: piece","passed":true},{"actual":[[["facing0",22.5,65.5],["back1",53.0,45.5],["facing2",28.0,20.5],["front3",22.5,60.5]],8656],"check":"regression: fold width","expected":[[["facing0",22.5,65.5],["back1",53.0,45.5],["facing2",28.0,20.5],["front3",22.5,60.5]],8656],"passed":true},{"actual":[[["yoke0",16.75,44.0],["yoke1",45.0,66.5]],4467],"check":"repair check: fold width","expected":[[["yoke0",16.75,44.0],["yoke1",45.0,66.5]],4467],"passed":true},{"actual":"error: piece","check":"generated control 1","expected":"error: piece","passed":true},{"actual":"error: piece","check":"generated control 2","expected":"error: piece","passed":true},{"actual":"error: piece","check":"generated control 3","expected":"error: piece","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"plain piece\", \"actual\": [[[\"back\", 43.0, 64.5]], 2774], \"expected\": [[[\"back\", 43.0, 64.5]], 2774], \"passed\": true}, {\"check\": \"fold piece\", \"actual\": [[[\"front\", 22.5, 58.0]], 2610], \"expected\": [[[\"front\", 22.5, 58.0]], 2610], \"passed\": true}, {\"check\": \"zero width\", \"actual\": \"error: piece\", \"expected\": \"error: piece\", \"passed\": true}, {\"check\": \"regression: fold width\", \"actual\": [[[\"facing0\", 22.5, 65.5], [\"back1\", 53.0, 45.5], [\"facing2\", 28.0, 20.5], [\"front3\", 22.5, 60.5]], 8656], \"expected\": [[[\"facing0\", 22.5, 65.5], [\"back1\", 53.0, 45.5], [\"facing2\", 28.0, 20.5], [\"front3\", 22.5, 60.5]], 8656], \"passed\": true}, {\"check\": \"repair check: fold width\", \"actual\": [[[\"yoke0\", 16.75, 44.0], [\"yoke1\", 45.0, 66.5]], 4467], \"expected\": [[[\"yoke0\", 16.75, 44.0], [\"yoke1\", 45.0, 66.5]], 4467], \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": \"error: piece\", \"expected\": \"error: piece\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"error: piece\", \"expected\": \"error: piece\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"error: piece\", \"expected\": \"error: piece\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}