Skip to content

Kind System

Version: 0.1.0 · Status: Draft

Draft: isi di bawah kontrak yang berlaku.

Referensi atribut per-kind: docs/kind/ — 33 file (4 grup), tabel atribut generated dari pkg/spec + narasi manual. Dokumen ini mendefinisikan taksonomi & meta-kind; docs/kind/ mendefinisikan atribut tiap kind.

1. Taksonomi Kind

Seluruh 33 kind FormSpec memakai format manifest yang sama (apiVersion/kind/metadata/spec, ../backend/01-core-basic.md §1) dan dikelompokkan dalam 4 grup yang mencerminkan struktur docs/spec/:

#GrupJumlahDefinisiMirror docs/spec/
Curation2App, Module — struktur workspace, kurasi module, menuplatform/
Data11Entity, Service, Config, Migration, Subscription, Workflow, Api, Webhook, Mockup, Integrator, KindDefinition — model domain, behaviour, integrasibackend/
UI15Page, Form, Table, Dashboard, Widget, Report, Wizard, Kanban, Timeline, Calendar, Listing, ApprovalInbox, NotificationCenter, Print, Theme — presentasi visual, override auto-derivedfrontend/
Infra5Renderer, PersistBackend, Environment, Policy, Datastore — runtime infrastructure, renderer, storage, governanceplatform/

Rincian per Grup

Curation — didklarasikan pertama saat membangun aplikasi:

KindDidefinisikan di
Appspec/platform/02-workspace-app-module.md
Modulespec/platform/02-workspace-app-module.md

Data — model domain, behaviour, event, integrasi:

KindDidefinisikan di
Entityspec/backend/01-core-basic.md §1
Servicespec/backend/01-core-basic.md §1
Configspec/backend/01-core-basic.md §10
Migrationspec/backend/01-core-basic.md §4
Subscriptionspec/backend/01-core-basic.md §7
Workflowspec/backend/02-core-extended.md §2
Apispec/backend/02-core-extended.md §12
Webhookspec/backend/02-core-extended.md §4
Mockupspec/backend/02-core-extended.md §8
Integratorspec/backend/02-core-extended.md §5
KindDefinition§2 di bawah

UI — presentasi visual. Instance VisualSpecKind dengan tier page. Semua ada hanya untuk override auto-derived defaults dari Entity:

KindDidefinisikan di
Pagespec/frontend/06-page-kinds.md §1
Formspec/frontend/06-page-kinds.md §2
Tablespec/frontend/06-page-kinds.md §3
Dashboardspec/frontend/06-page-kinds.md §7
Widgetspec/frontend/07-component-kinds.md §2
Reportspec/frontend/06-page-kinds.md §8
Wizardspec/frontend/06-page-kinds.md §6
Kanbanspec/frontend/06-page-kinds.md §4
Timelinespec/frontend/06-page-kinds.md §9
Calendarspec/frontend/06-page-kinds.md §5
Listingspec/frontend/06-page-kinds.md §10
ApprovalInboxspec/frontend/06-page-kinds.md §11
NotificationCenterspec/frontend/06-page-kinds.md §12
Printspec/frontend/06-page-kinds.md §8
Themespec/frontend/05-app-kinds.md §5

Infra — runtime infrastructure & governance:

KindDidefinisikan di
Rendererspec/frontend/03-renderer-kind.md
PersistBackendspec/backend/04-persist-backend.md
Environmentspec/platform/04-control-plane.md
Policyspec/platform/04-control-plane.md
Datastorespec/platform/06-datastore.md

Derived by default: endpoint CRUD, admin panel, dan dokumentasi API digenerate otomatis dari manifest Entity — tanpa manifest tambahan apa pun. Kind visual (Page/Form/Table/dst.) ada hanya untuk override default itu. Lihat UI 3-layer wrapping model di ../frontend/06-page-kinds.md §14.

Guardrail: app developer hampir tidak pernah perlu mendefinisikan kind baru — butuh kind baru berarti memperluas framework. 95% kasus jawabannya Entity.

2. Meta-Kinds

Kind yang mendeklarasikan kind lain — extensible dalam tiga layer: (1) built-in spec (tabel §1) → (2) module resmi mendaftarkan kind lewat KindDefinition (Seed, Schedule, MailTemplate, dst) → (3) module pihak ketiga dengan kind namespaced, tunduk Verified Badge.

yaml
apiVersion: formspec.dev/v1
kind: KindDefinition
metadata: { name: Seed, module: formspec/seed }
spec:
  group: seed.formspec.dev # instance pakai apiVersion: seed.formspec.dev/v1
  version: v1
  schema: { ... } # JSON Schema body instance
  handler: { type: native, ref: "FormaSeed.Apply" }
  scope: module # module | app

Penamaan dinamespace lewat grup apiVersion (pola CRD) — kind built-in memiliki grup formspec.dev, kind module hidup di grup sendiri (seed.formspec.dev, gl.acme-corp.dev) — tabrakan namespace mustahil secara struktural. Handler berjalan di bawah uses module yang mendeklarasikannya — KindDefinition tidak memberi kekuatan runtime di luar footprint module-nya sendiri.

Tiga meta-kind lain, masing-masing dijelaskan penuh di spec-nya sendiri:

3. Katalog Concern → Kind

Kebutuhan aplikasi bisnisKind yang menjawab
Simpan & kelola data bertransaksiEntity (characteristic: transaction)
Data referensi stabilEntity (characteristic: master)
Data seed read-onlyEntity (characteristic: reference)
Projeksi/agregat sistemEntity (characteristic: summary)
Komputasi tanpa stateService
Approval berbasis role atas transisiWorkflow
Endpoint masuk terverifikasi (webhook provider)Webhook
Simulasi integrasi pihak ketigaMockup
Jembatan reaktif antar-moduleIntegrator
Reaksi ke event resource lainSubscription
Override permukaan API yang sudah exposedApi
DDL custom (index, trigger)Migration
Layar/routePage
Input/edit satu EntityForm
List/browseTable
Proses multi-stepWizard
Board status drag-dropKanban
Feed kronologis append-onlyTimeline
Dashboard + widgetDashboard, Widget
Laporan terparameterisasiReport
Dokumen cetakPrint
Tampilan & rasaTheme
View kalenderCalendar
Katalog publikListing
Inbox approvalApprovalInbox
Pusat notifikasiNotificationCenter
Koneksi infrastruktur bernamaDatastore
Target deploymentEnvironment
Aturan governancePolicy

4. Lampiran: Pemetaan Kind → Plane

Referensi kanonik menentukan plane tempat sebuah kind hidup — dicek setiap kali kind baru diperkenalkan.

Aturan normatif: (1) Kind Control Plane tidak boleh membaca data bisnis atau mengeksekusi handler bisnis. (2) Kind Resource Plane tidak boleh mengubah governance state. (3) Rule of thumb: kalau kind mengonfigurasi infrastruktur/governance/deployment/keamanan platform → Control Plane; kalau mendefinisikan domain logic/UI/business behavior → Resource Plane.

KindPlane
App, Module, Entity, Service, Config, Migration, SubscriptionResource
Workflow, Api, Webhook, Mockup, Integrator, KindDefinitionResource
Page, Form, Table, Dashboard, Widget, Report, Wizard, Kanban, Timeline, Calendar, Listing, ApprovalInbox, NotificationCenter, Print, ThemeResource
VisualSpecKind, RendererResource (dideklarasikan bersama artifact visual; distribusi lewat marketplace §7)
Environment, PolicyControl
DatastoreControl
PersistBackendResource (dideklarasikan per deployment scope, dikonsumsi Resource Plane; distribusi lewat marketplace)

Menambah kind baru: jawab (a) apakah ia mengonfigurasi infrastruktur/ governance? → Control; (b) apakah ia mendefinisikan business logic/UI/domain model? → Resource; (c) apakah ia perlu baca data bisnis? → wajib Resource; (d) apakah ia perlu diatur Cloud Owner, bukan App Developer? → Control. Lalu tambahkan baris ke tabel §4 ini.

Standar terbuka (CC0) dengan implementasi referensi.