The '.' command is not the result of your null move. It is a CECP command to probe the engine in analysis mode, for checking what it is doing. (E.g. which move it is thinking about.) WinBoard sends it automatically every 2 seconds to the engine, when analyzing (but stops doing it if it gets no reply). Apparently SF does not implement this command. But it doesn't seem to hurt; it just continues analyzing, and accepts the move a3b3 you enter.
The clock click triggered the sending of 'setboard' later. It still uses the trick to send the complete position with the opposit side to move, rather than sending a null move @@@@. It has to use that trick for normal Chess engines, where turn passing is illegal. I changed that when playing games, but it turns out that during analysis a different piece of code in WinBoard is used for sending the move (because in analysis mode the opening book would not be used). And I had not changed it there. So during analysis it still sends a position ('setboard') instead of a move ('usermove @@@@').
Now in principle SF has some special code to recognize a position that only alters the side to move as a null move, so this should not have been a problem. But it apparently is: Stockfish processing of 'setboard' itself is broken. It does not work when the 'setboard' is received while a search is going on. In that case it should abort that search first, and it does not. It would also not automatically restart a search in the new position. In other words, it is not designed to be handled in analyze mode at all.
For the purpose of Janggi, which does have null move, it is probably easiest to just avoid setboard entirely, and let WinBoard send a null move instead. I have now uploaded a new WinBoard-AA.zip with a temporary fix that does this. (But only for the 'first engine'.)