OpenBMB/ChatDev · error · SystemExit

1

Error message

1

What it means

409 Conflict raised from the shared workflow-persist helper when uploading workflow content whose YAML file already exists on disk and allow_overwrite is false (the upload path). The update API exists specifically for overwriting.

Source

Thrown at check/check_workflow.py:148

def main():
    parser = argparse.ArgumentParser(
        description="Check workflow structure: unique natural start/end or explicit start/end per (sub)graph")
    parser.add_argument("path", nargs="?", default="design_0.4.0.yaml", help="Path to YAML file")
    parser.add_argument("--no-schema", action="store_true", help="Skip schema validation (0.4.0)")
    parser.add_argument("--fn-module", dest="fn_module", default=None,
                        help="Module name or .py path where edge functions are defined (for schema validation)")
    args = parser.parse_args()

    data = read_yaml(args.path)

    if not args.no_schema:
        schema_errors = check_yaml.validate_design(data, set_defaults=True, fn_module_ref=args.fn_module)
        if schema_errors:
            print("Invalid schema:")
            for e in schema_errors:
                print(f"- {e}")
            raise SystemExit(1)

    logic_errors = check_workflow_structure(data)
    if logic_errors:
        print("Workflow issues:")
        for e in logic_errors:
            print(f"- {e}")
        raise SystemExit(2)
    else:
        print("Workflow OK.")


if __name__ == "__main__":
    main()

View on GitHub (pinned to 4fb2db0ea9)

Solutions

  1. Use the update API endpoint to overwrite the existing workflow.
  2. Or upload under a new filename.
  3. Delete the existing workflow first if you truly want a fresh create.

Example fix

# before
POST /api/workflows/content  {"filename": "flow.yaml", "content": ...}
# after
PUT /api/workflows/content  {"filename": "flow.yaml", "content": ...}  # update API allows overwrite
Defensive patterns

Strategy: try-catch

Validate before calling

// check workflow existence via list endpoint before upload

Try / catch

catch (e) { if (e.status === 409) switchToUpdateApi(filename, content); }

Prevention

When it happens

Trigger: POST /api/workflows upload with a filename that already exists in YAML_DIR without overwrite semantics; replaying an upload request in CI or scripts.

Common situations: Re-deploying the same workflow; iterating locally and re-uploading instead of updating; automated pipelines that don't distinguish create vs update.

Related errors


AI-assisted analysis of OpenBMB/ChatDev@4fb2db0ea9 (2026-08-27). Data as JSON: /api/errors/f7b514b74c3bc2db. Report an issue: GitHub.