Derek the source of the confusion may stem from the fact that ezRecipe relies on valid DIpH values for each grain for input. It does not attempt to predict the DIpH of the grains. I agreed Riffe's spreadsheet uses an assumed DIpH value based on solely on grain color. The override I mentioned lets you enter a different DIpH value when you feel the assumed DIpH value is too low or too high.
Keeping in mind that ezRecipe is meant to be a full-featured beer recipe design tool that is powerful and easy to use. I wanted it's brewing water and mash pH prediction features to be as accurate as possible without overwhelming the end user.
I don't think there is really any confusion on my part. I don't mean to imply you are confused either but let's reference Riffe:
Grist pH = DI pH - (0.0337 * (∑ f * A))
So say for instance we have an all pilsner grain bill. Color is 2.0L. MpH assumes 5.72 for DI pH. For Riffe:
Grist pH = 5.72 - (0.0337 * (-1.9 + (1 *2))) = 5.717
Now let's assume we can input our own DI pH of 5.80 (which we can):
Grist pH = 5.80 - (0.0337 * (-1.9 + (1 *2))) = 5.797
Now let's remove the color based acidity proxy (which it sounds like you have implemented):
Grist pH = 5.80 - (0.0337 * 1) = 5.766
Is this going to be a huge discrepancy? not in this scenario, but what about when we add different malts?
Let's try the same grain bill but with 5% cara malt (11L at 5.19 D|I pH) and 5% roast malt (350L at 4.69 DI pH. First we use Riffe:
Grist pH = DI pH - (0.0337 * (∑ f * A))
f * A (Pilsner) = 0.9 * (-1.9 + (1 * 2)) = 0.09
f * A (Cara) = 0.05 * (5 + (0.453*11)) = 0.5
f * A (Roast) = 0.05 * 42 = 2.1
Grist pH = 5.72 - (0.0337 * 2.69) = 5.629
Now let's assume we can input our own DI pH of 5.71 (which we can):
Grist pH = 5.71 - (0.0337 * 2.69) = 5.623
Now let's remove the color based acidity proxy (which it sounds like you have implemented):
Grist pH = 5.71- (0.0337 * 1) = 5.680
I certainly don't want to misrepresent what you are doing. I'm just trying to help and make sure you aren't missing a key element.