{"abstract":"A FITS CD matrix receives the CDELT axis scale a second time.","category":"Astronomical coordinate conventions","checks":6,"contract":"Reduced two-axis linear FITS WCS model: delta is pixel offset, matrix is CD or PC according to mode. CD maps directly; PC requires output-row scaling by scale. Return two intermediate world coordinates, before sky projection.","contract_signature":"delta, matrix, scale, mode","evaluation_group":"model-af03d1c81ce27d67","failed_approach":"Ignoring CDELT universally fixes CD headers but breaks PC headers.","family":"z-astronomy-wcs-cd-pc-scale","id":"FA-12176","implementations":{"attempt":{"sha256":"d99efc815a4cd89b14b606099a4330c52afb3f97653037fda7f8fc6c5a22a793","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(delta, matrix, scale, mode):\n    return [sum(matrix[i][j]*delta[j] for j in range(2)) for i in range(2)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('CD includes scale', solve([N,2], [[2,1],[1,3]], [5,7], \"CD\"), [2*N+2,N+6])\ncheck('PC needs row scales', solve([N,2], [[2,1],[1,3]], [5,7], \"PC\"), [10*N+10,7*N+42])\ncheck('reference pixel', solve([0,0], [[2,1],[1,3]], [5,7], \"PC\"), [0,0])\ncheck('unit scales', solve([N,2], [[2,1],[1,3]], [1,1], \"PC\"), [2*N+2,N+6])\ncheck('negative axis scale', solve([N,2], [[1,0],[0,1]], [-2,3], \"PC\"), [-2*N,6])\ncheck('CD ignores stale scale', solve([N,2], [[1,0],[0,1]], [0,0], \"CD\"), [N,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":"017516ae817b2deb35e4db8d9f7ca35481fecd7c3445a2aab076a8e3536c0e6f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(delta, matrix, scale, mode):\n    return [scale[i]*sum(matrix[i][j]*delta[j] for j in range(2)) for i in range(2)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('CD includes scale', solve([N,2], [[2,1],[1,3]], [5,7], \"CD\"), [2*N+2,N+6])\ncheck('PC needs row scales', solve([N,2], [[2,1],[1,3]], [5,7], \"PC\"), [10*N+10,7*N+42])\ncheck('reference pixel', solve([0,0], [[2,1],[1,3]], [5,7], \"PC\"), [0,0])\ncheck('unit scales', solve([N,2], [[2,1],[1,3]], [1,1], \"PC\"), [2*N+2,N+6])\ncheck('negative axis scale', solve([N,2], [[1,0],[0,1]], [-2,3], \"PC\"), [-2*N,6])\ncheck('CD ignores stale scale', solve([N,2], [[1,0],[0,1]], [0,0], \"CD\"), [N,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-wcs-cd-pc-scale","generated_at":"2026-09-29T14:38:54.494566+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/api/astropy.wcs.Wcsprm.html","root_cause":"The adapter treats CD and PC as equivalent dimensionless matrices.","sha256":"fa56f8da276f3fcd2c0114eecc4e173fa8be1cc2c3252b6f6645ed603415e732","title":"A FITS CD matrix receives the CDELT axis scale a second time · 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":39.605,"exit_code":1,"observations":[{"actual":[4,7],"check":"CD includes scale","expected":[4,7],"passed":true},{"actual":[4,7],"check":"PC needs row scales","expected":[20,49],"passed":false},{"actual":[0,0],"check":"reference pixel","expected":[0,0],"passed":true},{"actual":[4,7],"check":"unit scales","expected":[4,7],"passed":true},{"actual":[1,2],"check":"negative axis scale","expected":[-2,6],"passed":false},{"actual":[1,2],"check":"CD ignores stale scale","expected":[1,2],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"CD includes scale\", \"actual\": [4, 7], \"expected\": [4, 7], \"passed\": true}, {\"check\": \"PC needs row scales\", \"actual\": [4, 7], \"expected\": [20, 49], \"passed\": false}, {\"check\": \"reference pixel\", \"actual\": [0, 0], \"expected\": [0, 0], \"passed\": true}, {\"check\": \"unit scales\", \"actual\": [4, 7], \"expected\": [4, 7], \"passed\": true}, {\"check\": \"negative axis scale\", \"actual\": [1, 2], \"expected\": [-2, 6], \"passed\": false}, {\"check\": \"CD ignores stale scale\", \"actual\": [1, 2], \"expected\": [1, 2], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.026,"exit_code":1,"observations":[{"actual":[20,49],"check":"CD includes scale","expected":[4,7],"passed":false},{"actual":[20,49],"check":"PC needs row scales","expected":[20,49],"passed":true},{"actual":[0,0],"check":"reference pixel","expected":[0,0],"passed":true},{"actual":[4,7],"check":"unit scales","expected":[4,7],"passed":true},{"actual":[-2,6],"check":"negative axis scale","expected":[-2,6],"passed":true},{"actual":[0,0],"check":"CD ignores stale scale","expected":[1,2],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"CD includes scale\", \"actual\": [20, 49], \"expected\": [4, 7], \"passed\": false}, {\"check\": \"PC needs row scales\", \"actual\": [20, 49], \"expected\": [20, 49], \"passed\": true}, {\"check\": \"reference pixel\", \"actual\": [0, 0], \"expected\": [0, 0], \"passed\": true}, {\"check\": \"unit scales\", \"actual\": [4, 7], \"expected\": [4, 7], \"passed\": true}, {\"check\": \"negative axis scale\", \"actual\": [-2, 6], \"expected\": [-2, 6], \"passed\": true}, {\"check\": \"CD ignores stale scale\", \"actual\": [0, 0], \"expected\": [1, 2], \"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."}}