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
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.
Summary
Tested against: Conductor OSS 3.32.0-rc.9
TaskType.EXCLUSIVE_JOINexists in the SDK enum but there is noExclusiveJoinTaskbuilder class. More critically, the
defaultExclusiveJoinTaskfield (which tellsthe server which task to use when no SWITCH branch ran) cannot be set through any
SDK path.
Details
JoinTaskalways producesTaskType.JOIN, notTaskType.EXCLUSIVE_JOIN. Thereis 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
defaultExclusiveJoinTaskset, EXCLUSIVE_JOIN workflows with a branch thatdoesn't match will stall.
Suggested fix
Verified against
Conductor server 3.32.0-rc.9. EXCLUSIVE_JOIN runs correctly when built via
raw
WorkflowTaskwith the correct fields set. The gap is purely in the SDK —no builder class exists.