Why did the design of subaddresses deliberately allow senders to disciminate against them?

Read the "How it works cryptographically" section.

Yes, I did.

that isn't the only process for receiving to a subaddress

You are correct, but I will now whine and gripe. Why? Because I like whining and griping.

The explanation in that github link would have been more helpful if it had simply pointed out the one step that changed instead of reiterating the whole process and forcing the reader to do the "diff" themselves. This is an error-prone process because of notation and variable name choices. Since I had to do it, here's the diff, hopefully fewer people have to do it now:

The output key generation procedure is the same as CNS006 except that the output's one-time public key is sender_randomrecipient_public_viewkey rather than sender_randomcurve_generator.

Question: we just had a network-wide hardfork; why didn't the hardfork change the transaction rules so that all txouts use the recipient_public_viewkey instead of the curve generator? Then senders wouldn't be able to tell if they were sending to a subaddress or not.

/r/Monero Thread Parent