Do Bitcoin nodes propagate every transaction or only transactions that meet certain criteria? For instance, a transaction with a fee of 0 won't necessarily get included into a block and it might even be excluded from a node's mempool but would that transaction still get propagated throughout the entire network? Or can node choose not to propagate certain transactions?
If there is some criteria to which transactions get propagated what are they? I am guessing at the very least that nodes won't propagate invalid transactions?