Retries and Node Reruns

The current Python and Go SDKs have no methods for full retry, node rerun, rerun planning, or node-run details. list_workflow_jobs()/ListWorkflowJobs() returns only the job ID, workflow ID, state, and timestamps. That information is insufficient to derive a safe partial-rerun plan.

Detect failure with the SDK

Wait for either completion or failure:

from moi.models import WorkflowJobStatus

job = client.wait_for_workflow_job(
    workflow_id,
    source_file_id,
    wait_for_statuses=[
        WorkflowJobStatus.COMPLETED,
        WorkflowJobStatus.FAILED,
    ],
)

if job["status"] == WorkflowJobStatus.FAILED:
    print("failed job:", job["job_id"])

This result is enough to raise an alert or route the job for investigation. The SDK does not return a failed node, error log, or intermediate artifact, so it cannot select a rerun node automatically.

Reloading is not retry

Uploading the source file again may trigger another job, but it does not create a retry relationship with the original job and does not guarantee idempotent output. Before doing so, verify:

  • the root cause has been corrected in the UI or target instance’s job details;

  • whether the old job wrote partial output;

  • whether the target volume or external system accepts duplicate writes safely;

  • whether the file deduplication policy will skip the new upload.

For a formal full retry or branch rerun, use a Product API explicitly published by the target instance or use the UI. Do not guess paths or request bodies through the raw client’s private generic HTTP helpers.

If the application replaces a failed job with a new file load, record the original job ID, new file ID, new job ID, reason, and operator. Validate the target artifact after completion rather than relying only on the new state.