PanelSpec schema (v1)

Worlds ship UI surfaces as panels. To avoid “brittle UI soup”, ZAK uses a strict, versioned PanelSpec schema so panels remain predictable, renderable, and auditable across versions.

Version

Current: 1.0.0

Supported panel kinds

form | list | log | chat | dashboard | status | info | detail | approval

Minimal example

{
  "version": "1.0.0",
  "id": "change-request-form",
  "kind": "form",
  "title": "Request change",
  "description": "Submit a governed change request",
  "data": {
    "kind": "form",
    "spec": {
      "schema": [
        { "id": "summary", "type": "text", "label": "Summary", "required": true },
        { "id": "risk", "type": "select", "label": "Risk level", "required": true, "options": [
          { "value": "low", "label": "Low" },
          { "value": "medium", "label": "Medium" },
          { "value": "high", "label": "High" }
        ] }
      ],
      "submitLabel": "Submit",
      "submitAction": "change.request.submit"
    }
  },
  "governedBy": ["CHANGE-001", "RISK-001"],
  "visibleTo": ["engineer", "change_manager"]
}

Why this matters

  • Determinism: panel kinds + fields are a finite contract (no ad-hoc UI shape-shifting).
  • Auditability: panels can declare what laws govern them (governedBy).
  • Upgrade safety: schema is versioned; migrations are explicit.

See also: Receipt schema