fix: handle missing files gracefully