You were right Tom. Spark behaves differently and i don't think it is right behavior, so i have filed a bug SPARK-1580.
Testing the latest changes. Exiting seem ok with many clients. Other resources still stay in the room and receives messages.
Daryl said prosody developers shared their ideas about implementing other vague parts of the XEP. Would be interesting to know how they handle presence and private messages. Maybe we can do the same or think of our way.
In my testing it seems that presence is always set to the latest presence change (e.g. if both resources are Online and one changes to Away, then other participants will see it as away, if another resources changes to DND, all will see it as DND, etc.). I'm not sure about this, but i can't think of a way to handle it. Say you change your status to DND, but the other resource idles out and changes it to away. So you are not DND anymore, when you probably still want to be DND on that resource. Probably it depends on the usage scenario for this.
Private messages are sent to all resources. So if you are having a private chat with someone on one resources, when you get back to another resource, you will see a bunch of incoming private messages, but not the outgoing messages of course. Wonder if it can detect which resource has actually replied and route all subsequent messages just ot that resource. Probably not possible as both will have same JID and nickname (well, different JID+resource).