Been rapidly reassembling Tapestry functionality inside the new Tapestry 5 code base.
A first pass at localization is now in place. It's missing a couple of key features and a bunch of bells and whistles, but the basics are in place.
I've also started implementing assets. Currently, only context assets are supported, but I'll be working on classpath assets next.
Both of these things were necessary detours before I could start work on form input validation in earnest.
The code is coming together rapidly and very nicely, very cleanly.
I've been stretching to meet "the principle of least surprise" ... just looking for ways that the framework can cleanly and easily do things automatically. For example, the @Inject annotation is very flexible; it takes into account the type of field when determining how to interpret its value. @InjectAsset would have been easier, but that's one more thing for people to remember.
Also, I'm working on an "automatic" Tapestry stylesheet. I want Tapestry apps to have a good, clean look automatically, by inheriting a base stylesheet from the application itself.
Interestingly, because of the way Tapestry 5 renders (to a simplified DOM), it won't be necessary to have Shell or Body components, as with Tapestry 4. There's a post-processing stage that will be able to navigate the DOM and make selected changes, somewhat like a limited version of SiteMesh. This stage will be able to do things like insert a stylesheet link into the <head>.
In fact, I think there will be significantly fewer components in Tapestry 5, especially because of mixins (which will allow existing components to be used in new ways, rather than forcing the creation of entirely new components).
Onward and upwards. Less is More