# Baseline vs Hasil Akhir Migrasi (Verification Report) Dokumen ini membandingkan kondisi baseline sebelum migrasi (saat masih polyrepo) dengan hasil pengujian teknis final setelah migrasi ke monorepo terpadu. --- ## 1. Perbandingan Status Teknis | Parameter Pengujian | Baseline Polyrepo | Hasil Akhir Monorepo | Status & Catatan | |---|---|---|---| | **Package Management** | Parsial (bun/npm per repo terpisah, dependensi terduplikasi di `node_modules`) | Terpadu via **pnpm workspaces v12** dengan content-addressable storage | **IMPROVED** (Hemat disk, zero ghost dependencies) | | **Task Orchestration** | Manual / skrip terpisah per terminal | Terpadu via **Turborepo v2** dengan caching build & test | **IMPROVED** (Parallel execution, pipeline caching) | | **Go Backend Build** | Berhasil (`go build`) | Berhasil (`pnpm build:backend` → `apps/backend/bin/server`, 18MB) | **PASS** | | **Go Backend Tests** | 100% Pass | 100% Pass (`pnpm test:backend`, all internal modules pass) | **PASS** | | **Shared Packages Tests** | Belum ada (duplikasi file teks) | 4 suite pengujian mandiri: Contracts, Permissions, Utils, ApiClient | **PASS** (18 tests passing) | | **ERP Frontend Build** | Berhasil via Vite | Berhasil (`pnpm --filter @keluargamart/erp build`) | **PASS** (Bundled clean) | | **POS Frontend Build** | Berhasil dengan Bun hoisting | Berhasil (`pnpm --filter @keluargamart/pos build`) | **PASS** (Setelah phantom dep diperbaiki) | | **B2B Frontend Build** | Berhasil via Nuxt | Berhasil (`pnpm --filter @keluargamart/b2b build`) | **PASS** (Client & Server output ready) | | **Frontend Test Suite** | 76 files passing | 80 test files passing (625 unit tests total) | **PASS** (100% pass rate) | | **API Drift Guard** | Tidak ada (manual copy-paste) | Otomatis via `pnpm drift:check` (368 routes, 198 permissions) | **RESOLVED & AUTOMATED** | --- ## 2. Masalah yang Ditemukan & Resolusi Presisi Selama audit dan pengujian migrasi, ditemukan beberapa masalah laten pada repositori lama yang berhasil diselesaikan tanpa mengubah logika bisnis: ### A. Phantom Dependency: `zxing-wasm` pada POS & ERP - **Kondisi Lama**: Komponen `apps/pos/src/components/BarcodeScannerModal.vue` mengimpor `zxing-wasm/reader/zxing_reader.wasm?url`. Namun, `zxing-wasm` tidak dideklarasikan di `dependencies` maupun `devDependencies` pada `package.json` POS. Pada environment polyrepo lama, modul ini kebetulan ter-hoist oleh manajer paket global. - **Resolusi Monorepo**: Deklarasikan `zxing-wasm: ^3.1.3` secara eksplisit pada `package.json` di `apps/pos` dan `apps/erp`. Hal ini menjamin build reproducible pada CI dan container tanpa phantom dependency. ### B. Phantom Dependency: `vue` pada B2B Tests - **Kondisi Lama**: File pengujian `apps/b2b/tests/cartRace.spec.ts` melakukan `import { ref, reactive } from 'vue'`. Pada `package.json` B2B hanya ada `nuxt: ^4.3.1`, sehingga ketika berjalan dalam pnpm node-linker terisolasi, runner test Vitest gagal menemukan modul `vue`. - **Resolusi Monorepo**: Deklarasikan `vue: ^3.5.41` secara langsung di `dependencies` `apps/b2b/package.json`. ### C. Missing `localStorage` Mock pada Node Test Runner (B2B) - **Kondisi Lama**: Pengujian `apps/b2b/tests/accountPrefs.spec.ts` memanggil fungsi yang mengakses `window.localStorage`. Saat dijalankan di Vitest Node environment murni, test melempar error `ReferenceError: localStorage is not defined`. - **Resolusi Monorepo**: Menambahkan polyfill mock `localStorage` in-memory lokal di dalam file test tersebut tanpa menyentuh source code aplikasi B2B. Semua test di `accountPrefs.spec.ts` kini lulus 100%. ### D. Permission Catalog Drift pada ERP - **Kondisi Lama**: File `backendPermissions.txt` di `apps/erp` tertinggal 1 permission dibanding backend Go (`hr.leaves.store.any`). - **Resolusi Monorepo**: ERP kini mengimpor permission dari `@keluargamart/permissions`. File teks duplikat dihapus, dan CI drift guard menjamin desinkronisasi tidak akan pernah terjadi lagi. ### E. pnpm v12 Strict Build Scripts - **Kondisi Lama**: Dependensi dengan native build script seperti `esbuild`, `vue-demi`, dan `puppeteer` diabaikan atau diblokir secara default oleh pnpm v12 demi keamanan. - **Resolusi Monorepo**: Konfigurasi `pnpm-workspace.yaml` (`allowBuilds`) dan `.npmrc` (`only-built-dependencies`) disetel dengan daftar dependensi terverifikasi, memungkinkan instalasi dan kompilasi berjalan mulus. --- ## 3. Kesimpulan Verifikasi Migrasi berhasil dilakukan dengan **zero functional regressions**, peningkatan performa build & test dengan cache Turborepo, dan perbaikan kualitas arsitektur menyeluruh.