FAILURE MAP
← Case archive

FA-69761 / Orbital propagation / Open access

Clohessy-Wiltshire relative motion: Cross-track velocity term lacks the 1/n scale · case 01

Out-of-plane excursions are scaled by the mean motion.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

z uses sin(nt) vz0 instead of sin(nt)/n vz0.

VERIFIED REPAIR

Use sin(nt)/n vz0.

Unsuccessful approach: A linear vz0 t term ignores the out-of-plane oscillation.

Case contract

Input [x0,y0,z0,vx0,vy0,vz0,n,t] with x radial, y along-track, z cross-track about a circular reference orbit of mean motion n. Return [x,y,z,vx,vy,vz] from the closed-form HCW solution, rounded to 6.

Why this case matters

Orbit determination and mission planning chain many small conversions; one wrong branch or unit silently moves a spacecraft by kilometres.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    x0,y0,z0,vx,vy,vz,n,t=x
    s=math.sin(n*t); c=math.cos(n*t)
    X=(4-3*c)*x0+s/n*vx+2/n*(1-c)*vy
    Y=6*(s-n*t)*x0+y0-2/n*(1-c)*vx+(4*s-3*n*t)/n*vy
    Z=c*z0+s*vz
    VX=3*n*s*x0+c*vx+2*s*vy
    VY=6*n*(c-1)*x0-2*s*vx+(4*c-3)*vy
    VZ=-n*s*z0+c*vz
    return [round(q,6) for q in (X,Y,Z,VX,VY,VZ)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0]', [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0], [0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]), ('clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0]', [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0], [0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0]), ('clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0]', [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0], [0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]), ('clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0]', [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0], [0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0])], [('clohessy-wiltshire relative motion [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0]', [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0], [-0.571404, 9.834915, -0.062542, 0.000589, 0.000851, -0.000249]), ('clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0]', [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0], [0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]), ('clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0]', [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0], [0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]), ('clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0]', [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0], [0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0])], [('clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0]', [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0], [0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]), ('clohessy-wiltshire relative motion [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0]', [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0], [-0.571404, 9.834915, -0.062542, 0.000589, 0.000851, -0.000249]), ('clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0]', [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0], [0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0]), ('clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0]', [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0], [0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0])], [('clohessy-wiltshire relative motion [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0]', [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0], [-0.571404, 9.834915, -0.062542, 0.000589, 0.000851, -0.000249]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0]', [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0], [0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]), ('clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0]', [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0], [0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]), ('clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0]', [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0], [0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0])], [('clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0]', [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0], [0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]), ('clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0]', [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0], [0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]), ('clohessy-wiltshire relative motion [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0]', [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0], [-0.571404, 9.834915, -0.062542, 0.000589, 0.000851, -0.000249]), ('clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0]', [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0], [0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
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 fixtureActualExpectedOutcome
clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0][0.0, 0.0, -0.317807, 0.0, -0.0, -0.000563][0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]Failed
clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0][0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0][0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]Passed
clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0][1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0][1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0]Passed
clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0][0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05][0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]Passed
clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0][0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0][0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]Passed
clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0][0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0][0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]Passed
clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0][0.0, 0.0, 0.0, 0.0, 0.0, 0.0][0.0, 0.0, 0.0, 0.0, 0.0, 0.0]Passed

SHA-256 / cc19b176c45beb136a19fcceec7b6d68663ee14cba7a609714a5e616baec64b5

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    x0,y0,z0,vx,vy,vz,n,t=x
    s=math.sin(n*t); c=math.cos(n*t)
    X=(4-3*c)*x0+s/n*vx+2/n*(1-c)*vy
    Y=6*(s-n*t)*x0+y0-2/n*(1-c)*vx+(4*s-3*n*t)/n*vy
    Z=c*z0+vz*t
    VX=3*n*s*x0+c*vx+2*s*vy
    VY=6*n*(c-1)*x0-2*s*vx+(4*c-3)*vy
    VZ=-n*s*z0+c*vz
    return [round(q,6) for q in (X,Y,Z,VX,VY,VZ)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0]', [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0], [0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]), ('clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0]', [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0], [0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0]), ('clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0]', [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0], [0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]), ('clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0]', [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0], [0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0])], [('clohessy-wiltshire relative motion [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0]', [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0], [-0.571404, 9.834915, -0.062542, 0.000589, 0.000851, -0.000249]), ('clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0]', [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0], [0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]), ('clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0]', [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0], [0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]), ('clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0]', [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0], [0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0])], [('clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0]', [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0], [0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]), ('clohessy-wiltshire relative motion [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0]', [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0], [-0.571404, 9.834915, -0.062542, 0.000589, 0.000851, -0.000249]), ('clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0]', [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0], [0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0]), ('clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0]', [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0], [0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0])], [('clohessy-wiltshire relative motion [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0]', [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0], [-0.571404, 9.834915, -0.062542, 0.000589, 0.000851, -0.000249]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0]', [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0], [0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]), ('clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0]', [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0], [0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]), ('clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0]', [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0], [0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0])], [('clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0]', [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0], [0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]), ('clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0]', [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0], [0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]), ('clohessy-wiltshire relative motion [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0]', [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0], [-0.571404, 9.834915, -0.062542, 0.000589, 0.000851, -0.000249]), ('clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0]', [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0], [0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
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 fixtureActualExpectedOutcome
clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0][0.0, 0.0, 0.082039, 0.0, -0.0, -0.000563][0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]Failed
clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0][0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0][0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]Passed
clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0][1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0][1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0]Passed
clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0][0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05][0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]Passed
clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0][0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0][0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]Passed
clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0][0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0][0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]Passed
clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0][0.0, 0.0, 0.0, 0.0, 0.0, 0.0][0.0, 0.0, 0.0, 0.0, 0.0, 0.0]Passed

SHA-256 / 8d6c538298a7881bb7fe686e19f8c4de4f735b80acc6089ca50956413dcbd4fa

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    x0,y0,z0,vx,vy,vz,n,t=x
    s=math.sin(n*t); c=math.cos(n*t)
    X=(4-3*c)*x0+s/n*vx+2/n*(1-c)*vy
    Y=6*(s-n*t)*x0+y0-2/n*(1-c)*vx+(4*s-3*n*t)/n*vy
    Z=c*z0+s/n*vz
    VX=3*n*s*x0+c*vx+2*s*vy
    VY=6*n*(c-1)*x0-2*s*vx+(4*c-3)*vy
    VZ=-n*s*z0+c*vz
    return [round(q,6) for q in (X,Y,Z,VX,VY,VZ)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0]', [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0], [0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]), ('clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0]', [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0], [0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0]), ('clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0]', [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0], [0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]), ('clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0]', [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0], [0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0])], [('clohessy-wiltshire relative motion [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0]', [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0], [-0.571404, 9.834915, -0.062542, 0.000589, 0.000851, -0.000249]), ('clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0]', [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0], [0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]), ('clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0]', [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0], [0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]), ('clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0]', [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0], [0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0])], [('clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0]', [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0], [0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]), ('clohessy-wiltshire relative motion [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0]', [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0], [-0.571404, 9.834915, -0.062542, 0.000589, 0.000851, -0.000249]), ('clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0]', [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0], [0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0]), ('clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0]', [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0], [0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0])], [('clohessy-wiltshire relative motion [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0]', [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0], [-0.571404, 9.834915, -0.062542, 0.000589, 0.000851, -0.000249]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0]', [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0], [0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]), ('clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0]', [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0], [0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]), ('clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0]', [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0], [0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0])], [('clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0]', [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0], [0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0]', [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0], [0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]), ('clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0]', [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0], [0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]), ('clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0]', [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]), ('clohessy-wiltshire relative motion [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0]', [-0.3, 2.0, -0.2, 0.0001, 0.0002, -0.0001, 0.0012, 4500.0], [-0.571404, 9.834915, -0.062542, 0.000589, 0.000851, -0.000249]), ('clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0]', [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0], [0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]), ('clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0]', [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0], [1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
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 fixtureActualExpectedOutcome
clohessy-wiltshire relative motion [0.0, 0.0, 0.5, 0.0, 0.0, 0.0002, 0.00113, 2000.0][0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563][0.0, 0.0, -0.181368, 0.0, -0.0, -0.000563]Passed
clohessy-wiltshire relative motion [0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 600.0][0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0][0.166351, -0.030458, 0.0, 0.000213, -0.00015, 0.0]Passed
clohessy-wiltshire relative motion [0.0, 1.0, 0.0, 0.0, 0.001, 0.0, 0.00113, 1200.0][1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0][1.392658, 0.858477, 0.0, 0.001954, -0.002147, 0.0]Passed
clohessy-wiltshire relative motion [0.2, -1.0, 0.1, 0.0005, -0.0003, 0.0, 0.0011, 3000.0][0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05][0.236705, -4.084008, -0.098748, -0.000503, -0.000381, 1.7e-05]Passed
clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.001, 0.0, 0.0, 0.00113, 900.0][0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0][0.752685, -0.83908, 0.0, 0.000526, -0.001701, 0.0]Passed
clohessy-wiltshire relative motion [1.0, 0.0, 0.0, 0.0, -2.0, 0.0, 1.0, 1.0][0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0][0.540302, -1.682942, 0.0, -0.841471, -1.080605, 0.0]Passed
clohessy-wiltshire relative motion [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00113, 500.0][0.0, 0.0, 0.0, 0.0, 0.0, 0.0][0.0, 0.0, 0.0, 0.0, 0.0, 0.0]Passed

SHA-256 / 3e01beca76a2253d7ded8eaa6990ec2c0365dfd3210a19cd918c19242333060c

Verification & scope

A deterministic toy two-body model with stipulated constants and conventions; not flight dynamics software or a validated SGP4 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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:48:14.462245+00:00.

Case digest / 12f5cb11d0fc4887937dabe84c153f8313d497fae1161b928c5dc793bed2a078