Task EP-13-T03 Kritik 10_notifications erpbom-backend backend

Worker va yetkazish — lease, FCM HTTP v1, retry, circuit breaker, joblar

Bajarildi
100% 5/5
Status:

Tavsif

Turtki qatlami: `@Scheduled` worker outbox'ni so'raydi, lease bilan oladi, FCM ga yuboradi va holatni yozadi. 🔴 **`AbstractOutboxWorker` dan meros OLINMAYDI** — sabab bosh izohdagi "worker qarori" bandida (ustun va holat to'plami farq qiladi; CROSS_CUTTING F.2 bu modulni kanonik deb ataydi). Mavjud 5 outbox jadvali va baza klass **tegilmaydi**.

Ichki ishlar

5 ta

Izoh qoldirish

Tarix

11 yozuv

  • ⇄

    system statusni o'zgartirdi Ishlanyapti → Bajarildi

    Bolalardan avtomatik hisoblandi

  • ⇄

    system statusni o'zgartirdi Bajarildi → Ishlanyapti

    Bolalardan avtomatik hisoblandi

  • 💬

    worker-ep-13-t03 izoh qoldirdi

    MUHIT HODISASI (kod emas, lekin lead/foydalanuvchi bilishi SHART). 2026-09-10 ~05:55 da S04 QA agenti compose tekshiruvi paytida /var/www/apps/erpbom-backend/deploy/.env ustiga `cp .env.example .env` bilan adashib yozdi. HOLAT (worker-pm mustaqil tasdiqladi): fayl git'da KUZATILMAYDI (.gitignore:6), zaxira/generator yo'q, oldingi mazmun (708 bayt, 2026-08-19, dev sandbox qiymatlari) TIKLANMADI; hozir 9644 bayt (.env.example nusxasi + ogohlantirish banneri), 7 ta majburiy kalit BO'SH. TA'SIR DOIRASI: repo'ga hech narsa tushmagan (commit yo'q, sir sizmagan - `git grep` bo'sh); ishlab turgan `erpbom` stack'i (erpbom-app / erpbom-dev-postgres / erpbom-dev-minio / erpbom-nginx, hammasi 2-3 hafta 'Up (healthy)') TA'SIRLANMAGAN, chunki env konteynerlarga ishga tushishda kiritilgan. OQIBAT: keyingi `make dev-up`/`prod-up` yoki konteynerni qayta yaratish JIM ishlamaydi - `${VAR:?}` qo'riqchilari aniq xato beradi (bu yaxshi, jimgina buzilish yo'q). TIKLASH QO'LDA KERAK: DB_URL, DB_USER, DB_PASSWORD, JWT_SECRET, MINIO_ROOT_USER, MINIO_ROOT_PASSWORD, ERP_DOMAIN, ERP_COMPANY_NAME, ERP_BOOTSTRAP_OWNER_USERNAME/PASSWORD + dev sandbox uchun BIND_ADDR=127.0.0.1 va 80/443 dan boshqa nginx portlari. Qiymatlar ishlab turgan konteynerlar muhitida hali bor (docker inspect) - LEKIN worker-pm ularni CHIQARIB OLMADI: QA agentining shu urinishi ruxsat tizimi tomonidan bloklangan edi, boshqa agent orqali aylanib o'tish ruxsat laundering'i bo'lardi. Tiklash - foydalanuvchi qarori. TAVSIYA: deploy/.env uchun zaxira/generator qo'shilsin (yoki .env.local naqshi), va agentlarga `.env` ga yozish taqiqlansin - `.env.example` faqat O'QISH uchun nusxalanadi.

  • ⇄

    system statusni o'zgartirdi Ishlanyapti → Bajarildi

    Bolalardan avtomatik hisoblandi

  • 💬

    worker-ep-13-t03 izoh qoldirdi

    TOPILMA (S03 QA; SPEC ZIDDIYATI - worker-pm lead'ga uzatadi, kodda taxmin qilinmadi). 10_notifications.md §6 F1 jadvali n=5 uchun 'Hodisadan beri ~31 s' deydi (1+2+4+8+16), ya'ni BESH kutish oynasi nazarda tutilgan. Lekin §4 holat mashinasi 'failed (attempt_count = 5) -> dead' deb yozadi - demak 5-kutish (16 s) HECH QACHON materiallashmaydi: 4 kutishdan keyin (~15 s) qator dead bo'ladi. Ikki bo'lim bir-biriga zid. Kod §4 ga amal qildi (§4 normativ va bir ma'noli: attempt_count=5 -> dead). Ta'siri: qoida 26 dagi '24 soat navbat to'planadi' va'dasi bilan birga baholanishi kerak - hozir bitta xabar FCM tiklanishini faqat ~15 sekund kutadi, keyin dead bo'ladi (circuit breaker tizimli xatoda attempt_count ni oshirmagani uchun uzoq nosozlik qamrab olinadi, lekin TOKEN darajasidagi qayta urinish oynasi qisqa). KERAK: §5 savol-javob sikli orqali §6 jadvali yoki §4 chegarasi aniqlashtirilsin (a: 5 kutish -> attempt_count=6 da dead; b: jadval ~15 s deb tuzatilsin). Agent o'zboshimchalik bilan tanlamadi. Ikkinchi (kichik) qarz: MAX_ATTEMPTS=5, BATCH_SIZE=100, LEASE_DURATION=5daq NotificationOutboxWorker da hardcoded (S01 dan meros); S03 ning o'z raqamlari (20/60s/5daq) konfiguratsiyada - izchillik uchun keyingi taskda birlashtirilsin.

  • 💬

    worker-ep-13-t03 izoh qoldirdi

    TOPILMA (S01 dan; spec/sxema bo'shligi - worker-pm lead'ga uzatadi): qoida 5 qabul qiluvchini yuborish oldidan qayta tekshirishni talab qiladi, uchinchi sharti - HUQUQ HALI BORMI (spec §5 qoida 5, M4=C talqini). Worker bu shartni BAJARA OLMAYDI: notification_outbox da ham, NotificationEventCatalog/NotificationEventDefinition da ham permission_code (yoki ekvivalent) maydoni YO'Q - qaysi huquq tekshirilishi kerakligi kodda ifodalanmagan. Hozir worker faqat users.status='active' + deleted_at IS NULL ni tekshiradi (qoida 5 ning ikkita shartI). Oqibat: huquqi olib qo'yilgan, lekin akkaunti faol foydalanuvchi navbatdagi xabarni OLADI - spec esa dead/recipient_ineligible kutadi. Bu S01 mezonlariga (5557-5561) kirmaydi, shu sabab S01 bloklanmadi. Hal qilish yo'llari (TANLOV LEAD/BIZNES QARORI, agent o'zboshimchalik bilan tanlamaydi): (a) katalogga permission_code qo'shish (katalog kod artefakti - M2), (b) qabul qiluvchi snapshot'ida huquqni outbox qatoriga yozish, (c) spec'da qoida 5(c) ni ongli ravishda v1 dan chiqarish. Manba: S01 coder javadoc + shu izoh.

  • ⇄

    system statusni o'zgartirdi Backlog → Ishlanyapti

    Bolalardan avtomatik hisoblandi

  • 🔗

    pm-agent bog'liqlik qo'shdi

    → EP-13-T02

  • 🔗

    pm-agent bog'liqlik qo'shdi

    → EP-13-T01

  • 🔗

    pm-agent bog'liqlik qo'shdi

    → EP-13-T00

  • ✦

    pm-agent yaratdi

    Worker va yetkazish — lease, FCM HTTP v1, retry, circuit breaker, joblar

Ma'lumot

Agent
—
Olingan
—
Boshlandi
09.09.2026 21:43
Tugadi
11.09.2026 09:11
Baho
28 soat
Spec
erp/docs/modules/10_notifications.md#5
Branch
—
Commit
—

Bog'liqliklar

Agent uchun

Bu ishni AI agent quyidagicha oladi:

curl -s -X POST https://pmboard.ferp.uz/api/items/EP-13-T03/claim \
  -H "X-Agent: backend-dev-1"

Tugatgach:

curl -s -X POST https://pmboard.ferp.uz/api/items/EP-13-T03/status \
  -H "X-Agent: backend-dev-1" \
  -H "Content-Type: application/json" \
  -d '{"status":"review","note":"..."}'