FA-12071 / Sensor fusion consistency / Open access
Innovation gate ignores uncertainty in the predicted state · case 01
Plausible measurements are rejected when prediction uncertainty grows.
ROOT CAUSE
Gate normalizes residual only by measurement variance.
VERIFIED REPAIR
Compare squared residual against threshold times the summed prediction and measurement variances.
Unsuccessful approach: Using standard deviation without squaring the residual mixes dimensions.
Case contract
Scalar independent-noise innovation gate: accept residual squared <= threshold*(p+r). p and r positive integer variances; threshold positive integer squared-Mahalanobis limit.
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(residual, p, r, threshold):
return residual*residual <= threshold*r
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('prediction uncertainty matters', solve(2*N,3*N*N,N*N,1), True)
check('failed dimensional fix', solve(3*N,2*N*N,2*N*N,1), False)
check('negative boundary', solve(-2*N,3*N*N,N*N,1), True)
check('zero innovation', solve(0,N,N,1), True)
check('large rejection', solve(10*N,N,N,1), False)
check('squared threshold convention', solve(4*N,2*N*N,2*N*N,4), True)
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 |
|---|---|---|---|
| prediction uncertainty matters | False | True | Failed |
| failed dimensional fix | False | False | Passed |
| negative boundary | False | True | Failed |
| zero innovation | True | True | Passed |
| large rejection | False | False | Passed |
| squared threshold convention | False | True | Failed |
SHA-256 / acd8634432e92a8150c92301e695a482b2375c8eb49e951acf079dcc6107341a
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(residual, p, r, threshold):
return abs(residual) <= threshold*(p+r)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('prediction uncertainty matters', solve(2*N,3*N*N,N*N,1), True)
check('failed dimensional fix', solve(3*N,2*N*N,2*N*N,1), False)
check('negative boundary', solve(-2*N,3*N*N,N*N,1), True)
check('zero innovation', solve(0,N,N,1), True)
check('large rejection', solve(10*N,N,N,1), False)
check('squared threshold convention', solve(4*N,2*N*N,2*N*N,4), True)
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 |
|---|---|---|---|
| prediction uncertainty matters | True | True | Passed |
| failed dimensional fix | True | False | Failed |
| negative boundary | True | True | Passed |
| zero innovation | True | True | Passed |
| large rejection | False | False | Passed |
| squared threshold convention | True | True | Passed |
SHA-256 / 4d9bb580ad764942d760caa18e0983170c8bd690b1f396243ab29fe37a44fe9c
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(residual, p, r, threshold):
return residual*residual <= threshold*(p+r)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('prediction uncertainty matters', solve(2*N,3*N*N,N*N,1), True)
check('failed dimensional fix', solve(3*N,2*N*N,2*N*N,1), False)
check('negative boundary', solve(-2*N,3*N*N,N*N,1), True)
check('zero innovation', solve(0,N,N,1), True)
check('large rejection', solve(10*N,N,N,1), False)
check('squared threshold convention', solve(4*N,2*N*N,2*N*N,4), True)
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 |
|---|---|---|---|
| prediction uncertainty matters | True | True | Passed |
| failed dimensional fix | False | False | Passed |
| negative boundary | True | True | Passed |
| zero innovation | True | True | Passed |
| large rejection | False | False | Passed |
| squared threshold convention | True | True | Passed |
SHA-256 / 759f94bbf462029f57fe726a1a0f3af2b882e1bc5d3a26c1c9faf54dad326769
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.619954+00:00.
Case digest / 038a92a5c623da5e7346974ffae5257d3e35f99798f2c93d62a537cdc46cd91a