STRICTMULTIASSIGNMENT would detect most cases of this, except that the condition is checked too late. We'd need to count the fields *before* trying to assign values, not after.
In the meantime, it does seem like the docs could be more explicit about this, and perhaps give an example showing the (x).* solution.
Yes, a more detailed explanation of this behavior can be nice. There can be an example of value unnesting, but I think so for this case, there should be mainly an example of ANSI assign syntax.
var := (SELECT x FROM ..)
This syntax has advantages so is not amigonuous for this case, and explicit unnesting is not necessary (and it is not possible). Moreover, this is ANSI SQL syntax.