Return type for run_chain_blocking. The outer Result carries
helper-prep errors (ensure_model_ready + cache take); the inner Result
is whatever the caller’s closure returned. Closure errors pass through
unchanged so the caller can distinguish orchestrator-specific failures
(StageFailed, Invalid) from prep failures (ensure/cache).