A GenericContainer whose subflow takes only one of several internal branches left the other branches' exposed outputs unproduced. The completion path (reconcileGenericSubflow / GenericContainerExecutor.completedResult) returned NodeExecutionResult.completed(valueMap) with an empty notSelectedOutputs, so ExecutionContext.completeStep marked every unproduced exposed output UNAVAILABLE. Downstream that reads as an error signal, not a skip: a BranchRejoin (which self-skips only when ALL inputs are NOT_SELECTED) instead saw UNAVAILABLE, went READY and threw BRANCH_REJOIN_INPUT_UNAVAILABLE, failing the whole execution. A plain routing block never hits this because it reports its not-taken outputs via notSelectedOutputs. Both container completion paths now return NodeExecutionResult.routed(values, allExposedOutputNames): a successful subflow that didn't take an internal branch surfaces that branch's exposed output as NOT_SELECTED, so downstream steps and BranchRejoins skip cleanly - letting a container act as a real branching node (early-stop outcomes exposed as outputs routed to top-level EndBlocks). Containers with a single always-produced output are unaffected (that output is in the value map, notSelected is empty). Found while building the containerized Jensen recruitment flow, where phase containers expose early-stop outputs; added a focused regression test (genericContainerUnselectedExposedOutputsSkipDownstreamCleanlyInsteadOfErroring) and the "Jensen Recruitment Process - Full Revised (Containerized)" seed flow that groups the 12 swimlanes into 7 phase containers (13 top-level nodes instead of 39). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|---|---|---|
| .mvn/wrapper | ||
| src | ||
| .gitattributes | ||
| .gitignore | ||
| Dockerfile | ||
| mvnw | ||
| mvnw.cmd | ||
| ollama-preloaded-docker | ||
| pom.xml | ||