I think this should return "true", because both of the expressions on the left-hand-side of the outer <-> operator of the tsquery do in fact precede the "d" term in the tsvector.
I think things go wrong in the query executor because the two LHS clauses have different widths.
Do you agree that this is incorrect output?
I guess this result is derived from the agreement that logical operation inside the phrase operator is treated as
"both operands a and b are in the _same_ position just before c".
select '(a & b) <-> c'::tsquery @@ 'a:1 b:1 c:2'; ?column? ---------- t (1 row)
Though it's not clear what it means if there is another phrase operator inside logical. Result positions of (a <2> c) and (b <-> c) are different, I guess. It's not clear to me how should this behave in the case of a chain of nested phrase-logical-phrase operations.