Skip to content

Status System API

The Status System provides standardized task execution status reporting for workflow logging, monitoring, and debugging. It supports all execution modes (run, dry-run, compare) with comprehensive error categorization.

TaskStatus Enum

TaskStatus

Enumeration of all possible task execution statuses.

Provides standardized status reporting for workflow task execution, supporting different execution modes and comprehensive error categorization.

Status Categories
  • Execution: EXECUTES, WOULD_EXECUTE, SKIPS, WOULD_SKIP
  • Comparison: IDENTICAL, DIFFERENT
  • Errors: INVALID_USES, INVALID_PARAMETER, FAILED, TIMED_OUT

Attributes:

  • DIFFERENT

    Task re-executed, outputs differ from previous run.

  • EXECUTES

    Task executed successfully, output files created/updated.

  • FAILED

    Task execution threw unexpected exception.

  • IDENTICAL

    Task re-executed, outputs identical to previous run.

  • INVALID_PARAMETER

    Parameters in with: block are invalid for action.

  • INVALID_USES

    Action package specified in uses: not found.

  • SKIPS

    Task skipped because output files exist and are current.

  • TIMED_OUT

    Task exceeded configured timeout.

  • WOULD_EXECUTE

    Task would execute successfully if run (dry-run mode).

  • WOULD_SKIP

    Task would be skipped because output files exist (dry-run mode).

  • is_dry_run (bool) –

    Return True if status is for dry-run mode.

  • is_error (bool) –

    Return True if status indicates an error condition.

  • is_execution (bool) –

    Return True if status indicates actual execution occurred.

  • is_success (bool) –

    Return True if status indicates successful execution.

DIFFERENT class-attribute instance-attribute

DIFFERENT = 'DIFFERENT'

Task re-executed, outputs differ from previous run.

EXECUTES class-attribute instance-attribute

EXECUTES = 'EXECUTES'

Task executed successfully, output files created/updated.

FAILED class-attribute instance-attribute

FAILED = 'FAILED'

Task execution threw unexpected exception.

IDENTICAL class-attribute instance-attribute

IDENTICAL = 'IDENTICAL'

Task re-executed, outputs identical to previous run.

INVALID_PARAMETER class-attribute instance-attribute

INVALID_PARAMETER = 'INVALID_PARAMETER'

Parameters in with: block are invalid for action.

INVALID_USES class-attribute instance-attribute

INVALID_USES = 'INVALID_USES'

Action package specified in uses: not found.

SKIPS class-attribute instance-attribute

SKIPS = 'SKIPS'

Task skipped because output files exist and are current.

TIMED_OUT class-attribute instance-attribute

TIMED_OUT = 'TIMED_OUT'

Task exceeded configured timeout.

WOULD_EXECUTE class-attribute instance-attribute

WOULD_EXECUTE = 'WOULD_EXECUTE'

Task would execute successfully if run (dry-run mode).

WOULD_SKIP class-attribute instance-attribute

WOULD_SKIP = 'WOULD_SKIP'

Task would be skipped because output files exist (dry-run mode).

is_dry_run property

is_dry_run: bool

Return True if status is for dry-run mode.

is_error property

is_error: bool

Return True if status indicates an error condition.

is_execution property

is_execution: bool

Return True if status indicates actual execution occurred.

is_success property

is_success: bool

Return True if status indicates successful execution.

The TaskStatus enum defines all possible task execution outcomes with standardized string values and helpful categorization properties.

Status Categories

Core Execution Statuses

  • EXECUTES - Task executed successfully, output files created/updated
  • WOULD_EXECUTE - Task would execute successfully if run (dry-run mode)
  • SKIPS - Task skipped because output files exist and are current
  • WOULD_SKIP - Task would be skipped because output files exist (dry-run mode)

Compare Mode Statuses

  • IDENTICAL - Task re-executed, outputs identical to previous run
  • DIFFERENT - Task re-executed, outputs differ from previous run

Error Statuses

  • INVALID_USES - Action package specified in uses: not found
  • INVALID_PARAMETER - Parameters in with: block are invalid for action
  • FAILED - Task execution threw unexpected exception
  • TIMED_OUT - Task exceeded configured timeout

Properties

is_success

Returns True if status indicates successful execution: - EXECUTES, WOULD_EXECUTE, SKIPS, WOULD_SKIP, IDENTICAL, DIFFERENT

is_error

Returns True if status indicates an error condition: - INVALID_USES, INVALID_PARAMETER, FAILED, TIMED_OUT

is_execution

Returns True if status indicates actual execution occurred: - EXECUTES, IDENTICAL, DIFFERENT

is_dry_run

Returns True if status is for dry-run mode: - WOULD_EXECUTE, WOULD_SKIP

Usage Examples

Basic Status Checking

from causaliq_workflow import TaskStatus

# Check if a task completed successfully
if status == TaskStatus.EXECUTES:
    print("Task executed successfully")

# Categorize status
if status.is_success:
    print("Task completed successfully")
elif status.is_error:
    print(f"Task failed with error: {status.value}")

Status-Based Control Flow

# Handle different execution outcomes
match status:
    case TaskStatus.EXECUTES | TaskStatus.IDENTICAL:
        log_successful_execution(task_name, runtime)
    case TaskStatus.SKIPS | TaskStatus.WOULD_SKIP:
        log_skipped_task(task_name, reason="outputs exist")
    case TaskStatus.DIFFERENT:
        log_output_changes(task_name, diff_summary)
    case TaskStatus.FAILED:
        log_task_failure(task_name, exception_info)
    case _:
        log_other_status(task_name, status)

Filtering and Aggregation

# Count successful vs failed tasks
successful_tasks = [s for s in task_statuses if s.is_success]
failed_tasks = [s for s in task_statuses if s.is_error]

print(f"Success rate: {len(successful_tasks)/len(task_statuses):.1%}")

# Find tasks that actually executed
executed_tasks = [s for s in task_statuses if s.is_execution]
print(f"Executed {len(executed_tasks)} tasks")

Dry-Run vs Run Mode

def analyze_workflow_plan(statuses):
    """Analyze what a workflow would do in dry-run mode."""
    would_execute = [s for s in statuses if s == TaskStatus.WOULD_EXECUTE]
    would_skip = [s for s in statuses if s == TaskStatus.WOULD_SKIP]

    print(f"Would execute: {len(would_execute)} tasks")
    print(f"Would skip: {len(would_skip)} tasks")

    return len(would_execute) > 0  # True if work needed

Integration Points

Workflow Logger Integration

The TaskStatus enum is designed for integration with the upcoming WorkflowLogger system:

# Future logging integration example
logger.log_task(
    action_name="causal-discovery",
    status=TaskStatus.EXECUTES,
    message="learn graph",
    runtime=2.3,
    outputs="/results/graph.xml"
)

Action Development

Actions will report their execution status using TaskStatus values:

# Future action integration example  
def run(self, inputs, mode="dry-run", logger=None):
    if mode == "dry-run":
        if self._outputs_exist(inputs):
            return {"status": TaskStatus.WOULD_SKIP}
        else:
            return {"status": TaskStatus.WOULD_EXECUTE}

    # Actual execution logic...
    return {"status": TaskStatus.EXECUTES, "outputs": results}

Design Principles

Status Completeness

The enum covers all possible task execution outcomes across different modes, ensuring comprehensive status reporting without gaps.

Categorization Properties

Helper properties (is_success, is_error, etc.) enable easy filtering and aggregation without hardcoding status lists.

String Values

All enum values use string representations matching their names, ensuring clear, readable log output.

Mode Awareness

Distinct statuses for dry-run vs run modes enable accurate workflow planning and execution reporting.


Next: CLI Interface | Previous: Schema Validation | Up: API Reference