{"abstract":"The skirt waist is two seam allowances too big.","category":"Knitting and sewing pattern grading","checks":8,"contract":"kind full/half/quarter covers fraction 1, 1/2, 1/4 of a circle (else \"error: kind\"). Waist radius r = (waist+ease)/(2*pi*fraction); cut radius = r - sa (seam extends into the waist hole). Hem circumference = 2*pi*fraction*(r + length). Fabric span needed = 2*(cut_r + length + hem) for full and half, (cut_r + length + hem) for quarter. Return floats rounded to 1 decimal: [r, cut_r, hem_circumference, span].","contract_signature":"waist, kind, ease, sa, length, hem","evaluation_group":"w2-knitting_and_sewing_pattern_grading-circle-skirt","failed_approach":"Subtracting two allowances makes the waist too small.","family":"w2-knitting_and_sewing_pattern_grading-circle-skirt-cut-radius","id":"FA-97801","implementations":{"attempt":{"sha256":"3c67febc352135f033bcbd88f19aca8a30bad8db9ac8964375516311e271619d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(waist, kind, ease, sa, length, hem):\n    FR = {'full': 1, 'half': 0.5, 'quarter': 0.25}\n    if kind not in FR:\n        return 'error: kind'\n    W = waist + ease\n    r = W / (2 * math.pi * FR[kind])\n    cut_r = r - 2 * sa\n    hem_c = 2 * math.pi * FR[kind] * (r + length)\n    span = 2 * (cut_r + length + hem) if kind != 'quarter' else cut_r + length + hem\n    return [round(r, 1), round(cut_r, 1), round(hem_c, 1), round(span, 1)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['full circle', [70, 'full', 2, 1.5, 55, 2], [11.5, 10.0, 417.6, 133.9]],\n  ['half circle', [66, 'half', 0, 1, 40, 3], [21.0, 20.0, 191.7, 126.0]],\n  ['quarter', [80, 'quarter', 1, 1.5, 70, 2], [51.6, 50.1, 191.0, 122.1]],\n  ['regression: cut radius', [60, 'quarter', 2, 1, 70, 3], [39.5, 38.5, 172.0, 111.5]],\n  ['repair check: cut radius', [74.5, 'full', 2, 1.5, 40, 2], [12.2, 10.7, 327.8, 105.4]],\n  ['generated control 1', [60, 'full', 1, 1.5, 70, 3], [9.7, 8.2, 500.8, 162.4]],\n  ['generated control 2', [92, 'full', 1, 1, 70, 2], [14.8, 13.8, 532.8, 171.6]],\n  ['generated control 3', [74.5, 'quarter', 2, 1.5, 55, 3], [48.7, 47.2, 162.9, 105.2]]],\n [['half circle', [66, 'half', 0, 1, 40, 3], [21.0, 20.0, 191.7, 126.0]],\n  ['quarter', [80, 'quarter', 1, 1.5, 70, 2], [51.6, 50.1, 191.0, 122.1]],\n  ['gored rejected', [70, 'gored', 0, 1, 50, 2], 'error: kind'],\n  ['regression: cut radius', [80, 'quarter', 1, 1, 55, 3], [51.6, 50.6, 167.4, 108.6]],\n  ['repair check: cut radius', [60, 'quarter', 2, 1, 40, 3], [39.5, 38.5, 124.8, 81.5]],\n  ['generated control 1', [92, 'gored', 1, 1, 55, 3], 'error: kind'],\n  ['generated control 2', [66, 'gored', 0, 1, 55, 3], 'error: kind'],\n  ['generated control 3', [92, 'full', 0, 1, 40, 2], [14.6, 13.6, 343.3, 111.3]]],\n [['quarter', [80, 'quarter', 1, 1.5, 70, 2], [51.6, 50.1, 191.0, 122.1]],\n  ['gored rejected', [70, 'gored', 0, 1, 50, 2], 'error: kind'],\n  ['full circle', [70, 'full', 2, 1.5, 55, 2], [11.5, 10.0, 417.6, 133.9]],\n  ['regression: cut radius', [66, 'half', 2, 1.5, 55, 2], [21.6, 20.1, 240.8, 154.3]],\n  ['repair check: cut radius', [66, 'quarter', 0, 1.5, 55, 2], [42.0, 40.5, 152.4, 97.5]],\n  ['generated control 1', [66, 'gored', 0, 1.5, 55, 3], 'error: kind'],\n  ['generated control 2', [66, 'gored', 1, 1, 55, 3], 'error: kind'],\n  ['generated control 3', [92, 'full', 1, 1.5, 55, 2], [14.8, 13.3, 438.6, 140.6]]],\n [['gored rejected', [70, 'gored', 0, 1, 50, 2], 'error: kind'],\n  ['full circle', [70, 'full', 2, 1.5, 55, 2], [11.5, 10.0, 417.6, 133.9]],\n  ['half circle', [66, 'half', 0, 1, 40, 3], [21.0, 20.0, 191.7, 126.0]],\n  ['regression: cut radius', [80, 'quarter', 1, 1, 40, 3], [51.6, 50.6, 143.8, 93.6]],\n  ['repair check: cut radius', [92, 'quarter', 0, 1, 70, 2], [58.6, 57.6, 202.0, 129.6]],\n  ['generated control 1', [92, 'half', 0, 1, 40, 3], [29.3, 28.3, 217.7, 142.6]],\n  ['generated control 2', [92, 'full', 0, 1, 70, 3], [14.6, 13.6, 531.8, 173.3]],\n  ['generated control 3', [66, 'quarter', 0, 1, 70, 2], [42.0, 41.0, 176.0, 113.0]]],\n [['full circle', [70, 'full', 2, 1.5, 55, 2], [11.5, 10.0, 417.6, 133.9]],\n  ['half circle', [66, 'half', 0, 1, 40, 3], [21.0, 20.0, 191.7, 126.0]],\n  ['quarter', [80, 'quarter', 1, 1.5, 70, 2], [51.6, 50.1, 191.0, 122.1]],\n  ['regression: cut radius', [92, 'quarter', 0, 1.5, 55, 3], [58.6, 57.1, 178.4, 115.1]],\n  ['repair check: cut radius', [74.5, 'quarter', 1, 1.5, 55, 3], [48.1, 46.6, 161.9, 104.6]],\n  ['generated control 1', [66, 'quarter', 1, 1, 70, 3], [42.7, 41.7, 177.0, 114.7]],\n  ['generated control 2', [66, 'quarter', 0, 1, 40, 3], [42.0, 41.0, 128.8, 84.0]],\n  ['generated control 3', [80, 'gored', 0, 1, 70, 2], 'error: kind']]]\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":"1440629da6c449a732f73fa3769e0dc1ff8a05e48fb7073e316d60fc08eecaa5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(waist, kind, ease, sa, length, hem):\n    FR = {'full': 1, 'half': 0.5, 'quarter': 0.25}\n    if kind not in FR:\n        return 'error: kind'\n    W = waist + ease\n    r = W / (2 * math.pi * FR[kind])\n    cut_r = r + sa\n    hem_c = 2 * math.pi * FR[kind] * (r + length)\n    span = 2 * (cut_r + length + hem) if kind != 'quarter' else cut_r + length + hem\n    return [round(r, 1), round(cut_r, 1), round(hem_c, 1), round(span, 1)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['full circle', [70, 'full', 2, 1.5, 55, 2], [11.5, 10.0, 417.6, 133.9]],\n  ['half circle', [66, 'half', 0, 1, 40, 3], [21.0, 20.0, 191.7, 126.0]],\n  ['quarter', [80, 'quarter', 1, 1.5, 70, 2], [51.6, 50.1, 191.0, 122.1]],\n  ['regression: cut radius', [60, 'quarter', 2, 1, 70, 3], [39.5, 38.5, 172.0, 111.5]],\n  ['repair check: cut radius', [74.5, 'full', 2, 1.5, 40, 2], [12.2, 10.7, 327.8, 105.4]],\n  ['generated control 1', [60, 'full', 1, 1.5, 70, 3], [9.7, 8.2, 500.8, 162.4]],\n  ['generated control 2', [92, 'full', 1, 1, 70, 2], [14.8, 13.8, 532.8, 171.6]],\n  ['generated control 3', [74.5, 'quarter', 2, 1.5, 55, 3], [48.7, 47.2, 162.9, 105.2]]],\n [['half circle', [66, 'half', 0, 1, 40, 3], [21.0, 20.0, 191.7, 126.0]],\n  ['quarter', [80, 'quarter', 1, 1.5, 70, 2], [51.6, 50.1, 191.0, 122.1]],\n  ['gored rejected', [70, 'gored', 0, 1, 50, 2], 'error: kind'],\n  ['regression: cut radius', [80, 'quarter', 1, 1, 55, 3], [51.6, 50.6, 167.4, 108.6]],\n  ['repair check: cut radius', [60, 'quarter', 2, 1, 40, 3], [39.5, 38.5, 124.8, 81.5]],\n  ['generated control 1', [92, 'gored', 1, 1, 55, 3], 'error: kind'],\n  ['generated control 2', [66, 'gored', 0, 1, 55, 3], 'error: kind'],\n  ['generated control 3', [92, 'full', 0, 1, 40, 2], [14.6, 13.6, 343.3, 111.3]]],\n [['quarter', [80, 'quarter', 1, 1.5, 70, 2], [51.6, 50.1, 191.0, 122.1]],\n  ['gored rejected', [70, 'gored', 0, 1, 50, 2], 'error: kind'],\n  ['full circle', [70, 'full', 2, 1.5, 55, 2], [11.5, 10.0, 417.6, 133.9]],\n  ['regression: cut radius', [66, 'half', 2, 1.5, 55, 2], [21.6, 20.1, 240.8, 154.3]],\n  ['repair check: cut radius', [66, 'quarter', 0, 1.5, 55, 2], [42.0, 40.5, 152.4, 97.5]],\n  ['generated control 1', [66, 'gored', 0, 1.5, 55, 3], 'error: kind'],\n  ['generated control 2', [66, 'gored', 1, 1, 55, 3], 'error: kind'],\n  ['generated control 3', [92, 'full', 1, 1.5, 55, 2], [14.8, 13.3, 438.6, 140.6]]],\n [['gored rejected', [70, 'gored', 0, 1, 50, 2], 'error: kind'],\n  ['full circle', [70, 'full', 2, 1.5, 55, 2], [11.5, 10.0, 417.6, 133.9]],\n  ['half circle', [66, 'half', 0, 1, 40, 3], [21.0, 20.0, 191.7, 126.0]],\n  ['regression: cut radius', [80, 'quarter', 1, 1, 40, 3], [51.6, 50.6, 143.8, 93.6]],\n  ['repair check: cut radius', [92, 'quarter', 0, 1, 70, 2], [58.6, 57.6, 202.0, 129.6]],\n  ['generated control 1', [92, 'half', 0, 1, 40, 3], [29.3, 28.3, 217.7, 142.6]],\n  ['generated control 2', [92, 'full', 0, 1, 70, 3], [14.6, 13.6, 531.8, 173.3]],\n  ['generated control 3', [66, 'quarter', 0, 1, 70, 2], [42.0, 41.0, 176.0, 113.0]]],\n [['full circle', [70, 'full', 2, 1.5, 55, 2], [11.5, 10.0, 417.6, 133.9]],\n  ['half circle', [66, 'half', 0, 1, 40, 3], [21.0, 20.0, 191.7, 126.0]],\n  ['quarter', [80, 'quarter', 1, 1.5, 70, 2], [51.6, 50.1, 191.0, 122.1]],\n  ['regression: cut radius', [92, 'quarter', 0, 1.5, 55, 3], [58.6, 57.1, 178.4, 115.1]],\n  ['repair check: cut radius', [74.5, 'quarter', 1, 1.5, 55, 3], [48.1, 46.6, 161.9, 104.6]],\n  ['generated control 1', [66, 'quarter', 1, 1, 70, 3], [42.7, 41.7, 177.0, 114.7]],\n  ['generated control 2', [66, 'quarter', 0, 1, 40, 3], [42.0, 41.0, 128.8, 84.0]],\n  ['generated control 3', [80, 'gored', 0, 1, 70, 2], 'error: kind']]]\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-circle-skirt-cut-radius","generated_at":"2026-09-29T14:52:35.741316+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Circle skirt drafting converts waist size into a radius and checks the fabric width needed.","root_cause":"The seam allowance enlarges the waist hole instead of shrinking it.","sha256":"060dda3d01c36661c12a7618e9e1244daeb3facb509c226abbb215cee7769056","title":"Circle skirt drafter: cut radius · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":42.383,"exit_code":1,"observations":[{"actual":[11.5,8.5,417.6,130.9],"check":"full circle","expected":[11.5,10.0,417.6,133.9],"passed":false},{"actual":[21.0,19.0,191.7,124.0],"check":"half circle","expected":[21.0,20.0,191.7,126.0],"passed":false},{"actual":[51.6,48.6,191.0,120.6],"check":"quarter","expected":[51.6,50.1,191.0,122.1],"passed":false},{"actual":[39.5,37.5,172.0,110.5],"check":"regression: cut radius","expected":[39.5,38.5,172.0,111.5],"passed":false},{"actual":[12.2,9.2,327.8,102.4],"check":"repair check: cut radius","expected":[12.2,10.7,327.8,105.4],"passed":false},{"actual":[9.7,6.7,500.8,159.4],"check":"generated control 1","expected":[9.7,8.2,500.8,162.4],"passed":false},{"actual":[14.8,12.8,532.8,169.6],"check":"generated control 2","expected":[14.8,13.8,532.8,171.6],"passed":false},{"actual":[48.7,45.7,162.9,103.7],"check":"generated control 3","expected":[48.7,47.2,162.9,105.2],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"full circle\", \"actual\": [11.5, 8.5, 417.6, 130.9], \"expected\": [11.5, 10.0, 417.6, 133.9], \"passed\": false}, {\"check\": \"half circle\", \"actual\": [21.0, 19.0, 191.7, 124.0], \"expected\": [21.0, 20.0, 191.7, 126.0], \"passed\": false}, {\"check\": \"quarter\", \"actual\": [51.6, 48.6, 191.0, 120.6], \"expected\": [51.6, 50.1, 191.0, 122.1], \"passed\": false}, {\"check\": \"regression: cut radius\", \"actual\": [39.5, 37.5, 172.0, 110.5], \"expected\": [39.5, 38.5, 172.0, 111.5], \"passed\": false}, {\"check\": \"repair check: cut radius\", \"actual\": [12.2, 9.2, 327.8, 102.4], \"expected\": [12.2, 10.7, 327.8, 105.4], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": [9.7, 6.7, 500.8, 159.4], \"expected\": [9.7, 8.2, 500.8, 162.4], \"passed\": false}, {\"check\": \"generated control 2\", \"actual\": [14.8, 12.8, 532.8, 169.6], \"expected\": [14.8, 13.8, 532.8, 171.6], \"passed\": false}, {\"check\": \"generated control 3\", \"actual\": [48.7, 45.7, 162.9, 103.7], \"expected\": [48.7, 47.2, 162.9, 105.2], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.423,"exit_code":1,"observations":[{"actual":[11.5,13.0,417.6,139.9],"check":"full circle","expected":[11.5,10.0,417.6,133.9],"passed":false},{"actual":[21.0,22.0,191.7,130.0],"check":"half circle","expected":[21.0,20.0,191.7,126.0],"passed":false},{"actual":[51.6,53.1,191.0,125.1],"check":"quarter","expected":[51.6,50.1,191.0,122.1],"passed":false},{"actual":[39.5,40.5,172.0,113.5],"check":"regression: cut radius","expected":[39.5,38.5,172.0,111.5],"passed":false},{"actual":[12.2,13.7,327.8,111.4],"check":"repair check: cut radius","expected":[12.2,10.7,327.8,105.4],"passed":false},{"actual":[9.7,11.2,500.8,168.4],"check":"generated control 1","expected":[9.7,8.2,500.8,162.4],"passed":false},{"actual":[14.8,15.8,532.8,175.6],"check":"generated control 2","expected":[14.8,13.8,532.8,171.6],"passed":false},{"actual":[48.7,50.2,162.9,108.2],"check":"generated control 3","expected":[48.7,47.2,162.9,105.2],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"full circle\", \"actual\": [11.5, 13.0, 417.6, 139.9], \"expected\": [11.5, 10.0, 417.6, 133.9], \"passed\": false}, {\"check\": \"half circle\", \"actual\": [21.0, 22.0, 191.7, 130.0], \"expected\": [21.0, 20.0, 191.7, 126.0], \"passed\": false}, {\"check\": \"quarter\", \"actual\": [51.6, 53.1, 191.0, 125.1], \"expected\": [51.6, 50.1, 191.0, 122.1], \"passed\": false}, {\"check\": \"regression: cut radius\", \"actual\": [39.5, 40.5, 172.0, 113.5], \"expected\": [39.5, 38.5, 172.0, 111.5], \"passed\": false}, {\"check\": \"repair check: cut radius\", \"actual\": [12.2, 13.7, 327.8, 111.4], \"expected\": [12.2, 10.7, 327.8, 105.4], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": [9.7, 11.2, 500.8, 168.4], \"expected\": [9.7, 8.2, 500.8, 162.4], \"passed\": false}, {\"check\": \"generated control 2\", \"actual\": [14.8, 15.8, 532.8, 175.6], \"expected\": [14.8, 13.8, 532.8, 171.6], \"passed\": false}, {\"check\": \"generated control 3\", \"actual\": [48.7, 50.2, 162.9, 108.2], \"expected\": [48.7, 47.2, 162.9, 105.2], \"passed\": false}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}