Currently, all new blocks are handled as an absolute truth should the requirements be met as is. I propose we add one more validation method. Using the transaction in my nodes memory and there related timestamps. Ensure that this new block didn't accept any older TX that shouldn't be there.
Expected behavior
Tell us what should happen: The block shouldn't be accepted as it's malicious, regarding "double - spending."
Actual behavior
Tell us what happens instead The Block gets accepted "as is." Even if the current node(your node) has the original and first TX.
Proposal: Validate timestamps of all transactions in a given block before accepting the block.