Several years later...
... I identified, eventually, that Epi::Ns
doesn't obey the inner-product and intercept constraints simultaneously. It also can't be used in predict()
I've provided a corrected algorithm (following Carstensen's paper) as a small R package here: stephematician / effectspline - GitLab