Skip to content

Гарантировать доставку античит-событий без потери очереди #71

Description

@DIvanCode

Проблема

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. Клиентская очередь не считается завершённой до согласования этого контракта.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    • Status
      Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions