Published automatic system workflows and the organization editor for custom graphs.
Workflows automate notifications and safe side effects after domain events, schedules, webhooks, and run failures.
Every organization matches published owner_scope = system graphs with visibility = automatic. Those graphs notify, create drafts, or escalate. They never send a newly created invoice, never auto-reply Inbox (AI already does that), and never delete records.
| Key | Trigger | Behavior |
|---|---|---|
quote-lifecycle | quote.sent | Send quote email, remind 7 days and 1 day before expiry, nudge the owner at the 7-day checkpoint, expire, then auto-reject after 30 days |
quote-accepted | quote.accepted | Customer and owner emails, then a draft invoice and one follow-up task |
quote-rejected | quote.rejected | Notify the organization |
invoice-lifecycle | invoice.sent | Run template reminders (days after due may be negative), mark overdue, owner nudge 1 day after due |
invoice-paid | invoice.paid | Customer receipt, in-app paid notification, internal notify |
invoice-cancelled | invoice.cancelled | Customer and internal notify; cancel the open lifecycle run |
invoice-payment-failed | invoice.payment-failed | Customer and internal notify (lifecycle reminders keep running) |
invoice-disputed | invoice.disputed | Customer and internal notify |
workflow-failed-alert | trigger.workflow-failed | Email owners; skipped when the failed run is this graph |
task-assigned / task-due-soon / task-overdue | matching task.* events | Notify assignees (overdue also notifies the reporter) |
task-due-scan | daily schedule | Publish due-soon (due within 24h) and overdue events |
agenda-item-follow-up | agenda.item.created | Notify at start, then 1 hour after end if the item still exists |
customer-welcome | customer.created | Welcome email to the billing address |
inbox-unanswered | inbox.message.received | After 4 hours, nudge assignees if the thread is still unanswered |
invoice-overdue-digest / draft-stale-digest | Monday 08:00 Europe/Amsterdam | Email overdue invoices or drafts older than 14 days |
billing-usage-threshold | hourly | Publish billing.usage-threshold at 80% / 100% of included usage |
knowledge-ingestion / product-lookup-from-image | existing product graphs | Unchanged |
webhook.received is a building block for incoming endpoints. There is no default consumer.
Organizations can copy a system graph and add catalog actions such as quote.create-asset. Automatic graphs stay conservative for every tenant.
The organization workflow page edits graph definitions: domain-event, schedule, manual, webhook, and workflow-failed triggers; conditions; delays; and registered domain actions. Status transitions and Stripe or cron producers call dispatchWorkflowEvent, which matches published system plus organization graphs.