Collections & Versions
Process/schema collections, process versioning, snapshots, restore.
Collections organize schemas and processes into folders. Versions capture point-in-time snapshots of processes for rollback and auditing.
Collections
What Collections Are
Collections are organizational folders. They help you group related schemas and processes together. Collections exist independently for schemas and processes:
- Schema Collections -- group related schemas (e.g., "Steel Operations", "Customer Data")
- Process Collections -- group related processes (e.g., "Order Processing", "Reporting")
Collection Properties
| Field | Type | Description |
|---|---|---|
id | UUID | Collection identifier |
organizationId | UUID | Owning organization |
name | string | Collection name |
description | string | What this collection contains |
createdBy | string | Creator name |
createdById | UUID | Creator user ID |
parentCollectionId | UUID (nullable) | Parent collection for nesting |
createdAt | timestamp | Creation time |
viewedAt | timestamp | Last viewed time |
updatedAt | timestamp | Last update time |
Nesting
Collections can be nested by setting parentCollectionId:
Steel Operations/ ├── Order Processing/ │ ├── Steel Order Quoter (process) │ └── Order Confirmation (process) ├── Inventory/ │ └── Stock Check (process) └── Steel Order Schema (schema)
Many-to-Many Membership
A schema or process can belong to multiple collections. Membership is tracked through a join table:
schema_collection_members: collection_id: UUID schema_id: UUID process_collection_members: collection_id: UUID process_id: UUID
Managing Process Collections
| Operation | API | Body |
|---|---|---|
| Create | POST /process-collections/by-org/:org_id | {"name": "...", "description": "...", "parentCollectionId": "..."} |
| Update | PUT /process-collections/by-id/:id | {"name": "...", "description": "..."} |
| Delete | DELETE /process-collections/by-id/:id | -- |
| Add process | POST /process-collections/:id/add-process/:pid | -- |
| Remove process | DELETE /process-collections/:id/remove-process/:pid | -- |
Managing Schema Collections
| Operation | API | Body |
|---|---|---|
| Create | POST /schema-collections/by-org/:org_id | {"name": "...", "description": "...", "parentCollectionId": "..."} |
| Update | PUT /schema-collections/by-id/:id | {"name": "...", "description": "..."} |
| Delete | DELETE /schema-collections/by-id/:id | -- |
| Add schema | POST /schema-collections/:id/add-schema/:sid | -- |
| Remove schema | DELETE /schema-collections/:id/remove-schema/:sid | -- |
UI Interaction
In the UI:
- Collections appear as folders in the schemas and processes list views.
- Drag and drop schemas/processes into collections.
- Right-click to create nested collections.
- Use search and filters across all collections.
Process Versions
What Versions Are
A version is a named snapshot of a process at a specific point in time. It captures the complete graph state: all nodes, edges, and configurations.
Versions serve two purposes:
- Rollback: Restore a process to a previous working state.
- Audit trail: See what the process looked like when past executions ran.
Version Properties
| Field | Type | Description |
|---|---|---|
id | UUID | Version identifier |
processId | UUID | Which process this version belongs to |
organizationId | UUID | Owning organization |
versionNumber | int | Sequential version number (auto-incremented) |
label | string | Human-readable label (e.g., "v1.0 - initial release") |
snapshot | JSONB | Complete process graph at this point |
createdBy | string | Who created the version |
createdById | UUID | Creator user ID |
createdAt | timestamp | When the version was created |
Creating a Version
API: POST /processes/versions/:process_id
{
"label": "v1.0 - initial release"
}Response:
{
"id": "version-uuid",
"versionNumber": 1,
"label": "v1.0 - initial release",
"createdBy": "John Smith",
"createdAt": "2026-04-12T10:00:00Z"
}What the Snapshot Contains
The snapshot field stores the full process state:
{
"nodes": [
{
"id": "node-uuid",
"type": "inputNode",
"position": { "x": 100, "y": 200 },
"config": {
"label": "Email Input",
"authMethod": "service_account",
"serviceAccountId": "sa-uuid",
"senderFilter": "*@steelcustomer.com"
}
},
{
"id": "node-uuid-2",
"type": "schematizationNode",
"position": { "x": 400, "y": 200 },
"config": {
"label": "Extract Order",
"schemaId": "schema-uuid",
"model": "gpt-4o"
}
}
],
"edges": [
{
"id": "edge-uuid",
"sourceNodeId": "node-uuid",
"targetNodeId": "node-uuid-2",
"sourceHandle": "output",
"targetHandle": "input"
}
]
}Listing Versions
API: GET /processes/versions/:process_id
Returns all versions ordered by version number (newest first):
[
{
"id": "version-uuid-3",
"versionNumber": 3,
"label": "v1.2 - added urgency handling",
"createdBy": "John Smith",
"createdAt": "2026-04-12T14:00:00Z"
},
{
"id": "version-uuid-2",
"versionNumber": 2,
"label": "v1.1 - fixed stainless pricing",
"createdBy": "Jane Doe",
"createdAt": "2026-04-10T09:00:00Z"
},
{
"id": "version-uuid-1",
"versionNumber": 1,
"label": "v1.0 - initial release",
"createdBy": "John Smith",
"createdAt": "2026-04-08T16:00:00Z"
}
]Getting Version Detail
API: GET /processes/version/:version_id
Returns the full version including the snapshot. Use this to inspect what the process looked like at that point.
Restoring a Version
API: POST /processes/version/:version_id/restore
Replaces the current process graph with the snapshot from the specified version:
- All current nodes and edges are deleted.
- Nodes and edges from the snapshot are created.
- Configs are restored exactly as they were.
Important
Deleting a Version
API: DELETE /processes/version/:version_id
Permanently removes the version record and its snapshot.
Versioning Best Practices
When to Create Versions
- Before making significant changes to a running process
- After verifying a new configuration works correctly
- Before deploying a process to production
- After fixing a bug (label it with the fix description)
Labeling Convention
Use descriptive labels that explain what changed:
v1.0 - initial release v1.1 - fix: stainless steel price was using carbon rate v1.2 - feat: added urgency multiplier to quote calculation v2.0 - refactor: split into sub-processes for modularity
Version vs. Export
| Feature | Version | Export |
|---|---|---|
| Purpose | Rollback within the same process | Share or backup across processes/orgs |
| Storage | Database record linked to process | JSON file |
| Contains | Node/edge snapshot | Full process + schema dependencies |
| Restore | Replaces current graph in-place | Creates a new process |
| Cross-org | No | Yes |
Execution Graph Snapshots
Separately from versions, every execution also captures a graph snapshot in the graph_snapshot field. This happens automatically and cannot be disabled.
The execution snapshot ensures that:
- You can always see exactly what config produced a given result
- Editing a process doesn't retroactively change how past executions appear
- Debugging uses the actual graph that ran, not the current (possibly modified) graph
Difference from Versions
| Aspect | Process Version | Execution Snapshot |
|---|---|---|
| Created by | User (manual) | System (automatic) |
| Named | Yes (label) | No |
| Restorable | Yes | No (read-only) |
| Trigger | User clicks "Create Version" | Every execution start |