conductor-oss / conductor-oss/python-sdk

No ExclusiveJoinTask builder class — defaultExclusiveJoinTask field unreachable

Open
#429 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Python
Stars
104
Forks
42
Avg merge
2d 1h
Merged PRs (30d)
3

Description

## Summary

Tested against: **Conductor OSS 3.32.0-rc.9**

`TaskType.EXCLUSIVE_JOIN` exists in the SDK enum but there is no `ExclusiveJoinTask`
builder class. More critically, the `defaultExclusiveJoinTask` field (which tells
the server which task to use when no SWITCH branch ran) cannot be set through any
SDK path.

## Details

`JoinTask` always produces `TaskType.JOIN`, not `TaskType.EXCLUSIVE_JOIN`. There
is no way to build an EXCLUSIVE_JOIN task using SDK classes alone.

EXCLUSIVE_JOIN is designed for SWITCH branches (where exactly one branch executes).
Without `defaultExclusiveJoinTask` set, EXCLUSIVE_JOIN workflows with a branch that
doesn't match will stall.

## Suggested fix

```python
class ExclusiveJoinTask(TaskInterface):
def __init__(self, task_ref_name: str, join_on: List[str],
default_exclusive_join_task: Optional[List[str]] = None):
super().__init__(task_ref_name, TaskType.EXCLUSIVE_JOIN)
self._join_on = join_on
self._default = default_exclusive_join_task or []

def to_workflow_task(self) -> WorkflowTask:
wf = super().to_workflow_task()
wf.join_on = self._join_on
wf.default_exclusive_join_task = self._default
return wf
```

## Verified against

Conductor server **3.32.0-rc.9**. EXCLUSIVE_JOIN runs correctly when built via
raw `WorkflowTask` with the correct fields set. The gap is purely in the SDK —
no builder class exists.

Contributor guide

No contributing guide indexed for this repository

Research direction

Locate the existing JoinTask and TaskInterface entry points, then inspect how they create a WorkflowTask and assign TaskType. Add coverage for constructing an EXCLUSIVE_JOIN task with join_on and default_exclusive_join_task; done means the SDK can serialize those fields and the resulting workflow runs correctly for an unmatched SWITCH branch.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend-api-design
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.