FormSpec Spec — Kontrak Normatif
Section ini memuat kontrak FormSpec: apa yang wajib dipenuhi oleh implementasi manapun, terlepas dari teknologi yang dipakainya. Pernyataan prinsipnya, sekali dan otoritatif:
Spec adalah kontrak; renderer adalah implementasi. Sebuah kontrak ditulis sekali dan bersifat implementation-agnostic. Implementasi (frontend shell, persist backend) boleh diganti atau ditambah tanpa mengubah kontraknya — asalkan seam-nya dirancang sejak implementasi pertama dibangun.
Konsekuensi praktis:
- Satu spec, banyak renderer. Spec
kind: Kanbanyang sama dirender oleh shell React/shadcn hari ini dan bisa dirender shell lain (mis. Flutter) besok, tanpa ditulis ulang. - Dua keluarga seam. Sisi visual:
Shellmenghosting App/Page/Component renderer (frontend/). Sisi penyimpanan:PersistBackend(backend/04-persist-backend.md). Kontrak lintas keduanya ada diplatform/. - Rendering adalah interpretasi runtime, bukan code generation. Shell membaca spec lewat Spec Resolution API saat runtime (
frontend/04-spec-resolution-api.md). Codegen (formspec generate) hanya untuk developer Tier 2/3 yang menulis handler native atau frontend custom.
Sub-section
| Direktori | Kontrak untuk |
|---|---|
platform/ | Kedua sisi: model workspace/app/module, kind system & meta-kinds, control plane, plane protocol, datastore, marketplace |
backend/ | Engine & PersistBackend manapun: model dokumen, action, lifecycle, extension, interface penyimpanan |
frontend/ | Shell & renderer visual manapun: hirarki 4 tier, VisualSpecKind, Renderer, Spec Resolution API, katalog kind, FormSpecExpr |
Status dokumen: Outline (kerangka cakupan) → Draft (isi lengkap, terbuka revisi) → Final (mengikat; perubahan lewat bump versi).
Referensi per-kind:
docs/kind/— satu file per kind (33 file, 4 grup), tabel atribut generated daripkg/spec(zero drift), narasi manual.docs/spec/= kontrak per-concern;docs/kind/= referensi atribut per-kind.