Cluster J: connection drafting/preservation/merging/dangling-drop and
LoopContainer body-output chaining - 23 methods, field-free except a
logger, using only FlowNode/Block/Container/Connection/IODescriptor and
the now-shared AssistantConnectionDraft record.
- New ConnectionAssembler holds toValidConnections/toConnection,
preserveConnections, mergeConnections, dropDanglingConnections,
chainStrandedLoopBodyOutputs (+ their private helpers: resolveIoName,
findIoByName, stripHandleNoise, resolveConnectionBlock, inferBlockByIo,
isOpenBodyOutput, firstOpenDataInput, registerNodeAlias, etc.)
- preserveCurrentConnections stays in FlowAssistantService (thin wrapper
over FlowCreateRequest) but now delegates to
ConnectionAssembler.preserveConnections
2988 -> 2571 lines (-417). 3350 -> 2571 total so far (-779, ~23%).
Behavior-preserving: pure extraction, no logic changes.
Verified with `mvn test`: 462 tests, 0 failures, 0 errors.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>