In production mode, Tapestry turns off the logic that checks for changes to files (all types of files, including resources made available as assets). It uses a single placeholder value to identify the date time modified of all resources.
When a request for a resource is sent from the client, the time stamp in the request is compared to the placeholder timestamp. Unfortunately, in most cases, they are not equal as expected, because the date on the client is one one-second accurate, not millisecond accurate.
The end result is many more asset requests are processed fully, rather than sending a 304 result code.
The fix is to limit the placeholder time stamp value to one second accuracy, so that the server and the client can agree that the client has the up-to date version of the asset.