Looks good but is this really NFC ?
I.e. replacePayloadOp used to implicitly also replacePayloadValues and now we fail hard.
Is this a standalone applicable first step or does it need to land at the same time as dependent changes to avoid breaking downstream?
nit: less -> fewer