URL is probably picking up the .load extension from request.extension. It might be more convenient to set that to 'html'.
This is a slightly tricky "feature". The propagation of the .load extension (or any extension) depends on how URL() is called. I think it's a problem in the way _gURL was implemented, and it makes URL even more hard to understand than it already was.
The issue is that URL defaults to request.extension (among other things) if request is passed to URL. And request is implicitly passed to URL if you call URL(func) or URL(ctlr, func) -- but *not* if you call URL(app, ctlr, func). And of course you can override extension with extension=something (as long as 'something' isn't None).
We don't ordinarily care about this propagation, because 'html', the default, is almost always what we want.
URL is already so tricky in the way it works that I'd be really wary of changing it; it'd almost certainly break something for someone. I haven't used LOAD, and I'm a little hazy on how it works, but perhaps we could change some central load handler to set request.extension=None, or something like that. I think that'd be reasonable, since a new load request would set the extension explicitly.
That'll work, and you don't have to set extension= in the redirect. Also, you can set request.extension = None, which sets things back to their default state (effectively).
I'm not sure how formControllerFromComponent figures in your flow. In general, you can set request.extension = None in any .load controller to avoid propagation.