What's the right way to think about a CFG symbol with an infinite null derivation?
The infinitely large parse tree you propose does not represent the parse of any sentence, because its leaves are not all terminals.

A more precise statement would be that $A$ cannot derive the empty sentence. You can produce an arbitrarily long derivation of $A$ by repeatedly using the rules $A \to A B$ and $B \to \epsilon$ but none of those derivations is empty. Since the precise definition of "nullable" is "a non-terminal which can derive the empty sentence", $A$ is not nullable.

If a FIRST/FOLLOW implementation crashes on that input, then the implementation is buggy. The correct computations are:

$$\begin{align}
FIRST(A) &amp;= \{x\} \\
FIRST(B) &amp;= \{y, \epsilon\} \\
FOLLOW(A) &amp;= \{y, \epsilon\} \\
FOLLOW(B) &amp;= \{y, \epsilon\}
\end{align}$$