Request to fix the Join task resolution logic when its `joinOn` list contains a reference to a Switch task, ensuring it waits on the correct terminal child task.
## Bug Description When a Join task's \`joinOn\` list contains a reference to a container task (like Switch), the Join waits on the container itself rather than its terminal child task. This causes Fork/Join workflows with nested Switch tasks to fail: ``` [Fork] / \ v v [SimpleTask] [Switch] --caseX--> [InnerTask] \ / v v [Join] ``` The Join waits on \`[branch1_simple, branch2_switch]\` but should resolve \`branch2_switch\` → \`branch2_simple_inside_switch\`. ## Proposed Solution Introduce a polymorphic \`getTerminalTaskRef()\` method in \`WorkflowSystemTask\`: - **Base implementation**: returns the task itself - **Switch override**: resolves to the terminal task within the selected case branch, supporting recursive nesting - **Join**: uses \`SystemTaskRegistry\` to polymorphically resolve container tasks in \`joinOn\` This follows the Open-Closed Principle — new containe