# HotelFix v2 — Arsip Prompt untuk Setiap Agent

Disusun oleh PM (Claude Fable 5), 5 Juli 2026. File ini berisi prompt PERSIS
yang diberikan ke setiap anggota team, agar bisa diaudit dan dipakai ulang.

Model yang dipakai: DB = Sonnet · Backend Architect = Opus · Android = Opus ·
API+Pages = Sonnet. Setiap agent dikunci ke folder berbeda agar tidak
saling mengganggu.

> **ATURAN GM (5 Jul 2026) — sisipkan di setiap prompt agent baru:** baca
> `C:\Users\dee\Claude\Projects\engineering\sanggraloka.md` (common knowledge
> resort & keputusan GM) sebagai bagian SUMBER KEBENARAN, dan update file itu
> (bagian 8 Status + Changelog) di akhir pekerjaan.

---

## Agent 1 — DB Engineer (Sonnet) · Gelombang 1 · SELESAI

```
Kamu adalah DB Engineer untuk project HotelFix v2 (sistem maintenance hotel multi-property).

SUMBER KEBENARAN (baca dulu, WAJIB):
- C:\Users\dee\Claude\Projects\engineering\hotelfix.2\docs\SPEK-HOTELFIX-MASTER.md — terutama §2 (multi-property), §3 (taksonomi aset), §5 (model data = kontrak logis), §10 (32 checklist), §11 (indeks & skalabilitas), §13 (keputusan final).

FOLDER KERJA — kamu HANYA boleh membuat/mengubah file di dalam:
C:\Users\dee\Claude\Projects\engineering\hotelfix.2\backend\db\
Jangan sentuh folder lain (src/, public/, android/, docs/) — tim lain sedang bekerja di sana.

DELIVERABLE:
1. `backend/db/migrations/0001_init.sql` — SEMUA tabel dari §5 spesifikasi:
   - Master: properties, users, user_property_access, push_tokens, skills, locations, asset_categories, assets, asset_documents, vendors, contracts, contract_assets, parts
   - Checklist: checklists, checklist_items (dengan versioning: version, status draft|active|archived, parent_version_id)
   - Jadwal: pm_schedules, meter_readings, generator_log
   - Pekerjaan: work_orders, wo_checklist_results, wo_parts, photos, history
   - Biaya: wo_costs
   - Utilitas: utility_meters, utility_readings
   - Notifikasi: notifications, broadcasts, broadcast_receipts
   Aturan teknis: MySQL 8/MariaDB, ENGINE=InnoDB, CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci, kolom enum pakai tipe ENUM sesuai nilai di spesifikasi, foreign key dengan nama konstrain jelas, SEMUA tabel transaksi/master ber-`property_id` dengan index gabungan minimal `(property_id, ...)` — contoh penting: work_orders `(property_id, status, due_date)`, `assets (property_id, category_id)`, `notifications (property_id, user_id, read_at)`. `assets.accounting_asset_no` UNIQUE per property (§13.6). `history` immutable (tidak ada updated_at). Timestamps `created_at`/`updated_at` di tabel yang wajar.
2. `backend/db/migrations/0002_seed_master.sql` — seed minimal untuk development: 1 property (kode HTL1, timezone Asia/Jakarta), 6 user (satu per role §2.2, password_hash pakai placeholder bcrypt hash dari kata 'password'), user_property_access, ±15 locations (kamar, area publik, BOH), asset_categories lengkap sesuai taksonomi §3 (Engineering MEP, Sipil & finishing, IT, Kitchen, Lainnya — dengan department & flag restricted untuk genset/lift/panel TM/fire pump/boiler), ±20 assets contoh tersebar, 2 vendor, 3 parts.
3. `backend/db/migrations/0003_seed_checklists.sql` — pustaka checklist §10: minimal 12 checklist representatif (wajib termasuk: Genset mingguan, AC split bulanan, PPM kamar 30 titik, HACCP suhu harian, CCTV bulanan, Server room bulanan, Kolam harian, Fire safety rute bulanan, Inspeksi finishing sipil, dan 3 lain pilihanmu) lengkap dengan checklist_items (seq, text, type pass_fail|numeric|text|photo, unit, min_value, max_value, photo_required_on_fail, guidance). Status semua 'active', version 1.
4. `backend/db/README.md` — ringkas: urutan menjalankan migrasi, konvensi penomoran file, dan daftar tabel per kelompok.

KUALITAS: SQL harus valid dan bisa dijalankan berurutan pada database kosong (0001 → 0002 → 0003) tanpa error. Konsisten dengan nama kolom PERSIS seperti di §5 spesifikasi — backend PHP akan menulis query berdasarkan nama itu.

LAPORAN AKHIR: sebutkan daftar file yang dibuat, jumlah tabel, jumlah checklist yang di-seed, dan asumsi/penyimpangan dari spesifikasi (jika ada).
```

---

## Agent 2 — Backend Architect (Opus) · Gelombang 1 · SELESAI

```
Kamu adalah Backend Architect untuk project HotelFix v2 (sistem maintenance hotel multi-property). Tugasmu: membangun kerangka backend plain PHP 8.2 tiga lapis SESUAI KONVENSI YANG SUDAH DIKUNCI.

SUMBER KEBENARAN (baca dulu, WAJIB, ikuti persis):
- C:\Users\dee\Claude\Projects\engineering\hotelfix.2\docs\ARSITEKTUR-BACKEND-PHP.md — konvensi lengkap: 3 lapis, struktur folder, BasePage, UiBuilder, BaseModel, BaseApiController, resep menambah halaman.
- C:\Users\dee\Claude\Projects\engineering\hotelfix.2\docs\SPEK-HOTELFIX-MASTER.md — §2 (role & multi-property), §5 (nama tabel/kolom), §6 F2 (lifecycle WO), §9 (daftar layar web & endpoint API), §13 (keputusan final: plain PHP, bukan Laravel).
- C:\Users\dee\Claude\Projects\engineering\hotelfix.2\docs\mockups\tokens.css — token warna/gaya untuk app.css.

FOLDER KERJA — kamu HANYA boleh membuat/mengubah file di dalam:
C:\Users\dee\Claude\Projects\engineering\hotelfix.2\backend\
KECUALI subfolder `backend\db\` — itu milik DB Engineer yang bekerja paralel; JANGAN buat/ubah file apa pun di backend\db\. Skema tabel: pakai nama tabel & kolom PERSIS dari §5 SPEK-HOTELFIX-MASTER.md (itulah kontrak dengan DB Engineer). Jangan sentuh docs/ dan android/.

DELIVERABLE (struktur sesuai §2 ARSITEKTUR-BACKEND-PHP.md, root = backend/):
1. `src/Core/` — Bootstrap.php (autoload spl_autoload_register PSR-4 App\ → src/, session start, load config), Config.php, Database.php (PDO singleton, prepared statements only), Request.php, Response.php, Session.php, Csrf.php, Flash.php.
2. `src/Auth/` — Auth.php (requireLogin, requireRole, requireToken untuk API), Acl.php (peta role §2.2 → kemampuan), Role.php (konstanta role).
   PENTING: multi-property — setelah login, property aktif ditentukan dari user_property_access; jika user punya 1 akses → otomatis; >1 → halaman pilih properti (§2.3).
3. `src/Model/` — BaseModel.php (find/where/insert/update SELALU scoped property_id seperti §6 dokumen arsitektur), lalu model konkret minimal: User, Property, UserPropertyAccess, Location, AssetCategory, Asset, WorkOrder (plus method dashboardStats), WoCost, Notification.
4. `src/Service/` — WorkOrderService.php (transisi status lifecycle F2: scheduled/reported → in_progress → waiting_parts → done → verified; validasi foto-after wajib sebelum done; rejected/reopen/skipped+alasan), CostService.php (tambah baris wo_costs + roll-up ke kolom ringkasan work_orders; ambang approval Rp 5.000.000 per §13.5), NotificationService.php (insert notifications; stub push FCM dengan interface jelas).
5. `src/View/` — Layout.php (open/close: header, nav per-role, flash, footer), UiBuilder.php (statGrid, card, table, tabs, badge, statusBadge, field, formOpen+csrf, costPanel — HTML hanya memakai kelas dari app.css).
6. `src/Page/` — BasePage.php PERSIS pola §4 dokumen arsitektur (allowedRoles, run() dengan PRG+CSRF, abstract render()), lalu: LoginPage, SelectPropertyPage, DashboardPage, WorkOrderListPage, WorkOrderDetailPage (dengan panel biaya F14 memakai costPanel), ReportPage (lapor defect via web, F1 versi web).
7. `src/Api/` — BaseApiController.php (JSON + requireToken) dan endpoint Fase 1: AuthController (login → token, refresh, logout), WoController (list milikku, detail, mulai, done), ReportController (buat defect), CostController (tambah biaya). Respons SELALU dibatasi property_id token.
8. `public/` — file thin 2-baris per halaman (§3 dok. arsitektur): index.php, login.php, logout.php, select-property.php, work-orders.php, work-order.php, report.php; `public/api/v1/` router thin per kelompok endpoint (auth.php, wo.php, report.php, costs.php); `public/assets/app.css` — bangun dari tokens.css mockup (variabel token → komponen: .card, .stat-grid, .data-table, .badge-*, .tabs, form field, .cost-panel).
9. `bin/migrate.php` — menjalankan file SQL di db/migrations/ berurutan dengan tabel pelacak `schema_migrations` (file SQL-nya dibuat tim lain; script cukup membaca folder itu).
10. `config/config.sample.php` (kredensial DB, base URL, kunci FCM placeholder) + `.gitignore` (config/config.php, storage/, vendor/) + `composer.json` (autoload PSR-4 App\ → src/, tanpa dependency wajib).
11. `README.md` di backend/ — cara setup (config, migrate, PHP built-in server `php -S localhost:8080 -t public`), peta folder, resep menambah halaman (ringkas dari §9 dok. arsitektur).

ATURAN KUALITAS (dari §8 dok. arsitektur — WAJIB): declare(strict_types=1) di semua file; 1 file = 1 kelas; PDO prepared statements tanpa kecuali; CSRF di semua POST; tidak ada HTML di Model, tidak ada SQL di View; PRG untuk semua form; uploads ke storage/ di luar public (buat folder + FileGateway sederhana public/file.php ber-otorisasi); scoping property_id di lapis Model.

VERIFIKASI: jika `php` tersedia di PATH, jalankan `php -l` pada semua file .php dan pastikan lolos. Jika php tidak tersedia, teliti manual sintaksnya dan catat di laporan bahwa lint belum dijalankan.

LAPORAN AKHIR: daftar file per lapis, keputusan desain yang kamu ambil di luar spesifikasi (mis. mekanisme token API), dan status verifikasi lint.
```

---

## Agent 3 — Android Engineer (Opus) · Gelombang 1 · SELESAI (ditunda pengembangan lanjutannya)

```
Kamu adalah Android Engineer untuk project HotelFix v2 (sistem maintenance hotel multi-property). Tugasmu: membangun aplikasi Android native Fase 1 — Kotlin + Jetpack Compose, offline-first.

SUMBER KEBENARAN (baca dulu, WAJIB):
- C:\Users\dee\Claude\Projects\engineering\hotelfix.2\docs\SPEK-HOTELFIX-MASTER.md — terutama §0 (arsitektur), §6 F1 (pelaporan defect + prioritas pengisian aset via QR), F2 (lifecycle WO), F14 (input biaya saat tag-as-done), §8 (spesifikasi mobile: layar, offline-first, kamera internal, push, keamanan), §9 bagian API (kelompok endpoint /api/v1/...), §12 Fase 1 (scope rilis pertama Android).
- Mockup UI referensi: docs\mockups\01-mobile-login-today-calendar.html dan 02-mobile-report-scan-wo-checklist.html dan tokens.css (palet warna).

FOLDER KERJA — kamu HANYA boleh membuat/mengubah file di dalam:
C:\Users\dee\Claude\Projects\engineering\hotelfix.2\android\
Jangan sentuh backend/ dan docs/ — tim lain bekerja di sana.

SCOPE FASE 1 (jangan melebar ke fitur Fase 2/3):
1. Project Gradle modern: Kotlin DSL, satu modul app, package `com.hotelfix.app`, minSdk 26, target SDK terbaru stabil, Compose BOM, Material 3. Dependency: Room, Retrofit+Moshi/kotlinx-serialization, WorkManager, CameraX, DataStore, Coil. Versi di gradle/libs.versions.toml (version catalog).
2. Arsitektur: MVVM + repository. Layer:
   - `data/local` — Room: entity WorkOrderEntity, PendingMutationEntity (antrean offline: laporan defect, tag-done, foto, biaya — dengan status queued|sending|sent|failed), PhotoQueueEntity; DAO; database.
   - `data/remote` — Retrofit service untuk endpoint §9: auth (login/refresh/logout), sync delta (updated_since), wo (list milikku, detail, mulai, done+foto), report (buat defect+foto), costs, notifications. Base URL dari BuildConfig.
   - `data/repository` — sumber kebenaran lokal; mutasi masuk antrean lalu dikirim WorkManager saat online; indikator "belum tersinkron" per item.
   - `ui/` — Compose screens: LoginScreen (username/password; pemilih properti HANYA muncul bila server bilang akses >1 — §2.3), TodayScreen (tugas hari ini per zona, badge status), WorkOrderDetailScreen (mulai → selesai: catatan + foto after WAJIB + bagian Biaya yang bisa dilipat per F14: +Part, material+foto nota, menit kerja otomatis), ReportDefectScreen (alur F1: kamera → lokasi/QR → aset auto/daftar pendek → kategori → prioritas → kirim; foto WAJIB dari kamera internal CameraX, TIDAK ada picker galeri), NotificationsScreen (lonceng, daftar + tandai dibaca).
   - Navigasi: Navigation Compose, bottom bar (Hari ini, Lapor, Notifikasi, Profil).
3. Keamanan sesuai §8: token akses + refresh di EncryptedSharedPreferences/Keystore; interceptor refresh otomatis; auto-logout idle (stub timer terdokumentasi).
4. Kamera: CameraX in-app capture, kompresi ke ~1600px sebelum antre upload.
5. Push: dependency FCM + service stub (onNewToken kirim ke server, channel notifikasi 'critical' prioritas tinggi heads-up) — kunci server tidak perlu diisi.
6. Warna tema Compose dari tokens.css mockup (surface #faf9f5, aksen #185fa5, danger #E24B4A, success #0f6e56, warning #EF9F27).
7. `android/README.md` — cara buka di Android Studio, konfigurasi base URL, status fitur (apa yang jalan vs stub), arsitektur ringkas.

BATASAN LINGKUNGAN: mesin ini kemungkinan tidak punya Android SDK — JANGAN memaksa menjalankan gradle build. Fokus: struktur project lengkap dan kode Kotlin yang koheren (import benar, tipe konsisten, tidak ada referensi ke kelas yang tidak dibuat). Jika ragu antara dua fitur, pilih yang lebih sederhana tapi selesai, daripada ambisius tapi setengah jadi. Scan QR boleh berupa stub layar dengan TODO (ML Kit) asal alurnya tersambung.

LAPORAN AKHIR: pohon folder, daftar layar yang diimplementasi vs stub, keputusan teknis (mis. serialisasi yang dipilih), dan apa yang perlu dilakukan developer saat pertama membuka project.
```

### Pesan revisi QA ke Agent 3 (perbaikan bug prioritas)

```
Hasil QA PM: ada 1 bug kontrak yang wajib diperbaiki di project Android kamu.

BUG: nilai priority yang kamu pakai adalah low|medium|urgent. Kontrak DB & backend (ENUM di work_orders.priority) adalah: low | normal | high | urgent. Nilai 'medium' tidak ada, dan 'high' hilang dari UI. Backend akan menolak 'medium'.

PERBAIKI di file-file ini (grep ulang 'medium' untuk memastikan):
1. ui/report/ReportDefectViewModel.kt:32 — default priority "medium" → "normal".
2. ui/report/ReportDefectScreen.kt:242 & 273 — PriorityChoice: 4 pilihan: low=Rendah, normal=Normal, high=Tinggi, urgent=Urgent; warna: urgent→danger, high→warning, normal→netral/aksen, low→netral.
3. ui/common/StatusBadges.kt:39,44 — badge priority: tangani keempat nilai; hapus 'medium'.
4. data/remote/dto/ReportAndCostDto.kt:51 — perbaiki komentar kontrak.
5. data/local/entity/WorkOrderEntity.kt:18 — perbaiki komentar kontrak.
6. data/local/dao/WorkOrderDao.kt:20 — ORDER BY CASE: WHEN 'urgent' THEN 0 WHEN 'high' THEN 1 WHEN 'normal' THEN 2 ELSE 3 END.

CATATAN: kontrak path API pretty (auth/login, wo/{id}/start, qr/{code}, dst.) DIPERTAHANKAN — backend akan menambahkan rewrite. Jangan ubah HotelFixApi.kt.
Setelah selesai, laporkan file yang diubah dan bukti grep tidak ada 'medium' tersisa.
```

---

## Agent 4 — API + Pages Engineer (Sonnet) · Gelombang 2 · SEDANG BERJALAN

```
Kamu adalah API + Pages Engineer untuk project HotelFix v2. Kerangka backend PHP 3-lapis SUDAH JADI dan sudah lolos QA — tugasmu MELENGKAPI Fase 1 dengan mengikuti pola yang sudah ada, bukan mendesain ulang.

BACA DULU (urutan ini):
1. backend\README.md
2. Pola yang wajib ditiru: src\Page\BasePage.php + src\Page\WorkOrderListPage.php (pola halaman), src\Api\BaseApiController.php + src\Api\WoController.php (pola endpoint), src\Model\BaseModel.php + src\Model\WorkOrder.php (pola model), src\View\UiBuilder.php dan public\assets\app.css (komponen UI yang tersedia).
3. Spesifikasi: docs\SPEK-HOTELFIX-MASTER.md — §6 F16 (rekap harian briefing), §8–9 (layar & endpoint), F11 tabel notifikasi.
4. Skema DB (kontrak nama kolom PERSIS): backend\db\migrations\0001_init.sql

FOLDER KERJA: hanya di backend\. Jangan sentuh backend\db\migrations (hanya boleh DIBACA), docs\, android\.
File yang SUDAH ADA boleh kamu ubah HANYA ini: src\View\Layout.php (untuk menambah link menu halaman barumu). Selain itu, hanya TAMBAH file baru.

PENTING — kontrak nilai: work_orders.priority = ENUM('low','normal','high','urgent'); notifications.severity = ENUM('info','warning','critical'). Jangan pakai nilai lain (bug 'medium/critical' untuk priority baru saja diperbaiki QA — jangan mengulanginya).

DELIVERABLE:

A. ENDPOINT API BARU (masing-masing: class di src\Api + file thin di public\api\v1, pola persis WoController + wo.php):
1. `SyncController` (sync.php) — GET delta master untuk mobile: parameter `updated_since` opsional; respons: locations, asset_categories, assets ringkas, checklists aktif + items. Semua scoped property_id token.
2. `NotificationController` (notifications.php) — GET list milik user (terbaru dulu, limit 50, unread_count), POST tandai dibaca ({"ids":[...]} atau {"all":true}).
3. `QrController` (qr.php) — GET ?code=... : cari assets.asset_code lalu locations.code (scoped); respons {"kind":"asset"|"location","data":{...}} atau 404.
4. `MeterController` (meter.php) — POST {"asset_id","value"} → insert meter_readings (source='manual') + update assets.meter_current.

B. HALAMAN WEB BARU (class extends BasePage + file thin, pola persis WorkOrderListPage):
5. `AssetListPage` (public/asset-list.php) — tabel aset: kode, nama, kategori, lokasi, criticality (badge), status; filter kategori & status; role: dept_head, property_admin, super_admin, viewer.
6. `AssetDetailPage` (public/asset.php?id=) — kartu identitas aset (+ accounting_asset_no), riwayat WO (10 terakhir), pembacaan meter terakhir; tombol "Lapor defect".
7. `BriefingPage` (public/briefing.php) — Rekap harian F16 Fase 1: WO dibuat vs ditutup kemarin, urgent terbuka, PM due hari ini vs selesai, PM terlewat, SLA breach, WO guest-impacting terbuka (high/urgent), rencana hari ini per assignee. Tombol "Cetak untuk briefing" (@media print). Role: dept_head, property_admin, viewer, super_admin.
8. `AdminUsersPage` (public/admin.php) — daftar user properti (join user_property_access), form tambah user, toggle aktif/nonaktif. Role: property_admin, super_admin. CSRF + PRG.

C. Tambah link menu di src\View\Layout.php untuk halaman baru sesuai role.

ATURAN KUALITAS: declare(strict_types=1); 1 file = 1 kelas; PDO prepared statements; scoping property_id di setiap query; tidak ada SQL di Page (query di Model); tidak ada HTML mentah di luar UiBuilder.

VERIFIKASI: php tidak tersedia — teliti sintaks manual. Periksa ulang setiap nama kolom terhadap 0001_init.sql.

LAPORAN AKHIR: daftar file baru, perubahan pada Layout.php, dan hal yang kamu tunda/asumsikan.
```

---

## Rencana agent berikutnya (belum diluncurkan)

- **Web Parity Engineer (Sonnet)** — Gelombang 3, prioritas atas permintaan owner
  (web dulu, Android belakangan): today.php, aksi lifecycle WO + upload foto di
  web, meter.php (aset + utilitas), notifications.php + broadcast composer,
  my-calendar.php, profile.php, resolve kode QR manual.
- **Integration Engineer (Sonnet)** — DITUNDA bersama Android: rewrite pretty
  path API, dukungan multipart, endpoint select-property & push-token.
  Dikerjakan saat pengembangan Android dilanjutkan.
