{"abstract":"The FBA spreads each side by the full adjustment.","category":"Knitting and sewing pattern grading","checks":8,"contract":"d = full - high bust (cm); negative -> \"error: measurements\". Cup index = floor(d/2.5) capped at the last of AA, A, B, C, D, DD, E. delta = index - index(drafted_cup). kind \"none\", \"FBA\" (delta > 0) or \"SBA\". Total adjustment 2.5 cm per cup, per side = total/2; if per side > 4 cm append \" (redraft)\". Return [cup, kind, per_side float].","contract_signature":"high_bust, full_bust, drafted_cup","evaluation_group":"w2-knitting_and_sewing_pattern_grading-bust-adjustment","failed_approach":"Quartering halves the adjustment again.","family":"w2-knitting_and_sewing_pattern_grading-bust-adjustment-per-side-amount","id":"FA-97706","implementations":{"attempt":{"sha256":"3173e2494488103bbd56a57ea064d1e0f19c629eac8c863b4f3f90646f199b5a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(high_bust, full_bust, drafted_cup):\n    CUPS = ['AA', 'A', 'B', 'C', 'D', 'DD', 'E']\n    d = Fraction(str(full_bust)) - Fraction(str(high_bust))\n    if d < 0:\n        return 'error: measurements'\n    idx = min(math.floor(d / Fraction(5, 2)), len(CUPS) - 1)\n    cup = CUPS[idx]\n    delta = idx - CUPS.index(drafted_cup)\n    total = Fraction(5, 2) * abs(delta)\n    per = total / 4\n    kind = 'none' if delta == 0 else 'FBA' if delta > 0 else 'SBA'\n    if per > 4:\n        kind += ' (redraft)'\n    return [cup, kind, float(per)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['matches draft', [88, 93, 'B'], ['B', 'none', 0.0]],\n  ['big FBA', [84, 101, 'B'], ['E', 'FBA (redraft)', 5.0]],\n  ['small bust', [92.5, 94, 'C'], ['AA', 'SBA', 3.75]],\n  ['regression: per-side amount', [88, 92, 'C'], ['A', 'SBA', 2.5]],\n  ['repair check: per-side amount', [80, 82.5, 'D'], ['A', 'SBA', 3.75]],\n  ['generated control 1', [80, 82.5, 'C'], ['A', 'SBA', 2.5]],\n  ['generated control 2', [84, 94, 'B'], ['D', 'FBA', 2.5]],\n  ['generated control 3', [96, 100, 'A'], ['A', 'none', 0.0]]],\n [['big FBA', [84, 101, 'B'], ['E', 'FBA (redraft)', 5.0]],\n  ['small bust', [92.5, 94, 'C'], ['AA', 'SBA', 3.75]],\n  ['negative difference', [90, 89, 'B'], 'error: measurements'],\n  ['regression: per-side amount', [96, 111, 'C'], ['E', 'FBA', 3.75]],\n  ['repair check: per-side amount', [84, 91.5, 'A'], ['C', 'FBA', 2.5]],\n  ['generated control 1', [96, 95, 'C'], 'error: measurements'],\n  ['generated control 2', [80, 97.5, 'D'], ['E', 'FBA', 2.5]],\n  ['generated control 3', [92.5, 97.5, 'D'], ['B', 'SBA', 2.5]]],\n [['small bust', [92.5, 94, 'C'], ['AA', 'SBA', 3.75]],\n  ['negative difference', [90, 89, 'B'], 'error: measurements'],\n  ['matches draft', [88, 93, 'B'], ['B', 'none', 0.0]],\n  ['regression: per-side amount', [84, 91.5, 'D'], ['C', 'SBA', 1.25]],\n  ['repair check: per-side amount', [80, 89, 'B'], ['C', 'FBA', 1.25]],\n  ['generated control 1', [80, 84, 'B'], ['A', 'SBA', 1.25]],\n  ['generated control 2', [84, 101.5, 'A'], ['E', 'FBA (redraft)', 6.25]],\n  ['generated control 3', [92.5, 107.5, 'A'], ['E', 'FBA (redraft)', 6.25]]],\n [['negative difference', [90, 89, 'B'], 'error: measurements'],\n  ['matches draft', [88, 93, 'B'], ['B', 'none', 0.0]],\n  ['big FBA', [84, 101, 'B'], ['E', 'FBA (redraft)', 5.0]],\n  ['regression: per-side amount', [84, 85, 'A'], ['AA', 'SBA', 1.25]],\n  ['repair check: per-side amount', [88, 89, 'C'], ['AA', 'SBA', 3.75]],\n  ['generated control 1', [96, 106, 'A'], ['D', 'FBA', 3.75]],\n  ['generated control 2', [84, 84, 'D'], ['AA', 'SBA (redraft)', 5.0]],\n  ['generated control 3', [88, 95.5, 'B'], ['C', 'FBA', 1.25]]],\n [['matches draft', [88, 93, 'B'], ['B', 'none', 0.0]],\n  ['big FBA', [84, 101, 'B'], ['E', 'FBA (redraft)', 5.0]],\n  ['small bust', [92.5, 94, 'C'], ['AA', 'SBA', 3.75]],\n  ['regression: per-side amount', [84, 85, 'D'], ['AA', 'SBA (redraft)', 5.0]],\n  ['repair check: per-side amount', [80, 97.5, 'B'], ['E', 'FBA (redraft)', 5.0]],\n  ['generated control 1', [84, 83, 'D'], 'error: measurements'],\n  ['generated control 2', [88, 87, 'A'], 'error: measurements'],\n  ['generated control 3', [84, 96.5, 'C'], ['DD', 'FBA', 2.5]]]]\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":"892ade4b1cd245231a152ea5670c8c12a6e329bdc9ab0065eb89006a540f74ca","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(high_bust, full_bust, drafted_cup):\n    CUPS = ['AA', 'A', 'B', 'C', 'D', 'DD', 'E']\n    d = Fraction(str(full_bust)) - Fraction(str(high_bust))\n    if d < 0:\n        return 'error: measurements'\n    idx = min(math.floor(d / Fraction(5, 2)), len(CUPS) - 1)\n    cup = CUPS[idx]\n    delta = idx - CUPS.index(drafted_cup)\n    total = Fraction(5, 2) * abs(delta)\n    per = total\n    kind = 'none' if delta == 0 else 'FBA' if delta > 0 else 'SBA'\n    if per > 4:\n        kind += ' (redraft)'\n    return [cup, kind, float(per)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['matches draft', [88, 93, 'B'], ['B', 'none', 0.0]],\n  ['big FBA', [84, 101, 'B'], ['E', 'FBA (redraft)', 5.0]],\n  ['small bust', [92.5, 94, 'C'], ['AA', 'SBA', 3.75]],\n  ['regression: per-side amount', [88, 92, 'C'], ['A', 'SBA', 2.5]],\n  ['repair check: per-side amount', [80, 82.5, 'D'], ['A', 'SBA', 3.75]],\n  ['generated control 1', [80, 82.5, 'C'], ['A', 'SBA', 2.5]],\n  ['generated control 2', [84, 94, 'B'], ['D', 'FBA', 2.5]],\n  ['generated control 3', [96, 100, 'A'], ['A', 'none', 0.0]]],\n [['big FBA', [84, 101, 'B'], ['E', 'FBA (redraft)', 5.0]],\n  ['small bust', [92.5, 94, 'C'], ['AA', 'SBA', 3.75]],\n  ['negative difference', [90, 89, 'B'], 'error: measurements'],\n  ['regression: per-side amount', [96, 111, 'C'], ['E', 'FBA', 3.75]],\n  ['repair check: per-side amount', [84, 91.5, 'A'], ['C', 'FBA', 2.5]],\n  ['generated control 1', [96, 95, 'C'], 'error: measurements'],\n  ['generated control 2', [80, 97.5, 'D'], ['E', 'FBA', 2.5]],\n  ['generated control 3', [92.5, 97.5, 'D'], ['B', 'SBA', 2.5]]],\n [['small bust', [92.5, 94, 'C'], ['AA', 'SBA', 3.75]],\n  ['negative difference', [90, 89, 'B'], 'error: measurements'],\n  ['matches draft', [88, 93, 'B'], ['B', 'none', 0.0]],\n  ['regression: per-side amount', [84, 91.5, 'D'], ['C', 'SBA', 1.25]],\n  ['repair check: per-side amount', [80, 89, 'B'], ['C', 'FBA', 1.25]],\n  ['generated control 1', [80, 84, 'B'], ['A', 'SBA', 1.25]],\n  ['generated control 2', [84, 101.5, 'A'], ['E', 'FBA (redraft)', 6.25]],\n  ['generated control 3', [92.5, 107.5, 'A'], ['E', 'FBA (redraft)', 6.25]]],\n [['negative difference', [90, 89, 'B'], 'error: measurements'],\n  ['matches draft', [88, 93, 'B'], ['B', 'none', 0.0]],\n  ['big FBA', [84, 101, 'B'], ['E', 'FBA (redraft)', 5.0]],\n  ['regression: per-side amount', [84, 85, 'A'], ['AA', 'SBA', 1.25]],\n  ['repair check: per-side amount', [88, 89, 'C'], ['AA', 'SBA', 3.75]],\n  ['generated control 1', [96, 106, 'A'], ['D', 'FBA', 3.75]],\n  ['generated control 2', [84, 84, 'D'], ['AA', 'SBA (redraft)', 5.0]],\n  ['generated control 3', [88, 95.5, 'B'], ['C', 'FBA', 1.25]]],\n [['matches draft', [88, 93, 'B'], ['B', 'none', 0.0]],\n  ['big FBA', [84, 101, 'B'], ['E', 'FBA (redraft)', 5.0]],\n  ['small bust', [92.5, 94, 'C'], ['AA', 'SBA', 3.75]],\n  ['regression: per-side amount', [84, 85, 'D'], ['AA', 'SBA (redraft)', 5.0]],\n  ['repair check: per-side amount', [80, 97.5, 'B'], ['E', 'FBA (redraft)', 5.0]],\n  ['generated control 1', [84, 83, 'D'], 'error: measurements'],\n  ['generated control 2', [88, 87, 'A'], 'error: measurements'],\n  ['generated control 3', [84, 96.5, 'C'], ['DD', 'FBA', 2.5]]]]\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-bust-adjustment-per-side-amount","generated_at":"2026-09-29T14:52:34.809111+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Sewists compare their cup size to the pattern draft cup and perform full or small bust adjustments.","root_cause":"The total adjustment is applied to each side.","sha256":"f7a1733ee3e1af174a9a02ab05692e2fa1688bacca6e9a75abe7922c6de17db0","title":"Full and small bust adjustment: per-side amount · 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.804,"exit_code":1,"observations":[{"actual":["B","none",0.0],"check":"matches draft","expected":["B","none",0.0],"passed":true},{"actual":["E","FBA",2.5],"check":"big FBA","expected":["E","FBA (redraft)",5.0],"passed":false},{"actual":["AA","SBA",1.875],"check":"small bust","expected":["AA","SBA",3.75],"passed":false},{"actual":["A","SBA",1.25],"check":"regression: per-side amount","expected":["A","SBA",2.5],"passed":false},{"actual":["A","SBA",1.875],"check":"repair check: per-side amount","expected":["A","SBA",3.75],"passed":false},{"actual":["A","SBA",1.25],"check":"generated control 1","expected":["A","SBA",2.5],"passed":false},{"actual":["D","FBA",1.25],"check":"generated control 2","expected":["D","FBA",2.5],"passed":false},{"actual":["A","none",0.0],"check":"generated control 3","expected":["A","none",0.0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"matches draft\", \"actual\": [\"B\", \"none\", 0.0], \"expected\": [\"B\", \"none\", 0.0], \"passed\": true}, {\"check\": \"big FBA\", \"actual\": [\"E\", \"FBA\", 2.5], \"expected\": [\"E\", \"FBA (redraft)\", 5.0], \"passed\": false}, {\"check\": \"small bust\", \"actual\": [\"AA\", \"SBA\", 1.875], \"expected\": [\"AA\", \"SBA\", 3.75], \"passed\": false}, {\"check\": \"regression: per-side amount\", \"actual\": [\"A\", \"SBA\", 1.25], \"expected\": [\"A\", \"SBA\", 2.5], \"passed\": false}, {\"check\": \"repair check: per-side amount\", \"actual\": [\"A\", \"SBA\", 1.875], \"expected\": [\"A\", \"SBA\", 3.75], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": [\"A\", \"SBA\", 1.25], \"expected\": [\"A\", \"SBA\", 2.5], \"passed\": false}, {\"check\": \"generated control 2\", \"actual\": [\"D\", \"FBA\", 1.25], \"expected\": [\"D\", \"FBA\", 2.5], \"passed\": false}, {\"check\": \"generated control 3\", \"actual\": [\"A\", \"none\", 0.0], \"expected\": [\"A\", \"none\", 0.0], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.308,"exit_code":1,"observations":[{"actual":["B","none",0.0],"check":"matches draft","expected":["B","none",0.0],"passed":true},{"actual":["E","FBA (redraft)",10.0],"check":"big FBA","expected":["E","FBA (redraft)",5.0],"passed":false},{"actual":["AA","SBA (redraft)",7.5],"check":"small bust","expected":["AA","SBA",3.75],"passed":false},{"actual":["A","SBA (redraft)",5.0],"check":"regression: per-side amount","expected":["A","SBA",2.5],"passed":false},{"actual":["A","SBA (redraft)",7.5],"check":"repair check: per-side amount","expected":["A","SBA",3.75],"passed":false},{"actual":["A","SBA (redraft)",5.0],"check":"generated control 1","expected":["A","SBA",2.5],"passed":false},{"actual":["D","FBA (redraft)",5.0],"check":"generated control 2","expected":["D","FBA",2.5],"passed":false},{"actual":["A","none",0.0],"check":"generated control 3","expected":["A","none",0.0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"matches draft\", \"actual\": [\"B\", \"none\", 0.0], \"expected\": [\"B\", \"none\", 0.0], \"passed\": true}, {\"check\": \"big FBA\", \"actual\": [\"E\", \"FBA (redraft)\", 10.0], \"expected\": [\"E\", \"FBA (redraft)\", 5.0], \"passed\": false}, {\"check\": \"small bust\", \"actual\": [\"AA\", \"SBA (redraft)\", 7.5], \"expected\": [\"AA\", \"SBA\", 3.75], \"passed\": false}, {\"check\": \"regression: per-side amount\", \"actual\": [\"A\", \"SBA (redraft)\", 5.0], \"expected\": [\"A\", \"SBA\", 2.5], \"passed\": false}, {\"check\": \"repair check: per-side amount\", \"actual\": [\"A\", \"SBA (redraft)\", 7.5], \"expected\": [\"A\", \"SBA\", 3.75], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": [\"A\", \"SBA (redraft)\", 5.0], \"expected\": [\"A\", \"SBA\", 2.5], \"passed\": false}, {\"check\": \"generated control 2\", \"actual\": [\"D\", \"FBA (redraft)\", 5.0], \"expected\": [\"D\", \"FBA\", 2.5], \"passed\": false}, {\"check\": \"generated control 3\", \"actual\": [\"A\", \"none\", 0.0], \"expected\": [\"A\", \"none\", 0.0], \"passed\": true}], \"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."}}