Hi,
That's a good observation! The problem is that grids are evaluated in parallel (by multiple CPU core) and the evaluation order can change. So you can't never be sure that the gmem function has been evaluated before the grecall function is used in your other grid.
This is a problem in this case since you want to store the result of abletonlink.beat, which has a duration of exactly one frame. You could mitigate the problem by making the beat lasts longer by using the trigger function like this:
gmem(0, trigger(abletonlink.beat,0.05, 0,100,0))
Then in your other source, you can use the onbeat function to still generate a single pulse and fade out:
fadeout.log(0.2, onbeat(grecall(0)))
However, you might want to use the global sliders (view/sliders menu) to store the beat. These sliders are evaluated before any grids and always in order from the first slider to the last. You could even use a slider with your initial formula and it should work:
gmem(0, abletonlink.beat)
That also means that instead of using grecall(0), you could use slider(XYZ) in your grid:
fadeout.log(0.2, onbeat(slider(1)))
So my suggestion would be to put the logic for your different beat sources in the global sliders.