When VIEW_SYNC gets a view V30 that's greater than its own viewV29, it creates a VIEW message, to be sent up to GMS. GMS will then install that view.
However, VIEW_SYNC adds a VIEW_SYNC header rather than a GMS header, so GMS will simply discard the new (correct) view.
SOLUTION: VIEW_SYNC must use "GMS" rather than "VIEW_SYNC" in Message.putHeader()