When this happens, do that.
Automation is declarative orchestration above the seven canonical execution surfaces — never a separate eighth surface. Trigger on product events, schedules, signals, webhook receipts. Run actions through canonical APIs. Wait for approvals. Send notifications. Compensate on failure. The AutomationExpr AST is bounded by typed sealed records — no raw eval, no scripting, no Expression.Compile.
One canonical orchestration plane above the seven surfaces.
Triggers from anywhere
Customer create, Order paid, subscription renewed, schedules, workflow signals, webhook receipts, agent run completions, schema transitions — every canonical product event can trigger an automation.
Actions through canonical APIs
Automations call canonical operations through the same IApiOperationDispatcher REST and SDK clients use. No raw shell, no SDK leak — every action is a typed canonical operation.
Bounded typed AutomationExpr AST
Sealed records. Closed discriminated union. No raw eval, no Roslyn scripting, no Expression.Compile. Filter expressions, transform expressions, guard expressions — all typed nodes the compiler can validate.
13-stage compiler
Trigger source / action resolution / guard expression / transform / grant / capability / schema compatibility / unit measure / idempotency-retry / compensation completeness / publication-environment-branch / management authority / connector contract compatibility.
Synthesized durable workflows
When the flow contains long-running nodes, the compiler synthesizes a durable workflow definition embedded in the artifact. Never hidden — dashboards inspect via GET /api/Automation/{id}/synthesized-workflow.
Compensation completeness
Irreversible-effect-without-compensation fails the compiler. Retry-without-idempotency-or-compensation fails the compiler. Distributed correctness is enforced before runtime.
Branchable manifest domain
AutomationDefinition is one of 19 typed branching manifest domains. Operational entities (AutomationRun, StepRun, ActionAttempt, ApprovalTask, Signal) are explicitly NOT branchable.
Reads from PCG
The 13-stage compiler validates against the Plane Capability Graph. Trigger references real PCG resources. Action capabilities map to real PCG capabilities. Schema compatibility is real PCG schema.
Contributes to PCG
AutomationGraphContributor seeds canonical effect, policy, transform, trigger vocabulary back into PCG — so other planes (agent planner, dashboard graph explorer) can reason over automations.
Never an 8th surface
Sealed records, no eval
All fail closed
Inspect via API
Build complex flows visually.
Trigger on the right product event. Run actions through canonical APIs. Pause for approvals. Compensate on failure. The 13-stage compiler catches structural errors before they reach production.