> I completely agree that the decision of what to do wrt join/leave should be
> up to the client and not part of the XEP at all.  However the XEP already
> had language like "On the other hand, if the event is a retract
> notification, the client SHOULD leave the room immediately." and so this led
> to specifying an inconsistent UX (as opposed to not specifying UX at all,
> which would be preferred).
>
> I think the solution in practise will be to ignore the SHOULD in clients
> that know what they are doing.

XEPs are meant to prescribe behaviour - what happens, and even how it happens, but not how it is presented. Showing a dialog is purely presentation - it has no consequences outside of itself, and the interaction need not even be through a dialog. Leaving a MUC is an action - something actually happens; how that is presented to the user is out of scope, but it's a thing that happens and has consequences.

The use of SHOULD tends to confuse people due to its common (non-normative) usage. MUST means "do this or bad things will happen"; while SHOULD means "do this or bad things will happen (but if you really insist…)" So, no, clients SHOULD NOT be ignoring 'SHOULD' - the 'SHOULDs' SHOULD NOT be there in the first place when they are prescribing incorrect behaviour.

The root issue is that the purpose of the 'autojoin' attribute is being misinterpreted and so it is misused; I suspect the advice about joining/leaving when a bookmark is added/removed may have influenced this. I don't have an issue with those things as suggestions - it does make sense to join now when adding a bookmark with autojoin, and it does equally make sense to leave now when removing the bookmark; ideally, though, you would offer to do these things and allow the user to decide at the time. What does not make sense is forcefully leaving when autojoin is changed from true to false. Again, this results from 'autojoin' being misused in place of a 'joined' attribute.

Would anything break if a 'joined' attribute were added? Then we could gradually migrate to using that, and autojoin regains its actual purpose.