Skip to content

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: Kanban yang sama dirender oleh shell React/shadcn hari ini dan bisa dirender shell lain (mis. Flutter) besok, tanpa ditulis ulang.
  • Dua keluarga seam. Sisi visual: Shell menghosting App/Page/Component renderer (frontend/). Sisi penyimpanan: PersistBackend (backend/04-persist-backend.md). Kontrak lintas keduanya ada di platform/.
  • 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

DirektoriKontrak 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 dari pkg/spec (zero drift), narasi manual. docs/spec/ = kontrak per-concern; docs/kind/ = referensi atribut per-kind.

Standar terbuka (CC0) dengan implementasi referensi.