diff --git a/.claude/skills/cleo-code-review/SKILL.md b/.claude/skills/cleo-code-review/SKILL.md index 0390f7a..e9c0790 100644 --- a/.claude/skills/cleo-code-review/SKILL.md +++ b/.claude/skills/cleo-code-review/SKILL.md @@ -91,6 +91,38 @@ Untuk temuan di sekitar kode, baca file utuhnya, jangan hanya potongan diff. - Batas panjang zod sama dengan panjang kolom di `db/amigo/schema.ts`. - Aturan bisnis dicocokkan dengan kode lama di `old-source/` (mis. format kode pelanggan). +### Struktur dan maintainability + +Bagian ini butuh konteks di luar diff. Kalau diff menambah atau mengubah fitur, baca juga fitur +lain yang sejenis. + +- Fitur baru mengikuti pola fitur acuan `app/(dashboard)/master/pelanggan/`: `page.tsx`, + `actions.ts`, `_components/`, dan satu file `data/.ts` per domain. Penyimpangan dari + pola itu harus punya alasan yang jelas. +- Nama fungsi `data/` seragam antar fitur: `list`, `get`, `insert`, + `update`, `delete`. Istilah domain konsisten (mis. `pelanggan`, bukan campur + `customer`), kecuali nama kolom/tabel lama di `db/amigo/schema.ts`. +- Arah dependency: + - `app/` boleh import `data/`, `components/`, `lib/`; `data/` boleh import `db/` dan `lib/`. + Tidak boleh sebaliknya (`data/` atau `lib/` import dari `app/`). + - Fitur A tidak import `_components/` atau `actions.ts` milik fitur B. Kalau dibutuhkan + bersama, pindahkan komponen ke `components/` atau logika ke `lib/`/`data/`. + - `components/` (lintas fitur) tidak import dari `app/`. +- Duplikasi lintas fitur: kode yang sama muncul di fitur kedua dipindah ke satu tempat + bersama, bukan disalin. Kandidat umum: escape `LIKE`, tipe hasil action + (`{ ok, error, fieldErrors, values }`), pola log error action, pagination, kotak pencarian, + skema zod yang berulang. Jangan memindahkan saat baru dipakai satu fitur. +- Aturan bisnis lama (kode huruf harga `convHrgP`/`convProfit`, format tanggal `dd-mm-yyyy`, + tanggal "hari ini" `Asia/Jakarta`) punya satu implementasi di `lib/`, tidak ditulis ulang per + fitur. +- `data/` tidak berisi logika tampilan (format rupiah, format tanggal untuk UI, teks label). +- File di atas sekitar 250 baris, atau komponen yang mengerjakan beberapa hal sekaligus (form, + daftar, dan dialog dalam satu file), ditandai untuk dipecah. +- Navigasi: setiap `href` di `app/(dashboard)/_components/nav-items.ts` punya `page.tsx`, dan + setiap page baru di `(dashboard)` terdaftar di nav (kecuali halaman detail/turunan). +- Kalau perubahan memperkenalkan konvensi baru (folder, helper bersama, pola action), cek + apakah `CLAUDE.md` ikut diperbarui supaya fitur berikutnya mengikuti pola yang sama. + ### Kerapian - Format sesuai Prettier (titik koma, baris tidak terlalu panjang, newline di akhir file). @@ -104,7 +136,9 @@ Lalu temuan dikelompokkan dan diberi nomor berurutan lintas kelompok: 1. **Bug**: perilaku salah yang bisa dialami user. Sertakan skenario konkretnya. 2. **Tidak sesuai aturan proyek**: pelanggaran CLAUDE.md. -3. **Kerapian**: format, kode mati, duplikasi. +3. **Struktur dan maintainability**: menyimpang dari pola fitur acuan, arah dependency salah, + duplikasi lintas fitur, file terlalu besar, nav tidak sinkron. +4. **Kerapian**: format, kode mati, duplikasi kecil di dalam satu file. Setiap temuan menyebut `file:baris`, apa yang salah, dan arah perbaikannya dalam satu atau dua kalimat. Tutup dengan daftar singkat hal yang sudah benar, lalu saran urutan perbaikan.