# Diagnosis dan pemulihan deployment

Penerbitan privat gagal pada 4 Oktober 2026 dengan pesan `incomplete input: SQLITE_ERROR`. Tidak ada URL aktif. Source code lengkap tersimpan pada repository Sites. Pengujian terpisah lulus 25 kasus backend dan 9 render halaman, tetapi hal tersebut tidak membuktikan migrasi produksi telah berhasil.

## Identitas untuk tindak lanjut

| Jenis | Nilai |
|---|---|
| project_id | `appgprj_6ac1b938dbd88191a4aa13156caf6b0c` |
| version_id | `appgprj_6ac1b938dbd88191a4aa13156caf6b0c~appgver_dcf31ed68ce481919a8de1c6ab9b13ce` |
| deployment_id | `appgdep_6ac1cf0bc44081918042442530c431e7` |
| commit_sha | `df6e1ff90895263a081dd844f062cc17b5db97e8` |

## Temuan

- Skema dan trigger diterapkan sebagai pernyataan lengkap pada Miniflare dan berhasil diuji.
- Error hosting tidak menyebut file atau statement yang gagal. Dugaan parser memisahkan badan trigger masih merupakan inferensi, belum diagnosis terkonfirmasi.
- Kedua pemeriksaan database hosting, dengan binding default dan `DB`, tidak mengembalikan binding/tabel. Log Worker belum tersedia karena penerbitan gagal.
- Migrasi berurutan adalah `0000_cultured_nocturne.sql`, `0001_financial_integrity.sql`, dan `0002_luxuriant_stingray.sql`. Migrasi pertama membuat skema, kedua memasang trigger integritas, ketiga menambah snapshot instruksi dan trigger agar rekening transaksi tetap.
- Tidak ada perubahan atau penghapusan migrasi setelah kegagalan; tidak ada percobaan ulang arsip yang sama.

## Langkah operator

1. Gunakan ID proyek dan deployment di atas untuk memperoleh detail kegagalan serta daftar migrasi yang sudah dicatat dari layanan hosting Sites. Jangan membuat proyek pengganti atau menghapus database yang sudah dibuat.
2. Pastikan batas migrasi applied/unapplied dan statement gagal. Simpan snapshot kondisi sekarang sebelum koreksi.
3. Jika error berada pada migrasi yang belum diterapkan, koreksi hanya migrasi tersebut beserta metadata terkait. Trigger adalah satu statement SQL lengkap; badan BEGIN/END tidak boleh dipisah pada setiap titik koma. Pertahankan aturan ledger immutable, kapasitas match, batas refund, dan receipt unik.
4. Setelah batas diketahui, buat versi source baru, build/test, push, lalu terbitkan versi baru privat. Jika kegagalan adalah parser platform, minta perbaikan parser atau metode migrasi resmi dari penyedia. Jangan menonaktifkan perlindungan keuangan demi penerbitan.
5. Periksa binding D1/R2, total target Rp615.230.000, penerimaan nol, CMS, login, 2FA, upload, dan status pembayaran dari URL yang benar-benar berhasil. Aktifkan layanan backup terpisah dan lakukan uji browser sebelum membuka penggalangan publik.

## Dasar penghentian percobaan

Panduan Sites Building pada `references/persistence-and-storage.md` menyatakan: “if the applied/unapplied boundary is uncertain, stop instead of rewriting history or retrying the same archive.” Batas tersebut belum dapat dipastikan menggunakan reader yang tersedia. Source tetap lengkap dan dapat dijalankan dalam lingkungan lokal terpisah dengan petunjuk pemasangan.
