The transfer has completed, but the funds are being held to make sure that the source bank doesn’t walk back the check or transfer due to fraud. It can take much longer than the transfer time to detect a fraudulent check.
In an ACH transfer, the institution that initiates a transfer out (push) is the one responsible for ensuring that the funds are there. Once transferred those funds are committed. However, if an institution does a pull of funds from another bank or deposits a checks written on another bank account (check deposit), they are still subject to these funds pulled back in case of detected fraud. So they are vulnerable until the check is verified or the validity of the source funds are verified.
One suggestion for Fidelity has been to only push funds from other accounts instead of having Fidelity pull them. This would avoid a hold on deposits. I don’t use this approach as I prefer Fidelity be the central clearing house, not my other financial institutions. My cash flow can handle waiting for held funds if necessary.
Over the decades financial institutions have been getting very responsive in terms of availability of funds. Too responsive in some cases. They ultimately got taken advantage of by criminals, rank amateurs in some cases who were pretty stupid. I’m glad Chase is going after them.