FA-69396 / Orbital propagation / Open access
Mean anomaly propagation between epochs: Revolutions are scaled by 2pi into a degree angle · case 01
Mean anomaly advances by radians while labelled degrees.
ROOT CAUSE
The rev/day mean motion is multiplied by 2pi instead of 360.
VERIFIED REPAIR
Multiply revolutions by 360 degrees.
Unsuccessful approach: Dividing by 1440 converts to per-minute motion while dt is in days.
Case contract
Input [[y1,d1],[y2,d2],M0,n,ndot2]: epochs as calendar year and fractional 1-based day of year; M0 degrees at epoch 1; n revolutions per day; ndot2 is the published first derivative divided by two (rev/day^2). dt = epoch2-epoch1 in days (Gregorian calendar). M = (M0 + 360*(n*dt + ndot2*dt^2)) mod 360. Return [dt rounded 6, M rounded 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
import datetime
N = 1
observations = []
def solve(x):
(y1,d1),(y2,d2),m0,n,nd2=x
def od(y,d): return datetime.date(y,1,1).toordinal()+d-1
dt=od(y2,d2)-od(y1,d1)
m=(m0+2*math.pi*(n*dt+nd2*dt*dt))%360.0
return [round(dt,6),round(m,6)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('mean anomaly propagation between epochs [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0]', [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0], [2.5, 300.0]), ('mean anomaly propagation between epochs [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0]', [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0], [7.0, 106.8796]), ('mean anomaly propagation between epochs [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0]', [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0], [2.0, 0.0]), ('mean anomaly propagation between epochs [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0]', [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0], [60.0, 10.0]), ('mean anomaly propagation between epochs [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0]', [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0], [2.0, 190.0]), ('mean anomaly propagation between epochs [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0]', [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0], [-9.5, 261.0]), ('mean anomaly propagation between epochs [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001]', [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001], [2.0, 170.144])], [('mean anomaly propagation between epochs [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0]', [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0], [7.0, 106.8796]), ('mean anomaly propagation between epochs [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0]', [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0], [60.0, 10.0]), ('mean anomaly propagation between epochs [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0]', [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0], [2.0, 190.0]), ('mean anomaly propagation between epochs [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0]', [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0], [-9.5, 261.0]), ('mean anomaly propagation between epochs [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001]', [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001], [2.0, 170.144]), ('mean anomaly propagation between epochs [[2025, 200.0], [2025, 210.0], 0.0, 15.0, -5e-05]', [[2025, 200.0], [2025, 210.0], 0.0, 15.0, -5e-05], [10.0, 358.2]), ('mean anomaly propagation between epochs [[2026, 5.0], [2026, 5.0], 12.5, 15.0, 0.0]', [[2026, 5.0], [2026, 5.0], 12.5, 15.0, 0.0], [0.0, 12.5])], [('mean anomaly propagation between epochs [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0]', [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0], [2.0, 0.0]), ('mean anomaly propagation between epochs [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001]', [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001], [2.0, 170.144]), ('mean anomaly propagation between epochs [[2025, 200.0], [2025, 210.0], 0.0, 15.0, -5e-05]', [[2025, 200.0], [2025, 210.0], 0.0, 15.0, -5e-05], [10.0, 358.2]), ('mean anomaly propagation between epochs [[2026, 5.0], [2026, 5.0], 12.5, 15.0, 0.0]', [[2026, 5.0], [2026, 5.0], 12.5, 15.0, 0.0], [0.0, 12.5]), ('mean anomaly propagation between epochs [[2026, 50.3], [2026, 51.1], 90.0, 11.1, 0.0]', [[2026, 50.3], [2026, 51.1], 90.0, 11.1, 0.0], [0.8, 46.8]), ('mean anomaly propagation between epochs [[2026, 50.7], [2026, 50.2], 270.0, 16.0, 0.0]', [[2026, 50.7], [2026, 50.2], 270.0, 16.0, 0.0], [-0.5, 270.0]), ('mean anomaly propagation between epochs [[2000, 59.5], [2000, 61.5], 5.0, 1.0, 2e-05]', [[2000, 59.5], [2000, 61.5], 5.0, 1.0, 2e-05], [2.0, 5.0288])], [('mean anomaly propagation between epochs [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0]', [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0], [60.0, 10.0]), ('mean anomaly propagation between epochs [[2026, 50.3], [2026, 51.1], 90.0, 11.1, 0.0]', [[2026, 50.3], [2026, 51.1], 90.0, 11.1, 0.0], [0.8, 46.8]), ('mean anomaly propagation between epochs [[2026, 50.7], [2026, 50.2], 270.0, 16.0, 0.0]', [[2026, 50.7], [2026, 50.2], 270.0, 16.0, 0.0], [-0.5, 270.0]), ('mean anomaly propagation between epochs [[2000, 59.5], [2000, 61.5], 5.0, 1.0, 2e-05]', [[2000, 59.5], [2000, 61.5], 5.0, 1.0, 2e-05], [2.0, 5.0288]), ('mean anomaly propagation between epochs [[2024, 360.0], [2025, 3.0], 20.0, 1.1, 0.0]', [[2024, 360.0], [2025, 3.0], 20.0, 1.1, 0.0], [9.0, 344.0]), ('mean anomaly propagation between epochs [[2100, 360.0], [2101, 2.0], 20.0, 0.9, 0.0]', [[2100, 360.0], [2101, 2.0], 20.0, 0.9, 0.0], [7.0, 128.0]), ('mean anomaly propagation between epochs [[2026, 100.0], [2026, 99.5], 300.0, 0.1, 0.0]', [[2026, 100.0], [2026, 99.5], 300.0, 0.1, 0.0], [-0.5, 282.0])], [('mean anomaly propagation between epochs [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0]', [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0], [2.0, 190.0]), ('mean anomaly propagation between epochs [[2024, 360.0], [2025, 3.0], 20.0, 1.1, 0.0]', [[2024, 360.0], [2025, 3.0], 20.0, 1.1, 0.0], [9.0, 344.0]), ('mean anomaly propagation between epochs [[2100, 360.0], [2101, 2.0], 20.0, 0.9, 0.0]', [[2100, 360.0], [2101, 2.0], 20.0, 0.9, 0.0], [7.0, 128.0]), ('mean anomaly propagation between epochs [[2026, 100.0], [2026, 99.5], 300.0, 0.1, 0.0]', [[2026, 100.0], [2026, 99.5], 300.0, 0.1, 0.0], [-0.5, 282.0]), ('mean anomaly propagation between epochs [[2027, 10.0], [2027, 9.0], 350.0, 0.05, 0.0]', [[2027, 10.0], [2027, 9.0], 350.0, 0.05, 0.0], [-1.0, 332.0]), ('mean anomaly propagation between epochs [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0]', [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0], [2.5, 300.0]), ('mean anomaly propagation between epochs [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0]', [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0], [7.0, 106.8796])]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| mean anomaly propagation between epochs [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0] | [2.5, 273.473431] | [2.5, 300.0] | Failed |
| mean anomaly propagation between epochs [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0] | [7.0, 144.102369] | [7.0, 106.8796] | Failed |
| mean anomaly propagation between epochs [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0] | [2.0, 25.132741] | [2.0, 0.0] | Failed |
| mean anomaly propagation between epochs [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0] | [60.0, 198.495559] | [60.0, 10.0] | Failed |
| mean anomaly propagation between epochs [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0] | [2.0, 13.141593] | [2.0, 190.0] | Failed |
| mean anomaly propagation between epochs [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0] | [-9.5, 337.088562] | [-9.5, 261.0] | Failed |
| mean anomaly propagation between epochs [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001] | [2.0, 169.073295] | [2.0, 170.144] | Failed |
SHA-256 / 414f2a2a78cca920819d89990733a54b615bfb6abef70b24f861cd9abf9ae835
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
import datetime
N = 1
observations = []
def solve(x):
(y1,d1),(y2,d2),m0,n,nd2=x
def od(y,d): return datetime.date(y,1,1).toordinal()+d-1
dt=od(y2,d2)-od(y1,d1)
m=(m0+360.0*(n*dt+nd2*dt*dt)/1440)%360.0
return [round(dt,6),round(m,6)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('mean anomaly propagation between epochs [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0]', [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0], [2.5, 300.0]), ('mean anomaly propagation between epochs [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0]', [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0], [7.0, 106.8796]), ('mean anomaly propagation between epochs [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0]', [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0], [2.0, 0.0]), ('mean anomaly propagation between epochs [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0]', [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0], [60.0, 10.0]), ('mean anomaly propagation between epochs [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0]', [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0], [2.0, 190.0]), ('mean anomaly propagation between epochs [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0]', [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0], [-9.5, 261.0]), ('mean anomaly propagation between epochs [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001]', [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001], [2.0, 170.144])], [('mean anomaly propagation between epochs [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0]', [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0], [7.0, 106.8796]), ('mean anomaly propagation between epochs [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0]', [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0], [60.0, 10.0]), ('mean anomaly propagation between epochs [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0]', [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0], [2.0, 190.0]), ('mean anomaly propagation between epochs [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0]', [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0], [-9.5, 261.0]), ('mean anomaly propagation between epochs [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001]', [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001], [2.0, 170.144]), ('mean anomaly propagation between epochs [[2025, 200.0], [2025, 210.0], 0.0, 15.0, -5e-05]', [[2025, 200.0], [2025, 210.0], 0.0, 15.0, -5e-05], [10.0, 358.2]), ('mean anomaly propagation between epochs [[2026, 5.0], [2026, 5.0], 12.5, 15.0, 0.0]', [[2026, 5.0], [2026, 5.0], 12.5, 15.0, 0.0], [0.0, 12.5])], [('mean anomaly propagation between epochs [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0]', [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0], [2.0, 0.0]), ('mean anomaly propagation between epochs [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001]', [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001], [2.0, 170.144]), ('mean anomaly propagation between epochs [[2025, 200.0], [2025, 210.0], 0.0, 15.0, -5e-05]', [[2025, 200.0], [2025, 210.0], 0.0, 15.0, -5e-05], [10.0, 358.2]), ('mean anomaly propagation between epochs [[2026, 5.0], [2026, 5.0], 12.5, 15.0, 0.0]', [[2026, 5.0], [2026, 5.0], 12.5, 15.0, 0.0], [0.0, 12.5]), ('mean anomaly propagation between epochs [[2026, 50.3], [2026, 51.1], 90.0, 11.1, 0.0]', [[2026, 50.3], [2026, 51.1], 90.0, 11.1, 0.0], [0.8, 46.8]), ('mean anomaly propagation between epochs [[2026, 50.7], [2026, 50.2], 270.0, 16.0, 0.0]', [[2026, 50.7], [2026, 50.2], 270.0, 16.0, 0.0], [-0.5, 270.0]), ('mean anomaly propagation between epochs [[2000, 59.5], [2000, 61.5], 5.0, 1.0, 2e-05]', [[2000, 59.5], [2000, 61.5], 5.0, 1.0, 2e-05], [2.0, 5.0288])], [('mean anomaly propagation between epochs [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0]', [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0], [60.0, 10.0]), ('mean anomaly propagation between epochs [[2026, 50.3], [2026, 51.1], 90.0, 11.1, 0.0]', [[2026, 50.3], [2026, 51.1], 90.0, 11.1, 0.0], [0.8, 46.8]), ('mean anomaly propagation between epochs [[2026, 50.7], [2026, 50.2], 270.0, 16.0, 0.0]', [[2026, 50.7], [2026, 50.2], 270.0, 16.0, 0.0], [-0.5, 270.0]), ('mean anomaly propagation between epochs [[2000, 59.5], [2000, 61.5], 5.0, 1.0, 2e-05]', [[2000, 59.5], [2000, 61.5], 5.0, 1.0, 2e-05], [2.0, 5.0288]), ('mean anomaly propagation between epochs [[2024, 360.0], [2025, 3.0], 20.0, 1.1, 0.0]', [[2024, 360.0], [2025, 3.0], 20.0, 1.1, 0.0], [9.0, 344.0]), ('mean anomaly propagation between epochs [[2100, 360.0], [2101, 2.0], 20.0, 0.9, 0.0]', [[2100, 360.0], [2101, 2.0], 20.0, 0.9, 0.0], [7.0, 128.0]), ('mean anomaly propagation between epochs [[2026, 100.0], [2026, 99.5], 300.0, 0.1, 0.0]', [[2026, 100.0], [2026, 99.5], 300.0, 0.1, 0.0], [-0.5, 282.0])], [('mean anomaly propagation between epochs [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0]', [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0], [2.0, 190.0]), ('mean anomaly propagation between epochs [[2024, 360.0], [2025, 3.0], 20.0, 1.1, 0.0]', [[2024, 360.0], [2025, 3.0], 20.0, 1.1, 0.0], [9.0, 344.0]), ('mean anomaly propagation between epochs [[2100, 360.0], [2101, 2.0], 20.0, 0.9, 0.0]', [[2100, 360.0], [2101, 2.0], 20.0, 0.9, 0.0], [7.0, 128.0]), ('mean anomaly propagation between epochs [[2026, 100.0], [2026, 99.5], 300.0, 0.1, 0.0]', [[2026, 100.0], [2026, 99.5], 300.0, 0.1, 0.0], [-0.5, 282.0]), ('mean anomaly propagation between epochs [[2027, 10.0], [2027, 9.0], 350.0, 0.05, 0.0]', [[2027, 10.0], [2027, 9.0], 350.0, 0.05, 0.0], [-1.0, 332.0]), ('mean anomaly propagation between epochs [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0]', [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0], [2.5, 300.0]), ('mean anomaly propagation between epochs [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0]', [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0], [7.0, 106.8796])]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| mean anomaly propagation between epochs [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0] | [2.5, 39.6875] | [2.5, 300.0] | Failed |
| mean anomaly propagation between epochs [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0] | [7.0, 101.754778] | [7.0, 106.8796] | Failed |
| mean anomaly propagation between epochs [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0] | [2.0, 1.0] | [2.0, 0.0] | Failed |
| mean anomaly propagation between epochs [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0] | [60.0, 17.5] | [60.0, 10.0] | Failed |
| mean anomaly propagation between epochs [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0] | [2.0, 10.125] | [2.0, 190.0] | Failed |
| mean anomaly propagation between epochs [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0] | [-9.5, 13.65] | [-9.5, 261.0] | Failed |
| mean anomaly propagation between epochs [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001] | [2.0, 357.1251] | [2.0, 170.144] | Failed |
SHA-256 / 9f487b16a92941474c9c553d9973046c9d1ebf9db9ad3266dd432e0231b6f2ac
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
import datetime
N = 1
observations = []
def solve(x):
(y1,d1),(y2,d2),m0,n,nd2=x
def od(y,d): return datetime.date(y,1,1).toordinal()+d-1
dt=od(y2,d2)-od(y1,d1)
m=(m0+360.0*(n*dt+nd2*dt*dt))%360.0
return [round(dt,6),round(m,6)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('mean anomaly propagation between epochs [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0]', [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0], [2.5, 300.0]), ('mean anomaly propagation between epochs [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0]', [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0], [7.0, 106.8796]), ('mean anomaly propagation between epochs [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0]', [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0], [2.0, 0.0]), ('mean anomaly propagation between epochs [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0]', [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0], [60.0, 10.0]), ('mean anomaly propagation between epochs [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0]', [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0], [2.0, 190.0]), ('mean anomaly propagation between epochs [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0]', [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0], [-9.5, 261.0]), ('mean anomaly propagation between epochs [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001]', [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001], [2.0, 170.144])], [('mean anomaly propagation between epochs [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0]', [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0], [7.0, 106.8796]), ('mean anomaly propagation between epochs [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0]', [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0], [60.0, 10.0]), ('mean anomaly propagation between epochs [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0]', [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0], [2.0, 190.0]), ('mean anomaly propagation between epochs [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0]', [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0], [-9.5, 261.0]), ('mean anomaly propagation between epochs [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001]', [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001], [2.0, 170.144]), ('mean anomaly propagation between epochs [[2025, 200.0], [2025, 210.0], 0.0, 15.0, -5e-05]', [[2025, 200.0], [2025, 210.0], 0.0, 15.0, -5e-05], [10.0, 358.2]), ('mean anomaly propagation between epochs [[2026, 5.0], [2026, 5.0], 12.5, 15.0, 0.0]', [[2026, 5.0], [2026, 5.0], 12.5, 15.0, 0.0], [0.0, 12.5])], [('mean anomaly propagation between epochs [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0]', [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0], [2.0, 0.0]), ('mean anomaly propagation between epochs [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001]', [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001], [2.0, 170.144]), ('mean anomaly propagation between epochs [[2025, 200.0], [2025, 210.0], 0.0, 15.0, -5e-05]', [[2025, 200.0], [2025, 210.0], 0.0, 15.0, -5e-05], [10.0, 358.2]), ('mean anomaly propagation between epochs [[2026, 5.0], [2026, 5.0], 12.5, 15.0, 0.0]', [[2026, 5.0], [2026, 5.0], 12.5, 15.0, 0.0], [0.0, 12.5]), ('mean anomaly propagation between epochs [[2026, 50.3], [2026, 51.1], 90.0, 11.1, 0.0]', [[2026, 50.3], [2026, 51.1], 90.0, 11.1, 0.0], [0.8, 46.8]), ('mean anomaly propagation between epochs [[2026, 50.7], [2026, 50.2], 270.0, 16.0, 0.0]', [[2026, 50.7], [2026, 50.2], 270.0, 16.0, 0.0], [-0.5, 270.0]), ('mean anomaly propagation between epochs [[2000, 59.5], [2000, 61.5], 5.0, 1.0, 2e-05]', [[2000, 59.5], [2000, 61.5], 5.0, 1.0, 2e-05], [2.0, 5.0288])], [('mean anomaly propagation between epochs [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0]', [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0], [60.0, 10.0]), ('mean anomaly propagation between epochs [[2026, 50.3], [2026, 51.1], 90.0, 11.1, 0.0]', [[2026, 50.3], [2026, 51.1], 90.0, 11.1, 0.0], [0.8, 46.8]), ('mean anomaly propagation between epochs [[2026, 50.7], [2026, 50.2], 270.0, 16.0, 0.0]', [[2026, 50.7], [2026, 50.2], 270.0, 16.0, 0.0], [-0.5, 270.0]), ('mean anomaly propagation between epochs [[2000, 59.5], [2000, 61.5], 5.0, 1.0, 2e-05]', [[2000, 59.5], [2000, 61.5], 5.0, 1.0, 2e-05], [2.0, 5.0288]), ('mean anomaly propagation between epochs [[2024, 360.0], [2025, 3.0], 20.0, 1.1, 0.0]', [[2024, 360.0], [2025, 3.0], 20.0, 1.1, 0.0], [9.0, 344.0]), ('mean anomaly propagation between epochs [[2100, 360.0], [2101, 2.0], 20.0, 0.9, 0.0]', [[2100, 360.0], [2101, 2.0], 20.0, 0.9, 0.0], [7.0, 128.0]), ('mean anomaly propagation between epochs [[2026, 100.0], [2026, 99.5], 300.0, 0.1, 0.0]', [[2026, 100.0], [2026, 99.5], 300.0, 0.1, 0.0], [-0.5, 282.0])], [('mean anomaly propagation between epochs [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0]', [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0], [2.0, 190.0]), ('mean anomaly propagation between epochs [[2024, 360.0], [2025, 3.0], 20.0, 1.1, 0.0]', [[2024, 360.0], [2025, 3.0], 20.0, 1.1, 0.0], [9.0, 344.0]), ('mean anomaly propagation between epochs [[2100, 360.0], [2101, 2.0], 20.0, 0.9, 0.0]', [[2100, 360.0], [2101, 2.0], 20.0, 0.9, 0.0], [7.0, 128.0]), ('mean anomaly propagation between epochs [[2026, 100.0], [2026, 99.5], 300.0, 0.1, 0.0]', [[2026, 100.0], [2026, 99.5], 300.0, 0.1, 0.0], [-0.5, 282.0]), ('mean anomaly propagation between epochs [[2027, 10.0], [2027, 9.0], 350.0, 0.05, 0.0]', [[2027, 10.0], [2027, 9.0], 350.0, 0.05, 0.0], [-1.0, 332.0]), ('mean anomaly propagation between epochs [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0]', [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0], [2.5, 300.0]), ('mean anomaly propagation between epochs [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0]', [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0], [7.0, 106.8796])]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| mean anomaly propagation between epochs [[2026, 10.25], [2026, 12.75], 30.0, 15.5, 0.0] | [2.5, 300.0] | [2.5, 300.0] | Passed |
| mean anomaly propagation between epochs [[2023, 360.5], [2024, 2.5], 100.0, 1.00273, 0.0] | [7.0, 106.8796] | [7.0, 106.8796] | Passed |
| mean anomaly propagation between epochs [[2024, 59.0], [2024, 61.0], 0.0, 2.0, 0.0] | [2.0, 0.0] | [2.0, 0.0] | Passed |
| mean anomaly propagation between epochs [[2099, 365.0], [2100, 60.0], 10.0, 0.5, 0.0] | [60.0, 10.0] | [60.0, 10.0] | Passed |
| mean anomaly propagation between epochs [[2100, 59.0], [2100, 61.0], 10.0, 0.25, 0.0] | [2.0, 190.0] | [2.0, 190.0] | Passed |
| mean anomaly propagation between epochs [[2026, 100.0], [2026, 90.5], 45.0, 13.2, 0.0] | [-9.5, 261.0] | [-9.5, 261.0] | Passed |
| mean anomaly propagation between epochs [[2026, 1.0], [2026, 3.0], 350.0, 14.25, 0.0001] | [2.0, 170.144] | [2.0, 170.144] | Passed |
SHA-256 / 1069966fb5dc121bc48040b4957aa818296555de153fdcc0c6a6d0f7917a9a3d
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:11.047564+00:00.
Case digest / 4c390ed16dc0e18e49ae86ff6ab2c6d2b83a985acd5cd979dce4d06cba3b1f2f