Skip to content

Workflow validation

Use the reported source locations. The module must default-export exactly one defineWorkflow() value and may import only the pinned workflow SDK and reviewed pure viem utilities.

Check the schema and tagged wire value. EVM integers must use bigint, uint256, or int256; do not pass an unsafe JavaScript number.

Every reachable effect kind and resource must fit the declared capability envelope. Verify network, controlled-account ID, transaction target, HTTP host, notification channel, and audience. A finite agent grant also rejects unrestricted account bindings.

Every assimilated effect needs one nonempty deterministic key. A key cannot be duplicated or reused with another kind/request digest. Keys generated inside a loop should include a stable index or domain identifier.

Only sequential await, direct Promise.all, and direct Promise.allSettled are supported. Remove race, any, direct promises/thenables, aliases, spreads, floating effect arrays, and post-await array mutation.

Confirm the chain, target, exact function key, ABI fragment or saved contract key, arguments, and value. Registry ABI provenance may differ from the actual target, but both are frozen and disclosed. Raw calls need a label and reason.

Keep the local source and read the current workflow. Compare the current and local source, resolve the conflict, then save with the new workflow CAS.

Cancel it, correct and save the source, then start a new run. Started inputs, artifacts, capabilities, and effect history cannot be edited.