{"abstract":"The adapter reports an incorrect duration while other fields remain valid.","category":"Astronomical coordinate conventions","checks":6,"contract":"A reduced occultation shadow travels with signed nonzero velocity v along x. Star coordinate xs is fixed, shadow center starts x0 at epoch t0, and positive half-chord h is supplied. Closest longitudinal crossing is t0+(xs-x0)/v; contacts are ordered using absolute transit duration. Output fields are defined by: crossing_epoch = d['t0']+(d['xs']-d['x0'])/d['v']; shadow_center = d['x0']+d['v']*(d['t']-d['t0']); relative_star = d['xs']-d['x0']-d['v']*(d['t']-d['t0']); first_contact = d['t0']+(d['xs']-d['x0'])/d['v']-abs(d['h']/d['v']); last_contact = d['t0']+(d['xs']-d['x0'])/d['v']+abs(d['h']/d['v']); duration = 2*abs(d['h']/d['v'])","evaluation_group":"astro-occultation-shadow-coordinate","failed_approach":"A partial convention repair still uses 2*d['h']/d['v']","family":"s3-astronomical-coordinate-conventions-occultation-shadow-coordinate-duration","id":"FA-56246","implementations":{"attempt":{"sha256":"a1741a5448098778f95c47e511c0edf09da54e9338df8aa4f8a80dcf1af6ab56","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    return {'crossing_epoch': d['t0']+(d['xs']-d['x0'])/d['v'], 'shadow_center': d['x0']+d['v']*(d['t']-d['t0']), 'relative_star': d['xs']-d['x0']-d['v']*(d['t']-d['t0']), 'first_contact': d['t0']+(d['xs']-d['x0'])/d['v']-abs(d['h']/d['v']), 'last_contact': d['t0']+(d['xs']-d['x0'])/d['v']+abs(d['h']/d['v']), 'duration': 2*d['h']/d['v']}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = {1: [({'xs': 20, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 108.0, 'shadow_center': 14, 'relative_star': 6, 'first_contact': 105.0, 'last_contact': 111.0, 'duration': 6.0}), ({'xs': 20, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 92.0, 'shadow_center': -6, 'relative_star': 26, 'first_contact': 89.0, 'last_contact': 95.0, 'duration': 6.0}), ({'xs': 20, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 108.0, 'shadow_center': 14, 'relative_star': 6, 'first_contact': 108.0, 'last_contact': 108.0, 'duration': 0.0}), ({'xs': 4, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 100.0, 'shadow_center': 14, 'relative_star': -10, 'first_contact': 97.0, 'last_contact': 103.0, 'duration': 6.0}), ({'xs': 20, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 108.0, 'shadow_center': 4, 'relative_star': 16, 'first_contact': 105.0, 'last_contact': 111.0, 'duration': 6.0}), ({'xs': 20, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 105.75, 'shadow_center': 17, 'relative_star': 3, 'first_contact': 104.25, 'last_contact': 107.25, 'duration': 3.0})], 2: [({'xs': 21, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 108.5, 'shadow_center': 14, 'relative_star': 7, 'first_contact': 105.5, 'last_contact': 111.5, 'duration': 6.0}), ({'xs': 21, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 91.5, 'shadow_center': -6, 'relative_star': 27, 'first_contact': 88.5, 'last_contact': 94.5, 'duration': 6.0}), ({'xs': 21, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 108.5, 'shadow_center': 14, 'relative_star': 7, 'first_contact': 108.5, 'last_contact': 108.5, 'duration': 0.0}), ({'xs': 5, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 100.5, 'shadow_center': 14, 'relative_star': -9, 'first_contact': 97.5, 'last_contact': 103.5, 'duration': 6.0}), ({'xs': 21, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 108.5, 'shadow_center': 4, 'relative_star': 17, 'first_contact': 105.5, 'last_contact': 111.5, 'duration': 6.0}), ({'xs': 21, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 106.0, 'shadow_center': 17, 'relative_star': 4, 'first_contact': 104.5, 'last_contact': 107.5, 'duration': 3.0})], 3: [({'xs': 22, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 109.0, 'shadow_center': 14, 'relative_star': 8, 'first_contact': 106.0, 'last_contact': 112.0, 'duration': 6.0}), ({'xs': 22, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 91.0, 'shadow_center': -6, 'relative_star': 28, 'first_contact': 88.0, 'last_contact': 94.0, 'duration': 6.0}), ({'xs': 22, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 109.0, 'shadow_center': 14, 'relative_star': 8, 'first_contact': 109.0, 'last_contact': 109.0, 'duration': 0.0}), ({'xs': 6, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 101.0, 'shadow_center': 14, 'relative_star': -8, 'first_contact': 98.0, 'last_contact': 104.0, 'duration': 6.0}), ({'xs': 22, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 109.0, 'shadow_center': 4, 'relative_star': 18, 'first_contact': 106.0, 'last_contact': 112.0, 'duration': 6.0}), ({'xs': 22, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 106.25, 'shadow_center': 17, 'relative_star': 5, 'first_contact': 104.75, 'last_contact': 107.75, 'duration': 3.0})], 4: [({'xs': 23, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 109.5, 'shadow_center': 14, 'relative_star': 9, 'first_contact': 106.5, 'last_contact': 112.5, 'duration': 6.0}), ({'xs': 23, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 90.5, 'shadow_center': -6, 'relative_star': 29, 'first_contact': 87.5, 'last_contact': 93.5, 'duration': 6.0}), ({'xs': 23, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 109.5, 'shadow_center': 14, 'relative_star': 9, 'first_contact': 109.5, 'last_contact': 109.5, 'duration': 0.0}), ({'xs': 7, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 101.5, 'shadow_center': 14, 'relative_star': -7, 'first_contact': 98.5, 'last_contact': 104.5, 'duration': 6.0}), ({'xs': 23, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 109.5, 'shadow_center': 4, 'relative_star': 19, 'first_contact': 106.5, 'last_contact': 112.5, 'duration': 6.0}), ({'xs': 23, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 106.5, 'shadow_center': 17, 'relative_star': 6, 'first_contact': 105.0, 'last_contact': 108.0, 'duration': 3.0})], 5: [({'xs': 24, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 110.0, 'shadow_center': 14, 'relative_star': 10, 'first_contact': 107.0, 'last_contact': 113.0, 'duration': 6.0}), ({'xs': 24, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 90.0, 'shadow_center': -6, 'relative_star': 30, 'first_contact': 87.0, 'last_contact': 93.0, 'duration': 6.0}), ({'xs': 24, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 110.0, 'shadow_center': 14, 'relative_star': 10, 'first_contact': 110.0, 'last_contact': 110.0, 'duration': 0.0}), ({'xs': 8, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 102.0, 'shadow_center': 14, 'relative_star': -6, 'first_contact': 99.0, 'last_contact': 105.0, 'duration': 6.0}), ({'xs': 24, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 110.0, 'shadow_center': 4, 'relative_star': 20, 'first_contact': 107.0, 'last_contact': 113.0, 'duration': 6.0}), ({'xs': 24, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 106.75, 'shadow_center': 17, 'relative_star': 7, 'first_contact': 105.25, 'last_contact': 108.25, 'duration': 3.0})]}\nfor i, (record, expected) in enumerate(fixtures[N]):\n    check('astronomical fixture %s' % i, solve(record), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"fbffb6f546b4d3e0464643567d85d154db1aabc40bba11f3b2556c4398f5d972","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    return {'crossing_epoch': d['t0']+(d['xs']-d['x0'])/d['v'], 'shadow_center': d['x0']+d['v']*(d['t']-d['t0']), 'relative_star': d['xs']-d['x0']-d['v']*(d['t']-d['t0']), 'first_contact': d['t0']+(d['xs']-d['x0'])/d['v']-abs(d['h']/d['v']), 'last_contact': d['t0']+(d['xs']-d['x0'])/d['v']+abs(d['h']/d['v']), 'duration': abs(d['h']/d['v'])}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = {1: [({'xs': 20, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 108.0, 'shadow_center': 14, 'relative_star': 6, 'first_contact': 105.0, 'last_contact': 111.0, 'duration': 6.0}), ({'xs': 20, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 92.0, 'shadow_center': -6, 'relative_star': 26, 'first_contact': 89.0, 'last_contact': 95.0, 'duration': 6.0}), ({'xs': 20, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 108.0, 'shadow_center': 14, 'relative_star': 6, 'first_contact': 108.0, 'last_contact': 108.0, 'duration': 0.0}), ({'xs': 4, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 100.0, 'shadow_center': 14, 'relative_star': -10, 'first_contact': 97.0, 'last_contact': 103.0, 'duration': 6.0}), ({'xs': 20, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 108.0, 'shadow_center': 4, 'relative_star': 16, 'first_contact': 105.0, 'last_contact': 111.0, 'duration': 6.0}), ({'xs': 20, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 105.75, 'shadow_center': 17, 'relative_star': 3, 'first_contact': 104.25, 'last_contact': 107.25, 'duration': 3.0})], 2: [({'xs': 21, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 108.5, 'shadow_center': 14, 'relative_star': 7, 'first_contact': 105.5, 'last_contact': 111.5, 'duration': 6.0}), ({'xs': 21, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 91.5, 'shadow_center': -6, 'relative_star': 27, 'first_contact': 88.5, 'last_contact': 94.5, 'duration': 6.0}), ({'xs': 21, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 108.5, 'shadow_center': 14, 'relative_star': 7, 'first_contact': 108.5, 'last_contact': 108.5, 'duration': 0.0}), ({'xs': 5, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 100.5, 'shadow_center': 14, 'relative_star': -9, 'first_contact': 97.5, 'last_contact': 103.5, 'duration': 6.0}), ({'xs': 21, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 108.5, 'shadow_center': 4, 'relative_star': 17, 'first_contact': 105.5, 'last_contact': 111.5, 'duration': 6.0}), ({'xs': 21, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 106.0, 'shadow_center': 17, 'relative_star': 4, 'first_contact': 104.5, 'last_contact': 107.5, 'duration': 3.0})], 3: [({'xs': 22, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 109.0, 'shadow_center': 14, 'relative_star': 8, 'first_contact': 106.0, 'last_contact': 112.0, 'duration': 6.0}), ({'xs': 22, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 91.0, 'shadow_center': -6, 'relative_star': 28, 'first_contact': 88.0, 'last_contact': 94.0, 'duration': 6.0}), ({'xs': 22, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 109.0, 'shadow_center': 14, 'relative_star': 8, 'first_contact': 109.0, 'last_contact': 109.0, 'duration': 0.0}), ({'xs': 6, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 101.0, 'shadow_center': 14, 'relative_star': -8, 'first_contact': 98.0, 'last_contact': 104.0, 'duration': 6.0}), ({'xs': 22, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 109.0, 'shadow_center': 4, 'relative_star': 18, 'first_contact': 106.0, 'last_contact': 112.0, 'duration': 6.0}), ({'xs': 22, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 106.25, 'shadow_center': 17, 'relative_star': 5, 'first_contact': 104.75, 'last_contact': 107.75, 'duration': 3.0})], 4: [({'xs': 23, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 109.5, 'shadow_center': 14, 'relative_star': 9, 'first_contact': 106.5, 'last_contact': 112.5, 'duration': 6.0}), ({'xs': 23, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 90.5, 'shadow_center': -6, 'relative_star': 29, 'first_contact': 87.5, 'last_contact': 93.5, 'duration': 6.0}), ({'xs': 23, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 109.5, 'shadow_center': 14, 'relative_star': 9, 'first_contact': 109.5, 'last_contact': 109.5, 'duration': 0.0}), ({'xs': 7, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 101.5, 'shadow_center': 14, 'relative_star': -7, 'first_contact': 98.5, 'last_contact': 104.5, 'duration': 6.0}), ({'xs': 23, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 109.5, 'shadow_center': 4, 'relative_star': 19, 'first_contact': 106.5, 'last_contact': 112.5, 'duration': 6.0}), ({'xs': 23, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 106.5, 'shadow_center': 17, 'relative_star': 6, 'first_contact': 105.0, 'last_contact': 108.0, 'duration': 3.0})], 5: [({'xs': 24, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 110.0, 'shadow_center': 14, 'relative_star': 10, 'first_contact': 107.0, 'last_contact': 113.0, 'duration': 6.0}), ({'xs': 24, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 90.0, 'shadow_center': -6, 'relative_star': 30, 'first_contact': 87.0, 'last_contact': 93.0, 'duration': 6.0}), ({'xs': 24, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 110.0, 'shadow_center': 14, 'relative_star': 10, 'first_contact': 110.0, 'last_contact': 110.0, 'duration': 0.0}), ({'xs': 8, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 102.0, 'shadow_center': 14, 'relative_star': -6, 'first_contact': 99.0, 'last_contact': 105.0, 'duration': 6.0}), ({'xs': 24, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 110.0, 'shadow_center': 4, 'relative_star': 20, 'first_contact': 107.0, 'last_contact': 113.0, 'duration': 6.0}), ({'xs': 24, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 106.75, 'shadow_center': 17, 'relative_star': 7, 'first_contact': 105.25, 'last_contact': 108.25, 'duration': 3.0})]}\nfor i, (record, expected) in enumerate(fixtures[N]):\n    check('astronomical fixture %s' % i, solve(record), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"b985e0faeb375f1eef36508f20ae1b4c1647b5a2ef056c8d39c6c96b2494ffb8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    return {'crossing_epoch': d['t0']+(d['xs']-d['x0'])/d['v'], 'shadow_center': d['x0']+d['v']*(d['t']-d['t0']), 'relative_star': d['xs']-d['x0']-d['v']*(d['t']-d['t0']), 'first_contact': d['t0']+(d['xs']-d['x0'])/d['v']-abs(d['h']/d['v']), 'last_contact': d['t0']+(d['xs']-d['x0'])/d['v']+abs(d['h']/d['v']), 'duration': 2*abs(d['h']/d['v'])}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = {1: [({'xs': 20, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 108.0, 'shadow_center': 14, 'relative_star': 6, 'first_contact': 105.0, 'last_contact': 111.0, 'duration': 6.0}), ({'xs': 20, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 92.0, 'shadow_center': -6, 'relative_star': 26, 'first_contact': 89.0, 'last_contact': 95.0, 'duration': 6.0}), ({'xs': 20, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 108.0, 'shadow_center': 14, 'relative_star': 6, 'first_contact': 108.0, 'last_contact': 108.0, 'duration': 0.0}), ({'xs': 4, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 100.0, 'shadow_center': 14, 'relative_star': -10, 'first_contact': 97.0, 'last_contact': 103.0, 'duration': 6.0}), ({'xs': 20, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 108.0, 'shadow_center': 4, 'relative_star': 16, 'first_contact': 105.0, 'last_contact': 111.0, 'duration': 6.0}), ({'xs': 20, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 105.75, 'shadow_center': 17, 'relative_star': 3, 'first_contact': 104.25, 'last_contact': 107.25, 'duration': 3.0})], 2: [({'xs': 21, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 108.5, 'shadow_center': 14, 'relative_star': 7, 'first_contact': 105.5, 'last_contact': 111.5, 'duration': 6.0}), ({'xs': 21, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 91.5, 'shadow_center': -6, 'relative_star': 27, 'first_contact': 88.5, 'last_contact': 94.5, 'duration': 6.0}), ({'xs': 21, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 108.5, 'shadow_center': 14, 'relative_star': 7, 'first_contact': 108.5, 'last_contact': 108.5, 'duration': 0.0}), ({'xs': 5, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 100.5, 'shadow_center': 14, 'relative_star': -9, 'first_contact': 97.5, 'last_contact': 103.5, 'duration': 6.0}), ({'xs': 21, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 108.5, 'shadow_center': 4, 'relative_star': 17, 'first_contact': 105.5, 'last_contact': 111.5, 'duration': 6.0}), ({'xs': 21, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 106.0, 'shadow_center': 17, 'relative_star': 4, 'first_contact': 104.5, 'last_contact': 107.5, 'duration': 3.0})], 3: [({'xs': 22, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 109.0, 'shadow_center': 14, 'relative_star': 8, 'first_contact': 106.0, 'last_contact': 112.0, 'duration': 6.0}), ({'xs': 22, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 91.0, 'shadow_center': -6, 'relative_star': 28, 'first_contact': 88.0, 'last_contact': 94.0, 'duration': 6.0}), ({'xs': 22, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 109.0, 'shadow_center': 14, 'relative_star': 8, 'first_contact': 109.0, 'last_contact': 109.0, 'duration': 0.0}), ({'xs': 6, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 101.0, 'shadow_center': 14, 'relative_star': -8, 'first_contact': 98.0, 'last_contact': 104.0, 'duration': 6.0}), ({'xs': 22, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 109.0, 'shadow_center': 4, 'relative_star': 18, 'first_contact': 106.0, 'last_contact': 112.0, 'duration': 6.0}), ({'xs': 22, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 106.25, 'shadow_center': 17, 'relative_star': 5, 'first_contact': 104.75, 'last_contact': 107.75, 'duration': 3.0})], 4: [({'xs': 23, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 109.5, 'shadow_center': 14, 'relative_star': 9, 'first_contact': 106.5, 'last_contact': 112.5, 'duration': 6.0}), ({'xs': 23, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 90.5, 'shadow_center': -6, 'relative_star': 29, 'first_contact': 87.5, 'last_contact': 93.5, 'duration': 6.0}), ({'xs': 23, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 109.5, 'shadow_center': 14, 'relative_star': 9, 'first_contact': 109.5, 'last_contact': 109.5, 'duration': 0.0}), ({'xs': 7, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 101.5, 'shadow_center': 14, 'relative_star': -7, 'first_contact': 98.5, 'last_contact': 104.5, 'duration': 6.0}), ({'xs': 23, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 109.5, 'shadow_center': 4, 'relative_star': 19, 'first_contact': 106.5, 'last_contact': 112.5, 'duration': 6.0}), ({'xs': 23, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 106.5, 'shadow_center': 17, 'relative_star': 6, 'first_contact': 105.0, 'last_contact': 108.0, 'duration': 3.0})], 5: [({'xs': 24, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 110.0, 'shadow_center': 14, 'relative_star': 10, 'first_contact': 107.0, 'last_contact': 113.0, 'duration': 6.0}), ({'xs': 24, 'x0': 4, 'v': -2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 90.0, 'shadow_center': -6, 'relative_star': 30, 'first_contact': 87.0, 'last_contact': 93.0, 'duration': 6.0}), ({'xs': 24, 'x0': 4, 'v': 2, 't0': 100, 'h': 0, 't': 105}, {'crossing_epoch': 110.0, 'shadow_center': 14, 'relative_star': 10, 'first_contact': 110.0, 'last_contact': 110.0, 'duration': 0.0}), ({'xs': 8, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 102.0, 'shadow_center': 14, 'relative_star': -6, 'first_contact': 99.0, 'last_contact': 105.0, 'duration': 6.0}), ({'xs': 24, 'x0': 4, 'v': 2, 't0': 100, 'h': 6, 't': 100}, {'crossing_epoch': 110.0, 'shadow_center': 4, 'relative_star': 20, 'first_contact': 107.0, 'last_contact': 113.0, 'duration': 6.0}), ({'xs': 24, 'x0': -3, 'v': 4, 't0': 100, 'h': 6, 't': 105}, {'crossing_epoch': 106.75, 'shadow_center': 17, 'relative_star': 7, 'first_contact': 105.25, 'last_contact': 108.25, 'duration': 3.0})]}\nfor i, (record, expected) in enumerate(fixtures[N]):\n    check('astronomical fixture %s' % i, solve(record), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"s3-astronomical-coordinate-conventions-occultation-shadow-coordinate-duration","generated_at":"2026-09-29T14:46:05.275690+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Catalog, detector, sky-coordinate, and spectroscopy adapters must preserve the association between numeric coordinates and their declared reference conventions.","repair":"Preserve the declared model convention at this site: 2*abs(d['h']/d['v'])","root_cause":"Occultation duration preserves velocity sign or reports half a chord crossing. Faulty expression: abs(d['h']/d['v'])","sha256":"e7b28b4737c4534b42a5933f70f11e95deeb46ee7b7ac4965d201d9f8d78fb4d","title":"Occultation shadow coordinate: Occultation duration preserves velocity sign or reports half a chord crossing · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.085,"exit_code":1,"observations":[{"actual":{"crossing_epoch":108.0,"duration":6.0,"first_contact":105.0,"last_contact":111.0,"relative_star":6,"shadow_center":14},"check":"astronomical fixture 0","expected":{"crossing_epoch":108.0,"duration":6.0,"first_contact":105.0,"last_contact":111.0,"relative_star":6,"shadow_center":14},"passed":true},{"actual":{"crossing_epoch":92.0,"duration":-6.0,"first_contact":89.0,"last_contact":95.0,"relative_star":26,"shadow_center":-6},"check":"astronomical fixture 1","expected":{"crossing_epoch":92.0,"duration":6.0,"first_contact":89.0,"last_contact":95.0,"relative_star":26,"shadow_center":-6},"passed":false},{"actual":{"crossing_epoch":108.0,"duration":0.0,"first_contact":108.0,"last_contact":108.0,"relative_star":6,"shadow_center":14},"check":"astronomical fixture 2","expected":{"crossing_epoch":108.0,"duration":0.0,"first_contact":108.0,"last_contact":108.0,"relative_star":6,"shadow_center":14},"passed":true},{"actual":{"crossing_epoch":100.0,"duration":6.0,"first_contact":97.0,"last_contact":103.0,"relative_star":-10,"shadow_center":14},"check":"astronomical fixture 3","expected":{"crossing_epoch":100.0,"duration":6.0,"first_contact":97.0,"last_contact":103.0,"relative_star":-10,"shadow_center":14},"passed":true},{"actual":{"crossing_epoch":108.0,"duration":6.0,"first_contact":105.0,"last_contact":111.0,"relative_star":16,"shadow_center":4},"check":"astronomical fixture 4","expected":{"crossing_epoch":108.0,"duration":6.0,"first_contact":105.0,"last_contact":111.0,"relative_star":16,"shadow_center":4},"passed":true},{"actual":{"crossing_epoch":105.75,"duration":3.0,"first_contact":104.25,"last_contact":107.25,"relative_star":3,"shadow_center":17},"check":"astronomical fixture 5","expected":{"crossing_epoch":105.75,"duration":3.0,"first_contact":104.25,"last_contact":107.25,"relative_star":3,"shadow_center":17},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"astronomical fixture 0\", \"actual\": {\"crossing_epoch\": 108.0, \"shadow_center\": 14, \"relative_star\": 6, \"first_contact\": 105.0, \"last_contact\": 111.0, \"duration\": 6.0}, \"expected\": {\"crossing_epoch\": 108.0, \"shadow_center\": 14, \"relative_star\": 6, \"first_contact\": 105.0, \"last_contact\": 111.0, \"duration\": 6.0}, \"passed\": true}, {\"check\": \"astronomical fixture 1\", \"actual\": {\"crossing_epoch\": 92.0, \"shadow_center\": -6, \"relative_star\": 26, \"first_contact\": 89.0, \"last_contact\": 95.0, \"duration\": -6.0}, \"expected\": {\"crossing_epoch\": 92.0, \"shadow_center\": -6, \"relative_star\": 26, \"first_contact\": 89.0, \"last_contact\": 95.0, \"duration\": 6.0}, \"passed\": false}, {\"check\": \"astronomical fixture 2\", \"actual\": {\"crossing_epoch\": 108.0, \"shadow_center\": 14, \"relative_star\": 6, \"first_contact\": 108.0, \"last_contact\": 108.0, \"duration\": 0.0}, \"expected\": {\"crossing_epoch\": 108.0, \"shadow_center\": 14, \"relative_star\": 6, \"first_contact\": 108.0, \"last_contact\": 108.0, \"duration\": 0.0}, \"passed\": true}, {\"check\": \"astronomical fixture 3\", \"actual\": {\"crossing_epoch\": 100.0, \"shadow_center\": 14, \"relative_star\": -10, \"first_contact\": 97.0, \"last_contact\": 103.0, \"duration\": 6.0}, \"expected\": {\"crossing_epoch\": 100.0, \"shadow_center\": 14, \"relative_star\": -10, \"first_contact\": 97.0, \"last_contact\": 103.0, \"duration\": 6.0}, \"passed\": true}, {\"check\": \"astronomical fixture 4\", \"actual\": {\"crossing_epoch\": 108.0, \"shadow_center\": 4, \"relative_star\": 16, \"first_contact\": 105.0, \"last_contact\": 111.0, \"duration\": 6.0}, \"expected\": {\"crossing_epoch\": 108.0, \"shadow_center\": 4, \"relative_star\": 16, \"first_contact\": 105.0, \"last_contact\": 111.0, \"duration\": 6.0}, \"passed\": true}, {\"check\": \"astronomical fixture 5\", \"actual\": {\"crossing_epoch\": 105.75, \"shadow_center\": 17, \"relative_star\": 3, \"first_contact\": 104.25, \"last_contact\": 107.25, \"duration\": 3.0}, \"expected\": {\"crossing_epoch\": 105.75, \"shadow_center\": 17, \"relative_star\": 3, \"first_contact\": 104.25, \"last_contact\": 107.25, \"duration\": 3.0}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.75,"exit_code":1,"observations":[{"actual":{"crossing_epoch":108.0,"duration":3.0,"first_contact":105.0,"last_contact":111.0,"relative_star":6,"shadow_center":14},"check":"astronomical fixture 0","expected":{"crossing_epoch":108.0,"duration":6.0,"first_contact":105.0,"last_contact":111.0,"relative_star":6,"shadow_center":14},"passed":false},{"actual":{"crossing_epoch":92.0,"duration":3.0,"first_contact":89.0,"last_contact":95.0,"relative_star":26,"shadow_center":-6},"check":"astronomical fixture 1","expected":{"crossing_epoch":92.0,"duration":6.0,"first_contact":89.0,"last_contact":95.0,"relative_star":26,"shadow_center":-6},"passed":false},{"actual":{"crossing_epoch":108.0,"duration":0.0,"first_contact":108.0,"last_contact":108.0,"relative_star":6,"shadow_center":14},"check":"astronomical fixture 2","expected":{"crossing_epoch":108.0,"duration":0.0,"first_contact":108.0,"last_contact":108.0,"relative_star":6,"shadow_center":14},"passed":true},{"actual":{"crossing_epoch":100.0,"duration":3.0,"first_contact":97.0,"last_contact":103.0,"relative_star":-10,"shadow_center":14},"check":"astronomical fixture 3","expected":{"crossing_epoch":100.0,"duration":6.0,"first_contact":97.0,"last_contact":103.0,"relative_star":-10,"shadow_center":14},"passed":false},{"actual":{"crossing_epoch":108.0,"duration":3.0,"first_contact":105.0,"last_contact":111.0,"relative_star":16,"shadow_center":4},"check":"astronomical fixture 4","expected":{"crossing_epoch":108.0,"duration":6.0,"first_contact":105.0,"last_contact":111.0,"relative_star":16,"shadow_center":4},"passed":false},{"actual":{"crossing_epoch":105.75,"duration":1.5,"first_contact":104.25,"last_contact":107.25,"relative_star":3,"shadow_center":17},"check":"astronomical fixture 5","expected":{"crossing_epoch":105.75,"duration":3.0,"first_contact":104.25,"last_contact":107.25,"relative_star":3,"shadow_center":17},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"astronomical fixture 0\", \"actual\": {\"crossing_epoch\": 108.0, \"shadow_center\": 14, \"relative_star\": 6, \"first_contact\": 105.0, \"last_contact\": 111.0, \"duration\": 3.0}, \"expected\": {\"crossing_epoch\": 108.0, \"shadow_center\": 14, \"relative_star\": 6, \"first_contact\": 105.0, \"last_contact\": 111.0, \"duration\": 6.0}, \"passed\": false}, {\"check\": \"astronomical fixture 1\", \"actual\": {\"crossing_epoch\": 92.0, \"shadow_center\": -6, \"relative_star\": 26, \"first_contact\": 89.0, \"last_contact\": 95.0, \"duration\": 3.0}, \"expected\": {\"crossing_epoch\": 92.0, \"shadow_center\": -6, \"relative_star\": 26, \"first_contact\": 89.0, \"last_contact\": 95.0, \"duration\": 6.0}, \"passed\": false}, {\"check\": \"astronomical fixture 2\", \"actual\": {\"crossing_epoch\": 108.0, \"shadow_center\": 14, \"relative_star\": 6, \"first_contact\": 108.0, \"last_contact\": 108.0, \"duration\": 0.0}, \"expected\": {\"crossing_epoch\": 108.0, \"shadow_center\": 14, \"relative_star\": 6, \"first_contact\": 108.0, \"last_contact\": 108.0, \"duration\": 0.0}, \"passed\": true}, {\"check\": \"astronomical fixture 3\", \"actual\": {\"crossing_epoch\": 100.0, \"shadow_center\": 14, \"relative_star\": -10, \"first_contact\": 97.0, \"last_contact\": 103.0, \"duration\": 3.0}, \"expected\": {\"crossing_epoch\": 100.0, \"shadow_center\": 14, \"relative_star\": -10, \"first_contact\": 97.0, \"last_contact\": 103.0, \"duration\": 6.0}, \"passed\": false}, {\"check\": \"astronomical fixture 4\", \"actual\": {\"crossing_epoch\": 108.0, \"shadow_center\": 4, \"relative_star\": 16, \"first_contact\": 105.0, \"last_contact\": 111.0, \"duration\": 3.0}, \"expected\": {\"crossing_epoch\": 108.0, \"shadow_center\": 4, \"relative_star\": 16, \"first_contact\": 105.0, \"last_contact\": 111.0, \"duration\": 6.0}, \"passed\": false}, {\"check\": \"astronomical fixture 5\", \"actual\": {\"crossing_epoch\": 105.75, \"shadow_center\": 17, \"relative_star\": 3, \"first_contact\": 104.25, \"last_contact\": 107.25, \"duration\": 1.5}, \"expected\": {\"crossing_epoch\": 105.75, \"shadow_center\": 17, \"relative_star\": 3, \"first_contact\": 104.25, \"last_contact\": 107.25, \"duration\": 3.0}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.014,"exit_code":0,"observations":[{"actual":{"crossing_epoch":108.0,"duration":6.0,"first_contact":105.0,"last_contact":111.0,"relative_star":6,"shadow_center":14},"check":"astronomical fixture 0","expected":{"crossing_epoch":108.0,"duration":6.0,"first_contact":105.0,"last_contact":111.0,"relative_star":6,"shadow_center":14},"passed":true},{"actual":{"crossing_epoch":92.0,"duration":6.0,"first_contact":89.0,"last_contact":95.0,"relative_star":26,"shadow_center":-6},"check":"astronomical fixture 1","expected":{"crossing_epoch":92.0,"duration":6.0,"first_contact":89.0,"last_contact":95.0,"relative_star":26,"shadow_center":-6},"passed":true},{"actual":{"crossing_epoch":108.0,"duration":0.0,"first_contact":108.0,"last_contact":108.0,"relative_star":6,"shadow_center":14},"check":"astronomical fixture 2","expected":{"crossing_epoch":108.0,"duration":0.0,"first_contact":108.0,"last_contact":108.0,"relative_star":6,"shadow_center":14},"passed":true},{"actual":{"crossing_epoch":100.0,"duration":6.0,"first_contact":97.0,"last_contact":103.0,"relative_star":-10,"shadow_center":14},"check":"astronomical fixture 3","expected":{"crossing_epoch":100.0,"duration":6.0,"first_contact":97.0,"last_contact":103.0,"relative_star":-10,"shadow_center":14},"passed":true},{"actual":{"crossing_epoch":108.0,"duration":6.0,"first_contact":105.0,"last_contact":111.0,"relative_star":16,"shadow_center":4},"check":"astronomical fixture 4","expected":{"crossing_epoch":108.0,"duration":6.0,"first_contact":105.0,"last_contact":111.0,"relative_star":16,"shadow_center":4},"passed":true},{"actual":{"crossing_epoch":105.75,"duration":3.0,"first_contact":104.25,"last_contact":107.25,"relative_star":3,"shadow_center":17},"check":"astronomical fixture 5","expected":{"crossing_epoch":105.75,"duration":3.0,"first_contact":104.25,"last_contact":107.25,"relative_star":3,"shadow_center":17},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"astronomical fixture 0\", \"actual\": {\"crossing_epoch\": 108.0, \"shadow_center\": 14, \"relative_star\": 6, \"first_contact\": 105.0, \"last_contact\": 111.0, \"duration\": 6.0}, \"expected\": {\"crossing_epoch\": 108.0, \"shadow_center\": 14, \"relative_star\": 6, \"first_contact\": 105.0, \"last_contact\": 111.0, \"duration\": 6.0}, \"passed\": true}, {\"check\": \"astronomical fixture 1\", \"actual\": {\"crossing_epoch\": 92.0, \"shadow_center\": -6, \"relative_star\": 26, \"first_contact\": 89.0, \"last_contact\": 95.0, \"duration\": 6.0}, \"expected\": {\"crossing_epoch\": 92.0, \"shadow_center\": -6, \"relative_star\": 26, \"first_contact\": 89.0, \"last_contact\": 95.0, \"duration\": 6.0}, \"passed\": true}, {\"check\": \"astronomical fixture 2\", \"actual\": {\"crossing_epoch\": 108.0, \"shadow_center\": 14, \"relative_star\": 6, \"first_contact\": 108.0, \"last_contact\": 108.0, \"duration\": 0.0}, \"expected\": {\"crossing_epoch\": 108.0, \"shadow_center\": 14, \"relative_star\": 6, \"first_contact\": 108.0, \"last_contact\": 108.0, \"duration\": 0.0}, \"passed\": true}, {\"check\": \"astronomical fixture 3\", \"actual\": {\"crossing_epoch\": 100.0, \"shadow_center\": 14, \"relative_star\": -10, \"first_contact\": 97.0, \"last_contact\": 103.0, \"duration\": 6.0}, \"expected\": {\"crossing_epoch\": 100.0, \"shadow_center\": 14, \"relative_star\": -10, \"first_contact\": 97.0, \"last_contact\": 103.0, \"duration\": 6.0}, \"passed\": true}, {\"check\": \"astronomical fixture 4\", \"actual\": {\"crossing_epoch\": 108.0, \"shadow_center\": 4, \"relative_star\": 16, \"first_contact\": 105.0, \"last_contact\": 111.0, \"duration\": 6.0}, \"expected\": {\"crossing_epoch\": 108.0, \"shadow_center\": 4, \"relative_star\": 16, \"first_contact\": 105.0, \"last_contact\": 111.0, \"duration\": 6.0}, \"passed\": true}, {\"check\": \"astronomical fixture 5\", \"actual\": {\"crossing_epoch\": 105.75, \"shadow_center\": 17, \"relative_star\": 3, \"first_contact\": 104.25, \"last_contact\": 107.25, \"duration\": 3.0}, \"expected\": {\"crossing_epoch\": 105.75, \"shadow_center\": 17, \"relative_star\": 3, \"first_contact\": 104.25, \"last_contact\": 107.25, \"duration\": 3.0}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}