Minctrl Docs
Guides

Design on the canvas

Author a governed flow in the Process Cockpit — place nodes, decorate them with risk tiers and gates, validate the graph live, and save it as a versioned draft.

The Process Cockpit is where you author a governed flow as a canvas graph of steps. This guide covers the pieces you work with, how live validation keeps the graph governable, and how a draft is saved.

Nodes and edges

A canvas is nodes connected by edges. Each node is a step carrying an id, a kind, and its governance fields:

Node kindWhat it is
agentAn automated step. Carries a risk tier and, for tools, a reversible flag.
gateA human sign-off point. The run parks here for a verdict.
gatewayA branch/join. Routes the run down one edge (exclusive) or fans out (parallel).

Edges connect node ids as { source, target } pairs, with an optional branch label on a gateway's outgoing edges.

Start from a template or from text

You rarely start blank. Seed the canvas from the closest existing vertical, or from a free-text description:

curl -s -X POST "$API/process-templates/draft-from-text" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Screen a member for a knee replacement prior-auth, then get a nurse sign-off.",
    "generate": false
  }'

With generate: false, the closest matching vertical's canvas graph comes back as a starting point; when nothing matches (or generate: true), a novel graph is constructed.

Validate live — gate-removal reachability

As you edit, validate the graph against the governance invariants. This is the check that keeps a flow governable: it flags an irreversible step that no human gate protects, a gate missing its human/gate-id, and a bad blast radius:

curl -s -X POST "$API/process-templates/validate" \
  -H "Content-Type: application/json" \
  -d '{
    "nodes": [
      { "id": "screen", "kind": "agent", "tier": "medium" },
      { "id": "signoff", "kind": "gate" }
    ],
    "edges": [{ "source": "screen", "target": "signoff" }]
  }'

The response is the linearized steps plus a violations list. The key property: if you remove a gate that sat in front of an irreversible step, validation reports that the irreversible step is now reachable without a human — so you can't accidentally ship an ungoverned flow.

Save a draft

When the graph is clean, persist it as a versioned draft scoped to your company. Each save bumps the version for (company, slug), so history is kept:

curl -s -X POST "$API/process-templates/" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "slug": "prior-auth",
    "name": "Prior Authorization",
    "nodes": [
      { "id": "screen", "kind": "agent", "tier": "medium" },
      { "id": "signoff", "kind": "gate" }
    ],
    "edges": [{ "source": "screen", "target": "signoff" }]
  }'

Saving re-runs the same validation, stores the violations alongside the graph, and returns the saved draft. List the latest version of each authored process:

curl -s "$API/process-templates/drafts" -H "Authorization: Bearer $TOKEN"

Saving a draft does not make it runnable in production on its own — it's a versioned, company-scoped authoring artefact. Runs execute the seated vertical templates; see Run a governed process.

See the Process templates reference for the full canvas, validation, and draft schemas.

On this page