fix(tradein-frontend): остановить retry-storm на 401 (#800) #1304

Merged
bot-backend merged 1 commit from fix/tradein-retry-storm-800 into main 2026-06-13 11:53:09 +00:00
Collaborator

Summary

Устраняет retry-storm + белый экран при 401 (#800, tradein frontend).

При стойком 401 на /me фронт штормил /me + /trade-in/quota (184+ запросов) — re-subscribe loop: errored query + дефолтный refetchOnMount:true (TanStack v5) → каждый новый observer (RouteGuard/Topbar/UserMenu/useBrand) ре-фетчил при mount.

Фикс

  • QueryClient defaults: refetchOnMount:false + refetchOnReconnect:false + экспоненциальный retryDelay (cap 30s). retry-предикат (4xx→false) уже был.
  • useQuota: те же гарды.
  • Graceful session-screen (RouteGuard→NoAccessScreen) уже на месте.

Blast-radius (code-reviewer APPROVE): глобальный refetchOnMount:false безопасен — остальные queries immutable-by-key / interval-polled / explicit-invalidation.

Test plan

  • tsc clean, next build OK
  • code-reviewer APPROVE
  • DoD post-deploy: ≤1-2 запроса на 401

Closes #800

## Summary Устраняет retry-storm + белый экран при 401 (#800, tradein frontend). При стойком 401 на `/me` фронт штормил `/me` + `/trade-in/quota` (184+ запросов) — re-subscribe loop: errored query + дефолтный `refetchOnMount:true` (TanStack v5) → каждый новый observer (RouteGuard/Topbar/UserMenu/useBrand) ре-фетчил при mount. ### Фикс - QueryClient defaults: `refetchOnMount:false` + `refetchOnReconnect:false` + экспоненциальный `retryDelay` (cap 30s). retry-предикат (4xx→false) уже был. - `useQuota`: те же гарды. - Graceful session-screen (RouteGuard→NoAccessScreen) уже на месте. **Blast-radius** (code-reviewer APPROVE): глобальный refetchOnMount:false безопасен — остальные queries immutable-by-key / interval-polled / explicit-invalidation. ## Test plan - [x] tsc clean, next build OK - [x] code-reviewer APPROVE - [ ] DoD post-deploy: ≤1-2 запроса на 401 Closes #800
bot-backend added 1 commit 2026-06-13 11:49:28 +00:00
fix(tradein-frontend): остановить retry-storm на 401 — refetchOnMount:false + backoff (#800)
Some checks failed
CI / backend-tests (push) Has been skipped
CI / frontend-tests (push) Has been skipped
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / changes (push) Successful in 7s
Deploy Trade-In / build-backend (push) Blocked by required conditions
Deploy Trade-In / build-frontend (push) Blocked by required conditions
Deploy Trade-In / build-browser (push) Blocked by required conditions
Deploy Trade-In / test (push) Blocked by required conditions
Deploy Trade-In / deploy (push) Blocked by required conditions
Deploy Trade-In / changes (push) Has been cancelled
6444dc0ebd
На стойком 401/протухшей сессии фронт повторял /me + /trade-in/quota в
бесконечном цикле (184+ запросов): errored query + дефолтный
refetchOnMount=true → каждый новый observer (useMe дёргают RouteGuard,
Topbar, UserMenu, useBrand) ре-фетчил при mount = re-subscribe storm.
Глобально выключаем refetchOnMount/onReconnect в QueryClient + экспоненциальный
retryDelay (cap 30s); те же гарды на useQuota. retry-предикат 4xx→false уже был.
Graceful session-screen (RouteGuard/NoAccessScreen) уже на месте.

Closes #800
bot-backend merged commit 6444dc0ebd into main 2026-06-13 11:53:09 +00:00
bot-backend deleted branch fix/tradein-retry-storm-800 2026-06-13 11:53:09 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1304
No description provided.