May I ask here about implementation details?
Gavin, why do you keep conversation scope variables directly in the session context map?
Why do we need so complicated scheme with ?additions? and ?removals? in the ServerConversationContext? What if we have just a simple Map inside ConversationEntry, for instance?
This is all designed to minimize the traffic involved in replicating changes across a cluster.
Your proposal would require replicating the entire conversation on each request to the server.