Limits
Limits
AutoFlow enforces the limits below. None of them is configurable per workflow except the schedule-to-complete timeout.
Payloads and values
| Limit | Value | Where it applies |
|---|---|---|
| Script size | 100 KiB | StartWorkflowRequest.workflow_definition. |
| Workflow input | 256 KiB | The definition, args and kwargs marshaled together. Checked in AutoFlow, so a request over it is refused with INVALID_ARGUMENT. |
Single string, bytes or sensitive value | 256 KiB | Any value crossing the boundary between a workflow and AutoFlow. Enforced when the value leaves the workflow, not while it runs, so a concatenation can grow past it and fail later. |
| Integer | signed 64-bit | Any integer crossing that boundary. Starlark integers are arbitrary precision inside a workflow. |
| Action result | 256 KiB | The value an action resolves to, as recorded in history. |
| GitLab API response body | 240 KiB | The gitlab module reads the response up to the 256 KiB result cap minus a 16 KiB framing margin for the status and headers. |
| Module error message | 4 KiB | The Error.message a module returns. |
| Module file | 256 KiB | Each Starlark file a module descriptor ships. |
| Annotations | 32 per workflow, value 1 KiB | StartWorkflowRequest.annotations. Keys are unique and follow the Kubernetes annotation key format. |
Channels
| Limit | Value | Where it applies |
|---|---|---|
| Channel values received | 10,000 per workflow | Across every channel of one workflow, for its whole life. A send past it is refused with RESOURCE_EXHAUSTED and never clears. |
| Single channel value | 64 KiB marshaled | SendToWorkflowChannel and a module’s SendToChannel. |
| Channel name | 1 to 255 bytes | Names a caller supplies. The __autocore_internal: prefix is reserved. |
SendToChannel batch | 1 to 60 values | One message of a module’s send stream. |
Time
| Limit | Value | Where it applies |
|---|---|---|
| Schedule-to-complete timeout | 30 days by default, 60 days at most | Per workflow, set with schedule_to_complete_timeout. The deadline cannot be disabled. |
| Token expiry | start plus the timeout plus 1 hour | The workflow token and every channel token of that workflow. Recorded at creation, so re-minted tokens carry the same instant. |
| Module registration | 30 minutes | A remote module’s descriptor. It re-registers periodically to stay loadable. |
| Inline action attempt | at most 500 ms | The in-goroutine attempt of an inlineable action. Exceeding it queues the action as any other. |
| Data retention | 90 days | Workflow executions, history events and signal deliveries are partitioned by week and whole buckets are dropped past the window. |
Retention is a ceiling on idle time, not only a cleanup horizon for finished workflows. A workflow that is still running but has recorded no history event for longer than the window is retired with its partition and is silently gone, so treat 90 days as the longest sleep or await a workflow definition can be written around.
Computation
| Limit | Value | Where it applies |
|---|---|---|
| Workflow thread steps | 100,000,000 | Each interpreter thread of a workflow, in Starlark computation steps, roughly a second of CPU. A warm resume carries the count and a cold replay reproduces it, so a runaway fails at the same instruction wherever it runs. |
| Module file thread steps | 10,000,000 | The thread that evaluates a loaded module file, a tenth of a workflow thread’s budget. |
| Transform source | 8 KiB | The source text of one derived_action transform. |
| Transform chain | 8 layers | How many transforms may wrap one invocation. |
| Transform steps | 1,000,000 | One run of a whole transform chain. Every layer spends from it. |
| Transform output | 256 KiB | The result a transform produces, checked inside the activity. |
| Poll predicate cost | 100,000 CEL units | One evaluation of a poll check. |
Identifiers and API
| Limit | Value | Where it applies |
|---|---|---|
| Workflow key | 1 to 255 bytes | Returned by StartWorkflow, presented by every other RPC. |
| Idempotency key | 1 to 255 bytes | StartWorkflow and SendToWorkflowChannel. Required; the __autocore_internal: prefix is reserved. |
| Workflow token, channel token | 1 byte to 4 KiB | Every RPC that addresses an existing workflow. |
| Token binding | exactly 64 bytes | StartWorkflowRequest.token_binding. |
| RPC rate | 60,000 calls per namespace per minute | All four RPCs together. Over the limit is RESOURCE_EXHAUSTED. |
Last updated on