FA-12136 / Robotics frame conventions / Open access
A static mounting transform expires like a sampled pose · case 01
A static mounting transform expires like a sampled pose.
ROOT CAUSE
The timestamp tolerance is applied to a static calibration edge.
VERIFIED REPAIR
Static edges remain valid; dynamic edges require an exact timestamp in this no-interpolation model.
Unsuccessful approach: Ignoring timestamps for every edge also admits stale dynamic transforms.
Case contract
Return translation if an edge is static or its sample_time equals requested_time; otherwise None. No interpolation or extrapolation is permitted for dynamic edges.
Why this case matters
Robot adapters must preserve the declared frame, reference point, and representation conventions across interfaces.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
def rot(v, q):
x,y = v
return [(x,y),(-y,x),(-x,-y),(y,-x)][q%4]
N = 1
observations = []
def solve(translation,is_static,sample_time,requested_time):
return translation if sample_time==requested_time else None
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('old static calibration', solve([N,0],True,0,100+N), [N,0])
check('stale dynamic', solve([N,0],False,0,100+N), None)
check('exact dynamic', solve([N,N],False,N,N), [N,N])
check('future dynamic', solve([N,0],False,N+1,N), None)
check('static earlier query', solve([N,-N],True,100+N,0), [N,-N])
check('zero time dynamic', solve([0,0],False,0,0), [0,0])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| old static calibration | None | [1, 0] | Failed |
| stale dynamic | None | None | Passed |
| exact dynamic | [1, 1] | [1, 1] | Passed |
| future dynamic | None | None | Passed |
| static earlier query | None | [1, -1] | Failed |
| zero time dynamic | [0, 0] | [0, 0] | Passed |
SHA-256 / 2caec7363a5192cb0b804e1bebc9f38aa7fd743b6fc27af2bdffd08d8a9b9066
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
def rot(v, q):
x,y = v
return [(x,y),(-y,x),(-x,-y),(y,-x)][q%4]
N = 1
observations = []
def solve(translation,is_static,sample_time,requested_time):
return translation
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('old static calibration', solve([N,0],True,0,100+N), [N,0])
check('stale dynamic', solve([N,0],False,0,100+N), None)
check('exact dynamic', solve([N,N],False,N,N), [N,N])
check('future dynamic', solve([N,0],False,N+1,N), None)
check('static earlier query', solve([N,-N],True,100+N,0), [N,-N])
check('zero time dynamic', solve([0,0],False,0,0), [0,0])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| old static calibration | [1, 0] | [1, 0] | Passed |
| stale dynamic | [1, 0] | None | Failed |
| exact dynamic | [1, 1] | [1, 1] | Passed |
| future dynamic | [1, 0] | None | Failed |
| static earlier query | [1, -1] | [1, -1] | Passed |
| zero time dynamic | [0, 0] | [0, 0] | Passed |
SHA-256 / adf31993fa5068732742cb40fabe87dbf4c8b348c3dbfd791630e54d3e670a2f
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
def rot(v, q):
x,y = v
return [(x,y),(-y,x),(-x,-y),(y,-x)][q%4]
N = 1
observations = []
def solve(translation,is_static,sample_time,requested_time):
return translation if is_static or sample_time==requested_time else None
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('old static calibration', solve([N,0],True,0,100+N), [N,0])
check('stale dynamic', solve([N,0],False,0,100+N), None)
check('exact dynamic', solve([N,N],False,N,N), [N,N])
check('future dynamic', solve([N,0],False,N+1,N), None)
check('static earlier query', solve([N,-N],True,100+N,0), [N,-N])
check('zero time dynamic', solve([0,0],False,0,0), [0,0])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| old static calibration | [1, 0] | [1, 0] | Passed |
| stale dynamic | None | None | Passed |
| exact dynamic | [1, 1] | [1, 1] | Passed |
| future dynamic | None | None | Passed |
| static earlier query | [1, -1] | [1, -1] | Passed |
| zero time dynamic | [0, 0] | [0, 0] | Passed |
SHA-256 / 36ce57af3c162b1a8374bf65b6c0dea1b7a83580cfbc2da60285fb95086a1ee8
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:38:54.235031+00:00.
Case digest / cd88a9f1a4f2186d39e106fd8d806494ff51ec27b4ef98de90e50947438c3aa3