{"abstract":"A half circle skirt gets a waist half the intended size.","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":"Dropping the 2 doubles the waist radius.","family":"w2-knitting_and_sewing_pattern_grading-circle-skirt-circle-fraction","id":"FA-97796","implementations":{"attempt":{"sha256":"83ce87ba226f3c93ac28dea4bfe6bb6377ee8011b7c974f397cc2829f3fccb87","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 / (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: circle fraction', [80, 'quarter', 2, 1, 70, 2], [52.2, 51.2, 192.0, 123.2]],\n  ['repair check: circle fraction', [70, 'half', 0, 1.5, 40, 2], [22.3, 20.8, 195.7, 125.6]],\n  ['generated control 1', [60, 'gored', 0, 1, 55, 3], 'error: kind'],\n  ['generated control 2', [66, 'gored', 1, 1, 55, 2], 'error: kind'],\n  ['generated control 3', [66, 'quarter', 1, 1, 70, 2], [42.7, 41.7, 177.0, 113.7]]],\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: circle fraction', [60, 'quarter', 1, 1, 55, 2], [38.8, 37.8, 147.4, 94.8]],\n  ['repair check: circle fraction', [70, 'full', 1, 1, 55, 2], [11.3, 10.3, 416.6, 134.6]],\n  ['generated control 1', [80, 'gored', 1, 1, 70, 2], 'error: kind'],\n  ['generated control 2', [66, 'gored', 0, 1.5, 40, 3], 'error: kind'],\n  ['generated control 3', [66, 'full', 2, 1.5, 70, 3], [10.8, 9.3, 507.8, 164.6]]],\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: circle fraction', [70, 'quarter', 1, 1.5, 70, 2], [45.2, 43.7, 181.0, 115.7]],\n  ['repair check: circle fraction', [92, 'full', 1, 1.5, 55, 3], [14.8, 13.3, 438.6, 142.6]],\n  ['generated control 1', [60, 'gored', 0, 1.5, 55, 3], 'error: kind'],\n  ['generated control 2', [74.5, 'gored', 0, 1.5, 70, 3], 'error: kind'],\n  ['generated control 3', [70, 'full', 0, 1, 55, 2], [11.1, 10.1, 415.6, 134.3]]],\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: circle fraction', [70, 'quarter', 0, 1.5, 55, 2], [44.6, 43.1, 156.4, 100.1]],\n  ['repair check: circle fraction', [74.5, 'half', 2, 1.5, 55, 3], [24.4, 22.9, 249.3, 161.7]],\n  ['generated control 1', [74.5, 'gored', 2, 1, 70, 2], 'error: kind'],\n  ['generated control 2', [92, 'full', 1, 1.5, 40, 2], [14.8, 13.3, 344.3, 110.6]],\n  ['generated control 3', [92, 'quarter', 1, 1, 55, 2], [59.2, 58.2, 179.4, 115.2]]],\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: circle fraction', [60, 'quarter', 0, 1.5, 55, 2], [38.2, 36.7, 146.4, 93.7]],\n  ['repair check: circle fraction', [70, 'quarter', 2, 1, 40, 2], [45.8, 44.8, 134.8, 86.8]],\n  ['generated control 1', [92, 'half', 1, 1.5, 40, 3], [29.6, 28.1, 218.7, 142.2]],\n  ['generated control 2', [60, 'quarter', 2, 1.5, 70, 3], [39.5, 38.0, 172.0, 111.0]],\n  ['generated control 3', [80, 'half', 0, 1.5, 70, 2], [25.5, 24.0, 299.9, 191.9]]]]\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":"23a3010e47759d1db57760396b92c5cd8521ebbe00e37c314a14ad077dae25f7","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: circle fraction', [80, 'quarter', 2, 1, 70, 2], [52.2, 51.2, 192.0, 123.2]],\n  ['repair check: circle fraction', [70, 'half', 0, 1.5, 40, 2], [22.3, 20.8, 195.7, 125.6]],\n  ['generated control 1', [60, 'gored', 0, 1, 55, 3], 'error: kind'],\n  ['generated control 2', [66, 'gored', 1, 1, 55, 2], 'error: kind'],\n  ['generated control 3', [66, 'quarter', 1, 1, 70, 2], [42.7, 41.7, 177.0, 113.7]]],\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: circle fraction', [60, 'quarter', 1, 1, 55, 2], [38.8, 37.8, 147.4, 94.8]],\n  ['repair check: circle fraction', [70, 'full', 1, 1, 55, 2], [11.3, 10.3, 416.6, 134.6]],\n  ['generated control 1', [80, 'gored', 1, 1, 70, 2], 'error: kind'],\n  ['generated control 2', [66, 'gored', 0, 1.5, 40, 3], 'error: kind'],\n  ['generated control 3', [66, 'full', 2, 1.5, 70, 3], [10.8, 9.3, 507.8, 164.6]]],\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: circle fraction', [70, 'quarter', 1, 1.5, 70, 2], [45.2, 43.7, 181.0, 115.7]],\n  ['repair check: circle fraction', [92, 'full', 1, 1.5, 55, 3], [14.8, 13.3, 438.6, 142.6]],\n  ['generated control 1', [60, 'gored', 0, 1.5, 55, 3], 'error: kind'],\n  ['generated control 2', [74.5, 'gored', 0, 1.5, 70, 3], 'error: kind'],\n  ['generated control 3', [70, 'full', 0, 1, 55, 2], [11.1, 10.1, 415.6, 134.3]]],\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: circle fraction', [70, 'quarter', 0, 1.5, 55, 2], [44.6, 43.1, 156.4, 100.1]],\n  ['repair check: circle fraction', [74.5, 'half', 2, 1.5, 55, 3], [24.4, 22.9, 249.3, 161.7]],\n  ['generated control 1', [74.5, 'gored', 2, 1, 70, 2], 'error: kind'],\n  ['generated control 2', [92, 'full', 1, 1.5, 40, 2], [14.8, 13.3, 344.3, 110.6]],\n  ['generated control 3', [92, 'quarter', 1, 1, 55, 2], [59.2, 58.2, 179.4, 115.2]]],\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: circle fraction', [60, 'quarter', 0, 1.5, 55, 2], [38.2, 36.7, 146.4, 93.7]],\n  ['repair check: circle fraction', [70, 'quarter', 2, 1, 40, 2], [45.8, 44.8, 134.8, 86.8]],\n  ['generated control 1', [92, 'half', 1, 1.5, 40, 3], [29.6, 28.1, 218.7, 142.2]],\n  ['generated control 2', [60, 'quarter', 2, 1.5, 70, 3], [39.5, 38.0, 172.0, 111.0]],\n  ['generated control 3', [80, 'half', 0, 1.5, 70, 2], [25.5, 24.0, 299.9, 191.9]]]]\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-circle-fraction","generated_at":"2026-09-29T14:52:35.741006+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 circle fraction multiplies the radius instead of dividing the circumference.","sha256":"f28fe3028ff2937f7ce58f5b45a32bdd3ebca0e7a213c3459f689f32f95f87a3","title":"Circle skirt drafter: circle fraction · 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":43.694,"exit_code":1,"observations":[{"actual":[22.9,21.4,489.6,156.8],"check":"full circle","expected":[11.5,10.0,417.6,133.9],"passed":false},{"actual":[42.0,41.0,257.7,168.0],"check":"half circle","expected":[21.0,20.0,191.7,126.0],"passed":false},{"actual":[103.1,101.6,272.0,173.6],"check":"quarter","expected":[51.6,50.1,191.0,122.1],"passed":false},{"actual":[104.4,103.4,274.0,175.4],"check":"regression: circle fraction","expected":[52.2,51.2,192.0,123.2],"passed":false},{"actual":[44.6,43.1,265.7,170.1],"check":"repair check: circle fraction","expected":[22.3,20.8,195.7,125.6],"passed":false},{"actual":"error: kind","check":"generated control 1","expected":"error: kind","passed":true},{"actual":"error: kind","check":"generated control 2","expected":"error: kind","passed":true},{"actual":[85.3,84.3,244.0,156.3],"check":"generated control 3","expected":[42.7,41.7,177.0,113.7],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"full circle\", \"actual\": [22.9, 21.4, 489.6, 156.8], \"expected\": [11.5, 10.0, 417.6, 133.9], \"passed\": false}, {\"check\": \"half circle\", \"actual\": [42.0, 41.0, 257.7, 168.0], \"expected\": [21.0, 20.0, 191.7, 126.0], \"passed\": false}, {\"check\": \"quarter\", \"actual\": [103.1, 101.6, 272.0, 173.6], \"expected\": [51.6, 50.1, 191.0, 122.1], \"passed\": false}, {\"check\": \"regression: circle fraction\", \"actual\": [104.4, 103.4, 274.0, 175.4], \"expected\": [52.2, 51.2, 192.0, 123.2], \"passed\": false}, {\"check\": \"repair check: circle fraction\", \"actual\": [44.6, 43.1, 265.7, 170.1], \"expected\": [22.3, 20.8, 195.7, 125.6], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"error: kind\", \"expected\": \"error: kind\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"error: kind\", \"expected\": \"error: kind\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": [85.3, 84.3, 244.0, 156.3], \"expected\": [42.7, 41.7, 177.0, 113.7], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.671,"exit_code":1,"observations":[{"actual":[11.5,10.0,417.6,133.9],"check":"full circle","expected":[11.5,10.0,417.6,133.9],"passed":true},{"actual":[5.3,4.3,142.2,94.5],"check":"half circle","expected":[21.0,20.0,191.7,126.0],"passed":false},{"actual":[3.2,1.7,115.0,73.7],"check":"quarter","expected":[51.6,50.1,191.0,122.1],"passed":false},{"actual":[3.3,2.3,115.1,74.3],"check":"regression: circle fraction","expected":[52.2,51.2,192.0,123.2],"passed":false},{"actual":[5.6,4.1,143.2,92.1],"check":"repair check: circle fraction","expected":[22.3,20.8,195.7,125.6],"passed":false},{"actual":"error: kind","check":"generated control 1","expected":"error: kind","passed":true},{"actual":"error: kind","check":"generated control 2","expected":"error: kind","passed":true},{"actual":[2.7,1.7,114.1,73.7],"check":"generated control 3","expected":[42.7,41.7,177.0,113.7],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"full circle\", \"actual\": [11.5, 10.0, 417.6, 133.9], \"expected\": [11.5, 10.0, 417.6, 133.9], \"passed\": true}, {\"check\": \"half circle\", \"actual\": [5.3, 4.3, 142.2, 94.5], \"expected\": [21.0, 20.0, 191.7, 126.0], \"passed\": false}, {\"check\": \"quarter\", \"actual\": [3.2, 1.7, 115.0, 73.7], \"expected\": [51.6, 50.1, 191.0, 122.1], \"passed\": false}, {\"check\": \"regression: circle fraction\", \"actual\": [3.3, 2.3, 115.1, 74.3], \"expected\": [52.2, 51.2, 192.0, 123.2], \"passed\": false}, {\"check\": \"repair check: circle fraction\", \"actual\": [5.6, 4.1, 143.2, 92.1], \"expected\": [22.3, 20.8, 195.7, 125.6], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"error: kind\", \"expected\": \"error: kind\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"error: kind\", \"expected\": \"error: kind\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": [2.7, 1.7, 114.1, 73.7], \"expected\": [42.7, 41.7, 177.0, 113.7], \"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."}}