What's the point of the "clean jobs" parameter in Stratum's "mining.notify" protocol? As I learn about the Stratum protocol, which allows a mining pool to coordinate work with its workers, I was curious what the "clean jobs" param in the mining.notify method means.  Per the spec -- https://en.bitcoin.it/wiki/Stratum_mining_protocol , it can be either true or false.  What I don't understand is why would it be false.  The wiki says if its false, "If false, they can still use the current job but should move to the new one after exhausting the current nonce range".  My question is what logical reason would a pool give to a miner to do this?  I'm assuming if new work comes in it means someone on the network has hashed the block and therefore there's no more potential for rewards.  So why have a worker waste his time continuing with a job that someone else has already completed?
My question is what logical reason would a pool give to a miner to do this?


To queue jobs to the miner. The server could tell the miner "here's work for you to do when you finish what you're currently working on". Since jobs are stateless and individualized (i.e. each job is only being worked on by that one user/worker), a server could queue jobs for the miner before it finishes its current job in order to avoid down time. So long as a new block hasn't been found, this is faster than the worker asking for another job when it finishes its current one.


  I'm assuming if new work comes in it means someone on the network has hashed the block and therefore there's no more potential for rewards. 


That's a bad assumption to make. For a given block, there can be lots of new work. New transactions could be generated, ExtraNonce1 can be incremented to provide new work, etc.


  So why have a worker waste his time continuing with a job that someone else has already completed?


IIRC jobs are individualized, so a miner is not doing work that a different miner is doing.