Cluster G from the structural analysis: strips system-managed fields,
fills required defaults, injects llmDescriptor, normalizes MCP server
bindings and shared-memory wiring, HumanDecision option names, HTTP
authorization defaults - pure ObjectNode manipulation depending only on
mcpServersProvider and blockFactories (now passed as parameters instead
of instance fields).
- New BlockDraftNormalizer holds buildBlock/normalizeBlockDraft and the
full sanitization tree: injectSystemManagedFields, ensureRequiredTextDefaults,
normalizeHumanDecisionOptions, normalizeHttpServerCallAuthorization,
normalizeMcpAgentServers, normalizeMcpAgentSharedMemory (+ producer/
consumer configuration), ensureMcpAgentModelConfigured,
ensureSequentialInputPlaceholder, createBlock, llmDescriptorNode, etc.
- SHARED_MEMORY_SESSION_NAME and SYSTEM_MANAGED_FIELDS promoted from
private to package-private constants so the new class can reference
them without duplication
2352 -> 1805 -> 1412 lines. 3350 -> 1412 total so far (-1938, ~58%).
Behavior-preserving: pure extraction plus explicit parameter-passing for
the two fields this cluster touches, no logic changes.
Verified with `mvn test`: 462 tests, 0 failures, 0 errors.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>