conductor-oss / conductor-oss/java-sdk

EXCLUSIVE_JOIN task: missing builder class; defaultExclusiveJoinTask unreachable

Open Beginner friendly
#133 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
12
Forks
10
Avg merge
2d 8h
Merged PRs (30d)
4

Description

## Summary

`TaskType.EXCLUSIVE_JOIN` exists in the SDK enum but there is no `ExclusiveJoin` builder
class. There is no way to set the `defaultExclusiveJoinTask` field through the SDK API.
Users must construct raw `WorkflowTask` objects manually.

## Server baseline

Conductor **3.32.0-rc.9**

## Evidence

**Static:** `TaskType.EXCLUSIVE_JOIN` is in the enum; no builder class exists.
`WorkflowTask.defaultExclusiveJoinTask` (type: `List`) is unreachable from the SDK.

**Live (2026-07-16):** A raw EXCLUSIVE_JOIN task (`joinOn`, `defaultExclusiveJoinTask`)
inside a SWITCH workflow was registered and executed against Conductor OSS 3.32.0-rc.9.
Workflow completed successfully — server supports EXCLUSIVE_JOIN fully, gap is SDK-only.

## Expected behaviour

```java
new ExclusiveJoin("excl_join_ref")
.joinOn("branch_a_task", "branch_b_task")
.defaultExclusiveJoinTask("branch_b_task")
```

## Proposed fix

```java
public class ExclusiveJoin extends Task {
private String[] joinOn;
private List defaultExclusiveJoinTask = new ArrayList<>();

public ExclusiveJoin(String taskReferenceName, String... joinOn) {
super(taskReferenceName, TaskType.EXCLUSIVE_JOIN);
this.joinOn = joinOn;
}

public ExclusiveJoin defaultExclusiveJoinTask(String... tasks) {
this.defaultExclusiveJoinTask = Arrays.asList(tasks);
return this;
}

@Override
protected void updateWorkflowTask(WorkflowTask task) {
task.setJoinOn(Arrays.asList(joinOn));
task.setDefaultExclusiveJoinTask(defaultExclusiveJoinTask);
}
}
```

## Related

Discovered during systematic SDK audit against Conductor OSS 3.32.0-rc.9.
Same gap exists in the Python SDK (conductor-oss/python-sdk#429).

Contributor guide

Open the contributing guide

Research direction

Start with TaskType.EXCLUSIVE_JOIN and WorkflowTask.defaultExclusiveJoinTask, then compare the proposed ExclusiveJoin API with the SDK's Task builder conventions. Done means callers can configure joinOn and defaultExclusiveJoinTask through ExclusiveJoin and the resulting workflow task can be registered and executed without constructing a raw WorkflowTask.

Written by the indexing model from the issue text.

Assessment

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.