FAILURE MAP
← Case archive

FA-12061 / Sensor fusion consistency / Open access

Missing measurement axis resets a tracked component · case 01

A sensor observing only one axis overwrites the other estimate.

Verified by executionVariant 1 · 6 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Missing values are filled with a zero pseudo-measurement.

VERIFIED REPAIR

Update only explicitly observed axes, including valid zero measurements.

Unsuccessful approach: Truthiness treats zero-valued observations as missing.

Case contract

Two-axis scalar-gain model: return each prior component averaged with the corresponding observation if it is not None; otherwise retain prior. Return fraction strings.

Why this case matters

Deterministic sensor-fusion model isolating one consistency contract; no hardware or production estimator is simulated.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(prior, observed):
    return [str(Fraction(p+(z or 0),2)) for p,z in zip(prior,observed)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('missing y', solve([N,2*N],[3*N,None]), [str(2*N),str(2*N)])
check('observed zero', solve([2*N,4*N],[0,0]), [str(N),str(2*N)])
check('missing x', solve([N,2*N],[None,0]), [str(N),str(N)])
check('both missing', solve([N,-N],[None,None]), [str(N),str(-N)])
check('both observed', solve([N,N],[3*N,5*N]), [str(2*N),str(3*N)])
check('negative observation', solve([N,N],[-3*N,None]), [str(-N),str(N)])
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 fixtureActualExpectedOutcome
missing y['2', '1']['2', '2']Failed
observed zero['1', '2']['1', '2']Passed
missing x['1/2', '1']['1', '1']Failed
both missing['1/2', '-1/2']['1', '-1']Failed
both observed['2', '3']['2', '3']Passed
negative observation['-1', '1/2']['-1', '1']Failed

SHA-256 / dd661242f610754dd617709a1a746f13d833af1092baaa318788669068890327

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(prior, observed):
    return [str(Fraction(p+z,2)) if z else str(p) for p,z in zip(prior,observed)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('missing y', solve([N,2*N],[3*N,None]), [str(2*N),str(2*N)])
check('observed zero', solve([2*N,4*N],[0,0]), [str(N),str(2*N)])
check('missing x', solve([N,2*N],[None,0]), [str(N),str(N)])
check('both missing', solve([N,-N],[None,None]), [str(N),str(-N)])
check('both observed', solve([N,N],[3*N,5*N]), [str(2*N),str(3*N)])
check('negative observation', solve([N,N],[-3*N,None]), [str(-N),str(N)])
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 fixtureActualExpectedOutcome
missing y['2', '2']['2', '2']Passed
observed zero['2', '4']['1', '2']Failed
missing x['1', '2']['1', '1']Failed
both missing['1', '-1']['1', '-1']Passed
both observed['2', '3']['2', '3']Passed
negative observation['-1', '1']['-1', '1']Passed

SHA-256 / 767c70bd0eaa9c222946971f3a90973ed42bc8416e9fa4ff7f44bf17b6435774

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(prior, observed):
    return [str(Fraction(p+z,2)) if z is not None else str(p) for p,z in zip(prior,observed)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('missing y', solve([N,2*N],[3*N,None]), [str(2*N),str(2*N)])
check('observed zero', solve([2*N,4*N],[0,0]), [str(N),str(2*N)])
check('missing x', solve([N,2*N],[None,0]), [str(N),str(N)])
check('both missing', solve([N,-N],[None,None]), [str(N),str(-N)])
check('both observed', solve([N,N],[3*N,5*N]), [str(2*N),str(3*N)])
check('negative observation', solve([N,N],[-3*N,None]), [str(-N),str(N)])
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 fixtureActualExpectedOutcome
missing y['2', '2']['2', '2']Passed
observed zero['1', '2']['1', '2']Passed
missing x['1', '1']['1', '1']Passed
both missing['1', '-1']['1', '-1']Passed
both observed['2', '3']['2', '3']Passed
negative observation['-1', '1']['-1', '1']Passed

SHA-256 / 09b381b9b97f7170f6077055fdbdd1a06afc6b74b413b0b8359b2e2aec1bcdfe

Verification & scope

Exact small scalar or two-axis models; no nonlinear dynamics, numerical conditioning, or real sensor noise simulation. 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:53.503345+00:00.

Case digest / 109a649b93e6fc3e0de81fcb372f2a1e0af9bef7490818052d6004d865d4ddc3