As @image_doctor notes in a comment, the problem occurs because the definition of
Test`Private`fQ is not being distributed to the other kernels.
Language`ExtendedFullDefinition to determine which definitions to transmit. We can see this by evaluating the following expression:
DistributeDefinitions[f1, f2, f3];
Test`Private`fQ is absent from the generated
Language`ExtendedFullDefinition is normally able to trace all dependencies in a function:
ff[x_] := gg[x]
gg[x_] := x + 1
But apparently it does not account for pattern tests in definitions:
ff2[x_?gg2] := 1
gg2[x_] := True
The pattern test function
gg2 is missed by the dependency scan. This would appear to be a bug, but I might just be unaware of some compelling reason to ignore pattern tests in these circumstances.
As noted in the question, the work-around is to manually identify and distribute any missing dependencies. The "distribute" part of that is easy -- it is the "identify" part that can be difficult.