Skip to content

Screw-linear clock-domain reliability

The screw-linear fitter now intersects the feasible clock offsets of every fitted gyro window and accelerometer observation. A coupled update outside this interval is rejected before evaluating its objective, and damping increases for a retry. Exhausting the damping limit records stalled / clock_domain_limit. Timestamps are never clipped. A zero-width interval cannot support clock estimation; fixed clock fitting remains available.

All factors use the same feasible derivative direction. Positive clock increments move trajectory queries left; negative increments move them right. Accelerometer finite differences use the actual representable signed increment. At exact internal gyro endpoint knots, an otherwise stationary final fit also checks the opposite side when feasible. A zero gradient on just one side cannot certify convergence when the other side has a nonzero gradient. The optional fit_diagnostics.clock_domain records bounds, rejected updates, the primary derivative increment, and the opposite gradient when checked.

Retained development comparison

Evidence retains paired results, source hashes, changed-source snapshots, and the exact runner. Both versions use the existing joint synthetic recovery defaults, with seeds 20261010, 1, and 2. These reused development seeds are not independent validation or a speed study.

Seed Baseline status / iterations Current status / iterations Quality gates Detected controls
20261010 stalled / 35 stalled / 31 both pass both 32/32
1 stalled / 25 converged / 18 both pass both 32/32
2 stalled / 34 stalled / 32 both pass both 32/32

None of these three runs rejects a clock update. Small parameter and stopping differences accompany using the representable finite-difference increment; they do not establish an accuracy or runtime improvement. Dedicated regression tests exercise rejection before evaluation, damping retries, narrow domains, large timestamps, consistent derivative sides across factors, an accelerometer probe constrained by another factor, and a knot with hidden opposite-side descent.

To reproduce, copy evaluate_clock.py.txt to a Python file, set OPENBLAS_NUM_THREADS=1, and run it with a fresh output directory. For the baseline use the manifest's base revision; for the measured version overlay the three measured_source snapshots on that revision. Use PYTHONPATH to select that source tree. Each protocol binds all package Python files by SHA-256.

Limits

This is a domain guard and conservative stopping audit, not a projected solver or a constrained-optimality certificate. A valid boundary optimum may still be reported as stalled. Only fitted observations constrain the interval. The knot audit uses exact floating-point ties, without snapping nearby timestamps, and does not provide a general nonsmooth accelerometer stationarity proof. The existing accelerometer motion stencil is unchanged. B-spline numerical behavior, marginalization, and a general clock-stationarity audit remain future work.