> - **CLOSED** didefinisikan di enum tapi **tidak ada implementasi** — tidak ada endpoint/code path yang mengarah ke status ini
> - **UNASSIGNED ← ASSIGNED (BLOCKED)** — kode secara eksplisit throw error: *"Status cannot be changed to unassigned, you must resolve or reassign to another member."*
> - **RESOLVED tidak bisa di-reopen** — customer reply setelah RESOLVED akan membuat **conversation BARU** dengan status UNASSIGNED, bukan membuka kembali yang lama
> - **Chain Mechanism**: Conversation baru di-link ke conversation lama via `previousConversationId` (linked list)
> - **RESOLVED tidak bisa di-resolve ulang** — kode throw `ConversationAlreadyResolvedError`
> - **Hanya agent yang di-assign** yang bisa resolve conversation-nya sendiri
> - **Pesan ke conversation RESOLVED diblok** — kode throw `ConversationAlreadyResolvedError`
[*] --> UNASSIGNED: Webhook menerima pesan dari customer<br/>(WA / IG / TG)<br/>→ createConversation()<br/>status: UNASSIGNED
UNASSIGNED --> ASSIGNED: ① Manual Assign<br/>Admin/Owner assign ke agent<br/>PATCH /conversations/:id/status<br/>body: {conversationStatus:"ASSIGNED", assignedTo}
UNASSIGNED --> ASSIGNED: ② Get New Chat<br/>Agent klaim chat terlama<br/>POST /conversations/get-new-chat<br/>(hanya role: member,<br/>developer & devops diblok)
UNASSIGNED --> ASSIGNED: ③ Auto-Assign (WhatsApp)<br/>Agent kirim pesan → otomatis assign<br/>(di-trigger saat WA status: SENT,<br/>skipped untuk campaign blast)
ASSIGNED --> ASSIGNED: Reassign ke agent lain<br/>PATCH /conversations/:id/status<br/>(member: hanya miliknya,<br/>admin/owner: semua)
ASSIGNED --> RESOLVED: Resolve<br/>Hanya assigned user yang bisa<br/>PATCH /conversations/:id/status<br/>body: {conversationStatus:"RESOLVED",<br/>resolveCategoryIds, resolvedDescription}
RESOLVED --> NEW_UNASSIGNED: Customer balas pesan<br/>→ TIDAK reopen!<br/>→ Buat conversation BARU<br/>(previousConversationId = lama)