conductor-oss / conductor-oss/java-sdk
EXCLUSIVE_JOIN task: missing builder class; defaultExclusiveJoinTask unreachable
- 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
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