{"abstract":"Exactly 2.5 cm of woven ease is reported as too little.","category":"Knitting and sewing pattern grading","checks":8,"contract":"Ease = cap - (front + back armhole). Allowed ease: woven 2.5-4.5, knit 0-1.5, leather 0-0.5 (inclusive; fabric trimmed, lower-case; other -> \"error: fabric\"). Verdict \"too little\", \"too much\" or \"ok\". Adjustment per side = (midpoint - ease)/2. Return [ease, verdict, adjust] with floats rounded to 2 decimals.","evaluation_group":"w2-knitting_and_sewing_pattern_grading-sleeve-cap-ease","failed_approach":"Testing against zero misses under-eased woven caps.","family":"w2-knitting_and_sewing_pattern_grading-sleeve-cap-ease-too-little-bound","id":"FA-97681","implementations":{"attempt":{"sha256":"1cde08fbbec20451897296d42c3015d5624ebf79b7506c23e665d27b9be63926","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(cap, front, back, fabric):\n    R = {'woven': (Fraction(5, 2), Fraction(9, 2)), 'knit': (Fraction(0), Fraction(3, 2)), 'leather': (Fraction(0), Fraction(1, 2))}\n    f = fabric.strip().lower()\n    if f not in R:\n        return 'error: fabric'\n    lo, hi = R[f]\n    ease = Fraction(cap) - (Fraction(front) + Fraction(back))\n    if ease < 0:\n        verdict = 'too little'\n    elif ease > hi:\n        verdict = 'too much'\n    else:\n        verdict = 'ok'\n    adjust = ((lo + hi) / 2 - ease) / 2\n    return [round(float(ease), 2), verdict, round(float(adjust), 2)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['woven ok', ['50', '23', '24', 'woven'], [3.0, 'ok', 0.25]],\n  ['knit too much', ['52', '24', '24.5', 'knit'], [3.5, 'too much', -1.38]],\n  ['leather at lower bound', ['46', '23', '23', 'leather'], [0.0, 'ok', 0.12]],\n  ['regression: too-little bound', ['48', '23.5', '22', 'woven'], [2.5, 'ok', 0.5]],\n  ['repair check: too-little bound', ['49', '24', '23', 'woven'], [2.0, 'too little', 0.75]],\n  ['generated control 1', ['46', '23.5', '22', 'Knit '], [0.5, 'ok', 0.12]],\n  ['generated control 2', ['50.5', '22', '22', 'woven'], [6.5, 'too much', -1.5]],\n  ['generated control 3', ['48', '23.5', '22', 'Knit '], [2.5, 'too much', -0.88]]],\n [['knit too much', ['52', '24', '24.5', 'knit'], [3.5, 'too much', -1.38]],\n  ['leather at lower bound', ['46', '23', '23', 'leather'], [0.0, 'ok', 0.12]],\n  ['woven lower edge', ['50.5', '24', '24', 'woven'], [2.5, 'ok', 0.5]],\n  ['regression: too-little bound', ['48', '23.5', '24.5', 'leather'], [0.0, 'ok', 0.12]],\n  ['repair check: too-little bound', ['48', '24', '23', 'woven'], [1.0, 'too little', 1.25]],\n  ['generated control 1', ['46', '23.5', '24.5', 'leather'], [-2.0, 'too little', 1.12]],\n  ['generated control 2', ['52', '24', '23', 'leather'], [5.0, 'too much', -2.38]],\n  ['generated control 3', ['46', '23.5', '22', 'knit'], [0.5, 'ok', 0.12]]],\n [['leather at lower bound', ['46', '23', '23', 'leather'], [0.0, 'ok', 0.12]],\n  ['woven lower edge', ['50.5', '24', '24', 'woven'], [2.5, 'ok', 0.5]],\n  ['woven ok', ['50', '23', '24', 'woven'], [3.0, 'ok', 0.25]],\n  ['regression: too-little bound', ['46', '24', '22', 'Knit '], [0.0, 'ok', 0.38]],\n  ['repair check: too-little bound', ['46', '24', '22', 'woven'], [0.0, 'too little', 1.75]],\n  ['generated control 1', ['48', '22', '23', 'knit'], [3.0, 'too much', -1.12]],\n  ['generated control 2', ['46', '24', '23', 'knit'], [-1.0, 'too little', 0.88]],\n  ['generated control 3', ['48', '22', '24.5', 'leather'], [1.5, 'too much', -0.62]]],\n [['woven lower edge', ['50.5', '24', '24', 'woven'], [2.5, 'ok', 0.5]],\n  ['woven ok', ['50', '23', '24', 'woven'], [3.0, 'ok', 0.25]],\n  ['knit too much', ['52', '24', '24.5', 'knit'], [3.5, 'too much', -1.38]],\n  ['regression: too-little bound', ['50.5', '23.5', '24.5', 'woven'], [2.5, 'ok', 0.5]],\n  ['repair check: too-little bound', ['49', '24', '24.5', 'woven'], [0.5, 'too little', 1.5]],\n  ['generated control 1', ['46', '24', '23', 'knit'], [-1.0, 'too little', 0.88]],\n  ['generated control 2', ['50.5', '23.5', '22', 'leather'], [5.0, 'too much', -2.38]],\n  ['generated control 3', ['52', '22', '23', 'woven'], [7.0, 'too much', -1.75]]],\n [['woven ok', ['50', '23', '24', 'woven'], [3.0, 'ok', 0.25]],\n  ['knit too much', ['52', '24', '24.5', 'knit'], [3.5, 'too much', -1.38]],\n  ['leather at lower bound', ['46', '23', '23', 'leather'], [0.0, 'ok', 0.12]],\n  ['regression: too-little bound', ['46', '24', '22', 'Knit '], [0.0, 'ok', 0.38]],\n  ['repair check: too-little bound', ['46', '23.5', '22', 'woven'], [0.5, 'too little', 1.5]],\n  ['generated control 1', ['49', '23.5', '23', 'leather'], [2.5, 'too much', -1.12]],\n  ['generated control 2', ['50.5', '22', '23', 'leather'], [5.5, 'too much', -2.62]],\n  ['generated control 3', ['46', '23.5', '24.5', 'knit'], [-2.0, 'too little', 1.38]]]]\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":"6801db0936f611e571abf35fb63210b7445f4175721a1fa6a6250e2d2b8cb922","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(cap, front, back, fabric):\n    R = {'woven': (Fraction(5, 2), Fraction(9, 2)), 'knit': (Fraction(0), Fraction(3, 2)), 'leather': (Fraction(0), Fraction(1, 2))}\n    f = fabric.strip().lower()\n    if f not in R:\n        return 'error: fabric'\n    lo, hi = R[f]\n    ease = Fraction(cap) - (Fraction(front) + Fraction(back))\n    if ease <= lo:\n        verdict = 'too little'\n    elif ease > hi:\n        verdict = 'too much'\n    else:\n        verdict = 'ok'\n    adjust = ((lo + hi) / 2 - ease) / 2\n    return [round(float(ease), 2), verdict, round(float(adjust), 2)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['woven ok', ['50', '23', '24', 'woven'], [3.0, 'ok', 0.25]],\n  ['knit too much', ['52', '24', '24.5', 'knit'], [3.5, 'too much', -1.38]],\n  ['leather at lower bound', ['46', '23', '23', 'leather'], [0.0, 'ok', 0.12]],\n  ['regression: too-little bound', ['48', '23.5', '22', 'woven'], [2.5, 'ok', 0.5]],\n  ['repair check: too-little bound', ['49', '24', '23', 'woven'], [2.0, 'too little', 0.75]],\n  ['generated control 1', ['46', '23.5', '22', 'Knit '], [0.5, 'ok', 0.12]],\n  ['generated control 2', ['50.5', '22', '22', 'woven'], [6.5, 'too much', -1.5]],\n  ['generated control 3', ['48', '23.5', '22', 'Knit '], [2.5, 'too much', -0.88]]],\n [['knit too much', ['52', '24', '24.5', 'knit'], [3.5, 'too much', -1.38]],\n  ['leather at lower bound', ['46', '23', '23', 'leather'], [0.0, 'ok', 0.12]],\n  ['woven lower edge', ['50.5', '24', '24', 'woven'], [2.5, 'ok', 0.5]],\n  ['regression: too-little bound', ['48', '23.5', '24.5', 'leather'], [0.0, 'ok', 0.12]],\n  ['repair check: too-little bound', ['48', '24', '23', 'woven'], [1.0, 'too little', 1.25]],\n  ['generated control 1', ['46', '23.5', '24.5', 'leather'], [-2.0, 'too little', 1.12]],\n  ['generated control 2', ['52', '24', '23', 'leather'], [5.0, 'too much', -2.38]],\n  ['generated control 3', ['46', '23.5', '22', 'knit'], [0.5, 'ok', 0.12]]],\n [['leather at lower bound', ['46', '23', '23', 'leather'], [0.0, 'ok', 0.12]],\n  ['woven lower edge', ['50.5', '24', '24', 'woven'], [2.5, 'ok', 0.5]],\n  ['woven ok', ['50', '23', '24', 'woven'], [3.0, 'ok', 0.25]],\n  ['regression: too-little bound', ['46', '24', '22', 'Knit '], [0.0, 'ok', 0.38]],\n  ['repair check: too-little bound', ['46', '24', '22', 'woven'], [0.0, 'too little', 1.75]],\n  ['generated control 1', ['48', '22', '23', 'knit'], [3.0, 'too much', -1.12]],\n  ['generated control 2', ['46', '24', '23', 'knit'], [-1.0, 'too little', 0.88]],\n  ['generated control 3', ['48', '22', '24.5', 'leather'], [1.5, 'too much', -0.62]]],\n [['woven lower edge', ['50.5', '24', '24', 'woven'], [2.5, 'ok', 0.5]],\n  ['woven ok', ['50', '23', '24', 'woven'], [3.0, 'ok', 0.25]],\n  ['knit too much', ['52', '24', '24.5', 'knit'], [3.5, 'too much', -1.38]],\n  ['regression: too-little bound', ['50.5', '23.5', '24.5', 'woven'], [2.5, 'ok', 0.5]],\n  ['repair check: too-little bound', ['49', '24', '24.5', 'woven'], [0.5, 'too little', 1.5]],\n  ['generated control 1', ['46', '24', '23', 'knit'], [-1.0, 'too little', 0.88]],\n  ['generated control 2', ['50.5', '23.5', '22', 'leather'], [5.0, 'too much', -2.38]],\n  ['generated control 3', ['52', '22', '23', 'woven'], [7.0, 'too much', -1.75]]],\n [['woven ok', ['50', '23', '24', 'woven'], [3.0, 'ok', 0.25]],\n  ['knit too much', ['52', '24', '24.5', 'knit'], [3.5, 'too much', -1.38]],\n  ['leather at lower bound', ['46', '23', '23', 'leather'], [0.0, 'ok', 0.12]],\n  ['regression: too-little bound', ['46', '24', '22', 'Knit '], [0.0, 'ok', 0.38]],\n  ['repair check: too-little bound', ['46', '23.5', '22', 'woven'], [0.5, 'too little', 1.5]],\n  ['generated control 1', ['49', '23.5', '23', 'leather'], [2.5, 'too much', -1.12]],\n  ['generated control 2', ['50.5', '22', '23', 'leather'], [5.5, 'too much', -2.62]],\n  ['generated control 3', ['46', '23.5', '24.5', 'knit'], [-2.0, 'too little', 1.38]]]]\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":"4304f41131f5ff48dcf6dd09e6e7b64fb3774709621c42df37b02e269afd6df3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(cap, front, back, fabric):\n    R = {'woven': (Fraction(5, 2), Fraction(9, 2)), 'knit': (Fraction(0), Fraction(3, 2)), 'leather': (Fraction(0), Fraction(1, 2))}\n    f = fabric.strip().lower()\n    if f not in R:\n        return 'error: fabric'\n    lo, hi = R[f]\n    ease = Fraction(cap) - (Fraction(front) + Fraction(back))\n    if ease < lo:\n        verdict = 'too little'\n    elif ease > hi:\n        verdict = 'too much'\n    else:\n        verdict = 'ok'\n    adjust = ((lo + hi) / 2 - ease) / 2\n    return [round(float(ease), 2), verdict, round(float(adjust), 2)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['woven ok', ['50', '23', '24', 'woven'], [3.0, 'ok', 0.25]],\n  ['knit too much', ['52', '24', '24.5', 'knit'], [3.5, 'too much', -1.38]],\n  ['leather at lower bound', ['46', '23', '23', 'leather'], [0.0, 'ok', 0.12]],\n  ['regression: too-little bound', ['48', '23.5', '22', 'woven'], [2.5, 'ok', 0.5]],\n  ['repair check: too-little bound', ['49', '24', '23', 'woven'], [2.0, 'too little', 0.75]],\n  ['generated control 1', ['46', '23.5', '22', 'Knit '], [0.5, 'ok', 0.12]],\n  ['generated control 2', ['50.5', '22', '22', 'woven'], [6.5, 'too much', -1.5]],\n  ['generated control 3', ['48', '23.5', '22', 'Knit '], [2.5, 'too much', -0.88]]],\n [['knit too much', ['52', '24', '24.5', 'knit'], [3.5, 'too much', -1.38]],\n  ['leather at lower bound', ['46', '23', '23', 'leather'], [0.0, 'ok', 0.12]],\n  ['woven lower edge', ['50.5', '24', '24', 'woven'], [2.5, 'ok', 0.5]],\n  ['regression: too-little bound', ['48', '23.5', '24.5', 'leather'], [0.0, 'ok', 0.12]],\n  ['repair check: too-little bound', ['48', '24', '23', 'woven'], [1.0, 'too little', 1.25]],\n  ['generated control 1', ['46', '23.5', '24.5', 'leather'], [-2.0, 'too little', 1.12]],\n  ['generated control 2', ['52', '24', '23', 'leather'], [5.0, 'too much', -2.38]],\n  ['generated control 3', ['46', '23.5', '22', 'knit'], [0.5, 'ok', 0.12]]],\n [['leather at lower bound', ['46', '23', '23', 'leather'], [0.0, 'ok', 0.12]],\n  ['woven lower edge', ['50.5', '24', '24', 'woven'], [2.5, 'ok', 0.5]],\n  ['woven ok', ['50', '23', '24', 'woven'], [3.0, 'ok', 0.25]],\n  ['regression: too-little bound', ['46', '24', '22', 'Knit '], [0.0, 'ok', 0.38]],\n  ['repair check: too-little bound', ['46', '24', '22', 'woven'], [0.0, 'too little', 1.75]],\n  ['generated control 1', ['48', '22', '23', 'knit'], [3.0, 'too much', -1.12]],\n  ['generated control 2', ['46', '24', '23', 'knit'], [-1.0, 'too little', 0.88]],\n  ['generated control 3', ['48', '22', '24.5', 'leather'], [1.5, 'too much', -0.62]]],\n [['woven lower edge', ['50.5', '24', '24', 'woven'], [2.5, 'ok', 0.5]],\n  ['woven ok', ['50', '23', '24', 'woven'], [3.0, 'ok', 0.25]],\n  ['knit too much', ['52', '24', '24.5', 'knit'], [3.5, 'too much', -1.38]],\n  ['regression: too-little bound', ['50.5', '23.5', '24.5', 'woven'], [2.5, 'ok', 0.5]],\n  ['repair check: too-little bound', ['49', '24', '24.5', 'woven'], [0.5, 'too little', 1.5]],\n  ['generated control 1', ['46', '24', '23', 'knit'], [-1.0, 'too little', 0.88]],\n  ['generated control 2', ['50.5', '23.5', '22', 'leather'], [5.0, 'too much', -2.38]],\n  ['generated control 3', ['52', '22', '23', 'woven'], [7.0, 'too much', -1.75]]],\n [['woven ok', ['50', '23', '24', 'woven'], [3.0, 'ok', 0.25]],\n  ['knit too much', ['52', '24', '24.5', 'knit'], [3.5, 'too much', -1.38]],\n  ['leather at lower bound', ['46', '23', '23', 'leather'], [0.0, 'ok', 0.12]],\n  ['regression: too-little bound', ['46', '24', '22', 'Knit '], [0.0, 'ok', 0.38]],\n  ['repair check: too-little bound', ['46', '23.5', '22', 'woven'], [0.5, 'too little', 1.5]],\n  ['generated control 1', ['49', '23.5', '23', 'leather'], [2.5, 'too much', -1.12]],\n  ['generated control 2', ['50.5', '22', '23', 'leather'], [5.5, 'too much', -2.62]],\n  ['generated control 3', ['46', '23.5', '24.5', 'knit'], [-2.0, 'too little', 1.38]]]]\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-sleeve-cap-ease-too-little-bound","generated_at":"2026-09-29T14:52:34.541981+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Set-in sleeves need a fabric-dependent amount of cap ease to ease into the armhole.","repair":"Flag only ease strictly below the lower bound.","root_cause":"The lower bound is exclusive.","sha256":"ff0784068bf4ef9274232cc581767a89ac73355ce5053b7cde34ce2f1bd0f41c","title":"Sleeve cap ease checker: too-little bound · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.654,"exit_code":1,"observations":[{"actual":[3.0,"ok",0.25],"check":"woven ok","expected":[3.0,"ok",0.25],"passed":true},{"actual":[3.5,"too much",-1.38],"check":"knit too much","expected":[3.5,"too much",-1.38],"passed":true},{"actual":[0.0,"ok",0.12],"check":"leather at lower bound","expected":[0.0,"ok",0.12],"passed":true},{"actual":[2.5,"ok",0.5],"check":"regression: too-little bound","expected":[2.5,"ok",0.5],"passed":true},{"actual":[2.0,"ok",0.75],"check":"repair check: too-little bound","expected":[2.0,"too little",0.75],"passed":false},{"actual":[0.5,"ok",0.12],"check":"generated control 1","expected":[0.5,"ok",0.12],"passed":true},{"actual":[6.5,"too much",-1.5],"check":"generated control 2","expected":[6.5,"too much",-1.5],"passed":true},{"actual":[2.5,"too much",-0.88],"check":"generated control 3","expected":[2.5,"too much",-0.88],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"woven ok\", \"actual\": [3.0, \"ok\", 0.25], \"expected\": [3.0, \"ok\", 0.25], \"passed\": true}, {\"check\": \"knit too much\", \"actual\": [3.5, \"too much\", -1.38], \"expected\": [3.5, \"too much\", -1.38], \"passed\": true}, {\"check\": \"leather at lower bound\", \"actual\": [0.0, \"ok\", 0.12], \"expected\": [0.0, \"ok\", 0.12], \"passed\": true}, {\"check\": \"regression: too-little bound\", \"actual\": [2.5, \"ok\", 0.5], \"expected\": [2.5, \"ok\", 0.5], \"passed\": true}, {\"check\": \"repair check: too-little bound\", \"actual\": [2.0, \"ok\", 0.75], \"expected\": [2.0, \"too little\", 0.75], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": [0.5, \"ok\", 0.12], \"expected\": [0.5, \"ok\", 0.12], \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": [6.5, \"too much\", -1.5], \"expected\": [6.5, \"too much\", -1.5], \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": [2.5, \"too much\", -0.88], \"expected\": [2.5, \"too much\", -0.88], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.777,"exit_code":1,"observations":[{"actual":[3.0,"ok",0.25],"check":"woven ok","expected":[3.0,"ok",0.25],"passed":true},{"actual":[3.5,"too much",-1.38],"check":"knit too much","expected":[3.5,"too much",-1.38],"passed":true},{"actual":[0.0,"too little",0.12],"check":"leather at lower bound","expected":[0.0,"ok",0.12],"passed":false},{"actual":[2.5,"too little",0.5],"check":"regression: too-little bound","expected":[2.5,"ok",0.5],"passed":false},{"actual":[2.0,"too little",0.75],"check":"repair check: too-little bound","expected":[2.0,"too little",0.75],"passed":true},{"actual":[0.5,"ok",0.12],"check":"generated control 1","expected":[0.5,"ok",0.12],"passed":true},{"actual":[6.5,"too much",-1.5],"check":"generated control 2","expected":[6.5,"too much",-1.5],"passed":true},{"actual":[2.5,"too much",-0.88],"check":"generated control 3","expected":[2.5,"too much",-0.88],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"woven ok\", \"actual\": [3.0, \"ok\", 0.25], \"expected\": [3.0, \"ok\", 0.25], \"passed\": true}, {\"check\": \"knit too much\", \"actual\": [3.5, \"too much\", -1.38], \"expected\": [3.5, \"too much\", -1.38], \"passed\": true}, {\"check\": \"leather at lower bound\", \"actual\": [0.0, \"too little\", 0.12], \"expected\": [0.0, \"ok\", 0.12], \"passed\": false}, {\"check\": \"regression: too-little bound\", \"actual\": [2.5, \"too little\", 0.5], \"expected\": [2.5, \"ok\", 0.5], \"passed\": false}, {\"check\": \"repair check: too-little bound\", \"actual\": [2.0, \"too little\", 0.75], \"expected\": [2.0, \"too little\", 0.75], \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": [0.5, \"ok\", 0.12], \"expected\": [0.5, \"ok\", 0.12], \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": [6.5, \"too much\", -1.5], \"expected\": [6.5, \"too much\", -1.5], \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": [2.5, \"too much\", -0.88], \"expected\": [2.5, \"too much\", -0.88], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.263,"exit_code":0,"observations":[{"actual":[3.0,"ok",0.25],"check":"woven ok","expected":[3.0,"ok",0.25],"passed":true},{"actual":[3.5,"too much",-1.38],"check":"knit too much","expected":[3.5,"too much",-1.38],"passed":true},{"actual":[0.0,"ok",0.12],"check":"leather at lower bound","expected":[0.0,"ok",0.12],"passed":true},{"actual":[2.5,"ok",0.5],"check":"regression: too-little bound","expected":[2.5,"ok",0.5],"passed":true},{"actual":[2.0,"too little",0.75],"check":"repair check: too-little bound","expected":[2.0,"too little",0.75],"passed":true},{"actual":[0.5,"ok",0.12],"check":"generated control 1","expected":[0.5,"ok",0.12],"passed":true},{"actual":[6.5,"too much",-1.5],"check":"generated control 2","expected":[6.5,"too much",-1.5],"passed":true},{"actual":[2.5,"too much",-0.88],"check":"generated control 3","expected":[2.5,"too much",-0.88],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"woven ok\", \"actual\": [3.0, \"ok\", 0.25], \"expected\": [3.0, \"ok\", 0.25], \"passed\": true}, {\"check\": \"knit too much\", \"actual\": [3.5, \"too much\", -1.38], \"expected\": [3.5, \"too much\", -1.38], \"passed\": true}, {\"check\": \"leather at lower bound\", \"actual\": [0.0, \"ok\", 0.12], \"expected\": [0.0, \"ok\", 0.12], \"passed\": true}, {\"check\": \"regression: too-little bound\", \"actual\": [2.5, \"ok\", 0.5], \"expected\": [2.5, \"ok\", 0.5], \"passed\": true}, {\"check\": \"repair check: too-little bound\", \"actual\": [2.0, \"too little\", 0.75], \"expected\": [2.0, \"too little\", 0.75], \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": [0.5, \"ok\", 0.12], \"expected\": [0.5, \"ok\", 0.12], \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": [6.5, \"too much\", -1.5], \"expected\": [6.5, \"too much\", -1.5], \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": [2.5, \"too much\", -0.88], \"expected\": [2.5, \"too much\", -0.88], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}