FA-12076 / Sensor fusion consistency / Open access
Dropped samples do not accumulate process uncertainty · case 01
Prediction confidence remains too high after a long acquisition gap.
ROOT CAUSE
One process-noise increment is added per delivery instead of elapsed time.
VERIFIED REPAIR
Scale random-walk diffusion variance by the acquisition-time interval.
Unsuccessful approach: Squaring elapsed time applies a constant-velocity uncertainty law to random-walk diffusion.
Case contract
Scalar random walk with variance rate q: return p+q*dt as an integer; p,q,dt nonnegative. This is diffusion, not acceleration noise.
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(p, q, dt):
return p+q
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('gap spans several ticks', solve(N,2,N+2), 3*N+4)
check('zero elapsed time', solve(N,2,0), N)
check('one tick', solve(N,2,1), N+2)
check('no diffusion', solve(N,0,N+2), N)
check('zero prior variance', solve(0,N,3), 3*N)
check('two ticks', solve(N,N,2), 3*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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| gap spans several ticks | 3 | 7 | Failed |
| zero elapsed time | 3 | 1 | Failed |
| one tick | 3 | 3 | Passed |
| no diffusion | 1 | 1 | Passed |
| zero prior variance | 1 | 3 | Failed |
| two ticks | 2 | 3 | Failed |
SHA-256 / 110688e2a534ef44a0a63637cc5338b7e4256069cdf243f2280b02206728907e
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(p, q, dt):
return p+q*dt*dt
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('gap spans several ticks', solve(N,2,N+2), 3*N+4)
check('zero elapsed time', solve(N,2,0), N)
check('one tick', solve(N,2,1), N+2)
check('no diffusion', solve(N,0,N+2), N)
check('zero prior variance', solve(0,N,3), 3*N)
check('two ticks', solve(N,N,2), 3*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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| gap spans several ticks | 19 | 7 | Failed |
| zero elapsed time | 1 | 1 | Passed |
| one tick | 3 | 3 | Passed |
| no diffusion | 1 | 1 | Passed |
| zero prior variance | 9 | 3 | Failed |
| two ticks | 5 | 3 | Failed |
SHA-256 / 2577ace4cb505f6f718d570f76934338395d66aa44d88c8bc50e2b39a1174638
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(p, q, dt):
return p+q*dt
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('gap spans several ticks', solve(N,2,N+2), 3*N+4)
check('zero elapsed time', solve(N,2,0), N)
check('one tick', solve(N,2,1), N+2)
check('no diffusion', solve(N,0,N+2), N)
check('zero prior variance', solve(0,N,3), 3*N)
check('two ticks', solve(N,N,2), 3*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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| gap spans several ticks | 7 | 7 | Passed |
| zero elapsed time | 1 | 1 | Passed |
| one tick | 3 | 3 | Passed |
| no diffusion | 1 | 1 | Passed |
| zero prior variance | 3 | 3 | Passed |
| two ticks | 3 | 3 | Passed |
SHA-256 / 1b825a327993f0e8075fb8da07ab68f2aa4d0b2cb8887f5fec4555ab30ef2178
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.619448+00:00.
Case digest / e05982e25155b9c7d7ab8f8e406c35a7199a722c6b3dd42fe426a20e9abb5226