Repro (deterministic, on main)
```python
import numpy as np
from ssik.prebuilt import ur16e_ik as U
q = np.array([0.0, -2.4834242925436327, -2.446578501260409, -2.6545207067859944, -2.5361296670486584, 0.0])
T = U.fk(q)
sols = U.solve(T, respect_limits=False)
7 sols, worst FK = 7.44e-06 (> the 1e-7 fuzz ceiling; allow_refinement doesn't help)
```
At this near-singular pose (q0 = q5 = 0 → wrist/shoulder alignment) the ikgeo.three_parallel solver returns a branch that FK-closes to only ~7e-6 — above its own FK tolerance, so it should have been filtered. max_fk over the returned set exceeds the arm's 1e-7 ceiling.
Impact
Directions
- The FK-tolerance gate in three_parallel should drop the spurious branch (or the
non_singular_q6r fuzz strategy should exclude q0=q5=0-type alignments).
- Investigate why LM refine (
allow_refinement=True) can't pull the 7e-6 branch in.
Repro (deterministic, on main)
```python
import numpy as np
from ssik.prebuilt import ur16e_ik as U
q = np.array([0.0, -2.4834242925436327, -2.446578501260409, -2.6545207067859944, -2.5361296670486584, 0.0])
T = U.fk(q)
sols = U.solve(T, respect_limits=False)
7 sols, worst FK = 7.44e-06 (> the 1e-7 fuzz ceiling; allow_refinement doesn't help)
```
At this near-singular pose (q0 = q5 = 0 → wrist/shoulder alignment) the
ikgeo.three_parallelsolver returns a branch that FK-closes to only ~7e-6 — above its own FK tolerance, so it should have been filtered.max_fkover the returned set exceeds the arm's 1e-7 ceiling.Impact
test_prebuilt_uniform_fuzz.py::test_prebuilt_6r_random_q_roundtrip[ur16e_ik]can fail when Hypothesis samples near this pose (found during an unrelated full-suite run; ur16e artifact unchanged). Latent flake — CI hasn't reliably hit it.Directions
non_singular_q6rfuzz strategy should exclude q0=q5=0-type alignments).allow_refinement=True) can't pull the 7e-6 branch in.