uses open3 for error detection