Email from Ed Burns :
"Yes, we do behave differently depending on staging. There are two
levels:
1. Spec assertions that declare what implementations may or must do based on ProjectStage.
Search the JSF PDF for ProjectStage and you'll find things like:
2.6.1.4 An implementation may perform caching of resource metadata to
improve performance if ProjectStage is ProjectStage.Production.
3.6.2.1 If ProjectStage is Development, the "displayName",
"shortDescription"...are exposed using the corresponding methods on the
composite component BeanDescriptor.
6.2.3 If ProjectStage is Development, the runtime must guarantee that
the above debug information is available to be included in any Facelet
based error page using the <ui:include> with a src attribute equal to
the string javax.faces.error.xhtml.
7.4.2 If none of the above steps found a matching <navigation-case>, if
ProjectStage is not Production, render a message in the page that
explains that there was no match for this outcome.
There are several others.
2. Whatever implementations want to do based on ProjectStage.
The spec can't say anything about this, but I know some impls do things
based on this."
If we standardize a way of define stages (again, I think the type safe one from DeltaSpike could be a good start), then I can take it back to Java EE. Java EE could standardize a staging lifecycle that all the specs could implement and do then own think.