SOP Memori Tim AI

Satu sumber aturan untuk semua staf AI (Akbar, Ary, Opi, Dika, Eko) dan Pak Adi: memori kita ada di mana, bentuknya apa, cara mengisi, dan cara mengambilnya. Hasil diskusi Pak Adi & Akbar 12/10/2026. Status: FINAL untuk masa uji (13/10/2026 05:35, disetujui Pak Adi). Tabel database & skrip belum dibangun; yang dibangun nanti mengikuti halaman ini. Selama masa uji: catatan tetap ditulis di berkas yang ada sekarang (skema lama), tetapi sudah mengikuti cara di halaman ini (di bagian yang tepat, arti UPDATE, PK oleh manajer). Isi lama dipindahkan ke tabel baru sekaligus saat SOP diimplementasikan. Masukan staf selama masa uji dikumpulkan manajer, perubahan hanya atas keputusan Pak Adi.

Isi:
1. Kenapa perlu2. Tujuh model memori2b. Detail + contoh3. Struktur tabel4. Aturan kunci & versi5. Sesi chat6. Pengingat7. Cara MENULIS8. Cara MENGAMBIL8b. Cara membaca DB9. Larangan10. Per peran11. Skrip12. Database & sinkron13. Catatan teknis

1. Kenapa perlu

Memori yang acak-acakan merugikan dua hal:

  1. Boros token. Untuk mencari satu hal, AI harus menyisir banyak teks. Makin banyak klien, makin boros, sampai jatah mingguan bisa habis dalam sehari.
  2. Jawaban tidak relevan. Aturan lama & baru tercecer di beberapa tempat, sesi chat panjang di-compact, akhirnya jawaban ke prospek melenceng atau berputar-putar.

Prinsipnya sama dengan relational database: data ditata per tabel, punya indeks, jadi mencari tidak perlu menyisir semuanya. Menulis memang sedikit lebih repot (harus ditaruh di tempat yang benar); mencari jadi murah dan cepat.

Prinsip kedua: jangan mengandalkan ingatan sesi chat. Yang diandalkan adalah memori yang tertulis di tempatnya.

2. Tujuh model memori (HANYA tujuh ini)

Patokan tempat simpan: data yang bentuknya sama berulang-ulang & dicari per kolom → Postgres. Tulisan yang harus dibaca sebagai teks bersama kode / harus tetap terbaca walau database mati → berkas.

#ModelIsinyaDisimpan diDipakai oleh
1Profil orang (prospek/konsumen/member)Siapa orangnya, produk yang ia minati/beli + tahapnya, rangkuman obrolanPostgresCS (Ary, Opi), Akbar
2Product knowledge (PK)Pengetahuan untuk MENJUAL & MELAYANI: harga, isi/layanan, cara order, cara pakai, keberatan + jawaban, batas klaim, eskalasiPostgres (angka & penjelasan)CS, Akbar
3Brainstorming + MAPUntuk MEMBUAT produk. MAP = yang SUDAH dibangun, Brainstorming = yang BARU direncanakan. Begitu dibangun: masuk MAP, dihapus dari BrainstormingBerkas MD di folder kode proyeknyaEko, Dika, tim pembuat
4CLAUDE.mdKarakter & aturan yang SELALU berlaku. Umum untuk semua (mis. aturan gambar, salam, jujur, tanpa janji seumur hidup). Plus satu per peran: aturan cara kerja khusus peran itu (pendek)Berkas CLAUDE.md (otomatis termuat)Semua
5Akses & alatCara masuk server/PC, alat apa di mana, cara menyalakan ulang penjaga WA/tunnel, resep teknis panjang. TANPA isi password; hanya menunjuk tempatnyaBerkas MD kecil (sengaja bukan database: harus tetap terbaca walau database mati)Semua
6Papan tugas + pengingatPekerjaan yang SEDANG berjalan: siapa, apa, kapan, status, langkah berikut. Pengingat = tugas yang punya jamPostgresSemua; Akbar memantau
7Arsip log harianCatatan kejadian (siapa, kapan, apa). Hanya ditambah, tidak pernah dibaca utuhPostgresSemua (menulis), menelusuri bila perlu
Beda SOP dan ISI PK (Pak Adi 13/10): halaman ini (SOP) hanya mengatur MEKANISME: cara mengisi, membaca, dan menjaga memori. ISI PK (harga, menu layanan, ukuran mobil, aturan diskon, dll.) adalah urusan teknis tiap produk dan diputuskan owner/pemegang payungnya. Pertanyaan soal isi (mis. "harga layanan kecil di luar menu berapa?") ditanyakan ke owner produk itu, lalu hasilnya diisikan ke PK, bukan ditambahkan ke SOP.
Tidak ada kategori lain. Tidak ada lagi "SOP" terpisah dan tidak ada "feedback" terpisah. Masukan/koreksi dari Pak Adi atau pengambil keputusan: Bukan model memori: data transaksi (order Monyil, lisensi Magic, akun Caang, order Blitz) tetap di database sistemnya sendiri. Cukup dibaca lewat API/alat baca-saja, tidak disalin.

2b. Penjelasan tiap model + contoh

Model 1 — Profil orang

Untuk apa: supaya CS langsung tahu siapa yang sedang chat, tanpa membaca ulang semua obrolan lama. Kapan diisi: saat orang pertama kali chat (baris orang dibuat), tiap tahap berubah (orang_produk), dan tiap sesi ditutup (profil dirangkum ulang).

Contoh isi (contoh FIKTIF: Budi, kode org-0412):

orang_produktahapcatatan_produk
org-0412 · cncmemberMember CNC VIP sejak Agt 2026, aktif bertanya soal rules Meta.
org-0412 · tbatertarikTanya trial Rp50rb 12/10; belum kirim bahan LP.

Profil (versi berlaku): "Budi, jualan perlengkapan bayi di Bekasi. Member CNC sejak Agustus, paham dasar Meta Ads, suka penjelasan pakai angka. 12/10 tertarik TBA trial, keberatan: takut LP tidak sesuai brand. Janji: kirim foto produk 13/10. Gaya: santai, panggil 'Mas Budi'."

Profil = rangkuman UTUH yang ditulis ulang tiap sesi ditutup. Bukan tumpukan catatan per tanggal.

Model 2 — Product knowledge (PK)

Untuk apa: semua yang perlu diketahui untuk MENJUAL & MELAYANI satu produk, baik produk sendiri (Labbaik, TBA, Magic) maupun produk klien (Otopia). Kapan diisi: saat produk mulai dijual, dan setiap ada keputusan baru soal produk dari Pak Adi/pemilik produk.

Contoh baris pk_harga (harga Otopia per UKURAN mobil, mengikuti pegangan Opi): otopia · anti-karat · medium · Rp2.250.000 · berlaku sejak … · berlaku. Pemetaan mobil → ukuran ada di pk_daftar jenis ukuran-mobil, contoh avanza → medium. Kalau harga beda per cabang, kolom lokasi diisi cabangnya.

Contoh baris pk_penjelasan:

produk · topikisi
otopia · definisi-anti-karatLapisan pelindung kolong & rangka supaya tidak berkarat; proses ±4 jam (pegangan Opi)…
labbaik · keberatan-sudah-ada-buku-manasikBuku manasik tetap berguna; Labbaik melengkapi di HP: urutan langkah + doa tiap tahap, bisa dibuka saat tawaf…
labbaik · batas-klaimJangan klaim "pasti mabrur" / pengganti pembimbing; tanpa "seumur hidup".

Harga berubah → baris lama jadi usang, baris baru ditambah (slug sama). Tidak ada lagi harga di tiga tempat.

WAJIB: setiap informasi baru/tambahan tentang produk yang dijual atau dilayani (aturan diskon, promo, harga baru, garansi, jadwal, cara booking, jawaban keberatan) dimasukkan ke PK produk itu sendiri, BUKAN ke dokumen/berkas terpisah.
Contoh: Pak Obi memberi aturan diskon Otopia → masuk PK Otopia (topik aturan-diskon; kalau berupa angka/promo → pk_daftar jenis promo), menggantikan aturan diskon versi lama. SALAH: membuat berkas "ATURAN_DISKON_OBI.md", atau menulisnya di catatan lain, atau menempel di ekor dokumen.

Model 3 — Brainstorming + MAP (untuk MEMBUAT produk)

Untuk apa: supaya pembuat produk (Eko, Dika, atau AI lain di kemudian hari) bisa melanjutkan pekerjaan tanpa bertanya ulang. Dua berkas berpasangan di folder kode proyek: <PROYEK>_MAP.md dan <PROYEK>_BRAINSTORMING.md.

MAP = peta yang SUDAH dibangun, dibagi per modul (tampilan, database, pembayaran, dll.) dengan petunjuk "modul ini ada di file mana". Contoh potongan MAP Caang:

## Publish
- Alur: editor → cfpages.go CreatePagesProject → deploy. Kuota per paket di tabel subscriptions.
## Reset password
- /forgot-password → token → /reset-password; link email dibangun dari Host permintaan.

BRAINSTORMING = yang BARU direncanakan. Contoh: "Catat kode error Cloudflare saat publish gagal (usul Eko 12/10, menunggu izin)". Begitu dibangun: tulis di MAP, HAPUS dari brainstorming (tanpa tanda "done").

MAP hanya mencerminkan kode yang benar-benar ada. Kalau kode dan MAP berbeda, kode yang benar dan MAP diperbarui.

Model 4 — CLAUDE.md

Untuk apa: karakter & aturan yang harus SELALU dipegang, otomatis termuat tiap sesi. Dua tingkat:

Kalau CLAUDE.md mulai panjang, itu tanda ada isi yang seharusnya masuk PK, Akses & alat, atau papan tugas.

Model 5 — Akses & alat

Untuk apa: "peta mesin": cara masuk, alat apa di mana, cara menyalakan ulang. Contoh isi:

Sengaja berkas, bukan database: kalau database/servernya bermasalah, cara masuk & memperbaikinya harus tetap bisa dibaca. Password tidak pernah ditulis.

Model 6 — Papan tugas + pengingat

Untuk apa: tahu siapa sedang mengerjakan apa, dan tidak ada janji yang terlewat. Contoh baris:

tugassiapadarijatuh tempostatus
FU Budi, minta foto produk untuk LP trial TBAAryBudi (janji)13/10 09.00baru
Video Belajar IoT +27DikaPak Adi–selesai (hasil: galeri)
Perbaiki pesan error publish CaangEkoAkbar–menunggu izin Pak Adi
Laporan harian ke Pak AdiAkbarPak Aditiap hari 20.00berulang

Begitu selesai, status = selesai (tidak dihapus, tapi tidak tampil di daftar kerja).

Model 7 — Arsip log

Untuk apa: jejak kejadian kalau suatu saat perlu ditelusuri ("kapan pelanggan X dikirimi link reset?"). Contoh baris: 12/10 15:10 · Eko · caang · org-0099 · kirim ulang link Lupa password ke email pelanggan.

Hanya ditambah. Tidak pernah dibaca semua; dicari per tanggal/orang/produk.

3. Struktur tabel (Postgres)

Satu database "kerja tim" untuk SEMUA proyek & klien. Tiap baris diberi label proyek/produk. Klien baru = tambah satu baris produk, bukan membuat database baru. Kolom detail (bebas per produk) untuk hal yang unik.

Model 1: Profil orang

TabelKolomKeterangan
orangkode_orang (tetap), nomor_wa (unik), nama, profil_umum, status, dibuat, diubah1 baris per orang. kode_orang dibuat sekali, TIDAK pernah berubah. Nomor & nama hanya isi.
produkslug_produk (tetap: labbaik, tba, cnc, otopia…), nama, jenis (buatan sendiri / klien), statusDaftar produk & klien.
orang_produkkode_orang, slug_produk, tahap (tanya/tertarik/order/lunas/member), catatan_produk, detail, status, berlaku_sejak, diubah_oleh1 baris per orang × produk. Budi member CNC + tertarik TBA = 2 baris.
profil_versikode_orang, ringkasan (rangkuman utuh), status (berlaku/usang), dibuat, oleh_sesiRangkuman obrolan. Tiap sesi ditutup = versi baru yang MENGGANTI (versi lama tetap jadi arsip).

Model 2: Product knowledge

TabelKolomKeterangan
pk_hargaslug_produk, slug_item (layanan/paket), varian (mis. ukuran mobil), lokasi (cabang, boleh kosong), harga, berlaku_sejak, berlaku_sampai, status, diubah_olehSatu baris = satu harga. Contoh: otopia · anti-karat · medium (ukuran mobil). Mobil → ukuran dicari di pk_daftar.
pk_daftarslug_produk, jenis (promo / ukuran-mobil / cabang / dll.), slug_baris, isi, detail, berlaku_sejak, berlaku_sampai, status, diubah_olehDaftar pendek lain yang berupa angka/fakta.
pk_penjelasanslug_produk, slug_topik (mis. definisi-anti-karat, keberatan-kemahalan, gaya-bahasa-bali), judul, isi (teks), visibilitas (publik / internal: jangan disebut ke pelanggan, atau jangan ditawarkan di awal), sumber, berlaku_sejak, status, diubah_olehSatu baris = satu topik PENDEK. Ditanya satu hal → ambil satu baris.

Model 6: Papan tugas + pengingat

TabelKolomKeterangan
tugasslug_tugas (tetap), siapa (yang mengerjakan), dari (yang meminta), slug_produk, kode_orang (boleh kosong), tugas (1 kalimat), bahan, jatuh_tempo (boleh kosong), jadwal_ulang (boleh kosong), jatuh_tempo_berikutnya, sudah_diingatkan, status (baru/dikerjakan/menunggu/selesai/batal), menunggu_apa, langkah_terakhir, langkah_berikut, hasil, dibuat, diubahSatu tabel untuk semua peran. Pengingat = tugas yang jatuh_tempo-nya ada jam. Janji FU ke konsumen = baris tugas (siapa = Ary, kode_orang terisi, jatuh_tempo = jam FU).
Tugas berulang: staf menulis jadwal_ulang dengan bahasa sederhana: "harian 12:00, 17:00", "tiap jam 08:00–21:00", "mingguan Senin 09:00", "bulanan tgl 1 09:00". Alat mengubahnya ke format mesin dan mengisi jatuh_tempo_berikutnya; tiap kali alarm berbunyi, kolom itu dimajukan otomatis. Berhenti = status selesai/batal.
Tugas besar (mis. 27 video) boleh dipecah jadi beberapa tugas anak per jalur/hari dengan kolom tugas_induk (slug tugas induknya). Kolom langkah_terakhir/langkah_berikut menggantikan "catatan atas" papan lama, supaya tahan compact. Tugas "bukti TF menunggu valid" mencatat sumber order (kunci CS / halaman publik), karena order halaman publik ditandai lunas oleh Pak Adi di dashboard.

Model 7: Arsip log

TabelKolomKeterangan
logwaktu, siapa, slug_produk, kode_orang, kode_grup, slug_tugas, id_lampiran, kejadian (singkat)Hanya ditambah. Dicari per kolom (tanggal, orang, produk), tidak pernah dibaca semua.

Pendukung (bukan model memori): tabel sesi

TabelKolomKeterangan
sesiid_sesi (dari Claude), peran, kode_orang / kode_grup / slug_tugas (tepat SATU terisi, dijaga aturan database), status (aktif/ditutup), dibuka, terakhir_aktif, ditutupMencatat sesi chat mana yang sedang dipakai untuk orang/grup/tugas tertentu. Kolom terpisah supaya tiap kolom selalu menunjuk satu tabel yang sama.
grupkode_grup (tetap), wa_id grup, nama, slug_produk, tujuan grup, aturan grup, profil_grup (konteks umum), statusGrup WA (grup member, grup klien, grup cabang) diperlakukan sebagai satu "ruang" dengan sesinya sendiri. Orang di dalamnya tetap punya profil masing-masing di tabel orang.
grup_anggotakode_grup + kode_orang (pasangan kunci tetap), peran di grup (member/admin/klien), produk terkait, minat yang berulang, status, berlaku_sejakCatatan TETAP orang X DI GRUP tertentu. Terpisah dari profil japri. Satu orang di 3 grup = 3 baris.
grup_topikkode_grup, kode_orang, topik, ringkasan singkat, status (aktif / selesai / usang), terakhir_dibahasTopik SEMENTARA yang dibahas orang X di grup. Tidak dibahas 7 hari → skrip alarm menandai usang otomatis (0 token; angka 7 bisa diubah per grup). Usang = tidak dimuat ke sesi, tidak dihapus, bisa diaktifkan lagi. Topik berisi janji yang belum tuntas WAJIB jadi baris tugas sebelum usang.
lampiranid, path berkas, jenis (foto unit / bukti TF / SS iklan / PDF / hasil), keterangan, detail (JSON, isian baku per jenis, dijaga alat tulis), kode_orang / slug_tugas / (slug_produk+slug_topik): tepat SATU pemilik terisi, dibuat, olehBaris lampiran yang menunjuk PEMILIKNYA (bukan sebaliknya). Dicari: "lampiran milik orang X" / "lampiran tugas Y". Berkasnya sendiri di penyimpanan berkas, bukan di database. Satu pemilik boleh punya BANYAK lampiran (satu-ke-banyak): mis. satu tugas = 1 screenshot + 1 bukti TF + 27 video, semuanya baris lampiran yang menunjuk slug_tugas yang sama. Hasil pekerjaan (video jadi, gambar iklan) = lampiran jenis "hasil" milik tugasnya. Galeri/program membaca "lampiran jenis hasil milik tugas X", tidak perlu berkas daftar terpisah. Progres produksi masuk kolom langkah tugas + log.
Isian baku kolom detail per jenis (diisi pembuat lampiran; isian wajib kosong → alat menolak):
• hasil (Dika): judul, kode, produk, gaya, suara, durasi, link, status (publik / pribadi / tertahan + alasan), path PC 250, MD5
• bukti TF (Ary/Opi): nominal, bank tujuan, jam transfer, nomor order, sumber order (kunci CS / halaman publik), status valid
• foto unit (Opi): mobil, cabang, tanggal masuk
• SS iklan (Akbar/Opi): akun iklan, kampanye, tanggal
Perubahan status/link lampiran (mis. tertahan → publik) diubah DI TEMPAT + dicatat di log (bukan versi baru).
Lokasi berkas: penyimpanan yang sudah dipakai sekarang (hasil video/gambar: PC 250 D:\backup253\<Produk>\…, dicocokkan MD5). Berkas kerja sementara yang besar (bahan mentah, folder jalur) boleh di folder kerja dan dihapus sesudah hasil akhir tersimpan & MD5 cocok.

4. Aturan kunci & versi (wajib dipahami)

  1. Soft delete. Data tidak pernah dihapus permanen. Untuk PK dan profil (isi yang mahal kalau hilang): mengubah = baris lama diberi status usang, lalu baris baru ditambah, seperti revisi halaman WordPress. Untuk tabel yang statusnya sering berubah (tugas, orang_produk): diubah di tempat, tetapi tiap perubahan dicatat di log. Menghapus apa pun = status dihapus/batal.
  2. Relasi pakai KUNCI TETAP, bukan ID baris. Karena tiap versi menambah baris (ID baris berubah), tabel saling menyambung lewat slug_produk, slug_item, slug_topik, slug_tugas, kode_orang. ID baris hanya penanda versi.
  3. Yang berlaku = baris dengan kunci itu yang statusnya berlaku. Satu kunci hanya boleh punya satu baris berlaku.
  4. Nama & nomor WA bukan penghubung (nama bisa sama, nomor bisa ganti).
  5. Tiap perubahan mencatat berlaku_sejak dan diubah_oleh.

5. Sesi chat: kapan dibuka & ditutup

Sesi dibuka per SATUAN KERJA, seperti cara Pak Adi membuka chat "Monyil 1, Monyil 2": satu masalah satu sesi.

PeranSatuan kerjaDitutup saat
CS (Ary, Opi)Satu ORANG (konsumen/prospek)Orang itu diam 30 menit
Dika, EkoSatu TUGASTugas selesai / berhenti lama (mis. menunggu izin). Tugas panjang boleh dipecah per kelompok/hari
AkbarSatu TOPIK diskusi dengan Pak Adi, atau satu tugas pengawasanDiam 30 menit / tugas selesai

Grup WA

Alur CS (contoh Budi chat)

  1. WA masuk → skrip penyambung (bridging) cari kode_orang dari nomor WA (belum ada = dibuat).
  2. Cari di tabel sesi: sesi aktif milik orang itu yang terakhir aktif < 30 menit.
  3. Ada → lanjutkan sesi itu. Tidak ada → buat sesi baru, diisi paket: profil terbaru + baris orang_produk + 10–15 chat terakhir (diambil dari WA) + bagian PK yang relevan.
  4. Pesan beruntun dalam 30–60 detik digabung jadi satu panggilan.
  5. Sebelum ditutup: sesi menulis profil BARU yang merangkum ulang secara utuh (profil lama + obrolan sesi ini), bukan ditempel di bawah profil lama. Tahap di orang_produk & janji FU (baris tugas) diperbarui.

6. Pengingat (tanpa Claude berjaga)

7. Cara MENULIS memori

Ada informasi baru tentang…Tulis ke
Orang (kebutuhan, keberatan, rencana, sudah beli)Model 1: orang_produk (tahap) + profil saat sesi ditutup
Aturan internal yang berlaku untuk SEMUA orang (mis. "boleh harga khusus, tapi jangan ditawarkan di awal")Model 2: PK, ditandai visibilitas internal
Harga/perlakuan khusus untuk SATU orang (pelanggan setia, kawan dekat)Boleh di profil orang itu ("pelanggan setia, harga spesial Rp…, sesuai konfirmasi X"), ATAU di PK dengan catatan "hanya untuk … sesuai konfirmasi khusus". Keduanya sah.
Janji FU / pekerjaan yang harus dilakukanModel 6: baris tugas (dengan jam kalau ada)
Harga, layanan, garansi, promo, cara order, jawaban keberatanModel 2: PK, di topik yang tepat (ditulis MANAJER; staf lain meneruskan ke manajer)
Bukti transfer / order yang menunggu "valid" Pak AdiModel 6: baris tugas (status menunggu, menunggu_apa = valid Pak Adi), supaya tidak tercecer
Berkas bukti / hasil kerja (foto unit, bukti TF, SS iklan, PDF, video jadi)Simpan berkasnya di penyimpanan berkas, lalu satu baris di tabel lampiran yang menunjuk pemiliknya
Rencana fitur / yang sudah dibangun di produk buatan sendiriModel 3: Brainstorming / MAP proyeknya
Aturan cara kerja satu peranModel 4: CLAUDE.md peran itu
Aturan untuk semua staf / karakterModel 4: CLAUDE.md umum
Cara masuk mesin, alat, cara menyalakan ulangModel 5: Akses & alat
Kejadian (untuk jejak)Model 7: log
SIAPA yang menulis PK (keputusan Pak Adi 13/10): semua PK baru dan setiap update PK hanya ditulis oleh MANAJER: Akbar (produk tim uranus) atau Opi (Otopia). Kalau owner/pemilik produk memberi informasi produk ke staf non-manajer (mis. Pak Adi japri ke Ary), staf itu meneruskan ke manajer; manajer mengonfirmasi ke owner, lalu menulisnya ke PK (dengan arti UPDATE di bawah). Staf non-manajer hanya MEMBACA PK.
Aturan payung (Pak Adi 13/10): kalau owner sudah mendelegasikan hal TEKNIS kepada orang tertentu (contoh: Pak Obi menyerahkan ukuran mobil, lama pengerjaan, dan hal operasional kepada admin cabang Otopia), maka informasi teknis dari orang itu langsung masuk PK tanpa konfirmasi ulang ke owner (sumber: nama admin + jam). Owner cukup memberi aturan payungnya sekali. Yang di luar payung (kebijakan harga, diskon, garansi) tetap dari owner.
Owner langsung ke manajer = sudah terkonfirmasi, tidak perlu ditanya ulang (cukup ulangi singkat supaya tidak salah tangkap).
Masa peralihan: kalau ada konsumen yang sudah terlanjur ditawari aturan lama, pengecualiannya tidak diputuskan sendiri. Manajer konfirmasi dulu ke owner/pemberi update terkait, baru ditulis ke PK.

Aturan menulis

  1. Cari dulu tempatnya (produk + topik yang tepat), lalu UPDATE di situ (lihat kotak "Arti UPDATE" di bawah). Jangan menempel di ekor, jangan membuat berkas/dokumen baru.
  2. Satu hal hanya ada di satu tempat. Kalau menemukan hal yang sama di dua tempat, laporkan ke Akbar.
  3. Tulis saat itu juga, bukan menunggu akhir hari (tahan compact).
  4. Tulis ringkas & pasti: kesimpulan, bukan salinan obrolan.
  5. Selalu isi tanggal berlaku & siapa yang mengubah.
  6. Hal yang masih diskusi dengan Pak Adi belum boleh ditulis sebagai aturan, diteruskan ke staf, atau dikerjakan sampai Pak Adi menyatakan final.

Arti UPDATE (wajib dipahami)

UPDATE bukan menghapus isi lama lalu menggantinya dengan potongan baru. UPDATE = isi lama tetap dipakai, hanya bagian yang berhubungan dengan informasi baru yang diganti atau ditambah. Bagian lain tidak boleh hilang.

Contoh benar: topik garansi Otopia berisi 6 poin; ada keputusan baru soal masa garansi anti karat → poin "masa garansi anti karat" saja yang diganti; 5 poin lainnya tetap utuh di versi baru.

Contoh SALAH (pernah terjadi): seluruh catatan dihapus, diganti satu kalimat informasi baru, sehingga banyak catatan lama hilang.

Cara aman: (1) baca isi versi yang berlaku, (2) ubah hanya bagian yang relevan, (3) simpan sebagai versi baru utuh (versi lama tetap tersimpan sebagai arsip), (4) bandingkan: tidak ada poin lama yang hilang tanpa alasan.

8. Cara MENGAMBIL memori

  1. Ambil hanya yang dibutuhkan: satu orang, satu produk, satu topik, satu tugas. Pakai alat/kueri yang menyaring per kolom.
  2. Jangan pernah menyisir semuanya (full scan) untuk mencari satu hal. Jangan membaca berkas besar sekaligus.
  3. Pertanyaan sederhana dijawab langsung dari yang sudah ada; jangan menggali arsip untuk hal remeh.
  4. Arsip log hanya dibuka untuk menelusuri kejadian tertentu, disaring per tanggal/orang/produk.
  5. Kalau data tidak ketemu → laporkan (Akbar/Eko), jangan mengarang.

8b. Cara MEMBACA database: kapan & bagaimana

Prinsip: membaca selalu lewat alat baca (skrip #4), disaring dengan kunci tetap (kode_orang, kode_grup, slug_produk, slug_topik, slug_tugas), hanya baris yang berlaku/aktif, dan dibatasi jumlahnya. Tidak pernah "ambil seluruh tabel", dan tidak pernah membaca arsip/log tanpa saringan tanggal + orang/produk.

KapanSiapa yang membacaYang dibaca (hanya ini)
Sesi japri dibuka (konsumen chat, tidak ada sesi aktif)Skrip penyambung, otomatis, sebelum Claude bekerjaorang (by nomor/wa_lid) → profil_versi berlaku → baris orang_produk → tugas terbuka milik orang itu → daftar lampiran (judul saja) → 10–15 chat terakhir dari WA → topik PK produk yang ia minati: ringkasan + topik yang cocok dengan pesan barunya
Sesi grup dibukaSkrip penyambung, otomatisgrup (profil grup) → grup_anggota + grup_topik aktif si pengirim → 20–30 obrolan grup terakhir → topik PK produk grup itu. TIDAK profil japri.
Di tengah percakapan, ditanya hal yang belum ada di paket (mis. garansi, harga ukuran lain)Claude (staf) memanggil alatpk lihat <produk> <topik> → satu baris topik itu. Tidak tahu nama topiknya → pk daftar <produk> (daftar judul topik saja, seperti daftar isi), lalu ambil satu yang tepat.
Mau menulis/UPDATE PK atau profilManajer (PK) / sesi yang ditutup (profil)Baca DULU versi yang berlaku dari kunci itu, ubah bagian yang relevan, simpan versi baru (lihat "Arti UPDATE").
Dibangunkan alarm (pengingat jatuh tempo)Staf yang ditujuBaris tugas yang membangunkan → data yang ditunjuknya (orang/grup/lampiran/topik PK) seperlunya.
Mulai kerja / sesi tugas dibuka (Dika, Eko)Staftugas saya → tugas berstatus baru/dikerjakan/menunggu miliknya → detail satu tugas yang dikerjakan (langkah terakhir, langkah berikut, bahan, hasil).
Pengawasan (manajer)Akbar / OpiSaringan siap pakai: tugas lewat jatuh tempo · tugas "menunggu Pak Adi/owner" · tugas per staf · sesi aktif lama tidak ditutup. Bukan membaca semua baris.
Menelusuri kejadian ("kapan X dikirimi link?")Siapa pun yang perlulog, disaring tanggal + kode_orang/produk. Hanya saat benar-benar perlu.
Data transaksi (order, lisensi, akun)StafDibaca dari sistemnya sendiri lewat API/alat baca-saja (mis. cari_pelanggan.sh), tidak disalin ke database memori.

Tanda bahaya: kalau untuk menjawab satu pertanyaan kamu membaca lebih dari beberapa baris atau satu topik penuh yang tidak terkait, berhenti. Berarti alat/indeksnya kurang. Laporkan ke manajer supaya topiknya dipecah, jangan membaca semuanya.

9. Larangan

10. Ringkasan per peran

PeranPaling sering membacaPaling sering menulis
CS (Ary, Opi)Profil orang, PK, tugas FU miliknyaProfil (saat tutup sesi), orang_produk, tugas FU, lampiran, log. Info produk baru → teruskan ke manajer (bukan ditulis sendiri ke PK)
Desainer (Dika)Tugas miliknya, PK (fakta produk untuk naskah), Akses & alatTugas (progres, hasil), log
Programmer (Eko)Tugas miliknya, MAP/Brainstorming proyek, Akses & alatMAP/Brainstorming, tugas, log
Manajer (Akbar)Papan tugas semua staf (belum selesai / lewat jatuh tempo / menunggu Pak Adi)Tugas, PK & CLAUDE.md (meneruskan keputusan Pak Adi yang sudah final), log
Manajer Otopia (Opi)Papan tugas Otopia, profil pelanggan OtopiaPK Otopia (sesudah konfirmasi ke owner), tugas, log

11. Skrip yang akan dibuat (sesudah rancangan disetujui)

Bukan aplikasi besar. Beberapa skrip Linux kecil di server uranus (dikerjakan Eko, diawasi Akbar):

#SkripTugasnyaJalan kapan
1Pembuat databaseMembuat tabel-tabel di atas (orang, produk, orang_produk, profil_versi, pk_*, tugas, log, sesi) beserta aturan kunci tetap & soft delete.Sekali
2Penyambung WA → Claude (bridging)WA masuk → cari kode orang → cari sesi aktif di tabel sesi → lanjutkan atau buat sesi baru (claude -p, diisi paket profil + produk + chat terakhir + PK) → kirim balasan. Menggabung pesan beruntun 30–60 detik.Terus-menerus (dipicu tiap WA masuk)
3Alarm per menit(a) cari tugas yang jatuh tempo menit ini → taruh pesan ke kotak masuk staf yang bersangkutan; (b) cari sesi CS yang diam > 30 menit → minta rangkum profil → tutup sesi.Tiap menit (timer sistem, 0 token)
4Alat baca/tulis untuk stafPerintah pendek: lihat/ubah profil orang, ambil PK per produk+topik, tambah/selesaikan tugas, tulis log. Selalu menyaring, tidak pernah menampilkan semuanya.Dipakai staf saat bekerja
5Halaman lihat-saja untuk Pak AdiMelihat papan tugas, profil, PK, dan koreksi PK.Kapan saja
6Pemindah data lamaMemindahkan isi berkas lama (KASUS_TERBUKA, product knowledge yang tercecer, dll.) ke tabel baru; satu kali, diperiksa sebelum dipakai.Sekali, sesudah 1–4 siap

Uji coba (keputusan Pak Adi 13/10 06:18): (1) PUTAR ULANG offline 20–30 percakapan lama nomor Ary ke sistem baru, bandingkan dengan jawaban Ary saat itu (nyambung, tidak mengulang, patuh aturan, token per balasan); (2) BAYANGAN: sistem baru mendengar chat masuk sungguhan & menyiapkan jawaban TANPA mengirim, dibandingkan harian dengan jawaban Ary; (3) sesudah itu LANGSUNG LIVE PENUH. Mutu jawaban dinilai MANAJER (Akbar), bukan Pak Adi.

12. Letak database & sinkron antar server

Satu database untuk semua server

Sinkron "Akses & alat" dan CLAUDE.md antar server

  1. Satu naskah induk (Akses & alat + CLAUDE.md umum + CLAUDE.md per peran) disimpan di satu tempat (usulan: mars) dalam repositori git. Git mencatat tiap perubahan (siapa, kapan, apa) dan bisa dikembalikan kalau keliru.
  2. Git di sini bukan GitHub: cukup folder git di server induk itu sendiri; server lain menariknya lewat SSH jaringan rumah (akses sudah ada). Sengaja tidak di layanan luar karena isi Akses & alat sensitif.
  3. Menyunting HANYA di induk.
  4. Server lain (uranus, dll.) menyimpan salinan baca-saja. Skrip kecil menarik versi terbaru dari induk tiap 5 menit. Salinan dikunci supaya tidak ada yang menyunting di salinan.
  5. Kalau induk/jaringan mati, salinan terakhir tetap ada di tiap server, jadi cara masuk dan cara memperbaiki tetap terbaca.
  6. CLAUDE.md per peran hanya dipakai di server tempat peran itu bekerja (Ary di uranus, Opi di mars), tetapi tetap disunting di induk yang sama.

Skrip tambahan untuk ini masuk daftar skrip (bagian 11): penarik salinan tiap 5 menit + pengaturan akun database per staf.

13. Catatan teknis untuk pembangun (masukan Eko, 12/10)

  1. "Satu baris berlaku per kunci" dipaksa database (unique index parsial WHERE status='berlaku'), bukan disiplin. Semua perubahan lewat SATU fungsi/alat yang menandai usang + menyisipkan versi baru dalam satu transaksi. Staf tidak pernah menulis SQL mentah.
  2. Kolom kunci yang boleh kosong (mis. lokasi) diberi nilai default kosong ('') atau NULLS NOT DISTINCT, supaya unique index tetap menjaga.
  3. Tabel identitas yang tidak berversi (orang, produk, grup, daftar topik PK) jadi sasaran foreign key; tabel isi berversi menunjuk ke sana. Salah ketik slug ditolak database.
  4. WA sering hanya memberi ID …@lid tanpa nomor → kolom wa_lid + pemetaan saat nomor diketahui (penyambung WAJIB menyimpan nomor asli begitu terlihat dari kartu kontak/order); satu orang boleh punya beberapa nomor.
  5. Sesi: CHECK num_nonnulls(kode_orang, kode_grup, slug_tugas) = 1; satu sesi aktif per orang/grup (unique parsial); penyambung mengunci per orang (advisory lock) saat membuka/menutup sesi supaya dua pesan bersamaan tidak membuat dua sesi; rangkuman profil gagal → sesi TIDAK ditutup.
  6. Alarm memakai jatuh_tempo <= now() AND belum diingatkan (bukan "menit ini"), lalu ditandai sudah diingatkan. Kalau timer terlewat atau server restart, pengingat tidak hilang dan tidak terkirim dua kali. Waktu disimpan timestamptz, ditampilkan WIB. "Kotak masuk staf" = baris di events.jsonl staf itu (format sama dengan WA masuk).
  7. Database di server lain: kalau server/jaringan mati, penyambung CS punya cadangan (pesan diantre + balasan penahan ke konsumen). Password database tiap staf disimpan di /root/.secrets (bukan di Akses & alat). Batas "Opi hanya Otopia" memakai Row-Level Security.
  8. Sinkron git: Claude berjalan sebagai root, jadi kunci izin berkas tidak menahan. Skrip tarik = reset ke induk + ALARM kalau menemukan suntingan lokal di salinan. CLAUDE.md diletakkan tepat di path yang dibaca Claude Code.
  9. Folder memory bawaan Claude Code (±90 berkas) bukan salah satu 7 model: isinya dipindah (feedback → CLAUDE.md, akses → model 5, proyek → PK/MAP) dan CLAUDE.md menegaskan sesi tidak menulis ke sana lagi.
  10. Program latar (mis. pekerja unggah YouTube) yang perlu menulis lampiran "hasil" tanpa Claude memakai akun database program sendiri yang haknya terbatas pada tabel/jenis itu.
  11. Alat baca punya perintah ringkas, mis. hasil <tugas> → hanya jumlah publik/tertahan; daftar lengkap hanya kalau diminta.
  12. Pesan untuk staf pembuat (Eko/Dika) dari Akbar/Pak Adi masuk ke sesi umum staf itu (jenis topik), yang memilah: masuk tugas yang sudah ada, atau membuat tugas baru, lalu membuka/melanjutkan sesi tugasnya. Sesi umum = pemilah, sesi tugas = pengerjaan.
  13. Alarm hanya membaca jatuh_tempo_berikutnya (tugas sekali jalan = salinan jatuh_tempo), satu sumber. Tugas berulang yang terlewat saat server mati: diingatkan SEKALI lalu loncat ke jadwal berikutnya (tidak menumpuk); sudah_diingatkan direset tiap kali jadwal maju; jadwal_ulang yang tidak dikenali ditolak alat saat ditulis.
  14. tugas_induk ditutup MANUAL; saringan manajer menampilkan "induk yang semua anaknya selesai".
  15. grup_topik punya penanda ada_janji + slug_tugas. Skrip TIDAK menandai usang selama ada_janji benar dan belum ada tugasnya; skrip membuat tugas "tinjau janji grup X" untuk manajer/CS grup itu. Topik diberi slug_topik pendek per grup (pakai ulang yang sama kalau cocok) supaya tidak dobel beda kata.
  16. Isian baku lampiran.detail per jenis juga dipaksa CHECK di database (bukan hanya alat), karena program latar menulis tanpa alat. Pasangan (slug_produk+slug_topik) dihitung satu pemilik dalam CHECK "tepat satu pemilik". Nama kolom: keterangan (bukan "judul").
  17. Aturan payung disimpan sebagai DATA: pk_daftar jenis "payung" (siapa, cakupan topik, sejak kapan, dari owner siapa), supaya alat bisa memeriksa "admin ini masuk payung topik ini?" tanpa mengandalkan ingatan.
  18. Baris PK internal ikut paket sesi japri/CS dengan label [INTERNAL – jangan disebut ke pelanggan] (juga di keluaran pk lihat). Sesi GRUP hanya menerima baris publik.
  19. log diberi kolom kode_grup + id lampiran (opsional), karena kejadian grup tidak selalu tentang satu orang.
  20. Uji coba sesuai bagian 11 (putar ulang → bayangan → live penuh); ukur token sebelum & sesudah dengan cara yang sama (input + cache write + output).

Rancangan ini diuji beberapa hari. Perubahan apa pun pada halaman ini hanya atas keputusan Pak Adi.