# Tasks

## 1. Kontrak dan API pencarian

- [x] 1.1 Tambahkan DTO search di packages/shared/search.ts dan ekspor publik untuk tiga kelompok, identitas target dan hasMore; verifikasi build shared serta pemakaian tipe frontend/backend tanpa generated Prisma types.
- [x] 1.2 Buat validator q dan endpoint GET /api/v1/search melalui routes/controller/service existing dengan auth/origin middleware; verifikasi tes input kosong/array/Unicode/batas panjang dan akses tanpa login.
- [x] 1.3 Implementasikan query/ranking Pilot Plant, Inventory, dan WO dengan limit sebelum transfer data; verifikasi tes MySQL terisolasi untuk exact/prefix/substring, tie-break, literal wildcard, duplikasi nama, tiga hasil dan hasMore.
- [x] 1.4 Terapkan aturan arsip induk, stok nol, WO selesai/dibatalkan, deletedAt, releaseAt dan pengecualian calibration; verifikasi fixture tiap kondisi dan pastikan pencarian tidak menulis data.
- [x] 1.5 Dokumentasikan endpoint dalam search.openapi.ts dan aturan pencarian dalam dokumentasi service; verifikasi kontrak respons, error dan Swagger terkompilasi setelah build API.

## 2. Navigasi tujuan berdasarkan ID

- [x] 2.1 Tambahkan GET /pilot-plant/categories/:id dengan CategoryDto dan dokumentasi OpenAPI; verifikasi tes category aktif, tidak ditemukan, diarsipkan dan akses autentikasi.
- [x] 2.2 Tambahkan dukungan /inventory?part=<id> memakai detail service existing; verifikasi detail terbuka meskipun barang berada di halaman/filter lain, refresh/back/forward, parameter lain tetap utuh dan error saat target tidak tersedia.
- [x] 2.3 Tambahkan dukungan parameter category/equipment/item pada Pilot Plant memakai service Pilot Plant existing; verifikasi pemulihan hierarki, ID ambigu/tidak valid, ancestor diarsipkan, refresh/back/forward dan navigasi breadcrumb tanpa membuka ulang target lama.
- [x] 2.4 Gunakan /maintenance?wo=<id> existing dan sesuaikan pengubahan parameter bila perlu agar tidak menghapus parameter lain; verifikasi buka/tutup detail dari search dan penanganan target tidak tersedia.
- [x] 2.5 Dokumentasikan URL tujuan dan interaksinya dengan filter lokal; verifikasi contoh link dapat digunakan tanpa state navigasi sementara.

## 3. Search header dan service frontend

- [x] 3.1 Buat services/search.service.ts dan hooks/search.queries.ts dengan query client bersama, AbortSignal dan key per user/role/query; verifikasi tes request/envelope/error, debounce 300 ms, minimum dua karakter, respons lama dan pergantian akun.
- [x] 3.2 Buat komponen global-search di components/layout dan hubungkan top-header.tsx; verifikasi tiga kelompok hasil, identitas/konteks, skeleton, empty/error/retry, hasMore dan pemilihan tujuan.
- [x] 3.3 Lengkapi keyboard/fokus dan tampilan layar kecil menggunakan primitive UI existing; verifikasi Arrow/Enter/Escape, dismiss, fokus kembali, serta scroll hasil tanpa mengubah layout header.
- [x] 3.4 Integrasikan invalidasi search dengan mutation existing yang mengubah identitas/status/arsip domain; verifikasi hasil diperbarui setelah mutation dan detail tujuan selalu dimuat ulang saat dipilih.

## 4. Validasi lintas fitur

- [x] 4.1 Jalankan skenario browser dari header menuju category, equipment, item, part dan WO, termasuk refresh/back/forward, perpindahan filter serta target yang tidak tersedia; catat hasil dan batas verifikasi aktual.
- [x] 4.2 Ukur query pada fixture representatif dengan ranking dan batas hasil; catat durasi/rencana query dan konfirmasikan dahulu jika perlu perubahan indeks/schema, tanpa menerapkan migrasi otomatis.
- [x] 4.3 Jalankan build shared, typecheck/build API dan app, tes terkait serta test:docs; review diff agar perubahan hanya mencakup proposal ini dan semua pemeriksaan yang relevan lulus.

## Workflow follow-up

- Pengguna menyetujui apply dan commit. Implementasi dan verifikasi tercatat di src/services/search.md.
- Commit implementasi mengikuti aturan repository dan otorisasi pengguna; jangan menyertakan perubahan sidebar pengguna yang tidak terkait.
