# ADR 0001: Migrasi dari Polyrepo ke Monorepo Menggunakan pnpm dan Turborepo - **Status**: Diterima (Accepted) - **Tanggal**: 17 Oktober 2026 - **Penulis**: Principal Software Architect & DevOps Lead --- ## Konteks & Masalah KeluargaMart sebelumnya dikelola sebagai 5 repositori terpisah: - `keluargamart-backend` - `keluargamart-erp-frontend` - `keluargamart-pos-frontend` - `keluargamart-b2b-frontend` - `keluargamart-nextreport` Kondisi polyrepo ini menimbulkan sejumlah kendala operasional dan rekayasa perangkat lunak: 1. **Desinkronisasi Kontrak API & Permission**: Frontend sering menyalin file teks kontrak (`backendRoutes.txt`, `backendPermissions.txt`) secara manual, yang berujung pada permission drift (misalnya tertinggalnya `hr.leaves.store.any`). 2. **Koordinasi Rilis Rumit**: Fitur baru yang menyentuh backend dan beberapa frontend memerlukan multiple pull request terpisah di berbagai repositori dengan risiko versi yang tidak cocok saat deployment. 3. **Duplikasi Dependensi & Kode**: Fungsi pemformatan rupiah, penanganan error axios, dan pembuatan idempotency key ditulis berulang-ulang di masing-masing aplikasi frontend. 4. **Onboarding Developer Lambat**: Developer baru harus meng-clone 4-5 repo dan mengonfigurasi environment masing-masing secara terpisah. --- ## Keputusan Kami memutuskan untuk memigrasikan seluruh repositori ke dalam satu **Monorepo terintegrasi** (`keluargamart-monorepo`) dengan stack tooling berikut: 1. **pnpm Workspaces (v12)**: Digunakan sebagai package manager utama untuk mengelola isolasi node_modules, deduplikasi disk space, dan symlink workspace internal (`workspace:*`). 2. **Turborepo (v2)**: Digunakan sebagai build system & task orchestrator untuk mengeksekusi build, lint, dan test secara paralel dengan caching berbasis hash input/output. 3. **Preservasi Git History**: Migrasi dilakukan tanpa menghilangkan riwayat commit historis dari masing-masing repository asal menggunakan teknik multi-tree merge. --- ## Konsekuensi ### Konsekuensi Positif (Keuntungan) - **Atomic Commits**: Perubahan API backend dan implementasi konsumernya di frontend dapat digabungkan dalam satu commit / pull request tunggal. - **Single Source of Truth**: Seluruh rute dan permission didefinisikan secara kanonikal di package bersama. - **Kecepatan Build & Test**: Turborepo memotong waktu CI hingga 70% melalui intelligent task caching. - **Onboarding Cepat**: Satu kali `git clone` dan `pnpm install` langsung menyiapkan seluruh ekosistem. ### Konsekuensi Negatif (Mitigasi) - **Ukuran Repositori Lebih Besar**: Repositori monorepo menampung seluruh codebase. (Mitigasi: Git LFS / shallow clones untuk CI). - **Strict Package Manager Rules**: pnpm v12 memblokir phantom dependencies. (Mitigasi: Seluruh dependensi dideklarasikan eksplisit di masing-masing `package.json`).