{"abstract":"A negative-zero declination loses its hemisphere.","category":"Astronomical coordinate conventions","checks":6,"contract":"Input sign is + or -, d is nonnegative degrees, m and s are 0..59; return signed arcseconds including when d is zero.","contract_signature":"sign, d, m, s","evaluation_group":"model-c0daaf47eff59d3b","failed_approach":"Applying the sign only to degree terms leaves the fractional arc positive.","family":"z-astronomy-declination-sign","id":"FA-12151","implementations":{"attempt":{"sha256":"69a8d26679bdf0e53d8c63a5269a5d02b6c42a017925606d892a8fcf38935e12","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(sign, d, m, s):\n    return (-d if sign == '-' else d)*3600+m*60+s\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('southern zero degree', solve(\"-\", 0, N, 2), -60*N-2)\ncheck('southern whole degree', solve(\"-\", N, 0, 0), -3600*N)\ncheck('southern fraction', solve(\"-\", N, 1, 2), -3600*N-62)\ncheck('north', solve(\"+\", N, 1, 2), 3600*N+62)\ncheck('origin', solve(\"-\", 0, 0, 0), 0)\ncheck('last minute', solve(\"-\", 0, 59, 59), -3599)\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":"45b47a0f8ab779300a6e0b42a3282d8da8e91e5e759949ba65b310bddd1d3066","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(sign, d, m, s):\n    return d*3600+m*60+s\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('southern zero degree', solve(\"-\", 0, N, 2), -60*N-2)\ncheck('southern whole degree', solve(\"-\", N, 0, 0), -3600*N)\ncheck('southern fraction', solve(\"-\", N, 1, 2), -3600*N-62)\ncheck('north', solve(\"+\", N, 1, 2), 3600*N+62)\ncheck('origin', solve(\"-\", 0, 0, 0), 0)\ncheck('last minute', solve(\"-\", 0, 59, 59), -3599)\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-declination-sign","generated_at":"2026-09-29T14:38:54.321749+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.","root_cause":"The degree magnitude is used to infer a sign stored separately.","sha256":"42e5b8ad2344595e2c3e612849394a94462e3fb4a6c8e00eafabcb960744b082","title":"A negative-zero declination loses its hemisphere · 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":40.689,"exit_code":1,"observations":[{"actual":62,"check":"southern zero degree","expected":-62,"passed":false},{"actual":-3600,"check":"southern whole degree","expected":-3600,"passed":true},{"actual":-3538,"check":"southern fraction","expected":-3662,"passed":false},{"actual":3662,"check":"north","expected":3662,"passed":true},{"actual":0,"check":"origin","expected":0,"passed":true},{"actual":3599,"check":"last minute","expected":-3599,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"southern zero degree\", \"actual\": 62, \"expected\": -62, \"passed\": false}, {\"check\": \"southern whole degree\", \"actual\": -3600, \"expected\": -3600, \"passed\": true}, {\"check\": \"southern fraction\", \"actual\": -3538, \"expected\": -3662, \"passed\": false}, {\"check\": \"north\", \"actual\": 3662, \"expected\": 3662, \"passed\": true}, {\"check\": \"origin\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"last minute\", \"actual\": 3599, \"expected\": -3599, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.765,"exit_code":1,"observations":[{"actual":62,"check":"southern zero degree","expected":-62,"passed":false},{"actual":3600,"check":"southern whole degree","expected":-3600,"passed":false},{"actual":3662,"check":"southern fraction","expected":-3662,"passed":false},{"actual":3662,"check":"north","expected":3662,"passed":true},{"actual":0,"check":"origin","expected":0,"passed":true},{"actual":3599,"check":"last minute","expected":-3599,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"southern zero degree\", \"actual\": 62, \"expected\": -62, \"passed\": false}, {\"check\": \"southern whole degree\", \"actual\": 3600, \"expected\": -3600, \"passed\": false}, {\"check\": \"southern fraction\", \"actual\": 3662, \"expected\": -3662, \"passed\": false}, {\"check\": \"north\", \"actual\": 3662, \"expected\": 3662, \"passed\": true}, {\"check\": \"origin\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"last minute\", \"actual\": 3599, \"expected\": -3599, \"passed\": false}], \"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."}}