{"abstract":"Well-conditioned poses get damped because (1-w/w0)^2 is positive for w>w0.","category":"Inverse kinematics solvers","checks":7,"contract":"Input [l1,l2,q1,q2,vx,vy,w0,lam0]: resolved-rate step for a planar 2R arm. Manipulability w=|l1 l2 sin q2|. Damping lam^2 = 0 when w>=w0, else lam0^2 (1-w/w0)^2. Solve (J^T J + lam^2 I) qdot = J^T v; if that matrix determinant is below 1e-12 return [\"singular\", w]. Return [status, qdot1, qdot2] in degrees per second, status \"damped\" when lam^2>0 else \"exact\".","evaluation_group":"w2-inverse_kinematics_solvers-adaptive-damping-velocity","failed_approach":"Comparing w against w0 squared moves the zone boundary.","family":"w2-inverse_kinematics_solvers-adaptive-damping-velocity-damping-zone-gate","id":"FA-88231","implementations":{"attempt":{"sha256":"fe9b6bacb868b746050c02dbdd71695a2e098c1be018772932de8658ec3b3ad4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    l1,l2,q1,q2,vx,vy,w0,lam0=x\n    a=math.radians(q1)\n    b=math.radians(q1+q2)\n    J=[[-l1*math.sin(a)-l2*math.sin(b),-l2*math.sin(b)],[l1*math.cos(a)+l2*math.cos(b),l2*math.cos(b)]]\n    w=abs(l1*l2*math.sin(math.radians(q2)))\n    lam2=0.0 if w>=w0*w0 else lam0*lam0*(1.0-w/w0)**2\n    m11=J[0][0]**2+J[1][0]**2+lam2\n    m12=J[0][0]*J[0][1]+J[1][0]*J[1][1]\n    m22=J[0][1]**2+J[1][1]**2+lam2\n    det=m11*m22-m12*m12\n    if det<1e-12: return ['singular',round(w,6)]\n    g1=J[0][0]*vx+J[1][0]*vy\n    g2=J[0][1]*vx+J[1][1]*vy\n    d1=(m22*g1-m12*g2)/det\n    d2=(-m12*g1+m11*g2)/det\n    return ['damped' if lam2>0 else 'exact',round(math.degrees(d1),4),round(math.degrees(d2),4)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['well conditioned', [[1, 1, 30, 90, 0.1, 0.2, 0.3, 0.2]], ['exact', 7.0591, -17.7507]], ['near singular damped', [[1, 1, 30, 5, 0.1, 0.2, 0.3, 0.2]], ['damped', 11.4896, -16.5029]], ['negative elbow near singular', [[1, 1, 30, -5, 0.1, 0.2, 0.3, 0.2]], ['damped', -5.2725, 18.1241]], ['negative elbow well conditioned', [[1, 1, 10, -80, -0.2, 0.1, 0.3, 0.2]], ['exact', 9.4468, -19.8957]], ['straight arm damped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.2]], ['damped', 6.8209, 3.4105]], ['straight arm undamped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0]], ['singular', 0.0]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]]], [['negative elbow well conditioned', [[1, 1, 10, -80, -0.2, 0.1, 0.3, 0.2]], ['exact', 9.4468, -19.8957]], ['straight arm damped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.2]], ['damped', 6.8209, 3.4105]], ['straight arm undamped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0]], ['singular', 0.0]], ['inside zone no damping gain', [[1, 1, 45, 10, 0.2, -0.1, 0.5, 0.0]], ['exact', 10.8225, -34.1537]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]], ['long links', [[2, 1.5, -20, 40, 0.3, 0.3, 0.5, 0.3]], ['exact', 17.1371, -27.792]], ['exact threshold', [[1, 2, 10, 30, 0.1, 0.1, 1.0, 0.4]], ['damped', 16.144, -22.7815]]], [['inside zone no damping gain', [[1, 1, 45, 10, 0.2, -0.1, 0.5, 0.0]], ['exact', 10.8225, -34.1537]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]], ['long links', [[2, 1.5, -20, 40, 0.3, 0.3, 0.5, 0.3]], ['exact', 17.1371, -27.792]], ['exact threshold', [[1, 2, 10, 30, 0.1, 0.1, 1.0, 0.4]], ['damped', 16.144, -22.7815]], ['large damping', [[1, 1, 90, 8, -0.1, 0.0, 0.8, 0.6]], ['damped', 2.2347, 0.9844]], ['slightly above threshold', [[1, 1, 0, 20, 0.2, 0.2, 0.3, 0.5]], ['exact', 42.9429, -76.4473]], ['small straight damping', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0002]], ['damped', 6.8755, 3.4377]]], [['well conditioned', [[1, 1, 30, 90, 0.1, 0.2, 0.3, 0.2]], ['exact', 7.0591, -17.7507]], ['near singular damped', [[1, 1, 30, 5, 0.1, 0.2, 0.3, 0.2]], ['damped', 11.4896, -16.5029]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]], ['large damping', [[1, 1, 90, 8, -0.1, 0.0, 0.8, 0.6]], ['damped', 2.2347, 0.9844]], ['slightly above threshold', [[1, 1, 0, 20, 0.2, 0.2, 0.3, 0.5]], ['exact', 42.9429, -76.4473]], ['small straight damping', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0002]], ['damped', 6.8755, 3.4377]], ['mid zone', [[1.5, 1, 20, 12, 0.0, -0.2, 0.6, 0.25]], ['damped', -11.2758, 17.8448]]], [['well conditioned', [[1, 1, 30, 90, 0.1, 0.2, 0.3, 0.2]], ['exact', 7.0591, -17.7507]], ['near singular damped', [[1, 1, 30, 5, 0.1, 0.2, 0.3, 0.2]], ['damped', 11.4896, -16.5029]], ['negative elbow near singular', [[1, 1, 30, -5, 0.1, 0.2, 0.3, 0.2]], ['damped', -5.2725, 18.1241]], ['negative elbow well conditioned', [[1, 1, 10, -80, -0.2, 0.1, 0.3, 0.2]], ['exact', 9.4468, -19.8957]], ['straight arm damped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.2]], ['damped', 6.8209, 3.4105]], ['straight arm undamped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0]], ['singular', 0.0]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]]]]\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":"e3e5a116c73f4e7004c138cd3d41c0f4467604b46ab09664c9fcba970e33aaae","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    l1,l2,q1,q2,vx,vy,w0,lam0=x\n    a=math.radians(q1)\n    b=math.radians(q1+q2)\n    J=[[-l1*math.sin(a)-l2*math.sin(b),-l2*math.sin(b)],[l1*math.cos(a)+l2*math.cos(b),l2*math.cos(b)]]\n    w=abs(l1*l2*math.sin(math.radians(q2)))\n    lam2=lam0*lam0*(1.0-w/w0)**2\n    m11=J[0][0]**2+J[1][0]**2+lam2\n    m12=J[0][0]*J[0][1]+J[1][0]*J[1][1]\n    m22=J[0][1]**2+J[1][1]**2+lam2\n    det=m11*m22-m12*m12\n    if det<1e-12: return ['singular',round(w,6)]\n    g1=J[0][0]*vx+J[1][0]*vy\n    g2=J[0][1]*vx+J[1][1]*vy\n    d1=(m22*g1-m12*g2)/det\n    d2=(-m12*g1+m11*g2)/det\n    return ['damped' if lam2>0 else 'exact',round(math.degrees(d1),4),round(math.degrees(d2),4)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['well conditioned', [[1, 1, 30, 90, 0.1, 0.2, 0.3, 0.2]], ['exact', 7.0591, -17.7507]], ['near singular damped', [[1, 1, 30, 5, 0.1, 0.2, 0.3, 0.2]], ['damped', 11.4896, -16.5029]], ['negative elbow near singular', [[1, 1, 30, -5, 0.1, 0.2, 0.3, 0.2]], ['damped', -5.2725, 18.1241]], ['negative elbow well conditioned', [[1, 1, 10, -80, -0.2, 0.1, 0.3, 0.2]], ['exact', 9.4468, -19.8957]], ['straight arm damped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.2]], ['damped', 6.8209, 3.4105]], ['straight arm undamped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0]], ['singular', 0.0]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]]], [['negative elbow well conditioned', [[1, 1, 10, -80, -0.2, 0.1, 0.3, 0.2]], ['exact', 9.4468, -19.8957]], ['straight arm damped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.2]], ['damped', 6.8209, 3.4105]], ['straight arm undamped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0]], ['singular', 0.0]], ['inside zone no damping gain', [[1, 1, 45, 10, 0.2, -0.1, 0.5, 0.0]], ['exact', 10.8225, -34.1537]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]], ['long links', [[2, 1.5, -20, 40, 0.3, 0.3, 0.5, 0.3]], ['exact', 17.1371, -27.792]], ['exact threshold', [[1, 2, 10, 30, 0.1, 0.1, 1.0, 0.4]], ['damped', 16.144, -22.7815]]], [['inside zone no damping gain', [[1, 1, 45, 10, 0.2, -0.1, 0.5, 0.0]], ['exact', 10.8225, -34.1537]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]], ['long links', [[2, 1.5, -20, 40, 0.3, 0.3, 0.5, 0.3]], ['exact', 17.1371, -27.792]], ['exact threshold', [[1, 2, 10, 30, 0.1, 0.1, 1.0, 0.4]], ['damped', 16.144, -22.7815]], ['large damping', [[1, 1, 90, 8, -0.1, 0.0, 0.8, 0.6]], ['damped', 2.2347, 0.9844]], ['slightly above threshold', [[1, 1, 0, 20, 0.2, 0.2, 0.3, 0.5]], ['exact', 42.9429, -76.4473]], ['small straight damping', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0002]], ['damped', 6.8755, 3.4377]]], [['well conditioned', [[1, 1, 30, 90, 0.1, 0.2, 0.3, 0.2]], ['exact', 7.0591, -17.7507]], ['near singular damped', [[1, 1, 30, 5, 0.1, 0.2, 0.3, 0.2]], ['damped', 11.4896, -16.5029]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]], ['large damping', [[1, 1, 90, 8, -0.1, 0.0, 0.8, 0.6]], ['damped', 2.2347, 0.9844]], ['slightly above threshold', [[1, 1, 0, 20, 0.2, 0.2, 0.3, 0.5]], ['exact', 42.9429, -76.4473]], ['small straight damping', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0002]], ['damped', 6.8755, 3.4377]], ['mid zone', [[1.5, 1, 20, 12, 0.0, -0.2, 0.6, 0.25]], ['damped', -11.2758, 17.8448]]], [['well conditioned', [[1, 1, 30, 90, 0.1, 0.2, 0.3, 0.2]], ['exact', 7.0591, -17.7507]], ['near singular damped', [[1, 1, 30, 5, 0.1, 0.2, 0.3, 0.2]], ['damped', 11.4896, -16.5029]], ['negative elbow near singular', [[1, 1, 30, -5, 0.1, 0.2, 0.3, 0.2]], ['damped', -5.2725, 18.1241]], ['negative elbow well conditioned', [[1, 1, 10, -80, -0.2, 0.1, 0.3, 0.2]], ['exact', 9.4468, -19.8957]], ['straight arm damped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.2]], ['damped', 6.8209, 3.4105]], ['straight arm undamped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0]], ['singular', 0.0]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]]]]\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":"4d031b967595c772684b74433f2a112f47c0be602672d224cdab273b02654cdc","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    l1,l2,q1,q2,vx,vy,w0,lam0=x\n    a=math.radians(q1)\n    b=math.radians(q1+q2)\n    J=[[-l1*math.sin(a)-l2*math.sin(b),-l2*math.sin(b)],[l1*math.cos(a)+l2*math.cos(b),l2*math.cos(b)]]\n    w=abs(l1*l2*math.sin(math.radians(q2)))\n    lam2=0.0 if w>=w0 else lam0*lam0*(1.0-w/w0)**2\n    m11=J[0][0]**2+J[1][0]**2+lam2\n    m12=J[0][0]*J[0][1]+J[1][0]*J[1][1]\n    m22=J[0][1]**2+J[1][1]**2+lam2\n    det=m11*m22-m12*m12\n    if det<1e-12: return ['singular',round(w,6)]\n    g1=J[0][0]*vx+J[1][0]*vy\n    g2=J[0][1]*vx+J[1][1]*vy\n    d1=(m22*g1-m12*g2)/det\n    d2=(-m12*g1+m11*g2)/det\n    return ['damped' if lam2>0 else 'exact',round(math.degrees(d1),4),round(math.degrees(d2),4)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['well conditioned', [[1, 1, 30, 90, 0.1, 0.2, 0.3, 0.2]], ['exact', 7.0591, -17.7507]], ['near singular damped', [[1, 1, 30, 5, 0.1, 0.2, 0.3, 0.2]], ['damped', 11.4896, -16.5029]], ['negative elbow near singular', [[1, 1, 30, -5, 0.1, 0.2, 0.3, 0.2]], ['damped', -5.2725, 18.1241]], ['negative elbow well conditioned', [[1, 1, 10, -80, -0.2, 0.1, 0.3, 0.2]], ['exact', 9.4468, -19.8957]], ['straight arm damped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.2]], ['damped', 6.8209, 3.4105]], ['straight arm undamped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0]], ['singular', 0.0]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]]], [['negative elbow well conditioned', [[1, 1, 10, -80, -0.2, 0.1, 0.3, 0.2]], ['exact', 9.4468, -19.8957]], ['straight arm damped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.2]], ['damped', 6.8209, 3.4105]], ['straight arm undamped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0]], ['singular', 0.0]], ['inside zone no damping gain', [[1, 1, 45, 10, 0.2, -0.1, 0.5, 0.0]], ['exact', 10.8225, -34.1537]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]], ['long links', [[2, 1.5, -20, 40, 0.3, 0.3, 0.5, 0.3]], ['exact', 17.1371, -27.792]], ['exact threshold', [[1, 2, 10, 30, 0.1, 0.1, 1.0, 0.4]], ['damped', 16.144, -22.7815]]], [['inside zone no damping gain', [[1, 1, 45, 10, 0.2, -0.1, 0.5, 0.0]], ['exact', 10.8225, -34.1537]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]], ['long links', [[2, 1.5, -20, 40, 0.3, 0.3, 0.5, 0.3]], ['exact', 17.1371, -27.792]], ['exact threshold', [[1, 2, 10, 30, 0.1, 0.1, 1.0, 0.4]], ['damped', 16.144, -22.7815]], ['large damping', [[1, 1, 90, 8, -0.1, 0.0, 0.8, 0.6]], ['damped', 2.2347, 0.9844]], ['slightly above threshold', [[1, 1, 0, 20, 0.2, 0.2, 0.3, 0.5]], ['exact', 42.9429, -76.4473]], ['small straight damping', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0002]], ['damped', 6.8755, 3.4377]]], [['well conditioned', [[1, 1, 30, 90, 0.1, 0.2, 0.3, 0.2]], ['exact', 7.0591, -17.7507]], ['near singular damped', [[1, 1, 30, 5, 0.1, 0.2, 0.3, 0.2]], ['damped', 11.4896, -16.5029]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]], ['large damping', [[1, 1, 90, 8, -0.1, 0.0, 0.8, 0.6]], ['damped', 2.2347, 0.9844]], ['slightly above threshold', [[1, 1, 0, 20, 0.2, 0.2, 0.3, 0.5]], ['exact', 42.9429, -76.4473]], ['small straight damping', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0002]], ['damped', 6.8755, 3.4377]], ['mid zone', [[1.5, 1, 20, 12, 0.0, -0.2, 0.6, 0.25]], ['damped', -11.2758, 17.8448]]], [['well conditioned', [[1, 1, 30, 90, 0.1, 0.2, 0.3, 0.2]], ['exact', 7.0591, -17.7507]], ['near singular damped', [[1, 1, 30, 5, 0.1, 0.2, 0.3, 0.2]], ['damped', 11.4896, -16.5029]], ['negative elbow near singular', [[1, 1, 30, -5, 0.1, 0.2, 0.3, 0.2]], ['damped', -5.2725, 18.1241]], ['negative elbow well conditioned', [[1, 1, 10, -80, -0.2, 0.1, 0.3, 0.2]], ['exact', 9.4468, -19.8957]], ['straight arm damped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.2]], ['damped', 6.8209, 3.4105]], ['straight arm undamped', [[1, 1, 0, 0, 0.0, 0.3, 0.3, 0.0]], ['singular', 0.0]], ['folded arm', [[1, 1, 60, 175, 0.05, 0.05, 0.2, 0.1]], ['damped', -32.2582, 0.8237]]]]\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":"Deterministic planar or low-dimensional teaching model with a stipulated convention; not a general robotics library. 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-inverse_kinematics_solvers-adaptive-damping-velocity-damping-zone-gate","generated_at":"2026-09-29T14:51:06.253105+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Inverse kinematics code turns task-space goals into joint commands; a wrong branch, sign, limit or update order sends a real arm to the wrong pose.","repair":"Set lam^2 = 0 when w >= w0.","root_cause":"The zone test is dropped and the quadratic profile is applied everywhere.","sha256":"d40ab0eb6827f64eebd72b59caabb65677024fccb106d27697956f3afb1bccf2","title":"Damping is applied outside the singular zone · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.167,"exit_code":1,"observations":[{"actual":["exact",7.0591,-17.7507],"check":"well conditioned","expected":["exact",7.0591,-17.7507],"passed":true},{"actual":["damped",11.4896,-16.5029],"check":"near singular damped","expected":["damped",11.4896,-16.5029],"passed":true},{"actual":["damped",-5.2725,18.1241],"check":"negative elbow near singular","expected":["damped",-5.2725,18.1241],"passed":true},{"actual":["exact",9.4468,-19.8957],"check":"negative elbow well conditioned","expected":["exact",9.4468,-19.8957],"passed":true},{"actual":["damped",6.8209,3.4105],"check":"straight arm damped","expected":["damped",6.8209,3.4105],"passed":true},{"actual":["singular",0.0],"check":"straight arm undamped","expected":["singular",0.0],"passed":true},{"actual":["exact",-45.7787,0.8777],"check":"folded arm","expected":["damped",-32.2582,0.8237],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"well conditioned\", \"actual\": [\"exact\", 7.0591, -17.7507], \"expected\": [\"exact\", 7.0591, -17.7507], \"passed\": true}, {\"check\": \"near singular damped\", \"actual\": [\"damped\", 11.4896, -16.5029], \"expected\": [\"damped\", 11.4896, -16.5029], \"passed\": true}, {\"check\": \"negative elbow near singular\", \"actual\": [\"damped\", -5.2725, 18.1241], \"expected\": [\"damped\", -5.2725, 18.1241], \"passed\": true}, {\"check\": \"negative elbow well conditioned\", \"actual\": [\"exact\", 9.4468, -19.8957], \"expected\": [\"exact\", 9.4468, -19.8957], \"passed\": true}, {\"check\": \"straight arm damped\", \"actual\": [\"damped\", 6.8209, 3.4105], \"expected\": [\"damped\", 6.8209, 3.4105], \"passed\": true}, {\"check\": \"straight arm undamped\", \"actual\": [\"singular\", 0.0], \"expected\": [\"singular\", 0.0], \"passed\": true}, {\"check\": \"folded arm\", \"actual\": [\"exact\", -45.7787, 0.8777], \"expected\": [\"damped\", -32.2582, 0.8237], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.933,"exit_code":1,"observations":[{"actual":["damped",3.6855,-11.8059],"check":"well conditioned","expected":["exact",7.0591,-17.7507],"passed":false},{"actual":["damped",11.4896,-16.5029],"check":"near singular damped","expected":["damped",11.4896,-16.5029],"passed":true},{"actual":["damped",-5.2725,18.1241],"check":"negative elbow near singular","expected":["damped",-5.2725,18.1241],"passed":true},{"actual":["damped",5.2116,-12.3508],"check":"negative elbow well conditioned","expected":["exact",9.4468,-19.8957],"passed":false},{"actual":["damped",6.8209,3.4105],"check":"straight arm damped","expected":["damped",6.8209,3.4105],"passed":true},{"actual":["singular",0.0],"check":"straight arm undamped","expected":["singular",0.0],"passed":true},{"actual":["damped",-32.2582,0.8237],"check":"folded arm","expected":["damped",-32.2582,0.8237],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"well conditioned\", \"actual\": [\"damped\", 3.6855, -11.8059], \"expected\": [\"exact\", 7.0591, -17.7507], \"passed\": false}, {\"check\": \"near singular damped\", \"actual\": [\"damped\", 11.4896, -16.5029], \"expected\": [\"damped\", 11.4896, -16.5029], \"passed\": true}, {\"check\": \"negative elbow near singular\", \"actual\": [\"damped\", -5.2725, 18.1241], \"expected\": [\"damped\", -5.2725, 18.1241], \"passed\": true}, {\"check\": \"negative elbow well conditioned\", \"actual\": [\"damped\", 5.2116, -12.3508], \"expected\": [\"exact\", 9.4468, -19.8957], \"passed\": false}, {\"check\": \"straight arm damped\", \"actual\": [\"damped\", 6.8209, 3.4105], \"expected\": [\"damped\", 6.8209, 3.4105], \"passed\": true}, {\"check\": \"straight arm undamped\", \"actual\": [\"singular\", 0.0], \"expected\": [\"singular\", 0.0], \"passed\": true}, {\"check\": \"folded arm\", \"actual\": [\"damped\", -32.2582, 0.8237], \"expected\": [\"damped\", -32.2582, 0.8237], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.102,"exit_code":0,"observations":[{"actual":["exact",7.0591,-17.7507],"check":"well conditioned","expected":["exact",7.0591,-17.7507],"passed":true},{"actual":["damped",11.4896,-16.5029],"check":"near singular damped","expected":["damped",11.4896,-16.5029],"passed":true},{"actual":["damped",-5.2725,18.1241],"check":"negative elbow near singular","expected":["damped",-5.2725,18.1241],"passed":true},{"actual":["exact",9.4468,-19.8957],"check":"negative elbow well conditioned","expected":["exact",9.4468,-19.8957],"passed":true},{"actual":["damped",6.8209,3.4105],"check":"straight arm damped","expected":["damped",6.8209,3.4105],"passed":true},{"actual":["singular",0.0],"check":"straight arm undamped","expected":["singular",0.0],"passed":true},{"actual":["damped",-32.2582,0.8237],"check":"folded arm","expected":["damped",-32.2582,0.8237],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"well conditioned\", \"actual\": [\"exact\", 7.0591, -17.7507], \"expected\": [\"exact\", 7.0591, -17.7507], \"passed\": true}, {\"check\": \"near singular damped\", \"actual\": [\"damped\", 11.4896, -16.5029], \"expected\": [\"damped\", 11.4896, -16.5029], \"passed\": true}, {\"check\": \"negative elbow near singular\", \"actual\": [\"damped\", -5.2725, 18.1241], \"expected\": [\"damped\", -5.2725, 18.1241], \"passed\": true}, {\"check\": \"negative elbow well conditioned\", \"actual\": [\"exact\", 9.4468, -19.8957], \"expected\": [\"exact\", 9.4468, -19.8957], \"passed\": true}, {\"check\": \"straight arm damped\", \"actual\": [\"damped\", 6.8209, 3.4105], \"expected\": [\"damped\", 6.8209, 3.4105], \"passed\": true}, {\"check\": \"straight arm undamped\", \"actual\": [\"singular\", 0.0], \"expected\": [\"singular\", 0.0], \"passed\": true}, {\"check\": \"folded arm\", \"actual\": [\"damped\", -32.2582, 0.8237], \"expected\": [\"damped\", -32.2582, 0.8237], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}