Daftar bug dan inkonsistensi engine-bot dari docs/KNOWN_ISSUES.md source repo. Dikelompokkan per area. Status: 🔴 belum diperbaiki / 🟡 dikonfirmasi / 🟢 diperbaiki.
Critical
| # | Bug | Lokasi | Status |
|---|---|---|---|
| 1 | Payment proof dapat auto-approve — service/order.js dapat mengubah payment_status menjadi paid berdasarkan nominal hasil OpenAI vision. Bukti palsu atau hasil vision salah dapat membuka fulfillment tanpa verifikasi bank/admin | service/order.js — proofTransactionHandler/addProofTransaction | 🔴 |
| 2 | Auth bypass melalui forwarded IP — middleware/authMiddleware.js mempercayai raw x-forwarded-for. Client dapat memalsukan allowlisted IP pada deployment tertentu | middleware/authMiddleware.js:6 | 🔴 |
| 3 | Tenant authorization belum diterapkan — JWT diverifikasi, tetapi store_id, agent_id, customer_id, device_id, cart, product, dan order tidak dicocokkan dengan claims | middleware/authMiddleware.js, controller | 🔴 |
| 4 | SSRF dari URL media — image/audio URL di-fetch tanpa protocol/domain allowlist, private network block, redirect restriction, timeout menyeluruh, atau size limit | utils/util.js, controllers/mainController.js | 🔴 |
| 5 | Secret handling — credential berada di local config source. config/ di-ignore, tetapi plaintext workspace tetap berisiko | config/env.js, config/db.js | 🔴 |
High
| # | Bug | Lokasi | Status |
|---|---|---|---|
| 6 | Buffer dan dedup tidak tenant-safe — key hanya customer_id. Request tenant/device berbeda dapat tercampur. State juga tidak bekerja lintas process | controllers/mainController.js | 🔴 |
| 7 | Batched request dapat menggantung — timer terakhir memegang satu Express response; shared promise tidak di-await. Error timer tidak mengirim HTTP error | controllers/mainController.js | 🔴 |
| 8 | Checkout tidak transactional — order, order items, cart cleanup, dan totals berubah melalui operasi terpisah. Failure tengah proses dapat meninggalkan data parsial | service/order.js | 🔴 |
| 9 | Cart/product scope tidak konsisten — beberapa lookup cart/product tidak memfilter customer/store. ID dari tenant lain berpotensi dipakai | service/carts.js, service/product.js | 🔴 |
| 10 | Sequence order rawan race — nomor/sequence dibuat dari latest value lalu increment tanpa atomic counter atau unique index | service/order.js | 🔴 |
| 11 | Cart create rawan duplikat — check-then-create tidak memiliki compound unique index customer/store/product/variant | service/carts.js, models/carts.js | 🔴 |
| 12 | Konfirmasi gagal dapat tetap menghapus cart — caller tidak selalu membedakan return error dari confirmation success sebelum memajukan follow-up dan cleanup | service/order.js | 🔴 |
| 13 | Cancel status mismatch — writer memakai cancel, scheduler/worker memeriksa cancelled. Cancelled order dapat tetap menerima reminder | models/orders.js, scheduler/worker/worker.js | 🔴 |
| 14 | Socket.IO tidak terisolasi — socket handshake tidak authenticated dan event newMessage dibroadcast global tanpa tenant room | app.js:15-22 | 🔴 |
| 15 | Startup tidak fail-fast pada MongoDB — server listen tanpa menunggu successful DB connection | app.js:27,55, config/db.js | 🔴 |
| 16 | Tidak ada rate limiting — endpoint LLM/vision/audio dapat dipakai untuk cost exhaustion dan denial of service | — | 🔴 |
Correctness
| # | Bug | Lokasi | Status |
|---|---|---|---|
| 17 | Product dipakai tanpa import pada salah satu branch getProductCatalog | service/product.js | 🟡 |
| 18 | Order dipakai saat model import bernama Orders pada constraint flow | service/order.js | 🟡 |
| 19 | getServicesShipping dereference order sebelum null check | service/order.js | 🟡 |
| 20 | qtyProduct dapat undefined pada shipping update fallback | service/order.js | 🟡 |
| 21 | payment_method dideklarasikan dua kali di order schema | models/orders.js:203,255 | 🟡 |
| 22 | Banyak field order memakai require, bukan Mongoose required — validasi tidak aktif | models/orders.js | 🟡 |
| 23 | image.trim() di worker gagal untuk null/non-string | scheduler/worker/worker.js | 🟡 |
| 24 | time_reply tidak divalidasi | controllers/mainController.js | 🟡 |
| 25 | Dedup map tidak memiliki TTL cleanup | controllers/mainController.js | 🟡 |
| 26 | Error/not-found response chatbot tidak konsisten dengan HTTP status normal | controller | 🟡 |
| 27 | Booking tool belum diimplementasikan — seluruh fungsi return pesan stub | tools/booking/tools.js | 🟡 |
| 28 | timestamp typo di agents schema — timestamp: { createdAt: "created_at" } (harusnya timestamps). Hanya createdAt tercatat | models/agents.js:52 | 🟡 |
Performance dan Observability
| # | Bug | Lokasi | Status |
|---|---|---|---|
| 29 | Katalog dan history order dapat dimuat tanpa limit/projection | service/product.js, controller | 🟡 |
| 30 | Query utama minim index | models/*.js | 🟡 |
| 31 | Semua specialist wrappers dibangun setiap request | subagents/*.js | 🟡 |
| 32 | Token/cost tracking hanya mencakup sebagian call OpenAI | service/costOpenAi.js | 🟡 |
| 33 | Log dapat memuat PII, message history, media URL, dan payment payload | semua | 🟡 |
| 34 | Health endpoint tidak memeriksa MongoDB — status: "ok" tidak berarti service siap melayani seluruh flow | app.js:36-44 | 🟡 |
Delivery dan Testing
| # | Bug | Lokasi | Status |
|---|---|---|---|
| 35 | npm test belum menjalankan test — script selalu gagal | package.json | 🔴 |
| 36 | Tidak ada regression suite untuk tenant isolation, checkout, payment, buffer, webhook, atau scheduler | — | 🔴 |
| 37 | package-lock.json di-ignore sehingga install tidak reproducible | .gitignore | 🔴 |
| 38 | Workflow install tidak menetapkan deployment working directory | .github/workflows/ | 🟡 |
| 39 | Dependency audit: 28 vulnerabilities (1 critical, 12 high) — jalankan npm audit --omit=dev; jangan --force tanpa compatibility testing | package.json | 🟡 |
API & Webhook
| # | Bug | Lokasi | Status |
|---|---|---|---|
| 40 | Webhook belum memiliki idempotency key — retry DazoApp dapat mengirim pesan ganda | controllers/webhookController.js | 🔴 |
| 41 | Webhook tidak ada signature atau dedicated credential — route protected JWT/IP umum saja | routes/chatbotRoutes.js:27 | 🔴 |
| 42 | Socket.IO notify-new-message tidak validasi shape data — payload bebas diteruskan ke client | controllers/aiAgentController.js | 🟡 |
| 43 | Engine Bot belum mengirim Bearer token pada request DazoApp create-checkout dan check-status | service/order.js | 🔴 |
Prioritas perbaikan
- Hapus auto-
paiddari manual proof (#1) - Perbaiki authentication dan tenant authorization (#2, #3)
- Amankan media fetch (#4)
- Buat checkout transactional dan tenant-scoped (#8, #9, #10, #11, #12)
- Perbaiki batching/error response dan status cancellation (#6, #7, #13, #14, #15, #16)
- Tambahkan automated regression tests (#35, #36)
- Track lockfile dan upgrade dependency secara terukur (#37, #39)
Detail per prioritas ada di Tech Debt.
Kembali ke
- Tech Debt — roadmap perbaikan
- API Reference — detail endpoint
- Bug Tracker dazoapp — bug di core
- Bug Tracker backend-go — bug di Go API