fix(bot): navigation v2 — missing shop_district_/shop_subcategory_ handlers, dual-instance race, answerCallbackQuery timing #129

Closed
opened 2026-08-05 09:40:30 +00:00 by NW · 0 comments
Owner

Баг-репорт: Дефекты навигации, сброс состояний и исчезновение локаций (v2)

Severity: Critical | Priority: High

Диагноз (проверено в коде + на серверах)

ROOT CAUSE 1 — Отсутствующие обработчики callback (код-баг):
src/router/routes.js НЕ регистрировал shop_district_ и shop_subcategory_, но они генерировались в callback_data → поломка кнопки Back при пустых категориях.

ROOT CAUSE 2 — Два инстанса бота с одним BOT_TOKEN (гонка состояний):
Локальный контейнер (v1.2.0, Up 5 дней) и прод (v1.2.3) используют ОДИНАКОВЫЙ BOT_TOKEN → дублирование сообщений, гонка состояний, исчезновение стран.

ROOT CAUSE 3 — Часики на кнопках:
answerCallbackQuery вызывался ПОСЛЕ dispatch, а не в начале.

ROOT CAUSE 4 — Select district in : (пустой город):
Нет fallback для пустого city.

Acceptance

  • routes.js: зарегистрированы shop_district_ (handleDistrictBack) + shop_subcategory_ (handleSubcategorySelection)
  • index.js: answerCallbackQuery в начале обработки callback (нет часиков)
  • handleCitySelection: fallback для пустого city (district_unknown)
  • state.location pipe-delimited (encodeURIComponent) — multi-word names не ломают навигацию
  • Guard от stale underscore-формата state.location
  • Тесты (48 pass)
  • Коммит 7a97d56 + push
  • Деплой

Закрыто коммитом 7a97d56 (v1.2.4)

## Баг-репорт: Дефекты навигации, сброс состояний и исчезновение локаций (v2) **Severity:** Critical | **Priority:** High ### Диагноз (проверено в коде + на серверах) **ROOT CAUSE 1 — Отсутствующие обработчики callback (код-баг):** src/router/routes.js НЕ регистрировал shop_district_ и shop_subcategory_, но они генерировались в callback_data → поломка кнопки Back при пустых категориях. **ROOT CAUSE 2 — Два инстанса бота с одним BOT_TOKEN (гонка состояний):** Локальный контейнер (v1.2.0, Up 5 дней) и прод (v1.2.3) используют ОДИНАКОВЫЙ BOT_TOKEN → дублирование сообщений, гонка состояний, исчезновение стран. **ROOT CAUSE 3 — Часики на кнопках:** answerCallbackQuery вызывался ПОСЛЕ dispatch, а не в начале. **ROOT CAUSE 4 — Select district in : (пустой город):** Нет fallback для пустого city. ### Acceptance - [x] routes.js: зарегистрированы shop_district_ (handleDistrictBack) + shop_subcategory_ (handleSubcategorySelection) - [x] index.js: answerCallbackQuery в начале обработки callback (нет часиков) - [x] handleCitySelection: fallback для пустого city (district_unknown) - [x] state.location pipe-delimited (encodeURIComponent) — multi-word names не ломают навигацию - [x] Guard от stale underscore-формата state.location - [x] Тесты (48 pass) - [x] Коммит 7a97d56 + push - [ ] Деплой Закрыто коммитом 7a97d56 (v1.2.4)
NW closed this issue 2026-08-05 09:52:37 +00:00
Sign in to join this conversation.