Good point; the top level return value of compareNodes() should not have been ignored. This case is now being logged at severe level: "Diff propagated to root but no ID set". If the top level nodes have IDs, then they will generate the needed ReplaceOperation. If they do not have IDs, then nothing can be done and the condition is logged (proceeding with the other edit operations otherwise obtained). Note that <html> and <body> will typically have IDs due to code in DOMPartialViewContext. In the case of a subtree diff, an ID will typically be present since the component has specified the subtree render by ID (however it is possible that a component bug would produce a case where the ID was missing).
Integrated ancestor pruning can be tested with assertions enabled as a JVM flag or :
-ea:org.icefaces...
export CATALINA_OPTS="-ea:org.icefaces..."