Yahya's team was facing the same issue. We went on a call & we could see that this issue was due to the older commit.
+----> P1 ----+
| |
git +---> P3
| |
+----> P2 ----+
Scenario:
commit "g1" made at May 1 - 10 am. P1/1, P2/1 & P3 has not run for this.
commit "g2" made at May 1 - 11 am. P1/2, P2/2 & P3/2 run with "g2"
Now commit "g3" made at May 1 - 10.30 am. P1/3 goes green. So P1/3 & & P2/2 are available for P3 to run. But they are not compatible (g3 & g2). Now when Go tries to resolve upstream for P3 it looks for instance of P1 which has an older commit than "g3" & its "g1" & not "g2" (based on time) & hence upstream revisions resolve to "g1" - P1/1 & P2/1 (compatible with g1) & since P3 has not run for P1/1 & P2/1 it runs for older revisions than before.
The older commit than "g3" is the culprit. While it works for centralised SCMs like svn, tfs & perforce, it causes this issue with distributed SCMs git & hg. We could stop P3 from scheduling with P1/1 & P2/1 since P3 has already run with P1/2 & P2/2 (newer revisions) but thats kind of a hack. Ideally we should use "push" times & not "commit" times for distributed SCMs which isn't available.