Menulis PersistBackend Baru
Status: Draft
Panduan praktis — bukan kontrak. Definisi normatif ada di
docs/spec/backend/04-persist-backend.md, dirujuk di tiap langkah.
1. Prasyarat
Baca ../spec/backend/04-persist-backend.md penuh dulu — PersistBackend levelnya setara Shell di sisi visual (§1): satu implementasi resmi (jsonb-persist) dipakai lama, tapi seluruh framework wajib bicara ke interface ini, tidak boleh ada shortcut ke satu backend tertentu di kode inti. Baca juga bagian storage-agnostic Core Basic (../spec/backend/01-core-basic.md §1–§4) — itu kontrak yang backend-mu harus penuhi, terlepas mekanisme internalnya.
2. Interface Wajib
Lima kemampuan minimal (04-persist-backend.md §2):
- Structural diff apply — terima diff skema dari framework (
renamed_fromuntuk rename, dua tahap untuk field removal), terjemahkan ke storage-mu sendiri. - Query resolution — seluruh filter operator kontrak (
eq neq gt gte lt lte between in nin like ilike null notnull,../spec/backend/01-core-basic.md§6) identik hasilnya dengan backend resmi. ctx.next_key— sequence gap-free pernatural_key_rule: atomik, gap-free (kecuali retry), duplicate-free, dilarang derive lewat scanMAX().- Index generation — penuhi
persist.indexes. - Uninstall extension bersih — tanpa sisa data/kolom yang tertinggal.
Catatan dari implementasi resmi: jsonb-persist sendiri belum 100% memenuhi kelima ini hari ini (lihat ../renderers/jsonb-persist/01-architecture.md §4 dan 04-query-and-keys.md §1–§2 — cuma 9 dari 12 operator terimplementasi, mutasi+outbox tidak atomik, uninstall extension belum ada implementasinya) — jangan jadikan kode jsonb-persist sebagai acuan "sudah pasti benar", jadikan 04-persist-backend.md sebagai acuan, dan renderers/jsonb-persist/* § Status Implementasi sebagai daftar apa yang belum boleh ditiru.
3. Menjaga Jaminan
Backend-mu wajib mempertahankan (§3): gap-free sequence, transaksionalitas, idempotensi, backup & restore (format backup adalah bagian normatif spec ini, bukan detail implementasi tersembunyi — full+incremental, filterable, restore dengan mode skip/overwrite/remap, --dry-run compatibility report), dan operasi baca/ekspor yang tidak boleh license-gated di implementasi manapun.
4. Yang Tidak Perlu Dipenuhi
- Dialek
ctx.dbmilik backend lain —ctx.dbsengaja backend-coupled (§5); resource yang memakainya sudah menerima keterkuncian ke satu PersistBackend, backend-mu tidak perlu meniru dialek SQL backend lain. - Detail strategi skema backend resmi (hybrid JSONB — kolom generated, extension column per-namespace,
../renderers/jsonb-persist/02-schema-strategies.md) — itu detail implementasi jsonb-persist, bukan kontrak. Backend-mu bebas strategi lain (mis. fully-relational — tiap field jadi kolom nyata) selama §2/§3 terpenuhi. - Bentuk data yang diserahkan ke Shell (§6) — itu kontrak Spec Resolution API (
../spec/frontend/04-spec-resolution-api.md§3), dipenuhi lapisan engine, bukan tanggung jawab langsung PersistBackend — tapi kamu tetap wajib tidak membocorkan detail fisik (nama kolom, path storage) ke lapisan itu.
5. Konformansi dan Registrasi
Open — mekanisme verifikasi konformansi PersistBackend baru (validasi statis vs test-suite, 04-persist-backend.md §7) belum dirumuskan, sama seperti gap konformansi Renderer (../spec/frontend/03-renderer-kind.md §5). Sampai itu final:
- Implementasikan seluruh §2/§3 di atas.
- Daftarkan sebagai
kind: PersistBackenddengantrust_tier(official | verified | community, seragam dengan Renderer/Module). - Distribusikan lewat marketplace (
../spec/platform/07-marketplace.md). - Dokumentasikan secara eksplisit di listing-mu bagian kontrak mana yang belum kamu penuhi — jangan diam-diam anggap selesai (pola yang sama dipakai dokumen ini sendiri untuk jsonb-persist, §2 di atas).