perf+fix: debounce seq persistence + role changes, null-clear stale peer state

- server: SET_PEER_ROLE now uses the same per-room 500ms debounce as
  SET_CONTROL_MODE (M-4), preventing a buggy/malicious host from
  thrashing the room's UI with rapid promote/demote bursts.
- server: PEER_STATUS relay treats explicit null as 'clear' for
  tabTitle/mediaTitle/currentTime, so the tab-close heartbeat actually
  zeroes out stale state on other peers instead of being silently
  preserved by the clamp fallback.
- background: _persistLastSeq is now trailing-debounced (500ms),
  cutting storage.session IPC writes from one-per-relayed-event to
  one-per-quiet-window in active rooms.
- locales: add missing TOAST_ID_REGENERATED to all 14 non-English
  locales (was blocking locale coverage test on main).
- test: H-1 force-sync demote test now waits out the debounce window
  to reflect real-world UI timing (a host cannot promote, run a
  force-sync, and demote inside 500ms).
This commit is contained in:
KoalaDev
2026-06-29 01:22:41 +02:00
parent e23f9ab226
commit adab684ed0
17 changed files with 40 additions and 8 deletions
+7 -1
View File
@@ -132,8 +132,14 @@ chrome.runtime.onConnect.addListener((port) => {
}
});
let _persistLastSeqTimer = null;
function _persistLastSeq() {
if (storageInitialized) chrome.storage.session.set({ lastSeqBySender });
if (!storageInitialized) return;
if (_persistLastSeqTimer) clearTimeout(_persistLastSeqTimer);
_persistLastSeqTimer = setTimeout(() => {
_persistLastSeqTimer = null;
chrome.storage.session.set({ lastSeqBySender });
}, 500);
}
// --- Boot Sequence Lock ---