{"abstract":"Propagation confuses a catalog reference epoch with its observation epoch.","category":"Astronomical coordinate conventions","checks":6,"contract":"Toy linear catalog: position x is defined at reference epoch ref; observed is provenance only; return x+rate*(target-ref). Epochs are arbitrary integer model ticks.","evaluation_group":"model-4f6fddb5564249b6","failed_approach":"Assuming a universal reference epoch fixes one catalog but breaks others.","family":"z-astronomy-catalog-epoch","id":"FA-12161","implementations":{"attempt":{"sha256":"7dd8bf3fbd3b7d98d2f13eb418195cc7f100957dfb4ec0cbac48771017ac4538","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x, rate, ref, observed, target):\n    return x+rate*target\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('different provenance', solve(N, 2, 10, 12, 15), N+10)\ncheck('at reference', solve(N, 2, 10, 12, 10), N)\ncheck('backward', solve(N, 2, 10, 12, 8), N-4)\ncheck('zero reference', solve(N, 2, 0, 3, 5), N+10)\ncheck('static', solve(N, 0, 10, 12, 15), N)\ncheck('observation equals target', solve(N, 2, 10, 15, 15), N+10)\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":"b3628c37aa64fdee62d12060212a433db4980b38d15884cbf48d02d965f7c68a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x, rate, ref, observed, target):\n    return x+rate*(target-observed)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('different provenance', solve(N, 2, 10, 12, 15), N+10)\ncheck('at reference', solve(N, 2, 10, 12, 10), N)\ncheck('backward', solve(N, 2, 10, 12, 8), N-4)\ncheck('zero reference', solve(N, 2, 0, 3, 5), N+10)\ncheck('static', solve(N, 0, 10, 12, 15), N)\ncheck('observation equals target', solve(N, 2, 10, 15, 15), N+10)\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":"198a70ea7a3c0e8a53d6c040f36907e8827c621eb5c0437743300894be6db8db","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x, rate, ref, observed, target):\n    return x+rate*(target-ref)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('different provenance', solve(N, 2, 10, 12, 15), N+10)\ncheck('at reference', solve(N, 2, 10, 12, 10), N)\ncheck('backward', solve(N, 2, 10, 12, 8), N-4)\ncheck('zero reference', solve(N, 2, 0, 3, 5), N+10)\ncheck('static', solve(N, 0, 10, 12, 15), N)\ncheck('observation equals target', solve(N, 2, 10, 15, 15), N+10)\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":"Deterministic stipulated adapter model; no ephemeris, physical accuracy, or production astronomy library claims. 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":"z-astronomy-catalog-epoch","generated_at":"2026-09-29T14:38:54.331406+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Astronomical catalog and observation adapters must preserve the declared coordinate convention across software boundaries.","repair":"Use the position reference epoch for the integration interval.","root_cause":"Motion is integrated from observation time instead of the position reference epoch.","sha256":"e8387dd16098cb832b571440f36c2d18e1dd8fe613b1df55ccd6e1f9ace0bfff","title":"Propagation confuses a catalog reference epoch with its observation epoch · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.679,"exit_code":1,"observations":[{"actual":31,"check":"different provenance","expected":11,"passed":false},{"actual":21,"check":"at reference","expected":1,"passed":false},{"actual":17,"check":"backward","expected":-3,"passed":false},{"actual":11,"check":"zero reference","expected":11,"passed":true},{"actual":1,"check":"static","expected":1,"passed":true},{"actual":31,"check":"observation equals target","expected":11,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"different provenance\", \"actual\": 31, \"expected\": 11, \"passed\": false}, {\"check\": \"at reference\", \"actual\": 21, \"expected\": 1, \"passed\": false}, {\"check\": \"backward\", \"actual\": 17, \"expected\": -3, \"passed\": false}, {\"check\": \"zero reference\", \"actual\": 11, \"expected\": 11, \"passed\": true}, {\"check\": \"static\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"observation equals target\", \"actual\": 31, \"expected\": 11, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.808,"exit_code":1,"observations":[{"actual":7,"check":"different provenance","expected":11,"passed":false},{"actual":-3,"check":"at reference","expected":1,"passed":false},{"actual":-7,"check":"backward","expected":-3,"passed":false},{"actual":5,"check":"zero reference","expected":11,"passed":false},{"actual":1,"check":"static","expected":1,"passed":true},{"actual":1,"check":"observation equals target","expected":11,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"different provenance\", \"actual\": 7, \"expected\": 11, \"passed\": false}, {\"check\": \"at reference\", \"actual\": -3, \"expected\": 1, \"passed\": false}, {\"check\": \"backward\", \"actual\": -7, \"expected\": -3, \"passed\": false}, {\"check\": \"zero reference\", \"actual\": 5, \"expected\": 11, \"passed\": false}, {\"check\": \"static\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"observation equals target\", \"actual\": 1, \"expected\": 11, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.683,"exit_code":0,"observations":[{"actual":11,"check":"different provenance","expected":11,"passed":true},{"actual":1,"check":"at reference","expected":1,"passed":true},{"actual":-3,"check":"backward","expected":-3,"passed":true},{"actual":11,"check":"zero reference","expected":11,"passed":true},{"actual":1,"check":"static","expected":1,"passed":true},{"actual":11,"check":"observation equals target","expected":11,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"different provenance\", \"actual\": 11, \"expected\": 11, \"passed\": true}, {\"check\": \"at reference\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"backward\", \"actual\": -3, \"expected\": -3, \"passed\": true}, {\"check\": \"zero reference\", \"actual\": 11, \"expected\": 11, \"passed\": true}, {\"check\": \"static\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"observation equals target\", \"actual\": 11, \"expected\": 11, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}