Portal Community

Common Serialization Envelope

Every artifact JSON file begins with the same envelope fields, regardless of artifact type:

{
  "_type":       "ProcessDefinition",      // required — matches manifest type
  "_version":    "2.1.0",                  // required — artifact's SemVer
  "_exportedAt": "2026-05-25T09:00:00Z",   // required — UTC timestamp
  "_schemaVersion": "1.0",                 // required — artifact schema version
  // ... artifact-specific fields follow
}

ProcessDefinition Serialization

// File: artifacts/workflows/proc-1001.json
{
  "_type":          "ProcessDefinition",
  "_version":       "2.1.0",
  "_exportedAt":    "2026-05-25T09:00:00Z",
  "_schemaVersion": "1.0",
  "id":             "proc-1001",
  "name":           "EmployeeOnboarding",
  "description":    "Multi-step onboarding with approval",
  "status":         "Published",
  "tags":           ["hr", "onboarding"],
  "nodes": [
    {
      "nodeId":   "n1",
      "nodeType": "StartNode",
      "label":    "Start",
      "position": { "x": 100, "y": 100 },
      "config":   {}
    },
    {
      "nodeId":   "n2",
      "nodeType": "FormDisplayNode",
      "label":    "Show Employee Form",
      "position": { "x": 300, "y": 100 },
      "config": {
        "formId":       "form-2005",
        "displayMode":  "modal",
        "submitLabel":  "Submit"
      }
    },
    {
      "nodeId":   "n3",
      "nodeType": "ApprovalNode",
      "label":    "Manager Approval",
      "position": { "x": 500, "y": 100 },
      "config": {
        "approverRole": "Manager",
        "ruleSetId":    "rule-305",
        "timeoutHours": 48
      }
    },
    {
      "nodeId":   "n4",
      "nodeType": "EndNode",
      "label":    "Complete",
      "position": { "x": 700, "y": 100 },
      "config":   {}
    }
  ],
  "connections": [
    { "from": "n1", "to": "n2", "label": "" },
    { "from": "n2", "to": "n3", "label": "Submitted" },
    { "from": "n3", "to": "n4", "label": "Approved"  }
  ],
  "variables":   [],
  "guardRails":  [],
  "createdAt":   "2025-03-01T10:00:00Z",
  "updatedAt":   "2026-05-20T14:30:00Z"
}

AtlasForm Serialization

// File: artifacts/forms/form-2005.json
{
  "_type":          "AtlasForm",
  "_version":       "1.3.0",
  "_exportedAt":    "2026-05-25T09:00:00Z",
  "_schemaVersion": "1.0",
  "id":     "form-2005",
  "name":   "EmployeeForm",
  "title":  "New Employee Information",
  "status": "Published",
  "fields": [
    {
      "fieldId":   "f1",
      "fieldType": "TextInput",
      "label":     "First Name",
      "name":      "firstName",
      "required":  true,
      "order":     1,
      "validation": {
        "minLength": 1,
        "maxLength": 100,
        "pattern":   null
      }
    },
    {
      "fieldId":   "f2",
      "fieldType": "TextInput",
      "label":     "Last Name",
      "name":      "lastName",
      "required":  true,
      "order":     2,
      "validation": { "maxLength": 100 }
    },
    {
      "fieldId":   "f3",
      "fieldType": "Dropdown",
      "label":     "Department",
      "name":      "department",
      "required":  true,
      "order":     3,
      "dataSource": {
        "type":     "EntityQuery",
        "entityId": "ent-44",
        "field":    "departments",
        "labelField": "name",
        "valueField": "code"
      }
    }
  ],
  "actions": [
    { "actionId": "submit", "type": "FormSubmit",  "label": "Submit",  "order": 1 },
    { "actionId": "cancel", "type": "FormCancel",  "label": "Cancel",  "order": 2 }
  ],
  "validationRules": [],
  "layout": {
    "type":    "SingleColumn",
    "columns": 1
  }
}

RuleSet Serialization

// File: artifacts/rules/rule-305.json
{
  "_type":          "RuleSet",
  "_version":       "1.0.0",
  "_exportedAt":    "2026-05-25T09:00:00Z",
  "_schemaVersion": "1.0",
  "id":     "rule-305",
  "name":   "ApprovalRules",
  "rules": [
    {
      "ruleId":    "r1",
      "name":      "AutoApproveUnder500",
      "priority":  1,
      "condition": "amount < 500",
      "action":    "APPROVE",
      "isActive":  true
    },
    {
      "ruleId":    "r2",
      "name":      "RequireManagerApproval",
      "priority":  2,
      "condition": "amount >= 500",
      "action":    "REQUIRE_APPROVAL",
      "isActive":  true
    }
  ]
}

EntitySchema Serialization

// File: artifacts/entities/ent-44.json
{
  "_type":          "EntitySchema",
  "_version":       "1.0.0",
  "_exportedAt":    "2026-05-25T09:00:00Z",
  "_schemaVersion": "1.0",
  "id":   "ent-44",
  "name": "EmployeeSchema",
  "fields": [
    { "fieldName": "employeeId",   "dataType": "string",  "required": true, "isPrimaryKey": true },
    { "fieldName": "firstName",    "dataType": "string",  "required": true },
    { "fieldName": "lastName",     "dataType": "string",  "required": true },
    { "fieldName": "department",   "dataType": "string",  "required": true },
    { "fieldName": "startDate",    "dataType": "date",    "required": true },
    { "fieldName": "salary",       "dataType": "decimal", "required": false }
  ],
  "indexes": [
    { "fields": ["employeeId"], "isUnique": true },
    { "fields": ["department"], "isUnique": false }
  ]
}

Serialization Rules

Reference IDs are Source-Tenant IDs Note that formId: "form-2005" in a ProcessDefinition refers to the source tenant's ID. The import engine's ID remapping layer translates all these references to the target tenant's IDs during installation.