Not sure what you are after, your case sounds like a bug in your code because it is all observables -- singles, completables are just semantics (edited)
you need to dispose of the subscription if your source observable can outlive the observer, because it holds a hard reference to it
however I believe observable releases the reference after it is completed, so no leak
but I would not rely on it anyways, also its pointless to make such distinction, because you will need to dispose it anyways since it observer can go away sooner than observable completes
And to the contract, yes its only contract that you will receive onNext and then onComplete and no other onNexts,etc .. same as it is for Single, its only "agreement" that you wont call onSuccess after onError, no way to enforce it
What I was trying to say is that there is no diference between cold observable that emits 1 onNext and then onComplete versus Single