food-market/docs/verify-progress.md
nns ba54155225
Some checks failed
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
Docker Web / Build + push Web (push) Has been cancelled
Docker Web / Deploy Web on stage (push) Has been cancelled
fix(stage): rate-limit 5/min на /connect/token, nginx route /metrics+/swagger, Swagger в Production через IncludeSwagger
Verify-Sprint баги A-D:
- A: на stage docker-compose.yml был "RateLimiting__PerMinute=200" — убран,
  теперь работают дефолты (5/мин, 20/час). 6-я попытка с тем же IP/паролем → 429.
- B: web-контейнер nginx не имел location = /metrics → запрос ловился SPA
  fallback'ом (index.html, 947 байт). Добавлен proxy_pass на api:8080.
- C: web-nginx не имел location /swagger/ → swagger.json возвращал SPA HTML.
  Добавлены /swagger/ + редирект /swagger → /swagger/.
- D: Swagger подключался только в Development. Добавлен флаг IncludeSwagger
  (env IncludeSwagger=true) — Program.cs включает UseSwagger() и в Production
  если флаг выставлен. На prod admin.food-market.kz флаг не ставим.

Проверено через https://test.admin.food-market.kz:
- 6 неверных логинов подряд: 1-5 → 400, 6-7 → 429 ✓
- /metrics → 14967 байт prometheus exposition ✓
- /swagger/v1/swagger.json → 422 КБ openapi 3.0.1 ✓
- /swagger/ → swagger-ui (redirect на /swagger/index.html) ✓

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-04 01:36:42 +05:00

43 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Верификационный спринт — независимая проверка через домен
Цель: расхождения между «отчёт говорит [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).
## Журнал