{"abstract":"Radio and optical velocity conventions use different frequency denominators.","category":"Astronomical coordinate conventions","checks":6,"contract":"Positive integer frequencies f and rest; mode radio or optical. Return reduced rational v/c string: (rest-f)/rest for radio, (rest-f)/f for optical. This tests convention conversion, not a relativistic physical speed.","contract_signature":"f, rest, mode","evaluation_group":"model-01c49299ec17189d","failed_approach":"Using the radio formula universally reverses which convention is handled correctly.","family":"z-astronomy-spectral-doppler-convention","id":"FA-12171","implementations":{"attempt":{"sha256":"666be9d1e665a084c05aa2cd666d05955496f7cfa0b5924fb8b7d5798726374f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(f, rest, mode):\n    return str(Fraction(rest-f,rest))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('radio redshift', solve(N, 2*N, \"radio\"), '1/2')\ncheck('optical redshift', solve(N, 2*N, \"optical\"), '1')\ncheck('radio blueshift', solve(2*N, N, \"radio\"), '-1')\ncheck('optical blueshift', solve(2*N, N, \"optical\"), '-1/2')\ncheck('zero shift', solve(N, N, \"radio\"), '0')\ncheck('nonbinary ratio', solve(2*N, 3*N, \"optical\"), '1/2')\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":"25e3992a6fdb50a35f72b5b43e2d0307d7da1d11b1b79c2128f7819b1ada9004","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(f, rest, mode):\n    return str(Fraction(rest-f,f))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('radio redshift', solve(N, 2*N, \"radio\"), '1/2')\ncheck('optical redshift', solve(N, 2*N, \"optical\"), '1')\ncheck('radio blueshift', solve(2*N, N, \"radio\"), '-1')\ncheck('optical blueshift', solve(2*N, N, \"optical\"), '-1/2')\ncheck('zero shift', solve(N, N, \"radio\"), '0')\ncheck('nonbinary ratio', solve(2*N, 3*N, \"optical\"), '1/2')\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":"Reduced deterministic algebraic model only; no ephemeris, full sky projection, or physical accuracy 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-spectral-doppler-convention","generated_at":"2026-09-29T14:38:54.376277+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Astronomical coordinate adapters must preserve convention semantics. Primary background: https://docs.astropy.org/en/stable/units/equivalencies.html","root_cause":"The observed frequency is substituted for the rest frequency regardless of the declared velocity convention.","sha256":"528d84fb333622390edac68cdba173d4b7a811599cc95a7d384d839195e6c8e2","title":"Radio and optical velocity conventions use different frequency denominators · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":45.892,"exit_code":1,"observations":[{"actual":"1/2","check":"radio redshift","expected":"1/2","passed":true},{"actual":"1/2","check":"optical redshift","expected":"1","passed":false},{"actual":"-1","check":"radio blueshift","expected":"-1","passed":true},{"actual":"-1","check":"optical blueshift","expected":"-1/2","passed":false},{"actual":"0","check":"zero shift","expected":"0","passed":true},{"actual":"1/3","check":"nonbinary ratio","expected":"1/2","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"radio redshift\", \"actual\": \"1/2\", \"expected\": \"1/2\", \"passed\": true}, {\"check\": \"optical redshift\", \"actual\": \"1/2\", \"expected\": \"1\", \"passed\": false}, {\"check\": \"radio blueshift\", \"actual\": \"-1\", \"expected\": \"-1\", \"passed\": true}, {\"check\": \"optical blueshift\", \"actual\": \"-1\", \"expected\": \"-1/2\", \"passed\": false}, {\"check\": \"zero shift\", \"actual\": \"0\", \"expected\": \"0\", \"passed\": true}, {\"check\": \"nonbinary ratio\", \"actual\": \"1/3\", \"expected\": \"1/2\", \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.505,"exit_code":1,"observations":[{"actual":"1","check":"radio redshift","expected":"1/2","passed":false},{"actual":"1","check":"optical redshift","expected":"1","passed":true},{"actual":"-1/2","check":"radio blueshift","expected":"-1","passed":false},{"actual":"-1/2","check":"optical blueshift","expected":"-1/2","passed":true},{"actual":"0","check":"zero shift","expected":"0","passed":true},{"actual":"1/2","check":"nonbinary ratio","expected":"1/2","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"radio redshift\", \"actual\": \"1\", \"expected\": \"1/2\", \"passed\": false}, {\"check\": \"optical redshift\", \"actual\": \"1\", \"expected\": \"1\", \"passed\": true}, {\"check\": \"radio blueshift\", \"actual\": \"-1/2\", \"expected\": \"-1\", \"passed\": false}, {\"check\": \"optical blueshift\", \"actual\": \"-1/2\", \"expected\": \"-1/2\", \"passed\": true}, {\"check\": \"zero shift\", \"actual\": \"0\", \"expected\": \"0\", \"passed\": true}, {\"check\": \"nonbinary ratio\", \"actual\": \"1/2\", \"expected\": \"1/2\", \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}