Files
antigravity-skills-reference/skills/dbos-python/references/workflow-constraints.md
Max dml 7e5abd504f feat: add DBOS skills for TypeScript, Python, and Go (#94)
Add three DBOS SDK skills with reference documentation for building
reliable, fault-tolerant applications with durable workflows.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 23:26:51 +01:00

1.6 KiB

title, impact, impactDescription, tags
title impact impactDescription tags
Follow Workflow Constraints CRITICAL Violating constraints causes failures or incorrect behavior workflow, step, constraints, rules

Follow Workflow Constraints

DBOS workflows and steps have specific constraints that must be followed for correct operation.

Incorrect (calling start_workflow from step):

@DBOS.step()
def my_step():
    # Never start workflows from inside a step!
    DBOS.start_workflow(another_workflow)

Incorrect (modifying global state):

results = []  # Global variable

@DBOS.workflow()
def my_workflow():
    # Don't modify globals from workflows!
    results.append("done")

Incorrect (using recv outside workflow):

@DBOS.step()
def my_step():
    # recv can only be called from workflows!
    msg = DBOS.recv("topic")

Correct (following constraints):

@DBOS.workflow()
def parent_workflow():
    result = my_step()
    # Start child workflow from workflow, not step
    handle = DBOS.start_workflow(child_workflow, result)
    # Use recv from workflow
    msg = DBOS.recv("topic")
    return handle.get_result()

@DBOS.step()
def my_step():
    # Steps just do their work and return
    return process_data()

@DBOS.workflow()
def child_workflow(data):
    return transform(data)

Key constraints:

  • Do NOT call DBOS.start_workflow from a step
  • Do NOT call DBOS.recv from a step
  • Do NOT call DBOS.set_event from outside a workflow
  • Do NOT modify global variables from workflows or steps
  • Do NOT use threads to start workflows

Reference: DBOS Workflows