{"abstract":"A rigid transform translates a direction vector.","category":"Robotics frame conventions","checks":6,"contract":"kind is point or direction; transform integer 2D v by quarter-turn q and translation t. Return a list.","evaluation_group":"model-17e7287d92c78717","failed_approach":"Suppressing translation for every value corrupts point coordinates.","family":"z-robotics_frames-point-direction-tag","id":"FA-12106","implementations":{"attempt":{"sha256":"ca2342ce5689faeeffb3e14c42fcaeefd95bc31d250385546cd23cadfc7bd55b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\ndef rot(v, q):\n    x,y = v\n    return [(x,y),(-y,x),(-x,-y),(y,-x)][q%4]\n\nN = 1\nobservations = []\ndef solve(v, q, t, kind):\n    return list(rot(v,q))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('translated direction', solve([N,0],1,[N,2*N],\"direction\"), [0,N])\ncheck('translated point', solve([N,0],1,[N,2*N],\"point\"), [N,3*N])\ncheck('point origin', solve([0,0],0,[N,-N],\"point\"), [N,-N])\ncheck('zero direction', solve([0,0],0,[N,-N],\"direction\"), [0,0])\ncheck('pure rotation', solve([N,2*N],2,[0,0],\"point\"), [-N,-2*N])\ncheck('negative rotation', solve([N,2*N],-1,[N,N],\"direction\"), [2*N,-N])\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":"2f1ac83525fe7ed7745fe6b78461719b5f6e5a81bbb7c0056df7651e6678bfd8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\ndef rot(v, q):\n    x,y = v\n    return [(x,y),(-y,x),(-x,-y),(y,-x)][q%4]\n\nN = 1\nobservations = []\ndef solve(v, q, t, kind):\n    r=rot(v,q)\n    return [r[i]+t[i] for i in range(2)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('translated direction', solve([N,0],1,[N,2*N],\"direction\"), [0,N])\ncheck('translated point', solve([N,0],1,[N,2*N],\"point\"), [N,3*N])\ncheck('point origin', solve([0,0],0,[N,-N],\"point\"), [N,-N])\ncheck('zero direction', solve([0,0],0,[N,-N],\"direction\"), [0,0])\ncheck('pure rotation', solve([N,2*N],2,[0,0],\"point\"), [-N,-2*N])\ncheck('negative rotation', solve([N,2*N],-1,[N,N],\"direction\"), [2*N,-N])\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":"40668298d33a0f0136a29068b15b43fa414e9ac1dc24668e7fcdb37ac3b06f12","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\ndef rot(v, q):\n    x,y = v\n    return [(x,y),(-y,x),(-x,-y),(y,-x)][q%4]\n\nN = 1\nobservations = []\ndef solve(v, q, t, kind):\n    r=rot(v,q)\n    return [r[i]+(t[i] if kind=='point' else 0) for i in range(2)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('translated direction', solve([N,0],1,[N,2*N],\"direction\"), [0,N])\ncheck('translated point', solve([N,0],1,[N,2*N],\"point\"), [N,3*N])\ncheck('point origin', solve([0,0],0,[N,-N],\"point\"), [N,-N])\ncheck('zero direction', solve([0,0],0,[N,-N],\"direction\"), [0,0])\ncheck('pure rotation', solve([N,2*N],2,[0,0],\"point\"), [-N,-2*N])\ncheck('negative rotation', solve([N,2*N],-1,[N,N],\"direction\"), [2*N,-N])\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":"Small exact offline frame model; not a robot middleware implementation or continuous pose estimator. 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":"z-robotics_frames-point-direction-tag","generated_at":"2026-09-29T14:38:53.870163+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Robot adapters must preserve the declared frame, reference point, and representation conventions across interfaces.","repair":"Translate points only, while rotating both kinds.","root_cause":"A direction is treated as a point with homogeneous weight one.","sha256":"ba724ce2cee2d1a33765328ff1b5b0b86294ae7d80576fdabcd9c69b39a25cb0","title":"A rigid transform translates a direction vector · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.925,"exit_code":1,"observations":[{"actual":[0,1],"check":"translated direction","expected":[0,1],"passed":true},{"actual":[0,1],"check":"translated point","expected":[1,3],"passed":false},{"actual":[0,0],"check":"point origin","expected":[1,-1],"passed":false},{"actual":[0,0],"check":"zero direction","expected":[0,0],"passed":true},{"actual":[-1,-2],"check":"pure rotation","expected":[-1,-2],"passed":true},{"actual":[2,-1],"check":"negative rotation","expected":[2,-1],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"translated direction\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"translated point\", \"actual\": [0, 1], \"expected\": [1, 3], \"passed\": false}, {\"check\": \"point origin\", \"actual\": [0, 0], \"expected\": [1, -1], \"passed\": false}, {\"check\": \"zero direction\", \"actual\": [0, 0], \"expected\": [0, 0], \"passed\": true}, {\"check\": \"pure rotation\", \"actual\": [-1, -2], \"expected\": [-1, -2], \"passed\": true}, {\"check\": \"negative rotation\", \"actual\": [2, -1], \"expected\": [2, -1], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.044,"exit_code":1,"observations":[{"actual":[1,3],"check":"translated direction","expected":[0,1],"passed":false},{"actual":[1,3],"check":"translated point","expected":[1,3],"passed":true},{"actual":[1,-1],"check":"point origin","expected":[1,-1],"passed":true},{"actual":[1,-1],"check":"zero direction","expected":[0,0],"passed":false},{"actual":[-1,-2],"check":"pure rotation","expected":[-1,-2],"passed":true},{"actual":[3,0],"check":"negative rotation","expected":[2,-1],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"translated direction\", \"actual\": [1, 3], \"expected\": [0, 1], \"passed\": false}, {\"check\": \"translated point\", \"actual\": [1, 3], \"expected\": [1, 3], \"passed\": true}, {\"check\": \"point origin\", \"actual\": [1, -1], \"expected\": [1, -1], \"passed\": true}, {\"check\": \"zero direction\", \"actual\": [1, -1], \"expected\": [0, 0], \"passed\": false}, {\"check\": \"pure rotation\", \"actual\": [-1, -2], \"expected\": [-1, -2], \"passed\": true}, {\"check\": \"negative rotation\", \"actual\": [3, 0], \"expected\": [2, -1], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.13,"exit_code":0,"observations":[{"actual":[0,1],"check":"translated direction","expected":[0,1],"passed":true},{"actual":[1,3],"check":"translated point","expected":[1,3],"passed":true},{"actual":[1,-1],"check":"point origin","expected":[1,-1],"passed":true},{"actual":[0,0],"check":"zero direction","expected":[0,0],"passed":true},{"actual":[-1,-2],"check":"pure rotation","expected":[-1,-2],"passed":true},{"actual":[2,-1],"check":"negative rotation","expected":[2,-1],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"translated direction\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"translated point\", \"actual\": [1, 3], \"expected\": [1, 3], \"passed\": true}, {\"check\": \"point origin\", \"actual\": [1, -1], \"expected\": [1, -1], \"passed\": true}, {\"check\": \"zero direction\", \"actual\": [0, 0], \"expected\": [0, 0], \"passed\": true}, {\"check\": \"pure rotation\", \"actual\": [-1, -2], \"expected\": [-1, -2], \"passed\": true}, {\"check\": \"negative rotation\", \"actual\": [2, -1], \"expected\": [2, -1], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}