FAILURE MAP
← Case archive

FA-55706 / Astronomical coordinate conventions / Open access

Exposure time coordinate: Exposure end metadata reuses the selected fractional reference epoch · case 01

The adapter reports an incorrect end time while other fields remain valid.

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

ROOT CAUSE

Exposure end metadata reuses the selected fractional reference epoch. Faulty expression: d['t']+d['e']

VERIFIED REPAIR

Preserve the declared model convention at this site: d['t']+d['y']*d['r']+d['e']

Unsuccessful approach: A partial convention repair still uses d['t']+d['y']*d['r']+d['f']*d['e']

Case contract

A detector exposure starts at t with integration duration e. Row y has rolling delay y*r; shutter traversal adds y*s. A barycentric timestamp offset b is supplied in the same model ticks. FITS-like fractional exposure reference f selects start f=0, midpoint f=0.5, or end f=1. Output fields are defined by: reference_time = d['t']+d['f']*d['e']; row_start = d['t']+d['y']*d['r']; row_midpoint = d['t']+d['y']*d['r']+d['e']/2; shutter_corrected = d['t']+d['f']*d['e']+d['y']*d['s']; barycentric_midpoint = d['t']+d['e']/2+d['b']; end_time = d['t']+d['y']*d['r']+d['e']

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 {'reference_time': d['t']+d['f']*d['e'], 'row_start': d['t']+d['y']*d['r'], 'row_midpoint': d['t']+d['y']*d['r']+d['e']/2, 'shutter_corrected': d['t']+d['f']*d['e']+d['y']*d['s'], 'barycentric_midpoint': d['t']+d['e']/2+d['b'], 'end_time': d['t']+d['e']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 100, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 103, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 110, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 113, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 100, 'row_midpoint': 105.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 109.0, 'end_time': 110}), ({'t': 100, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 100, 'row_midpoint': 105.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 109.0, 'end_time': 110}), ({'t': 100, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 102.0, 'row_start': 106, 'row_midpoint': 108.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 99.0, 'end_time': 110})], 2: [({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 101, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 104, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 111, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 114, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 101, 'row_midpoint': 106.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 110.0, 'end_time': 111}), ({'t': 101, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 101, 'row_midpoint': 106.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 110.0, 'end_time': 111}), ({'t': 101, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 103.0, 'row_start': 107, 'row_midpoint': 109.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 100.0, 'end_time': 111})], 3: [({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 110.0, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 102, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 105, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 112, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 115, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 102, 'row_midpoint': 107.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 111.0, 'end_time': 112}), ({'t': 102, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 102, 'row_midpoint': 107.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 111.0, 'end_time': 112}), ({'t': 102, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 104.0, 'row_start': 108, 'row_midpoint': 110.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 101.0, 'end_time': 112})], 4: [({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 111.0, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 103, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 106, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 113, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 116, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 103, 'row_midpoint': 108.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 112.0, 'end_time': 113}), ({'t': 103, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 103, 'row_midpoint': 108.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 112.0, 'end_time': 113}), ({'t': 103, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 109, 'row_midpoint': 111.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 102.0, 'end_time': 113})], 5: [({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 112.0, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 104, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 107, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 114, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 117, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 104, 'row_midpoint': 109.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 113.0, 'end_time': 114}), ({'t': 104, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 104, 'row_midpoint': 109.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 113.0, 'end_time': 114}), ({'t': 104, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 110, 'row_midpoint': 112.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 103.0, 'end_time': 114})]}
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{'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 108.0}{'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 105.0, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 108.0}Failed
astronomical fixture 1{'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 100, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 103}{'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 100, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 103}Failed
astronomical fixture 2{'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 110, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 113}{'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 110, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 113}Failed
astronomical fixture 3{'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0}{'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0}Passed
astronomical fixture 4{'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0}{'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0}Passed
astronomical fixture 5{'barycentric_midpoint': 99.0, 'end_time': 104, 'reference_time': 102.0, 'row_midpoint': 108.0, 'row_start': 106, 'shutter_corrected': 105.0}{'barycentric_midpoint': 99.0, 'end_time': 110, 'reference_time': 102.0, 'row_midpoint': 108.0, 'row_start': 106, 'shutter_corrected': 105.0}Failed

SHA-256 / fd097d4b784693232e59d5990d737a4cdb4ac4c2853457036eeb2956625f24de

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(d):
    return {'reference_time': d['t']+d['f']*d['e'], 'row_start': d['t']+d['y']*d['r'], 'row_midpoint': d['t']+d['y']*d['r']+d['e']/2, 'shutter_corrected': d['t']+d['f']*d['e']+d['y']*d['s'], 'barycentric_midpoint': d['t']+d['e']/2+d['b'], 'end_time': d['t']+d['y']*d['r']+d['f']*d['e']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 100, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 103, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 110, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 113, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 100, 'row_midpoint': 105.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 109.0, 'end_time': 110}), ({'t': 100, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 100, 'row_midpoint': 105.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 109.0, 'end_time': 110}), ({'t': 100, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 102.0, 'row_start': 106, 'row_midpoint': 108.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 99.0, 'end_time': 110})], 2: [({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 101, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 104, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 111, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 114, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 101, 'row_midpoint': 106.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 110.0, 'end_time': 111}), ({'t': 101, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 101, 'row_midpoint': 106.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 110.0, 'end_time': 111}), ({'t': 101, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 103.0, 'row_start': 107, 'row_midpoint': 109.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 100.0, 'end_time': 111})], 3: [({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 110.0, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 102, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 105, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 112, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 115, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 102, 'row_midpoint': 107.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 111.0, 'end_time': 112}), ({'t': 102, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 102, 'row_midpoint': 107.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 111.0, 'end_time': 112}), ({'t': 102, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 104.0, 'row_start': 108, 'row_midpoint': 110.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 101.0, 'end_time': 112})], 4: [({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 111.0, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 103, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 106, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 113, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 116, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 103, 'row_midpoint': 108.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 112.0, 'end_time': 113}), ({'t': 103, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 103, 'row_midpoint': 108.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 112.0, 'end_time': 113}), ({'t': 103, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 109, 'row_midpoint': 111.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 102.0, 'end_time': 113})], 5: [({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 112.0, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 104, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 107, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 114, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 117, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 104, 'row_midpoint': 109.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 113.0, 'end_time': 114}), ({'t': 104, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 104, 'row_midpoint': 109.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 113.0, 'end_time': 114}), ({'t': 104, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 110, 'row_midpoint': 112.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 103.0, 'end_time': 114})]}
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{'barycentric_midpoint': 109.0, 'end_time': 111.0, 'reference_time': 105.0, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 108.0}{'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 105.0, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 108.0}Failed
astronomical fixture 1{'barycentric_midpoint': 109.0, 'end_time': 106, 'reference_time': 100, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 103}{'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 100, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 103}Failed
astronomical fixture 2{'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 110, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 113}{'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 110, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 113}Passed
astronomical fixture 3{'barycentric_midpoint': 109.0, 'end_time': 105.0, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0}{'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0}Failed
astronomical fixture 4{'barycentric_midpoint': 109.0, 'end_time': 105.0, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0}{'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0}Failed
astronomical fixture 5{'barycentric_midpoint': 99.0, 'end_time': 108.0, 'reference_time': 102.0, 'row_midpoint': 108.0, 'row_start': 106, 'shutter_corrected': 105.0}{'barycentric_midpoint': 99.0, 'end_time': 110, 'reference_time': 102.0, 'row_midpoint': 108.0, 'row_start': 106, 'shutter_corrected': 105.0}Failed

SHA-256 / 21cc2f49a4550ca0076b10e13a94e296af9d0e22ff20288a8213f56d246b6594

3 / The verified repair

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

N = 1
observations = []
def solve(d):
    return {'reference_time': d['t']+d['f']*d['e'], 'row_start': d['t']+d['y']*d['r'], 'row_midpoint': d['t']+d['y']*d['r']+d['e']/2, 'shutter_corrected': d['t']+d['f']*d['e']+d['y']*d['s'], 'barycentric_midpoint': d['t']+d['e']/2+d['b'], 'end_time': d['t']+d['y']*d['r']+d['e']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 100, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 103, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 110, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 113, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 100, 'row_midpoint': 105.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 109.0, 'end_time': 110}), ({'t': 100, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 100, 'row_midpoint': 105.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 109.0, 'end_time': 110}), ({'t': 100, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 102.0, 'row_start': 106, 'row_midpoint': 108.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 99.0, 'end_time': 110})], 2: [({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 101, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 104, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 111, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 114, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 101, 'row_midpoint': 106.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 110.0, 'end_time': 111}), ({'t': 101, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 101, 'row_midpoint': 106.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 110.0, 'end_time': 111}), ({'t': 101, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 103.0, 'row_start': 107, 'row_midpoint': 109.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 100.0, 'end_time': 111})], 3: [({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 110.0, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 102, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 105, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 112, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 115, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 102, 'row_midpoint': 107.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 111.0, 'end_time': 112}), ({'t': 102, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 102, 'row_midpoint': 107.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 111.0, 'end_time': 112}), ({'t': 102, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 104.0, 'row_start': 108, 'row_midpoint': 110.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 101.0, 'end_time': 112})], 4: [({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 111.0, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 103, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 106, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 113, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 116, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 103, 'row_midpoint': 108.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 112.0, 'end_time': 113}), ({'t': 103, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 103, 'row_midpoint': 108.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 112.0, 'end_time': 113}), ({'t': 103, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 109, 'row_midpoint': 111.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 102.0, 'end_time': 113})], 5: [({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 112.0, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 104, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 107, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 114, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 117, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 104, 'row_midpoint': 109.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 113.0, 'end_time': 114}), ({'t': 104, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 104, 'row_midpoint': 109.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 113.0, 'end_time': 114}), ({'t': 104, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 110, 'row_midpoint': 112.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 103.0, 'end_time': 114})]}
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{'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 105.0, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 108.0}{'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 105.0, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 108.0}Passed
astronomical fixture 1{'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 100, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 103}{'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 100, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 103}Passed
astronomical fixture 2{'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 110, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 113}{'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 110, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 113}Passed
astronomical fixture 3{'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0}{'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0}Passed
astronomical fixture 4{'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0}{'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0}Passed
astronomical fixture 5{'barycentric_midpoint': 99.0, 'end_time': 110, 'reference_time': 102.0, 'row_midpoint': 108.0, 'row_start': 106, 'shutter_corrected': 105.0}{'barycentric_midpoint': 99.0, 'end_time': 110, 'reference_time': 102.0, 'row_midpoint': 108.0, 'row_start': 106, 'shutter_corrected': 105.0}Passed

SHA-256 / 7b9a6620dc80b4ca587682b33dda3df4965dee8d43e52d7c04753a0a52d8b17e

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:46:00.380836+00:00.

Case digest / d3bb493b675ed80a86e9692aed6decf9fba2d2d37d549cb1a491928262b284e3