FA-12166 / Astronomical coordinate conventions / Open access
An absent catalog distance becomes a fabricated spatial point · case 01
An absent catalog distance becomes a fabricated spatial point.
ROOT CAUSE
A direction-only entry receives an invented distance.
VERIFIED REPAIR
Keep missing distance distinct from all numeric distances.
Unsuccessful approach: Truthiness conflates the explicit zero-distance sentinel with absence.
Case contract
Toy catalog projection: direction is a three-number vector; distance None means unknown and returns None; all nonnegative numeric distances including zero produce componentwise products.
Why this case matters
Astronomical catalog and observation adapters must preserve the declared coordinate convention across software boundaries.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(direction, distance):
return [v*(distance if distance is not None else 1) for v in direction]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('unknown', solve([1,0,0], None), None)
check('explicit zero', solve([1,0,0], 0), [0,0,0])
check('known radial', solve([1,0,0], N), [N,0,0])
check('other axis', solve([0,1,0], N), [0,N,0])
check('signed direction', solve([-1,0,0], N), [-N,0,0])
check('fractional distance', solve([0,0,1], 0.5), [0,0,0.5])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| unknown | [1, 0, 0] | None | Failed |
| explicit zero | [0, 0, 0] | [0, 0, 0] | Passed |
| known radial | [1, 0, 0] | [1, 0, 0] | Passed |
| other axis | [0, 1, 0] | [0, 1, 0] | Passed |
| signed direction | [-1, 0, 0] | [-1, 0, 0] | Passed |
| fractional distance | [0.0, 0.0, 0.5] | [0, 0, 0.5] | Passed |
SHA-256 / f404ed844bde40431d2cd84e88136e305ca49eaa6847d5259d2b662d90036693
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(direction, distance):
return [v*distance for v in direction] if distance else None
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('unknown', solve([1,0,0], None), None)
check('explicit zero', solve([1,0,0], 0), [0,0,0])
check('known radial', solve([1,0,0], N), [N,0,0])
check('other axis', solve([0,1,0], N), [0,N,0])
check('signed direction', solve([-1,0,0], N), [-N,0,0])
check('fractional distance', solve([0,0,1], 0.5), [0,0,0.5])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| unknown | None | None | Passed |
| explicit zero | None | [0, 0, 0] | Failed |
| known radial | [1, 0, 0] | [1, 0, 0] | Passed |
| other axis | [0, 1, 0] | [0, 1, 0] | Passed |
| signed direction | [-1, 0, 0] | [-1, 0, 0] | Passed |
| fractional distance | [0.0, 0.0, 0.5] | [0, 0, 0.5] | Passed |
SHA-256 / 7ac77318b8dd8321f9230a54bd6a568a7b96dd221d40065d5a0c1bf7a0ce247c
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(direction, distance):
return None if distance is None else [v*distance for v in direction]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('unknown', solve([1,0,0], None), None)
check('explicit zero', solve([1,0,0], 0), [0,0,0])
check('known radial', solve([1,0,0], N), [N,0,0])
check('other axis', solve([0,1,0], N), [0,N,0])
check('signed direction', solve([-1,0,0], N), [-N,0,0])
check('fractional distance', solve([0,0,1], 0.5), [0,0,0.5])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| unknown | None | None | Passed |
| explicit zero | [0, 0, 0] | [0, 0, 0] | Passed |
| known radial | [1, 0, 0] | [1, 0, 0] | Passed |
| other axis | [0, 1, 0] | [0, 1, 0] | Passed |
| signed direction | [-1, 0, 0] | [-1, 0, 0] | Passed |
| fractional distance | [0.0, 0.0, 0.5] | [0, 0, 0.5] | Passed |
SHA-256 / cc93dc5d2abbc6cb063b638e61ab202eca6f71012234a6060a5cccd38ab5d0bc
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:38:54.330229+00:00.
Case digest / 939ce38b9bca3515a9a7b371ac1d8a41d3b5450c390ab8c9a3d87e0c8eb8b9b7