After the heartbeat closes a dead-server channel, gRPC raises
ValueError("Cannot invoke RPC on closed channel!") rather than a
grpc.RpcError, which slipped past the existing pdmobject wrappers and
surfaced to the user as a bare ValueError nested in a traceback.
- pdmobject add_method decorator and _call_pdm_method_void /
_return_value / _return_optional_value now also catch the
closed-channel ValueError and translate it to RipsError.
- well_path.add_well_log no longer rewraps every exception as
RuntimeError. Cleanup of temporary key-value entries still runs, but
the original typed exception (e.g. RipsError with code/details) is
re-raised so callers can inspect it.