Right now DocumentSourceSequentialCache (DSSC) is created by DocumentSourceLookup and the lookup stage maintains ownership of the cache across iterations of doGetNext. When the pipeline is cloned, we wind up with multiple DSSC stages pointing to the same cache. For lookup this is fine as only one copy is ever used, but it means that for DSSC clone() is potentially risky if we want to use it in a situation where we'd want multiple stages with unique caches (stages across multiple pipelines). There may not actually be any work for this ticket if we decide to leave as is – this situation isn't likely to come up.
Lookup currently owns the cache because it needs the cache to outlive multiple calls to buildPipeline. The purpose of this ticket is to figure out if there is a way that we could maintain that property while making clone() make more sense.