{"abstract":"A double crochet circle claims only 6 increases per round.","category":"Knitting and sewing pattern grading","checks":8,"contract":"Base stitches per round: sc 6, hdc 8, dc 12 (others -> \"error: stitch\"). Each round adds one round height to the radius. rounds = ceiling(diameter/(2*height)). Round k has base*k stitches. Return [rounds, stitches in last round, total stitches base*rounds*(rounds+1)/2].","contract_signature":"stitch, diameter, round_height","evaluation_group":"w2-knitting_and_sewing_pattern_grading-crochet-circle","failed_approach":"Counting one extra round overstates the final round.","family":"w2-knitting_and_sewing_pattern_grading-crochet-circle-last-round-count","id":"FA-97646","implementations":{"attempt":{"sha256":"a633e23709ddfcdfbda202db3b3de6b501e422b80c4851f7fa9f4d186e6f6f8c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(stitch, diameter, round_height):\n    BASE = {'sc': 6, 'hdc': 8, 'dc': 12}\n    if stitch not in BASE:\n        return 'error: stitch'\n    h = Fraction(round_height)\n    rounds = math.ceil(Fraction(diameter) / (2 * h))\n    b = BASE[stitch]\n    return [rounds, b * (rounds + 1), b * rounds * (rounds + 1) // 2]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['coaster', ['sc', 10, '0.5'], [10, 60, 330]], ['dc mat', ['dc', 30, '1.5'], [10, 120, 660]],\n  ['treble unknown', ['tr', 10, '1'], 'error: stitch'],\n  ['regression: last round count', ['dc', 10, '1.5'], [4, 48, 120]],\n  ['repair check: last round count', ['sc', 10, '1.5'], [4, 24, 60]],\n  ['generated control 1', ['dc', 15, '0.75'], [10, 120, 660]],\n  ['generated control 2', ['tr', 30, '1.5'], 'error: stitch'],\n  ['generated control 3', ['dc', 12, '0.5'], [12, 144, 936]]],\n [['dc mat', ['dc', 30, '1.5'], [10, 120, 660]], ['treble unknown', ['tr', 10, '1'], 'error: stitch'],\n  ['coaster', ['sc', 10, '0.5'], [10, 60, 330]],\n  ['repair check: last round count', ['hdc', 5, '0.75'], [4, 32, 80]],\n  ['generated control 1', ['tr', 15, '0.75'], 'error: stitch'],\n  ['generated control 2', ['tr', 10, '2'], 'error: stitch'],\n  ['generated control 3', ['tr', 15, '1'], 'error: stitch'],\n  ['generated control 4', ['sc', 5, '0.75'], [4, 24, 60]]],\n [['treble unknown', ['tr', 10, '1'], 'error: stitch'], ['coaster', ['sc', 10, '0.5'], [10, 60, 330]],\n  ['dc mat', ['dc', 30, '1.5'], [10, 120, 660]],\n  ['regression: last round count', ['dc', 12, '0.75'], [8, 96, 432]],\n  ['repair check: last round count', ['hdc', 20, '0.5'], [20, 160, 1680]],\n  ['generated control 1', ['tr', 10, '0.5'], 'error: stitch'],\n  ['generated control 2', ['tr', 15, '1.5'], 'error: stitch'],\n  ['generated control 3', ['dc', 5, '1.5'], [2, 24, 36]]],\n [['coaster', ['sc', 10, '0.5'], [10, 60, 330]], ['dc mat', ['dc', 30, '1.5'], [10, 120, 660]],\n  ['treble unknown', ['tr', 10, '1'], 'error: stitch'],\n  ['regression: last round count', ['hdc', 5, '1.5'], [2, 16, 24]],\n  ['repair check: last round count', ['sc', 30, '1.5'], [10, 60, 330]],\n  ['generated control 1', ['sc', 15, '1'], [8, 48, 216]],\n  ['generated control 2', ['tr', 5, '0.5'], 'error: stitch'],\n  ['generated control 3', ['tr', 20, '1.5'], 'error: stitch']],\n [['dc mat', ['dc', 30, '1.5'], [10, 120, 660]], ['treble unknown', ['tr', 10, '1'], 'error: stitch'],\n  ['coaster', ['sc', 10, '0.5'], [10, 60, 330]],\n  ['regression: last round count', ['hdc', 12, '1.5'], [4, 32, 80]],\n  ['repair check: last round count', ['sc', 10, '1'], [5, 30, 90]],\n  ['generated control 1', ['dc', 30, '2'], [8, 96, 432]],\n  ['generated control 2', ['tr', 30, '1.5'], 'error: stitch'],\n  ['generated control 3', ['dc', 15, '0.75'], [10, 120, 660]]]]\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":"d5ca42dff3b1ad0a3ac086e86301a6599f9fe095c173dea824c8e046f9bf93e0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(stitch, diameter, round_height):\n    BASE = {'sc': 6, 'hdc': 8, 'dc': 12}\n    if stitch not in BASE:\n        return 'error: stitch'\n    h = Fraction(round_height)\n    rounds = math.ceil(Fraction(diameter) / (2 * h))\n    b = BASE[stitch]\n    return [rounds, b + 6 * (rounds - 1), b * rounds * (rounds + 1) // 2]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['coaster', ['sc', 10, '0.5'], [10, 60, 330]], ['dc mat', ['dc', 30, '1.5'], [10, 120, 660]],\n  ['treble unknown', ['tr', 10, '1'], 'error: stitch'],\n  ['regression: last round count', ['dc', 10, '1.5'], [4, 48, 120]],\n  ['repair check: last round count', ['sc', 10, '1.5'], [4, 24, 60]],\n  ['generated control 1', ['dc', 15, '0.75'], [10, 120, 660]],\n  ['generated control 2', ['tr', 30, '1.5'], 'error: stitch'],\n  ['generated control 3', ['dc', 12, '0.5'], [12, 144, 936]]],\n [['dc mat', ['dc', 30, '1.5'], [10, 120, 660]], ['treble unknown', ['tr', 10, '1'], 'error: stitch'],\n  ['coaster', ['sc', 10, '0.5'], [10, 60, 330]],\n  ['repair check: last round count', ['hdc', 5, '0.75'], [4, 32, 80]],\n  ['generated control 1', ['tr', 15, '0.75'], 'error: stitch'],\n  ['generated control 2', ['tr', 10, '2'], 'error: stitch'],\n  ['generated control 3', ['tr', 15, '1'], 'error: stitch'],\n  ['generated control 4', ['sc', 5, '0.75'], [4, 24, 60]]],\n [['treble unknown', ['tr', 10, '1'], 'error: stitch'], ['coaster', ['sc', 10, '0.5'], [10, 60, 330]],\n  ['dc mat', ['dc', 30, '1.5'], [10, 120, 660]],\n  ['regression: last round count', ['dc', 12, '0.75'], [8, 96, 432]],\n  ['repair check: last round count', ['hdc', 20, '0.5'], [20, 160, 1680]],\n  ['generated control 1', ['tr', 10, '0.5'], 'error: stitch'],\n  ['generated control 2', ['tr', 15, '1.5'], 'error: stitch'],\n  ['generated control 3', ['dc', 5, '1.5'], [2, 24, 36]]],\n [['coaster', ['sc', 10, '0.5'], [10, 60, 330]], ['dc mat', ['dc', 30, '1.5'], [10, 120, 660]],\n  ['treble unknown', ['tr', 10, '1'], 'error: stitch'],\n  ['regression: last round count', ['hdc', 5, '1.5'], [2, 16, 24]],\n  ['repair check: last round count', ['sc', 30, '1.5'], [10, 60, 330]],\n  ['generated control 1', ['sc', 15, '1'], [8, 48, 216]],\n  ['generated control 2', ['tr', 5, '0.5'], 'error: stitch'],\n  ['generated control 3', ['tr', 20, '1.5'], 'error: stitch']],\n [['dc mat', ['dc', 30, '1.5'], [10, 120, 660]], ['treble unknown', ['tr', 10, '1'], 'error: stitch'],\n  ['coaster', ['sc', 10, '0.5'], [10, 60, 330]],\n  ['regression: last round count', ['hdc', 12, '1.5'], [4, 32, 80]],\n  ['repair check: last round count', ['sc', 10, '1'], [5, 30, 90]],\n  ['generated control 1', ['dc', 30, '2'], [8, 96, 432]],\n  ['generated control 2', ['tr', 30, '1.5'], 'error: stitch'],\n  ['generated control 3', ['dc', 15, '0.75'], [10, 120, 660]]]]\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-crochet-circle-last-round-count","generated_at":"2026-09-29T14:52:34.180168+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Amigurumi and rug patterns size flat circles by rounds of evenly spaced increases.","root_cause":"Increases per round assume the single crochet rate for every stitch type.","sha256":"179eccee86233790053097a018e384cf60b9cca3ba859f1d536afa320a6d6aee","title":"Flat crochet circle planner: last round count · 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":41.815,"exit_code":1,"observations":[{"actual":[10,66,330],"check":"coaster","expected":[10,60,330],"passed":false},{"actual":[10,132,660],"check":"dc mat","expected":[10,120,660],"passed":false},{"actual":"error: stitch","check":"treble unknown","expected":"error: stitch","passed":true},{"actual":[4,60,120],"check":"regression: last round count","expected":[4,48,120],"passed":false},{"actual":[4,30,60],"check":"repair check: last round count","expected":[4,24,60],"passed":false},{"actual":[10,132,660],"check":"generated control 1","expected":[10,120,660],"passed":false},{"actual":"error: stitch","check":"generated control 2","expected":"error: stitch","passed":true},{"actual":[12,156,936],"check":"generated control 3","expected":[12,144,936],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"coaster\", \"actual\": [10, 66, 330], \"expected\": [10, 60, 330], \"passed\": false}, {\"check\": \"dc mat\", \"actual\": [10, 132, 660], \"expected\": [10, 120, 660], \"passed\": false}, {\"check\": \"treble unknown\", \"actual\": \"error: stitch\", \"expected\": \"error: stitch\", \"passed\": true}, {\"check\": \"regression: last round count\", \"actual\": [4, 60, 120], \"expected\": [4, 48, 120], \"passed\": false}, {\"check\": \"repair check: last round count\", \"actual\": [4, 30, 60], \"expected\": [4, 24, 60], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": [10, 132, 660], \"expected\": [10, 120, 660], \"passed\": false}, {\"check\": \"generated control 2\", \"actual\": \"error: stitch\", \"expected\": \"error: stitch\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": [12, 156, 936], \"expected\": [12, 144, 936], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.922,"exit_code":1,"observations":[{"actual":[10,60,330],"check":"coaster","expected":[10,60,330],"passed":true},{"actual":[10,66,660],"check":"dc mat","expected":[10,120,660],"passed":false},{"actual":"error: stitch","check":"treble unknown","expected":"error: stitch","passed":true},{"actual":[4,30,120],"check":"regression: last round count","expected":[4,48,120],"passed":false},{"actual":[4,24,60],"check":"repair check: last round count","expected":[4,24,60],"passed":true},{"actual":[10,66,660],"check":"generated control 1","expected":[10,120,660],"passed":false},{"actual":"error: stitch","check":"generated control 2","expected":"error: stitch","passed":true},{"actual":[12,78,936],"check":"generated control 3","expected":[12,144,936],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"coaster\", \"actual\": [10, 60, 330], \"expected\": [10, 60, 330], \"passed\": true}, {\"check\": \"dc mat\", \"actual\": [10, 66, 660], \"expected\": [10, 120, 660], \"passed\": false}, {\"check\": \"treble unknown\", \"actual\": \"error: stitch\", \"expected\": \"error: stitch\", \"passed\": true}, {\"check\": \"regression: last round count\", \"actual\": [4, 30, 120], \"expected\": [4, 48, 120], \"passed\": false}, {\"check\": \"repair check: last round count\", \"actual\": [4, 24, 60], \"expected\": [4, 24, 60], \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": [10, 66, 660], \"expected\": [10, 120, 660], \"passed\": false}, {\"check\": \"generated control 2\", \"actual\": \"error: stitch\", \"expected\": \"error: stitch\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": [12, 78, 936], \"expected\": [12, 144, 936], \"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."}}