During 2011 year, I have tried many different ways of making a PLS algorithm (PLS1) as stable possible. The goal was to make it as numerically good as the SVD implemented in MATLAB. The pseudocode that solved the PLS1 case for one y‑varable is shown below and it includes the addition of null vectors to enable full models in the same way as the SVD and QR decomposition algorithms in MATLAB are.
The difficulty was when the model was getting near to the null space and the solution was to allow for the looping to break either during a right side (loading weight vector) computation or during a left side (score vector) computation. The result was a PLS algorithm that cannot be better in terms of numerical accuracy. You could say that with this algorithm we reach the end of the road in terms of numerical stability. But, of course, there may still be work done to speed it up.
The new PLS algorithm has been confirmed to work well for various data sets and because there is no algorithm published yet that is stable down to rank deficiency, is should be published. I have tried with BIT Numerical Mathematics, but they did not understand the problems with currently published algorithms.