gendesign/tradein-mvp/frontend
bot-backend d5c876e3d0
All checks were successful
CI Trade-In / backend-tests (pull_request) Successful in 7m35s
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 11s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 1m10s
fix(tradein): включаем idempotency-key на фронте, чиним assert-crash и честность докстрингов (#3471)
Ревью PR #3495 нашло, что механизм был мёртвым кодом: фронт не отправлял
Idempotency-Key ни в одном запросе, весь прод-трафик шёл по ненадёжному
fallback-отпечатку. Плюс два "assert" в record_inbound после ON CONFLICT
давали AssertionError (не ловится except SQLAlchemyError) уже ПОСЛЕ
доставки в Telegram — под `python -O` assert и вовсе исчезает.

- useSupportChat.ts: useSendSupportMessage генерирует Idempotency-Key
  (crypto.randomUUID()) на намерение отправить, переиспользует его при
  повторной отправке ТОГО ЖЕ текста, сбрасывает на успехе.
- web_support_storage.record_inbound: assert -> явные ветки с логом;
  логируем отброшенный topic_message_id проигравшего гонку (не молча).
- Докстринги/комментарии переписаны честно: что именно закрывает
  pre-check (ответ клиенту потерян / двойной клик после успеха), а что
  НЕ закрывает (сетевую потерю на плече Selectel -> Telegram — там
  сообщение просто не доставлено, повтор это законная первая попытка).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG
2026-09-12 15:24:21 +03:00
..
public feat(mera-b2c): микроразметка schema.org и картинки превью для публичного сайта 2026-09-10 19:06:35 +03:00
scripts feat(mera-b2c): микроразметка schema.org и картинки превью для публичного сайта 2026-09-10 19:06:35 +03:00
src fix(tradein): включаем idempotency-key на фронте, чиним assert-crash и честность докстрингов (#3471) 2026-09-12 15:24:21 +03:00
.dockerignore feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
Dockerfile feat(mera): Метрика и GA4 на публичном контуре + открытие сайта для индексации 2026-09-10 16:52:31 +03:00
eslint.config.mjs ci(tradein): pre-merge гейт — backend pytest + frontend type-check/lint (#2208) (#2220) 2026-07-02 19:56:22 +00:00
next.config.ts fix(tradein/frontend): redirect legacy /trade-in root to canonical /v2 2026-07-02 19:26:55 +03:00
package-lock.json chore(deps/mera): vitest 2 → 3 — заодно уходит вся dev-цепочка vite/esbuild 2026-08-29 14:08:05 +03:00
package.json chore(deps/mera): vitest 2 → 3 — заодно уходит вся dev-цепочка vite/esbuild 2026-08-29 14:08:05 +03:00
tsconfig.json feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
vitest-env.d.ts test(tradein/frontend): первые проверки поведения — пустое поле, погашенное число, отказ 429 (#2766) (#2769) 2026-08-07 07:55:37 +00:00
vitest.config.ts test(tradein/frontend): первые проверки поведения — пустое поле, погашенное число, отказ 429 (#2766) (#2769) 2026-08-07 07:55:37 +00:00
vitest.setup.ts test(tradein/frontend): первые проверки поведения — пустое поле, погашенное число, отказ 429 (#2766) (#2769) 2026-08-07 07:55:37 +00:00