# Верификационный спринт — независимая проверка через домен Цель: расхождения между «отчёт говорит [x]» и «реально работает на https://test.admin.food-market.kz». Старт: 2026-06-04. Исполнитель: Claude Opus 4.7 (автономный режим). ## Правила - Всё через **https://test.admin.food-market.kz**, не localhost. - Каждая проверка либо `[x] подтверждено + работает`, либо `[x] подтверждено + баг найден + починен + retest зелёный`. - Когда баг: reproduce → fix → build + тесты → `~/deploy-stage.sh` → retest → коммит порцией. - НЕ трогать: global.json, прод admin.food-market.kz, POS WPF. ## Предварительные баги (найдены пользователем) - [ ] **A. Rate-limit на /connect/token не срабатывает** — 7 неверных логинов → все 400, ни одного 429. И через nginx, и напрямую api:8085. Найти/починить middleware/конфиг. - [ ] **B. /metrics через nginx-домен отдаёт SPA HTML** — 947 байт SPA вместо prometheus. Прямой api работает. Routing. - [ ] **C. /swagger/v1/swagger.json через nginx-домен** отдаёт SPA. Аналогично. - [ ] **D. Swagger вообще не подключён на api в Production** — прямой api:8085 /swagger → 404. Включить для Stage. ## Верификация фич (через домен) - [ ] 1. Каталог CRUD через UI (товар + картинка + дубликат). - [ ] 2. Складские документы (Supply/Enter/Loss/Transfer/Inventory/SupplierReturn/Demand) через UI с проверкой Stock. - [ ] 3. RetailSale + CustomerReturn через UI. - [ ] 4. Отчёты Sales/Stock/Profit/ABC через UI с проверкой чисел и экспорта. - [ ] 5. 2FA TOTP через UI (enroll → verify → двухшаговый login → disable). - [ ] 6. Permission-based authz через API (custom role без ProductsEdit → 403). - [ ] 7. OrgAuditLog через UI (3 действия + multi-tenant изоляция). - [ ] 8. SignalR real-time (2 вкладки, продажа в одной → toast/виджет в другой). - [ ] 9. Локализация ru/en (топ-5 страниц). - [ ] 10. Loyalty + Promotions через UI (карта + промокод в чеке). - [ ] 11. PWA (Lighthouse PWA ≥80, offline дашборд + 3 отчёта). - [ ] 12. Mobile 375x667 через Playwright. - [ ] 13. Inventory CSV-импорт через UI. - [ ] 14. POS Sync API с idempotency-key. - [ ] 15. Stock-инвариант под конкуренцией (5 параллельных POST, остаток=3). - [ ] 16. Email-шаблоны через smtp4dev. - [ ] 17. Telegram-бот (или пометить «требует юзера»). - [ ] 18. MinIO storage (картинка в bucket). ## Журнал