{"abstract":"A 50 g / 200 m fingering yarn is estimated to need fewer metres than grams.","category":"Knitting and sewing pattern grading","checks":8,"contract":"grams = garment_area / swatch_area * swatch_g; meters = grams * skein_m/skein_g; add margin_pct as a multiplier (meters*(1+margin/100)). skeins = ceiling(meters/skein_m); leftover = skeins*skein_m - meters. Return [meters, skeins, leftover] with meters and leftover half-up integers. Non-positive swatch area or skein weight -> \"error: swatch\".","evaluation_group":"w2-knitting_and_sewing_pattern_grading-yardage-estimate","failed_approach":"Assuming 100 g skeins breaks 50 g skein yarns.","family":"w2-knitting_and_sewing_pattern_grading-yardage-estimate-metres-per-gram","id":"FA-97416","implementations":{"attempt":{"sha256":"d925c732f39c39480d61905dc04d56cf6ab69aac0264f6194e118f4e750e0ce7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(swatch_g, swatch_w_cm, swatch_h_cm, garment_area_cm2, skein_g, skein_m, margin_pct):\n    sw_area = Fraction(str(swatch_w_cm)) * Fraction(str(swatch_h_cm))\n    if sw_area <= 0 or skein_g <= 0:\n        return 'error: swatch'\n    grams = Fraction(str(garment_area_cm2)) / sw_area * Fraction(str(swatch_g))\n    meters = grams * Fraction(skein_m, 100)\n    meters = meters * (1 + Fraction(margin_pct, 100))\n    skeins = math.ceil(meters / skein_m)\n    leftover = skeins * skein_m - meters\n    return [math.floor(meters + Fraction(1, 2)), skeins, math.floor(leftover + Fraction(1, 2))]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['regression: metres per gram', [15, 10, 15, 4800, 100, 200, 0], [960, 5, 40]],\n  ['repair check: metres per gram', [12, 10, 15, 3000, 50, 200, 0], [960, 5, 40]],\n  ['generated control 1', [20, 10, 10, 2000, 100, 100, 10], [440, 5, 60]],\n  ['generated control 2', [12, 12, 12, 4800, 50, 200, 20], [1920, 10, 80]],\n  ['generated control 3', [12, 15, 10, 9000, 100, 150, 20], [1296, 9, 54]]],\n [['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['regression: metres per gram', [12, 12, 15, 4800, 100, 150, 10], [528, 4, 72]],\n  ['repair check: metres per gram', [8, 15, 12, 4800, 50, 100, 10], [469, 5, 31]],\n  ['generated control 1', [20, 12, 10, 2000, 100, 400, 10], [1467, 4, 133]],\n  ['generated control 2', [8, 10, 15, 1500, 100, 150, 15], [138, 1, 12]],\n  ['generated control 3', [15, 12, 15, 2400, 100, 125, 10], [275, 3, 100]]],\n [['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['regression: metres per gram', [12, 12, 10, 2400, 100, 125, 15], [345, 3, 30]],\n  ['repair check: metres per gram', [15, 15, 12, 2000, 50, 400, 20], [1600, 4, 0]],\n  ['generated control 1', [15, 10, 15, 1500, 100, 100, 0], [150, 2, 50]],\n  ['generated control 2', [20, 10, 15, 2400, 100, 400, 20], [1536, 4, 64]],\n  ['generated control 3', [10, 10, 12, 4800, 100, 125, 20], [600, 5, 25]]],\n [['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['regression: metres per gram', [15, 15, 12, 3000, 50, 100, 15], [575, 6, 25]],\n  ['repair check: metres per gram', [15, 12, 12, 1500, 50, 150, 10], [516, 4, 84]],\n  ['generated control 1', [15, 10, 12, 4800, 50, 125, 15], [1725, 14, 25]],\n  ['generated control 2', [10, 10, 12, 1500, 100, 150, 20], [225, 2, 75]],\n  ['generated control 3', [20, 15, 15, 6000, 50, 150, 20], [1920, 13, 30]]],\n [['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['regression: metres per gram', [10, 12, 10, 1500, 50, 200, 10], [550, 3, 50]],\n  ['repair check: metres per gram', [20, 12, 12, 1500, 50, 200, 20], [1000, 5, 0]],\n  ['generated control 1', [10, 12, 12, 1500, 100, 125, 0], [130, 2, 120]],\n  ['generated control 2', [12, 15, 15, 9000, 50, 125, 20], [1440, 12, 60]],\n  ['generated control 3', [20, 10, 10, 6000, 50, 125, 0], [3000, 24, 0]]]]\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":"f2035787def649b648ef8206da77de5250cdbe071909e42fd112b0981316733c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(swatch_g, swatch_w_cm, swatch_h_cm, garment_area_cm2, skein_g, skein_m, margin_pct):\n    sw_area = Fraction(str(swatch_w_cm)) * Fraction(str(swatch_h_cm))\n    if sw_area <= 0 or skein_g <= 0:\n        return 'error: swatch'\n    grams = Fraction(str(garment_area_cm2)) / sw_area * Fraction(str(swatch_g))\n    meters = grams * Fraction(skein_g, skein_m)\n    meters = meters * (1 + Fraction(margin_pct, 100))\n    skeins = math.ceil(meters / skein_m)\n    leftover = skeins * skein_m - meters\n    return [math.floor(meters + Fraction(1, 2)), skeins, math.floor(leftover + Fraction(1, 2))]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['regression: metres per gram', [15, 10, 15, 4800, 100, 200, 0], [960, 5, 40]],\n  ['repair check: metres per gram', [12, 10, 15, 3000, 50, 200, 0], [960, 5, 40]],\n  ['generated control 1', [20, 10, 10, 2000, 100, 100, 10], [440, 5, 60]],\n  ['generated control 2', [12, 12, 12, 4800, 50, 200, 20], [1920, 10, 80]],\n  ['generated control 3', [12, 15, 10, 9000, 100, 150, 20], [1296, 9, 54]]],\n [['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['regression: metres per gram', [12, 12, 15, 4800, 100, 150, 10], [528, 4, 72]],\n  ['repair check: metres per gram', [8, 15, 12, 4800, 50, 100, 10], [469, 5, 31]],\n  ['generated control 1', [20, 12, 10, 2000, 100, 400, 10], [1467, 4, 133]],\n  ['generated control 2', [8, 10, 15, 1500, 100, 150, 15], [138, 1, 12]],\n  ['generated control 3', [15, 12, 15, 2400, 100, 125, 10], [275, 3, 100]]],\n [['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['regression: metres per gram', [12, 12, 10, 2400, 100, 125, 15], [345, 3, 30]],\n  ['repair check: metres per gram', [15, 15, 12, 2000, 50, 400, 20], [1600, 4, 0]],\n  ['generated control 1', [15, 10, 15, 1500, 100, 100, 0], [150, 2, 50]],\n  ['generated control 2', [20, 10, 15, 2400, 100, 400, 20], [1536, 4, 64]],\n  ['generated control 3', [10, 10, 12, 4800, 100, 125, 20], [600, 5, 25]]],\n [['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['regression: metres per gram', [15, 15, 12, 3000, 50, 100, 15], [575, 6, 25]],\n  ['repair check: metres per gram', [15, 12, 12, 1500, 50, 150, 10], [516, 4, 84]],\n  ['generated control 1', [15, 10, 12, 4800, 50, 125, 15], [1725, 14, 25]],\n  ['generated control 2', [10, 10, 12, 1500, 100, 150, 20], [225, 2, 75]],\n  ['generated control 3', [20, 15, 15, 6000, 50, 150, 20], [1920, 13, 30]]],\n [['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['regression: metres per gram', [10, 12, 10, 1500, 50, 200, 10], [550, 3, 50]],\n  ['repair check: metres per gram', [20, 12, 12, 1500, 50, 200, 20], [1000, 5, 0]],\n  ['generated control 1', [10, 12, 12, 1500, 100, 125, 0], [130, 2, 120]],\n  ['generated control 2', [12, 15, 15, 9000, 50, 125, 20], [1440, 12, 60]],\n  ['generated control 3', [20, 10, 10, 6000, 50, 125, 0], [3000, 24, 0]]]]\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":"afc6796370a7d77ed5e2a960d69afb1dba6f7de9744817219d163bb59bf7093d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(swatch_g, swatch_w_cm, swatch_h_cm, garment_area_cm2, skein_g, skein_m, margin_pct):\n    sw_area = Fraction(str(swatch_w_cm)) * Fraction(str(swatch_h_cm))\n    if sw_area <= 0 or skein_g <= 0:\n        return 'error: swatch'\n    grams = Fraction(str(garment_area_cm2)) / sw_area * Fraction(str(swatch_g))\n    meters = grams * Fraction(skein_m, skein_g)\n    meters = meters * (1 + Fraction(margin_pct, 100))\n    skeins = math.ceil(meters / skein_m)\n    leftover = skeins * skein_m - meters\n    return [math.floor(meters + Fraction(1, 2)), skeins, math.floor(leftover + Fraction(1, 2))]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['regression: metres per gram', [15, 10, 15, 4800, 100, 200, 0], [960, 5, 40]],\n  ['repair check: metres per gram', [12, 10, 15, 3000, 50, 200, 0], [960, 5, 40]],\n  ['generated control 1', [20, 10, 10, 2000, 100, 100, 10], [440, 5, 60]],\n  ['generated control 2', [12, 12, 12, 4800, 50, 200, 20], [1920, 10, 80]],\n  ['generated control 3', [12, 15, 10, 9000, 100, 150, 20], [1296, 9, 54]]],\n [['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['regression: metres per gram', [12, 12, 15, 4800, 100, 150, 10], [528, 4, 72]],\n  ['repair check: metres per gram', [8, 15, 12, 4800, 50, 100, 10], [469, 5, 31]],\n  ['generated control 1', [20, 12, 10, 2000, 100, 400, 10], [1467, 4, 133]],\n  ['generated control 2', [8, 10, 15, 1500, 100, 150, 15], [138, 1, 12]],\n  ['generated control 3', [15, 12, 15, 2400, 100, 125, 10], [275, 3, 100]]],\n [['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['regression: metres per gram', [12, 12, 10, 2400, 100, 125, 15], [345, 3, 30]],\n  ['repair check: metres per gram', [15, 15, 12, 2000, 50, 400, 20], [1600, 4, 0]],\n  ['generated control 1', [15, 10, 15, 1500, 100, 100, 0], [150, 2, 50]],\n  ['generated control 2', [20, 10, 15, 2400, 100, 400, 20], [1536, 4, 64]],\n  ['generated control 3', [10, 10, 12, 4800, 100, 125, 20], [600, 5, 25]]],\n [['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['regression: metres per gram', [15, 15, 12, 3000, 50, 100, 15], [575, 6, 25]],\n  ['repair check: metres per gram', [15, 12, 12, 1500, 50, 150, 10], [516, 4, 84]],\n  ['generated control 1', [15, 10, 12, 4800, 50, 125, 15], [1725, 14, 25]],\n  ['generated control 2', [10, 10, 12, 1500, 100, 150, 20], [225, 2, 75]],\n  ['generated control 3', [20, 15, 15, 6000, 50, 150, 20], [1920, 13, 30]]],\n [['with margin', [12, 10, 12, 4800, 50, 125, 10], [1320, 11, 55]],\n  ['zero swatch', [10, 0, 10, 2000, 100, 200, 0], 'error: swatch'],\n  ['exact two skeins', [10, 10, 10, 2000, 100, 200, 0], [400, 2, 0]],\n  ['regression: metres per gram', [10, 12, 10, 1500, 50, 200, 10], [550, 3, 50]],\n  ['repair check: metres per gram', [20, 12, 12, 1500, 50, 200, 20], [1000, 5, 0]],\n  ['generated control 1', [10, 12, 12, 1500, 100, 125, 0], [130, 2, 120]],\n  ['generated control 2', [12, 15, 15, 9000, 50, 125, 20], [1440, 12, 60]],\n  ['generated control 3', [20, 10, 10, 6000, 50, 125, 0], [3000, 24, 0]]]]\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-yardage-estimate-metres-per-gram","generated_at":"2026-09-29T14:52:31.958509+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Designers and knitters estimate how many skeins to buy from a weighed swatch.","repair":"Multiply grams by skein metres over skein grams.","root_cause":"Grams are converted with grams per metre instead of metres per gram.","sha256":"5e37d4e022200a264363b0145f4b936ecece4eddbf64d3d6c75c2b0b11c2d9f5","title":"Yarn yardage estimator: metres per gram · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.762,"exit_code":1,"observations":[{"actual":[400,2,0],"check":"exact two skeins","expected":[400,2,0],"passed":true},{"actual":[660,6,90],"check":"with margin","expected":[1320,11,55],"passed":false},{"actual":"error: swatch","check":"zero swatch","expected":"error: swatch","passed":true},{"actual":[960,5,40],"check":"regression: metres per gram","expected":[960,5,40],"passed":true},{"actual":[480,3,120],"check":"repair check: metres per gram","expected":[960,5,40],"passed":false},{"actual":[440,5,60],"check":"generated control 1","expected":[440,5,60],"passed":true},{"actual":[960,5,40],"check":"generated control 2","expected":[1920,10,80],"passed":false},{"actual":[1296,9,54],"check":"generated control 3","expected":[1296,9,54],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"exact two skeins\", \"actual\": [400, 2, 0], \"expected\": [400, 2, 0], \"passed\": true}, {\"check\": \"with margin\", \"actual\": [660, 6, 90], \"expected\": [1320, 11, 55], \"passed\": false}, {\"check\": \"zero swatch\", \"actual\": \"error: swatch\", \"expected\": \"error: swatch\", \"passed\": true}, {\"check\": \"regression: metres per gram\", \"actual\": [960, 5, 40], \"expected\": [960, 5, 40], \"passed\": true}, {\"check\": \"repair check: metres per gram\", \"actual\": [480, 3, 120], \"expected\": [960, 5, 40], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": [440, 5, 60], \"expected\": [440, 5, 60], \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": [960, 5, 40], \"expected\": [1920, 10, 80], \"passed\": false}, {\"check\": \"generated control 3\", \"actual\": [1296, 9, 54], \"expected\": [1296, 9, 54], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.048,"exit_code":1,"observations":[{"actual":[100,1,100],"check":"exact two skeins","expected":[400,2,0],"passed":false},{"actual":[211,2,39],"check":"with margin","expected":[1320,11,55],"passed":false},{"actual":"error: swatch","check":"zero swatch","expected":"error: swatch","passed":true},{"actual":[240,2,160],"check":"regression: metres per gram","expected":[960,5,40],"passed":false},{"actual":[60,1,140],"check":"repair check: metres per gram","expected":[960,5,40],"passed":false},{"actual":[440,5,60],"check":"generated control 1","expected":[440,5,60],"passed":true},{"actual":[120,1,80],"check":"generated control 2","expected":[1920,10,80],"passed":false},{"actual":[576,4,24],"check":"generated control 3","expected":[1296,9,54],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"exact two skeins\", \"actual\": [100, 1, 100], \"expected\": [400, 2, 0], \"passed\": false}, {\"check\": \"with margin\", \"actual\": [211, 2, 39], \"expected\": [1320, 11, 55], \"passed\": false}, {\"check\": \"zero swatch\", \"actual\": \"error: swatch\", \"expected\": \"error: swatch\", \"passed\": true}, {\"check\": \"regression: metres per gram\", \"actual\": [240, 2, 160], \"expected\": [960, 5, 40], \"passed\": false}, {\"check\": \"repair check: metres per gram\", \"actual\": [60, 1, 140], \"expected\": [960, 5, 40], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": [440, 5, 60], \"expected\": [440, 5, 60], \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": [120, 1, 80], \"expected\": [1920, 10, 80], \"passed\": false}, {\"check\": \"generated control 3\", \"actual\": [576, 4, 24], \"expected\": [1296, 9, 54], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.239,"exit_code":0,"observations":[{"actual":[400,2,0],"check":"exact two skeins","expected":[400,2,0],"passed":true},{"actual":[1320,11,55],"check":"with margin","expected":[1320,11,55],"passed":true},{"actual":"error: swatch","check":"zero swatch","expected":"error: swatch","passed":true},{"actual":[960,5,40],"check":"regression: metres per gram","expected":[960,5,40],"passed":true},{"actual":[960,5,40],"check":"repair check: metres per gram","expected":[960,5,40],"passed":true},{"actual":[440,5,60],"check":"generated control 1","expected":[440,5,60],"passed":true},{"actual":[1920,10,80],"check":"generated control 2","expected":[1920,10,80],"passed":true},{"actual":[1296,9,54],"check":"generated control 3","expected":[1296,9,54],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"exact two skeins\", \"actual\": [400, 2, 0], \"expected\": [400, 2, 0], \"passed\": true}, {\"check\": \"with margin\", \"actual\": [1320, 11, 55], \"expected\": [1320, 11, 55], \"passed\": true}, {\"check\": \"zero swatch\", \"actual\": \"error: swatch\", \"expected\": \"error: swatch\", \"passed\": true}, {\"check\": \"regression: metres per gram\", \"actual\": [960, 5, 40], \"expected\": [960, 5, 40], \"passed\": true}, {\"check\": \"repair check: metres per gram\", \"actual\": [960, 5, 40], \"expected\": [960, 5, 40], \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": [440, 5, 60], \"expected\": [440, 5, 60], \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": [1920, 10, 80], \"expected\": [1920, 10, 80], \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": [1296, 9, 54], \"expected\": [1296, 9, 54], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}