There appears to be a small bug with the Request.isXHR() method, the value of the "X-Requested-With" header that Prototype sets by default for all of its AJAX calls is:
"XMLHttpRequest" Tapestry checks against the value: "XmlHttpRequest" The RequestImplTest has the header value hard coded incorrectly explaining the test passing. I am happy to log an issue for this if that is helpful. As an aside we have been using AJAX in Tapestry 5 and have found it very easy and very easy and powerful! Thanks, Adam