Three things were wrong with logging out.
SMSG_LOGOUT_COMPLETE only printed a chat line. The server confirms the character
is out of the world there, and the client is supposed to leave on that signal — so
the countdown ran out and nothing happened. It now fires a callback that Application
acts on.
/quit and /exit were aliases of /logout, so even once the above works they would
only ever drop to character select. They now carry an exit-after-logout flag through
the same handshake and close the game when the server confirms.
/logout was not a command at all: aliases() is the complete name list and it only
listed camp, quit and exit — /help has been advertising a command that silently did
nothing.
Also log the stand state from SMSG_STANDSTATE_UPDATE: the logout pose looks wrong
(slumped rather than seated), and a wrong state from the server is indistinguishable
in-game from a wrong animation.