We should say more explicitly that: the chain halts immediately if any of the functions rejects or throws, and that halting error is what this master promise is rejected with.  (To me, "final error" implies there could be more than one error, which implies the chain _doesn't_ stop on an error).