People have attempted all sorts of mental gymnastics to develop a Theory of Everything vis-a-vis kitniyot.
I spare my poor brain and follow Rav Moshe Feinstein's opinion (Igros, OC3:63): it's kitniyot if it happened to have been banned (or "warned against"); not if it didn't. Rav Moshe also suspects that at some point they stopped adding foods to the list of kitniyot, as otherwise there would be nothing left to eat! (This is certainly historically possible. It's also Rav Moshe projecting how he would approach the problem.)
Otherwise, asks Rav Moshe, explain to me why mustard was on the list 700 years ago, yet caraway was clearly not on the list as of 200 years ago?
So why buckwheat and not quinoa? Because buckwheat was known to Ashkenazic rabbis a few centuries ago, and quinoa was not. So they never developed a ban or warning about it.
If, instead, we look for categorical explanations, then several could be offered, e.g.:
- Buckwheat and wheat can grow in the same field and therefore there is a cross-contamination risk, whereas quinoa is grown at such high altitudes that wheat couldn't grow there.
- "Buckwheat" is a word that people can confuse with "wheat", but "quinoa" is not.
- Quinoa's closest commonly-eaten relative is the beet, which everyone eats on Passover.
As for what's happened with quinoa in the past few years: there have been legitimate questions of cross-contamination in the factories and how it's processed. But assuming you know this is 100% pure quinoa, some poskim felt (and feel) that it is so grainlike that it should be prohibited, or it was already covered under some sort of categorical ban. (Some even attempted to split hairs and say it's so grainlike, even Rav Moshe would consider it prohibited; in my humble opinion that's a forced reading.) The Star-K has vociferously allowed it. There were differences of opinion among OU poskim, and my understanding is that recently, there was some change of thought among them to shift the official OU position from
ask your posek, we're not commenting to
it will say OU-P, and if your custom is otherwise, then follow your custom. I believe someone approached the OU poskim with the categorical arguments.