Well the cart has been rewritten with some help upstream. It uses the seperate validation and submit hooks to employ the full potential of the forms api. Its also much cleaner, more flexible and more easily updated now so I hope this means good things.
One of the people that helped get some support for the changes, sime, needs updates to the shipping module and api so I'll probably put some work into this in my free time. Feel I kinda owe him some.
The cart is still in somewhat of a flux. Gordon really doesn't like a change I made to the urls durring the checkout process. I'll give a quick run down of the change and the reasoning behind it.
When I did the updates, it became very difficult to track the screen during the redirect. The form api does a 302 redirect after the form validation and submit handlers so a new page is shown with the new data. This is sort of a good thing in the checkoutapi because this allows the checkout api module to do pretty much anything durring its time running and the updates will appear in the new page. However our post is dropped when we redirect so we lost our storage of the screen.
The first solution I used was based on merlin's multipart form example that can be found on his blog and in the drupal handbook. It worked great except it broke this functionality previously available because it stored its screen tracking variable in the session. Once you went to the next screen its updated pretty much permanently and when you browse back you see only the latest screen.
So, I went ahead and added another argument to the path. This arguement just simply tells us what screen we're on so when I user loads the page I check into the session to see if we've validated this far. if not we'll push them back. and then we check to see if they're going back a screen and if so we'll rebuild the transaction to make sure there haven't been any mixups. This is the same structure imposed previously in the module so it made things very straight forward and I didn't have to worry about breaking outside modules.
Gordon however really doesn't like this added arguement and thinks its ugly. There's no argueing with taste though especially when they have control of the module and you dont :). He currently has some changes in cvs that he feels fix the screen# url problem by adding ?op=next to the url. I think this is bad for a couple reasons. A, op is used by drupal as the submit button so on post you're going to have 2 'op' values in $_REQUEST and this feels like it could cause problems. Also, it looks ugly to me. I never like ? urls when they aren't needed. And finally, it breaks the back steping completely the same as the session problem. In fact, I really don't see the point of having it at all as the normal URI should work the same as the system he's implemented.
I've posted the actual current breakages, namely not being able to go back, to the issue thread kept on these updates and until things simmer down and there is a fully working cart in cvs I'm going to maintain a seperate version with the screen in the URL for MG. I've been doing that anyways before the updates went through so I wont be a problem :) It works smashingly so we're good to go on that aspect for now.