{"abstract":"Carriages are placed below the effector plane.","category":"Inverse kinematics solvers","checks":7,"contract":"Input [R,e,L,x,y,z,hmax]: linear delta printer, towers at 90, 210 and 330 degrees (in that output order) on radius R, effector joints offset e toward the centre so the effective radius is R-e, diagonal rods of length L. Carriage height is z+sqrt(L^2-dx^2-dy^2); a negative radicand returns \"unreachable\", a carriage above hmax returns \"out-of-travel\". Return heights rounded to 4.","evaluation_group":"w2-inverse_kinematics_solvers-linear-delta-carriages","failed_approach":"Dropping z places the carriage relative to the bed rather than the effector.","family":"w2-inverse_kinematics_solvers-linear-delta-carriages-carriage-above-effector","id":"FA-88101","implementations":{"attempt":{"sha256":"c7dcf1dd7ab5f100478957228305ab909db7e6b9cb8fcce1d0c1ad9b6d17ce7e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    R,e,L,px,py,pz,hmax=x\n    r=R-e\n    S=math.sqrt(3.0)/2.0\n    hs=[]\n    for tx,ty in [(0.0,r),(-r*S,-r/2),(r*S,-r/2)]:\n        q=L*L-(px-tx)**2-(py-ty)**2\n        if q<0: return 'unreachable'\n        h=math.sqrt(q)\n        if h>hmax: return 'out-of-travel'\n        hs.append(round(h,4))\n    return hs\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['centre', [[10, 2, 12, 0, 0, 5, 40]], [13.9443, 13.9443, 13.9443]], ['off centre', [[10, 2, 12, 2, -3, 5, 40]], [9.3589, 12.9553, 15.8955]], ['rod horizontal at tower one', [[10, 2, 10, 0, -2, 0, 40]], [0.0, 6.9282, 6.9282]], ['beyond rod reach', [[10, 2, 10, 0, -3, 0, 40]], 'unreachable'], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['carriage over top', [[12, 0, 13, 0, 0, 2.5, 7]], 'out-of-travel'], ['toward tower two', [[10, 1, 15, -4, -2, 3, 40]], [12.3808, 17.2952, 11.9245]]], [['off centre', [[10, 2, 12, 2, -3, 5, 40]], [9.3589, 12.9553, 15.8955]], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['carriage over top', [[12, 0, 13, 0, 0, 2.5, 7]], 'out-of-travel'], ['toward tower two', [[10, 1, 15, -4, -2, 3, 40]], [12.3808, 17.2952, 11.9245]], ['toward tower three', [[10, 1, 15, 4, -2, 3, 40]], [12.3808, 11.9245, 17.2952]], ['high z low travel', [[10, 2, 12, 0, 0, 25, 30]], 'out-of-travel'], ['no effector offset', [[8, 0, 12, 1, 1, 2, 40]], [11.6954, 9.4929, 11.1573]]], [['rod horizontal at tower one', [[10, 2, 10, 0, -2, 0, 40]], [0.0, 6.9282, 6.9282]], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['high z low travel', [[10, 2, 12, 0, 0, 25, 30]], 'out-of-travel'], ['no effector offset', [[8, 0, 12, 1, 1, 2, 40]], [11.6954, 9.4929, 11.1573]], ['large offset', [[12, 5, 11, -1, 2, 4, 40]], [13.7468, 12.07, 10.3934]], ['asymmetric point', [[10, 2, 12, 3, 4, 1, 40]], 'unreachable'], ['negative z', [[10, 2, 12, -2, 1, -3, 40]], [6.5394, 6.7321, 3.2679]]], [['centre', [[10, 2, 12, 0, 0, 5, 40]], [13.9443, 13.9443, 13.9443]], ['off centre', [[10, 2, 12, 2, -3, 5, 40]], [9.3589, 12.9553, 15.8955]], ['rod horizontal at tower one', [[10, 2, 10, 0, -2, 0, 40]], [0.0, 6.9282, 6.9282]], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['carriage over top', [[12, 0, 13, 0, 0, 2.5, 7]], 'out-of-travel'], ['asymmetric point', [[10, 2, 12, 3, 4, 1, 40]], 'unreachable'], ['negative z', [[10, 2, 12, -2, 1, -3, 40]], [6.5394, 6.7321, 3.2679]]], [['off centre', [[10, 2, 12, 2, -3, 5, 40]], [9.3589, 12.9553, 15.8955]], ['rod horizontal at tower one', [[10, 2, 10, 0, -2, 0, 40]], [0.0, 6.9282, 6.9282]], ['beyond rod reach', [[10, 2, 10, 0, -3, 0, 40]], 'unreachable'], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['carriage over top', [[12, 0, 13, 0, 0, 2.5, 7]], 'out-of-travel'], ['toward tower two', [[10, 1, 15, -4, -2, 3, 40]], [12.3808, 17.2952, 11.9245]], ['toward tower three', [[10, 1, 15, 4, -2, 3, 40]], [12.3808, 11.9245, 17.2952]]]]\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":"0bc6fd6e3c7c58abd20b675f880a65f884246e2b834bbf23ee737e3c652ccf78","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    R,e,L,px,py,pz,hmax=x\n    r=R-e\n    S=math.sqrt(3.0)/2.0\n    hs=[]\n    for tx,ty in [(0.0,r),(-r*S,-r/2),(r*S,-r/2)]:\n        q=L*L-(px-tx)**2-(py-ty)**2\n        if q<0: return 'unreachable'\n        h=pz-math.sqrt(q)\n        if h>hmax: return 'out-of-travel'\n        hs.append(round(h,4))\n    return hs\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['centre', [[10, 2, 12, 0, 0, 5, 40]], [13.9443, 13.9443, 13.9443]], ['off centre', [[10, 2, 12, 2, -3, 5, 40]], [9.3589, 12.9553, 15.8955]], ['rod horizontal at tower one', [[10, 2, 10, 0, -2, 0, 40]], [0.0, 6.9282, 6.9282]], ['beyond rod reach', [[10, 2, 10, 0, -3, 0, 40]], 'unreachable'], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['carriage over top', [[12, 0, 13, 0, 0, 2.5, 7]], 'out-of-travel'], ['toward tower two', [[10, 1, 15, -4, -2, 3, 40]], [12.3808, 17.2952, 11.9245]]], [['off centre', [[10, 2, 12, 2, -3, 5, 40]], [9.3589, 12.9553, 15.8955]], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['carriage over top', [[12, 0, 13, 0, 0, 2.5, 7]], 'out-of-travel'], ['toward tower two', [[10, 1, 15, -4, -2, 3, 40]], [12.3808, 17.2952, 11.9245]], ['toward tower three', [[10, 1, 15, 4, -2, 3, 40]], [12.3808, 11.9245, 17.2952]], ['high z low travel', [[10, 2, 12, 0, 0, 25, 30]], 'out-of-travel'], ['no effector offset', [[8, 0, 12, 1, 1, 2, 40]], [11.6954, 9.4929, 11.1573]]], [['rod horizontal at tower one', [[10, 2, 10, 0, -2, 0, 40]], [0.0, 6.9282, 6.9282]], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['high z low travel', [[10, 2, 12, 0, 0, 25, 30]], 'out-of-travel'], ['no effector offset', [[8, 0, 12, 1, 1, 2, 40]], [11.6954, 9.4929, 11.1573]], ['large offset', [[12, 5, 11, -1, 2, 4, 40]], [13.7468, 12.07, 10.3934]], ['asymmetric point', [[10, 2, 12, 3, 4, 1, 40]], 'unreachable'], ['negative z', [[10, 2, 12, -2, 1, -3, 40]], [6.5394, 6.7321, 3.2679]]], [['centre', [[10, 2, 12, 0, 0, 5, 40]], [13.9443, 13.9443, 13.9443]], ['off centre', [[10, 2, 12, 2, -3, 5, 40]], [9.3589, 12.9553, 15.8955]], ['rod horizontal at tower one', [[10, 2, 10, 0, -2, 0, 40]], [0.0, 6.9282, 6.9282]], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['carriage over top', [[12, 0, 13, 0, 0, 2.5, 7]], 'out-of-travel'], ['asymmetric point', [[10, 2, 12, 3, 4, 1, 40]], 'unreachable'], ['negative z', [[10, 2, 12, -2, 1, -3, 40]], [6.5394, 6.7321, 3.2679]]], [['off centre', [[10, 2, 12, 2, -3, 5, 40]], [9.3589, 12.9553, 15.8955]], ['rod horizontal at tower one', [[10, 2, 10, 0, -2, 0, 40]], [0.0, 6.9282, 6.9282]], ['beyond rod reach', [[10, 2, 10, 0, -3, 0, 40]], 'unreachable'], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['carriage over top', [[12, 0, 13, 0, 0, 2.5, 7]], 'out-of-travel'], ['toward tower two', [[10, 1, 15, -4, -2, 3, 40]], [12.3808, 17.2952, 11.9245]], ['toward tower three', [[10, 1, 15, 4, -2, 3, 40]], [12.3808, 11.9245, 17.2952]]]]\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":"503e27b9f552fd24256d743cf15c5459263bc7338a9383597dd525e8ac97ca8a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    R,e,L,px,py,pz,hmax=x\n    r=R-e\n    S=math.sqrt(3.0)/2.0\n    hs=[]\n    for tx,ty in [(0.0,r),(-r*S,-r/2),(r*S,-r/2)]:\n        q=L*L-(px-tx)**2-(py-ty)**2\n        if q<0: return 'unreachable'\n        h=pz+math.sqrt(q)\n        if h>hmax: return 'out-of-travel'\n        hs.append(round(h,4))\n    return hs\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['centre', [[10, 2, 12, 0, 0, 5, 40]], [13.9443, 13.9443, 13.9443]], ['off centre', [[10, 2, 12, 2, -3, 5, 40]], [9.3589, 12.9553, 15.8955]], ['rod horizontal at tower one', [[10, 2, 10, 0, -2, 0, 40]], [0.0, 6.9282, 6.9282]], ['beyond rod reach', [[10, 2, 10, 0, -3, 0, 40]], 'unreachable'], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['carriage over top', [[12, 0, 13, 0, 0, 2.5, 7]], 'out-of-travel'], ['toward tower two', [[10, 1, 15, -4, -2, 3, 40]], [12.3808, 17.2952, 11.9245]]], [['off centre', [[10, 2, 12, 2, -3, 5, 40]], [9.3589, 12.9553, 15.8955]], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['carriage over top', [[12, 0, 13, 0, 0, 2.5, 7]], 'out-of-travel'], ['toward tower two', [[10, 1, 15, -4, -2, 3, 40]], [12.3808, 17.2952, 11.9245]], ['toward tower three', [[10, 1, 15, 4, -2, 3, 40]], [12.3808, 11.9245, 17.2952]], ['high z low travel', [[10, 2, 12, 0, 0, 25, 30]], 'out-of-travel'], ['no effector offset', [[8, 0, 12, 1, 1, 2, 40]], [11.6954, 9.4929, 11.1573]]], [['rod horizontal at tower one', [[10, 2, 10, 0, -2, 0, 40]], [0.0, 6.9282, 6.9282]], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['high z low travel', [[10, 2, 12, 0, 0, 25, 30]], 'out-of-travel'], ['no effector offset', [[8, 0, 12, 1, 1, 2, 40]], [11.6954, 9.4929, 11.1573]], ['large offset', [[12, 5, 11, -1, 2, 4, 40]], [13.7468, 12.07, 10.3934]], ['asymmetric point', [[10, 2, 12, 3, 4, 1, 40]], 'unreachable'], ['negative z', [[10, 2, 12, -2, 1, -3, 40]], [6.5394, 6.7321, 3.2679]]], [['centre', [[10, 2, 12, 0, 0, 5, 40]], [13.9443, 13.9443, 13.9443]], ['off centre', [[10, 2, 12, 2, -3, 5, 40]], [9.3589, 12.9553, 15.8955]], ['rod horizontal at tower one', [[10, 2, 10, 0, -2, 0, 40]], [0.0, 6.9282, 6.9282]], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['carriage over top', [[12, 0, 13, 0, 0, 2.5, 7]], 'out-of-travel'], ['asymmetric point', [[10, 2, 12, 3, 4, 1, 40]], 'unreachable'], ['negative z', [[10, 2, 12, -2, 1, -3, 40]], [6.5394, 6.7321, 3.2679]]], [['off centre', [[10, 2, 12, 2, -3, 5, 40]], [9.3589, 12.9553, 15.8955]], ['rod horizontal at tower one', [[10, 2, 10, 0, -2, 0, 40]], [0.0, 6.9282, 6.9282]], ['beyond rod reach', [[10, 2, 10, 0, -3, 0, 40]], 'unreachable'], ['carriage exactly at top', [[12, 0, 13, 0, 0, 2, 7]], [7.0, 7.0, 7.0]], ['carriage over top', [[12, 0, 13, 0, 0, 2.5, 7]], 'out-of-travel'], ['toward tower two', [[10, 1, 15, -4, -2, 3, 40]], [12.3808, 17.2952, 11.9245]], ['toward tower three', [[10, 1, 15, 4, -2, 3, 40]], [12.3808, 11.9245, 17.2952]]]]\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-linear-delta-carriages-carriage-above-effector","generated_at":"2026-09-29T14:51:05.066056+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":"Carriage height is z + sqrt(radicand).","root_cause":"The rod vertical component is subtracted from z instead of added.","sha256":"431af21e315bc36f31b9164988820a99e82aa75ccc3f95059c8330ba1bab075f","title":"Delta carriage is solved on the lower root · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.104,"exit_code":1,"observations":[{"actual":[8.9443,8.9443,8.9443],"check":"centre","expected":[13.9443,13.9443,13.9443],"passed":false},{"actual":[4.3589,7.9553,10.8955],"check":"off centre","expected":[9.3589,12.9553,15.8955],"passed":false},{"actual":[0.0,6.9282,6.9282],"check":"rod horizontal at tower one","expected":[0.0,6.9282,6.9282],"passed":true},{"actual":"unreachable","check":"beyond rod reach","expected":"unreachable","passed":true},{"actual":[5.0,5.0,5.0],"check":"carriage exactly at top","expected":[7.0,7.0,7.0],"passed":false},{"actual":[5.0,5.0,5.0],"check":"carriage over top","expected":"out-of-travel","passed":false},{"actual":[9.3808,14.2952,8.9245],"check":"toward tower two","expected":[12.3808,17.2952,11.9245],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"centre\", \"actual\": [8.9443, 8.9443, 8.9443], \"expected\": [13.9443, 13.9443, 13.9443], \"passed\": false}, {\"check\": \"off centre\", \"actual\": [4.3589, 7.9553, 10.8955], \"expected\": [9.3589, 12.9553, 15.8955], \"passed\": false}, {\"check\": \"rod horizontal at tower one\", \"actual\": [0.0, 6.9282, 6.9282], \"expected\": [0.0, 6.9282, 6.9282], \"passed\": true}, {\"check\": \"beyond rod reach\", \"actual\": \"unreachable\", \"expected\": \"unreachable\", \"passed\": true}, {\"check\": \"carriage exactly at top\", \"actual\": [5.0, 5.0, 5.0], \"expected\": [7.0, 7.0, 7.0], \"passed\": false}, {\"check\": \"carriage over top\", \"actual\": [5.0, 5.0, 5.0], \"expected\": \"out-of-travel\", \"passed\": false}, {\"check\": \"toward tower two\", \"actual\": [9.3808, 14.2952, 8.9245], \"expected\": [12.3808, 17.2952, 11.9245], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.98,"exit_code":1,"observations":[{"actual":[-3.9443,-3.9443,-3.9443],"check":"centre","expected":[13.9443,13.9443,13.9443],"passed":false},{"actual":[0.6411,-2.9553,-5.8955],"check":"off centre","expected":[9.3589,12.9553,15.8955],"passed":false},{"actual":[0.0,-6.9282,-6.9282],"check":"rod horizontal at tower one","expected":[0.0,6.9282,6.9282],"passed":false},{"actual":"unreachable","check":"beyond rod reach","expected":"unreachable","passed":true},{"actual":[-3.0,-3.0,-3.0],"check":"carriage exactly at top","expected":[7.0,7.0,7.0],"passed":false},{"actual":[-2.5,-2.5,-2.5],"check":"carriage over top","expected":"out-of-travel","passed":false},{"actual":[-6.3808,-11.2952,-5.9245],"check":"toward tower two","expected":[12.3808,17.2952,11.9245],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"centre\", \"actual\": [-3.9443, -3.9443, -3.9443], \"expected\": [13.9443, 13.9443, 13.9443], \"passed\": false}, {\"check\": \"off centre\", \"actual\": [0.6411, -2.9553, -5.8955], \"expected\": [9.3589, 12.9553, 15.8955], \"passed\": false}, {\"check\": \"rod horizontal at tower one\", \"actual\": [0.0, -6.9282, -6.9282], \"expected\": [0.0, 6.9282, 6.9282], \"passed\": false}, {\"check\": \"beyond rod reach\", \"actual\": \"unreachable\", \"expected\": \"unreachable\", \"passed\": true}, {\"check\": \"carriage exactly at top\", \"actual\": [-3.0, -3.0, -3.0], \"expected\": [7.0, 7.0, 7.0], \"passed\": false}, {\"check\": \"carriage over top\", \"actual\": [-2.5, -2.5, -2.5], \"expected\": \"out-of-travel\", \"passed\": false}, {\"check\": \"toward tower two\", \"actual\": [-6.3808, -11.2952, -5.9245], \"expected\": [12.3808, 17.2952, 11.9245], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.722,"exit_code":0,"observations":[{"actual":[13.9443,13.9443,13.9443],"check":"centre","expected":[13.9443,13.9443,13.9443],"passed":true},{"actual":[9.3589,12.9553,15.8955],"check":"off centre","expected":[9.3589,12.9553,15.8955],"passed":true},{"actual":[0.0,6.9282,6.9282],"check":"rod horizontal at tower one","expected":[0.0,6.9282,6.9282],"passed":true},{"actual":"unreachable","check":"beyond rod reach","expected":"unreachable","passed":true},{"actual":[7.0,7.0,7.0],"check":"carriage exactly at top","expected":[7.0,7.0,7.0],"passed":true},{"actual":"out-of-travel","check":"carriage over top","expected":"out-of-travel","passed":true},{"actual":[12.3808,17.2952,11.9245],"check":"toward tower two","expected":[12.3808,17.2952,11.9245],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"centre\", \"actual\": [13.9443, 13.9443, 13.9443], \"expected\": [13.9443, 13.9443, 13.9443], \"passed\": true}, {\"check\": \"off centre\", \"actual\": [9.3589, 12.9553, 15.8955], \"expected\": [9.3589, 12.9553, 15.8955], \"passed\": true}, {\"check\": \"rod horizontal at tower one\", \"actual\": [0.0, 6.9282, 6.9282], \"expected\": [0.0, 6.9282, 6.9282], \"passed\": true}, {\"check\": \"beyond rod reach\", \"actual\": \"unreachable\", \"expected\": \"unreachable\", \"passed\": true}, {\"check\": \"carriage exactly at top\", \"actual\": [7.0, 7.0, 7.0], \"expected\": [7.0, 7.0, 7.0], \"passed\": true}, {\"check\": \"carriage over top\", \"actual\": \"out-of-travel\", \"expected\": \"out-of-travel\", \"passed\": true}, {\"check\": \"toward tower two\", \"actual\": [12.3808, 17.2952, 11.9245], \"expected\": [12.3808, 17.2952, 11.9245], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}