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.