Проблема
actionQueue очищает очередь и sequence state в finally даже при exception, non-2xx или когда отправка пропущена. pagehide/beforeunload вызывает обычный async fetch, который браузер не обязан завершить. События молча теряются, а Analyzer получает неполную/искажённую последовательность.
Что нужно сделать
- удалять из очереди только подтверждённый сервером batch;
- сохранять ordering и sequence при retry, не отправлять один event с новым номером;
- добавить bounded batch, exponential backoff+jitter и защиту от параллельных flush;
- использовать
keepalive/подходящий beacon endpoint для pagehide либо надёжную persistent queue;
- определить лимит памяти/storage и наблюдаемое поведение при его достижении;
- не блокировать редактор сетью и не отправлять данные другого user/duel после смены контекста;
- согласовать ack/idempotency contract с текущим Backend ingestion.
Критерии готовности
- network/non-2xx не очищает unsent events;
- duplicate delivery не создаёт duplicate domain actions;
- последовательность монотонна внутри user/duel/task;
- logout/смена duel не смешивает очереди;
- pagehide best-effort delivery не вызывает navigation delay.
Проверка
Unit/integration tests failed/successful/partial retry, concurrent flush, pagehide, queue limit, context switch и duplicate ack; lint/FSD/build.
Backend acknowledgement/authorization/idempotency выполняются в CoDuels-Backend#303. Клиентская очередь не считается завершённой до согласования этого контракта.
Проблема
actionQueueочищает очередь и sequence state вfinallyдаже при exception, non-2xx или когда отправка пропущена.pagehide/beforeunloadвызывает обычный async fetch, который браузер не обязан завершить. События молча теряются, а Analyzer получает неполную/искажённую последовательность.Что нужно сделать
keepalive/подходящий beacon endpoint для pagehide либо надёжную persistent queue;Критерии готовности
Проверка
Unit/integration tests failed/successful/partial retry, concurrent flush, pagehide, queue limit, context switch и duplicate ack; lint/FSD/build.
Backend acknowledgement/authorization/idempotency выполняются в CoDuels-Backend#303. Клиентская очередь не считается завершённой до согласования этого контракта.