At some point, we decided that proposed changes (patches) should live in source control before they were approved and brought into history. In my view, this is where the problem lives.
I don't care about having an immutable record of the history of patches the same way I don't care about having an immutable record of your keystrokes as you produced the change. That's an implementation detail.
However, once something is merged into trunk, I want to know what was merged, when it was merged, who merged it, and any people who approved it.