FAILURE MAP
← Case archive

FA-55491 / Astronomical coordinate conventions / Open access

Planetary body fixed labels: Planetary prime-meridian rotation ignores elapsed interval or direction · case 01

The adapter reports an incorrect future prime meridian while other fields remain valid.

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

ROOT CAUSE

Planetary prime-meridian rotation ignores elapsed interval or direction. Faulty expression: (d['P']-d['rate']*d['dt'])%360

VERIFIED REPAIR

Preserve the declared model convention at this site: (d['P']+d['rate']*d['dt'])%360

Unsuccessful approach: A partial convention repair still uses (d['P']+d['rate'])%360

Case contract

This explicitly stipulated planetary atlas uses west-positive input longitude W, east-positive prime-meridian angle P, latitude B, and an equatorial mirror flag for a southern view. Body-fixed east longitude is -W; inertial longitude adds P. Supplied sin-latitude ratio g is already calibrated and not recomputed. Output fields are defined by: east_longitude = (-d['W'])%360; inertial_longitude = (d['P']-d['W'])%360; view_latitude = -d['B'] if d['south'] else d['B']; geodetic_tangent = d['g']*d['latratio']; future_prime_meridian = (d['P']+d['rate']*d['dt'])%360; future_body_longitude = (-d['W']-d['rate']*d['dt'])%360

Why this case matters

Catalog, detector, sky-coordinate, and spectroscopy adapters must preserve the association between numeric coordinates and their declared reference conventions.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'east_longitude': (-d['W'])%360, 'inertial_longitude': (d['P']-d['W'])%360, 'view_latitude': -d['B'] if d['south'] else d['B'], 'geodetic_tangent': d['g']*d['latratio'], 'future_prime_meridian': (d['P']-d['rate']*d['dt'])%360, 'future_body_longitude': (-d['W']-d['rate']*d['dt'])%360}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'W': 40, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 350, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 10, 'inertial_longitude': 40, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 356}), ({'W': 40, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 40, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 40, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 320}), ({'W': 40, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 320, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 328})], 2: [({'W': 41, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 351, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 9, 'inertial_longitude': 39, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 355}), ({'W': 41, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 41, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 41, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 319}), ({'W': 41, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 319, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 327})], 3: [({'W': 42, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 352, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 8, 'inertial_longitude': 38, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 354}), ({'W': 42, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 42, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 42, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 318}), ({'W': 42, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 318, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 326})], 4: [({'W': 43, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 353, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 7, 'inertial_longitude': 37, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 353}), ({'W': 43, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 43, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 43, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 317}), ({'W': 43, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 317, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 325})], 5: [({'W': 44, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 354, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 6, 'inertial_longitude': 36, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 352}), ({'W': 44, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 44, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 44, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 316}), ({'W': 44, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 316, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 324})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), 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
astronomical fixture 0{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 86, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20}{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20}Failed
astronomical fixture 1{'east_longitude': 10, 'future_body_longitude': 356, 'future_prime_meridian': 16, 'geodetic_tangent': 6, 'inertial_longitude': 40, 'view_latitude': 20}{'east_longitude': 10, 'future_body_longitude': 356, 'future_prime_meridian': 44, 'geodetic_tangent': 6, 'inertial_longitude': 40, 'view_latitude': 20}Failed
astronomical fixture 2{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 86, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': -20}{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': -20}Failed
astronomical fixture 3{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 86, 'geodetic_tangent': -6, 'inertial_longitude': 60, 'view_latitude': -30}{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': -6, 'inertial_longitude': 60, 'view_latitude': -30}Failed
astronomical fixture 4{'east_longitude': 320, 'future_body_longitude': 320, 'future_prime_meridian': 100, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20}{'east_longitude': 320, 'future_body_longitude': 320, 'future_prime_meridian': 100, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20}Passed
astronomical fixture 5{'east_longitude': 320, 'future_body_longitude': 328, 'future_prime_meridian': 8, 'geodetic_tangent': 6, 'inertial_longitude': 320, 'view_latitude': 20}{'east_longitude': 320, 'future_body_longitude': 328, 'future_prime_meridian': 352, 'geodetic_tangent': 6, 'inertial_longitude': 320, 'view_latitude': 20}Failed

SHA-256 / 9fc974842d47952e8850d699b72ce581f50a9f8a9435f6a611f09d7d4e9d355e

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'east_longitude': (-d['W'])%360, 'inertial_longitude': (d['P']-d['W'])%360, 'view_latitude': -d['B'] if d['south'] else d['B'], 'geodetic_tangent': d['g']*d['latratio'], 'future_prime_meridian': (d['P']+d['rate'])%360, 'future_body_longitude': (-d['W']-d['rate']*d['dt'])%360}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'W': 40, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 350, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 10, 'inertial_longitude': 40, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 356}), ({'W': 40, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 40, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 40, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 320}), ({'W': 40, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 320, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 328})], 2: [({'W': 41, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 351, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 9, 'inertial_longitude': 39, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 355}), ({'W': 41, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 41, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 41, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 319}), ({'W': 41, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 319, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 327})], 3: [({'W': 42, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 352, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 8, 'inertial_longitude': 38, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 354}), ({'W': 42, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 42, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 42, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 318}), ({'W': 42, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 318, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 326})], 4: [({'W': 43, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 353, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 7, 'inertial_longitude': 37, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 353}), ({'W': 43, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 43, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 43, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 317}), ({'W': 43, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 317, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 325})], 5: [({'W': 44, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 354, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 6, 'inertial_longitude': 36, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 352}), ({'W': 44, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 44, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 44, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 316}), ({'W': 44, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 316, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 324})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), 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
astronomical fixture 0{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 107, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20}{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20}Failed
astronomical fixture 1{'east_longitude': 10, 'future_body_longitude': 356, 'future_prime_meridian': 37, 'geodetic_tangent': 6, 'inertial_longitude': 40, 'view_latitude': 20}{'east_longitude': 10, 'future_body_longitude': 356, 'future_prime_meridian': 44, 'geodetic_tangent': 6, 'inertial_longitude': 40, 'view_latitude': 20}Failed
astronomical fixture 2{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 107, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': -20}{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': -20}Failed
astronomical fixture 3{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 107, 'geodetic_tangent': -6, 'inertial_longitude': 60, 'view_latitude': -30}{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': -6, 'inertial_longitude': 60, 'view_latitude': -30}Failed
astronomical fixture 4{'east_longitude': 320, 'future_body_longitude': 320, 'future_prime_meridian': 107, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20}{'east_longitude': 320, 'future_body_longitude': 320, 'future_prime_meridian': 100, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20}Failed
astronomical fixture 5{'east_longitude': 320, 'future_body_longitude': 328, 'future_prime_meridian': 356, 'geodetic_tangent': 6, 'inertial_longitude': 320, 'view_latitude': 20}{'east_longitude': 320, 'future_body_longitude': 328, 'future_prime_meridian': 352, 'geodetic_tangent': 6, 'inertial_longitude': 320, 'view_latitude': 20}Failed

SHA-256 / 4d91d6ab5ad51aba3d9f1baf2fff874d43e950f81bfd3b8bdc2e7a885ac1b1a2

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'east_longitude': (-d['W'])%360, 'inertial_longitude': (d['P']-d['W'])%360, 'view_latitude': -d['B'] if d['south'] else d['B'], 'geodetic_tangent': d['g']*d['latratio'], 'future_prime_meridian': (d['P']+d['rate']*d['dt'])%360, 'future_body_longitude': (-d['W']-d['rate']*d['dt'])%360}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'W': 40, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 350, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 10, 'inertial_longitude': 40, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 356}), ({'W': 40, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 40, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 306}), ({'W': 40, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 320, 'inertial_longitude': 60, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 320}), ({'W': 40, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 320, 'inertial_longitude': 320, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 328})], 2: [({'W': 41, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 351, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 9, 'inertial_longitude': 39, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 355}), ({'W': 41, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 41, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 305}), ({'W': 41, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 319, 'inertial_longitude': 59, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 319}), ({'W': 41, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 319, 'inertial_longitude': 319, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 327})], 3: [({'W': 42, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 352, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 8, 'inertial_longitude': 38, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 354}), ({'W': 42, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 42, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 304}), ({'W': 42, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 318, 'inertial_longitude': 58, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 318}), ({'W': 42, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 318, 'inertial_longitude': 318, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 326})], 4: [({'W': 43, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 353, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 7, 'inertial_longitude': 37, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 353}), ({'W': 43, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 43, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 303}), ({'W': 43, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 317, 'inertial_longitude': 57, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 317}), ({'W': 43, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 317, 'inertial_longitude': 317, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 325})], 5: [({'W': 44, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 354, 'P': 30, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 6, 'inertial_longitude': 36, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 44, 'future_body_longitude': 352}), ({'W': 44, 'P': 100, 'B': 20, 'south': True, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': -20, 'geodetic_tangent': 6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 44, 'P': 100, 'B': -30, 'south': False, 'g': -2, 'latratio': 3, 'rate': 7, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': -30, 'geodetic_tangent': -6, 'future_prime_meridian': 114, 'future_body_longitude': 302}), ({'W': 44, 'P': 100, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': 7, 'dt': 0}, {'east_longitude': 316, 'inertial_longitude': 56, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 100, 'future_body_longitude': 316}), ({'W': 44, 'P': 0, 'B': 20, 'south': False, 'g': 2, 'latratio': 3, 'rate': -4, 'dt': 2}, {'east_longitude': 316, 'inertial_longitude': 316, 'view_latitude': 20, 'geodetic_tangent': 6, 'future_prime_meridian': 352, 'future_body_longitude': 324})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), 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
astronomical fixture 0{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20}{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20}Passed
astronomical fixture 1{'east_longitude': 10, 'future_body_longitude': 356, 'future_prime_meridian': 44, 'geodetic_tangent': 6, 'inertial_longitude': 40, 'view_latitude': 20}{'east_longitude': 10, 'future_body_longitude': 356, 'future_prime_meridian': 44, 'geodetic_tangent': 6, 'inertial_longitude': 40, 'view_latitude': 20}Passed
astronomical fixture 2{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': -20}{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': -20}Passed
astronomical fixture 3{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': -6, 'inertial_longitude': 60, 'view_latitude': -30}{'east_longitude': 320, 'future_body_longitude': 306, 'future_prime_meridian': 114, 'geodetic_tangent': -6, 'inertial_longitude': 60, 'view_latitude': -30}Passed
astronomical fixture 4{'east_longitude': 320, 'future_body_longitude': 320, 'future_prime_meridian': 100, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20}{'east_longitude': 320, 'future_body_longitude': 320, 'future_prime_meridian': 100, 'geodetic_tangent': 6, 'inertial_longitude': 60, 'view_latitude': 20}Passed
astronomical fixture 5{'east_longitude': 320, 'future_body_longitude': 328, 'future_prime_meridian': 352, 'geodetic_tangent': 6, 'inertial_longitude': 320, 'view_latitude': 20}{'east_longitude': 320, 'future_body_longitude': 328, 'future_prime_meridian': 352, 'geodetic_tangent': 6, 'inertial_longitude': 320, 'view_latitude': 20}Passed

SHA-256 / dfa1ffaa18b16d3b1f3a0e8bc3b0afe76e376e50160f842f9e3b1d94ab14c359

Verification & scope

Explicitly stipulated finite algebraic adapter; no standards conformance, physical accuracy, or production-library claim. Inputs are the documented finite valid model domain. 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:45:58.397809+00:00.

Case digest / 9b476e0a0d7fe569aacb49ed17e38a030c4cf1f801e238a8cf6f660892526e46