take(1) isn’t good enough. My favorite example of this problem is
obs.filter(x => x!==null).take(1)
obs never completes if it never emits a non-null value, despite the presence of take(1). So it’s potentially a long term memory leak that looks super safe.